1. 目标:实现堡垒机 SASH 的高可用(Active/Passive 或 Active/Active),保证控制面可达、会话和审计数据一致。小分段:说明可用性指标(RPO/RTO);说明测试频率(建议季度演练)。
2. 准备两台或多台堡垒机节点(主/备),建议同一版本SASH。小分段:准备节点A(主)、节点B(备);准备数据库服务器(或使用主-主/主-备);准备共享或同步存储(NFS/rsync);准备VIP子网和负载均衡器。
3. 在各节点上安装SASH、keepalived、haproxy与rsync。小分段:示例命令(CentOS):yum install -y keepalived haproxy rsync;配置防火墙放行TCP/22、TCP/443、VIP的管理端口与keepalived的VRRP(协议号112)。
4. 建议使用MySQL主主或主从复制,保证审计/会话数据实时同步。小分段:创建用户并配置二进制日志:在主上执行:
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
在备上配置CHANGE MASTER TO MASTER_HOST='主IP', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_AUTO_POSITION=1;并启动slave:START SLAVE;
5. SASH 配置、密钥与插件需同步。小分段:推荐使用双向rsync或lsyncd实时同步;示例rsync命令:rsync -az --delete /etc/sash/ nodeB:/etc/sash/;加crontab或systemd-timers保证周期同步。
6. 在主/备各自配置keepalived.conf实现VIP管理。小分段:示例配置片段:
vrrp_instance VI_1 { state MASTER/BACKUP; interface eth0; virtual_router_id 51; priority 100/90; advert_int 1; authentication { auth_type PASS; auth_pass 1111; } virtual_ipaddress { 192.168.1.10 } }
7. 若部署Active/Active,可通过HAProxy做VIP端口的会话分发,后端为两台SASH实例。小分段:示例haproxy.cfg:
frontend sash_frontend bind *:443 mode tcp default_backend sash_backend
backend sash_backend mode tcp balance source server sash1 10.0.0.1:443 check server sash2 10.0.0.2:443 check
8. 配置keepalived的track_script调用自定义健康检查脚本,检查SASH关键服务、数据库连接和审计写入。小分段:示例script:/etc/keepalived/check_sash.sh,返回0表示健康,非0返回故障;在keepalived.conf中引用track_script { chk_sash }。
9. 在演练前逐项核对:小分段:1) VIP是否可手动切换(systemctl restart keepalived 或 ip addr add/remove);2) 数据库延迟是否在可接受范围内(SHOW SLAVE STATUS);3) 配置文件是否同步;4) 审计日志能在主备间立即可见。
10. 步骤详解:小分段:1) 通知运维与业务方并进入变更窗口;2) 将VIP从主切换到备:在主执行 systemctl stop keepalived,或降低主优先级;3) 在备上确认VIP已拥有:ip addr show | grep 192.168.1.10;4) 在备上检查SASH服务与数据库连接;5) 执行登录验证与回放审计日志(确认会话正常)。
11. 步骤详解:小分段:1) 在主机上模拟宕机(如断网或shutdown -h now);2) 观察备节点是否在1-3秒内接管VIP(keepalived advert_int);3) 在备上验证业务正常;4) 检查数据库是否自动切换并无数据丢失,处理漂移或延迟。
12. 步骤详解:小分段:1) 演练后对比主备数据库binlog位置与审计日志,确认无RPO违背;2) 若存在写分裂,采用Promote/Point-in-time恢复或基于binlog回放;3) 恢复原主机后,先以备节点身份同步数据再加入集群:STOP SLAVE; CHANGE MASTER TO MASTER_HOST='新主'; START SLAVE; 确认无错误后再开放流量。
13. Q:VIP不漂移怎么办?
A:检查keepalived状态(systemctl status keepalived),查看日志/var/log/messages或journalctl -u keepalived;确认interface正确、virtual_router_id一致、auth_pass一致;确保没有其他设备抢占该VIP。
14. Q:应多久做一次故障切换演练?
A:建议至少每季度进行一次全面演练,包含主动切换和被动宕机;并在每次SASH或依赖组件升级后进行一次回归演练。
15. Q:有什么安全或运营上的注意事项?
A:保持配置与密钥同步时使用加密通道(SSH key、rsync+SSH);对keepalived/HAProxy配置严格控制权限;监控延迟并设置报警;演练时务必在维护窗口并通知相关团队,演练脚本要能回滚。