在Linux系统中,双机切换(通常指高可用集群中的节点切换)是保障服务连续性的关键操作,常见于主备架构、负载均衡或故障转移场景,其核心是通过命令或工具监控节点状态,在主节点故障时自动或手动将服务切换至备用节点,以下是详细的Linux双机切换命令及相关操作流程,涵盖基础原理、常用工具、具体命令及注意事项。

双机切换的基础原理与架构
双机切换依赖集群管理工具,通过心跳检测(Heartbeat)判断节点健康状态,当主节点心跳中断时,备用节点接管资源(如IP、磁盘、服务),常见架构包括:
- 主备模式(Active-Passive):主节点提供服务,备用节点待命,故障时切换。
- 主主模式(Active-Active):两节点同时服务,通过负载均衡分担流量,故障时另一节点接管全部流量。
切换的核心操作包括:资源(IP、脚本、服务等)的启动、停止、迁移,以及虚拟IP(VIP)的漂移。
常用双机切换工具及命令
Keepalived + LVS(基于VRRP协议)
Keepalived通过VRRP(虚拟路由冗余协议)实现故障转移,常与LVS结合用于负载均衡,也可独立管理服务切换。
关键配置与命令
- 安装:
sudo apt install keepalived # Debian/Ubuntu sudo yum install keepalived # CentOS/RHEL
- 主节点配置(/etc/keepalived/keepalived.conf):
! Configuration File for keepalived global_defs { router_id LVS_MASTER # 主节点标识 } vrrp_instance VI_1 { state MASTER # 主节点状态 interface eth0 # 监听网卡 virtual_router_id 51 # 虚拟路由ID,两节点需一致 priority 100 # 优先级(主节点高于备节点) advert_int 1 # 心跳间隔(秒) authentication { auth_type PASS # 认证类型 auth_pass 1111 # 认证密码 } virtual_ipaddress { 192.168.1.100/24 dev eth0 label eth0:0 # 虚拟IP(VIP) } virtual_server 192.168.1.100 80 { # 虚拟服务器(可选) delay_loop 6 lb_algo rr lb_kind NAT real_server 192.168.1.101 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 } } } }
- 备节点配置:仅需修改
state BACKUP
和priority 90
(低于主节点)。 - 启动与检查:
sudo systemctl start keepalived sudo systemctl enable keepalived ip addr show eth0:0 # 查看VIP是否绑定
- 手动切换:强制停止主节点Keepalived,备节点会自动接管VIP:
sudo systemctl stop keepalived # 主节点执行
Corosync + Pacemaker(集群资源管理)
Corosync负责节点间通信和心跳检测,Pacemaker管理资源(IP、服务等)的启动和切换,适用于复杂集群场景。

关键操作步骤
- 安装:
sudo apt install corosync pacemaker pcs # Debian/Ubuntu sudo yum install corosync pacemaker pcs # CentOS/RHEL
- 配置集群:
sudo pcs cluster auth node1 node2 -u hacluster # 认证节点(需设置密码) sudo pcs cluster setup --name my_cluster node1 node2 # 创建集群 sudo pcs cluster start --all # 启动集群
- 配置资源:以VIP为例,添加并启动资源:
pcs resource create VIP ocf:heartbeat:IPaddr2 ip=192.168.1.100 cidr_netmask=24 op monitor interval=30s pcs resource create WebSite ocf:heartbeat:apache op monitor interval=30s # 以Apache为例 pcs constraint colocation add VIP with WebSite # 资源约束(VIP与Apache绑定) pcs constraint order start WebSite then start VIP # 启动顺序
- 查看资源状态:
pcs status # 查看集群及资源状态 pcs resource show # 查看资源详情
- 手动故障切换:模拟主节点故障(停止集群服务或关机),备用节点会自动接管资源:
sudo pcs cluster stop node1 # 停止node1的集群服务
Heartbeat(传统工具)
Heartbeat是早期的高可用工具,通过配置ha.cf
、haresources
管理节点和资源,现逐渐被Keepalived/Pacemaker替代,但部分场景仍在使用。
关键配置示例
- 主节点配置(/etc/ha/haresources):
node1 192.168.1.100 apache # 节点名 VIP 服务名
- 启动与检查:
sudo /etc/init.d/heartbeat start # 启动服务 crm_status # 查看集群状态(需安装crmsh)
切换命令对比与选择
工具组合 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
Keepalived | 简单主备、负载均衡 | 配置简单、资源占用低 | 复杂资源管理能力较弱 |
Corosync+Pacemaker | 复杂集群、多资源管理 | 功能强大、支持策略约束 | 配置复杂、学习成本高 |
Heartbeat | 传统场景、兼容旧系统 | 稳定性较好 | 社区活跃度低、文档较少 |
切换操作注意事项
- 心跳网络隔离:心跳检测建议使用独立网卡或VLAN,避免因业务网络故障导致误判。
- 资源依赖顺序:确保服务启动顺序正确(如先挂载磁盘,再启动应用)。
- 日志监控:通过
journalctl -u keepalived
或pcs status
实时监控切换过程,定位故障。 - 测试验证:切换前需在测试环境模拟故障(如停止服务、断网),验证切换逻辑。
相关问答FAQs
Q1:双机切换时VIP漂移失败,可能的原因及解决方法?
A1:可能原因包括:
- 心跳网络中断:检查节点间网络连通性(
ping
、telnet
心跳端口)。 - 优先级配置错误:确保主节点
priority
高于备节点,且virtual_router_id
一致。 - 防火墙拦截:关闭或配置防火墙允许VRRP协议(如iptables允许
vrrp
协议)。
解决步骤:检查/var/log/keepalived.log
日志,确认心跳状态;手动执行ip addr add 192.168.1.100/24 dev eth0
临时绑定VIP,并排查网络或配置问题。
Q2:如何确保切换过程中服务不中断?
A2:可通过以下方法保障服务连续性:
- 资源约束:使用Pacemaker的
colocation
约束,确保VIP、磁盘、服务在同一节点启动。 - 健康检查:配置
monitor
操作,实时检测服务状态(如Apache的80端口),异常时自动重启。 - 会话保持:在负载均衡场景下,启用会话保持(如nginx的
ip_hash
),避免用户会话丢失。 - 预脚本与后脚本:通过Pacemaker的
pre
和post
脚本,在切换前执行数据同步(如rsync
),切换后通知监控系统。
