如何确保CentOS SFTP的高可用性
小樊
52
2025-12-31 05:34:25
CentOS SFTP高可用落地方案
一、总体架构与原则
- 使用VIP + Keepalived提供对外统一地址,避免单点故障;两台或多台 CentOS 节点运行 OpenSSH 的 SFTP 子系统(internal-sftp),通过 VIP 对外提供接入。
- 数据面采用主备数据同步(如 rsync + inotify 实时同步)或共享存储(如 NFS/块存储)保证多节点间数据一致;应用侧使用重试与退避策略容忍短暂切换。
- 安全面仅开放 TCP/22,结合防火墙/安全组白名单、最小权限与审计日志。
- 监控面覆盖 VIP 漂移、sshd 进程、磁盘空间、同步延迟 等关键指标,并配置告警。
二、基础SFTP与权限加固
- 安装与版本:确保 OpenSSH 版本 ≥ 4.8p1(SFTP 为 SSH 子系统,无需额外 FTP 服务)。
- 启用 internal-sftp 并限制仅 SFTP:
- 编辑 /etc/ssh/sshd_config:
- 设置:Subsystem sftp internal-sftp
- 对目标用户组(如 sftp)添加:
- Match Group sftp
- ChrootDirectory /data/sftp/%u(%u 为用户名,Chroot 根必须不可写)
- ForceCommand internal-sftp
- AllowTcpForwarding no、X11Forwarding no
- 用户与目录权限(示例用户 mysftp):
- 创建用户:useradd -g sftp -s /bin/false mysftp && passwd mysftp
- 目录结构:/data/sftp/mysftp(Chroot 根,属主 root:sftp,权限 755),可写目录 /data/sftp/mysftp/upload(属主 mysftp:sftp,权限 755)
- 启动与验证:systemctl restart sshd,使用 sftp mysftp@VIP 测试登录与上传。
三、高可用实现步骤
- 网络与VIP:两台节点(示例 172.16.51.191/192)配置同一网段 VIP 172.16.51.193;部署 Keepalived 实现主机健康检查与 VIP 漂移(VRRP)。
- 数据一致性(主备):
- 方案A(推荐):主节点 /data/sftp 实时推送到备节点,使用 rsync + inotify 触发同步;备节点以只读方式承载业务或仅在切换后短暂写入。
- 方案B:挂载共享存储(如 NFS/云盘)到 /data/sftp,避免多节点写入冲突。
- 服务自愈:为 sshd 配置 systemd 自恢复(如 Restart=always),减少进程级故障导致的不可用窗口。
- 连接收敛:对外仅发布 VIP:22,由负载均衡或上游防火墙/NAT 将 22 端口转发到 VIP,避免直连节点 IP。
四、并发与稳定性优化
- 提升并发能力(按负载调整):
- MaxStartups 1000:30:1200(并发未认证连接上限与速率限制)
- MaxSessions 1000(单用户最大会话数)
- ClientAliveInterval 300(每 5 分钟保活探测,减少空闲断开)
- 调优后执行:systemctl reload sshd 使配置生效。
五、上线验证与运维要点
- 验证清单:
- VIP 漂移演练(停掉主机 Keepalived/sshd,确认 VIP 切换、SFTP 不断链/可重连)。
- 上传/下载/断点续传与权限校验(仅 upload 可写,根目录不可写)。
- 同步链路验证(主备数据一致性与延迟告警)。
- 安全与合规:
- 仅放行 22/TCP,限制来源 IP;禁用不必要模块与转发。
- 建议启用 日志审计 与 监控告警(进程存活、磁盘、连接数、同步状态)。
- 风险提示:
- 多节点并发写同一目录易产生时序与锁问题;优先采用“主备 + 同步”或“共享存储”模型,避免同时写入。
- 生产环境不建议直接关闭 SELinux,应通过策略放行所需访问(如目录/端口),以降低系统风险。