1、安装keepalived
准备两台测试机keepalived-01和keepalived-02
(备注:两台安装环境一样,yum源提前配置好)
2、keepalived配置文件
主要由三部分组成:
1、global_defs 部分:部分用于全局定义,包括邮件通知和 SMTP 设置
2、vrrp_instance 部分:部分定义了一个 VRRP 实例,用于配置虚拟路由器的参数。
3、virtual_server 部分:部分定义了一个虚拟服务器的配置。
! Configuration File for keepalived
global_defs {
notification_email {
admin@example.com #指定在发生故障时接收通知的电子邮件地址
}
notification_email_from keepalived@example.com #指定通知邮件的发件人地址
smtp_server smtp.example.com #指定用于发送通知邮件的 SMTP 服务器地址。
smtp_connect_timeout 30 #指定连接 SMTP 服务器的超时时间
}
vrrp_instance VI_1 {
state MASTER #定义节点的初始状态,可以是 MASTER 或 BACKUP。这里设置为 MASTER,表示当前节点是主节点。
interface eth0 #指定用于 VRRP 的网络接口,这里是 eth0。
virtual_router_id 51 #VRRP 虚拟路由的标识号,用于唯一标识一个 VRRP 实例。
priority 100 #节点的优先级,用于选举主节点,数字越大优先级越高。
advert_int 1 #发送 VRRP 通告的时间间隔,单位为秒
authentication { #认证方式和密码
auth_type PASS
auth_pass MySecretPassword
}
virtual_ipaddress { #指定由 VRRP 组共享的虚拟 IP 地址,这里是
10.10.10.1
}
}
virtual_server 192.168.1.100 80 { #指定一个虚拟服务器配置,绑定在 192.168.1.100 的 TCP 端口 80 上。
delay_loop 6 #指定健康检查的时间间隔,单位为秒
lb_algo rr #负载均衡算法,这里是 round-robin(rr)。
lb_kind DR #负载均衡的类型,这里是 direct routing(DR)
protocol TCP #指定协议类型,这里是 TCP。
real_server 192.168.1.10 80 { #定义真实服务器,即后端提供服务的实际节点
weight 1 #设置节点的权重,用于负载均衡算法
TCP_CHECK { #指定对真实服务器的健康检查参数
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
3、配置测试机参数
keepalived-01主服务器和keepalived-02备服务器
主备配置差异体现在实例router_id、state、priority三个参数上
router_id:主机实例id
state:定义节点的初始状态,可以是 MASTER(主) 或 BACKUP(备)。
priority:节点的优先级,用于选举主节点,数字越大优先级越高
4、启动keepalived服务检查浮动IP是否启用
主服务器配置的IP地址10.10.10.1已正常启用
5、测试浮动IP飘移
5.1主备机器keepalived服务器正常状态下,10.10.10.1地址由于优先级在01主机下
5.2模拟主服务器01宕机,IP飘逸备服务器02
下图自动切换成功
等待01主服务器重启成功,由于优先级参数,自动由备02服务器选举切换为主01服务器
测试结果:自动切换成功
6、keepalived常见故障及排查办法
6.1、在 Keepalived 中,裂脑(Split Brain)是指当网络分区发生时,导致多个节点都认为自己是主节点(MASTER),从而造成服务的不一致性和冲突。这种情况下,不同节点可能同时拥有相同的虚拟 IP 或资源,这会导致网络中出现竞争条件和数据不一致性问题
6.1. 心跳检测机制
Keepalived 使用心跳检测来确定节点的状态,通常是通过配置的健康检查来确认节点是否存活。为了减少裂脑的风险,可以考虑以下措施:
- 健康检查参数优化: 调整健康检查的超时和重试次数,确保在网络分区时能够快速判断节点状态。
- 多重健康检查: 使用多个健康检查(如TCP、HTTP、ICMP等)来提高检测的准确性和可靠性。
6.2. 配置优化
- 优先级设置: 配置每个节点的优先级(priority),确保高优先级节点在冲突时能够成为主节点。
- Quorum 设置: 使用 quorum 来决定在网络分区后哪些节点有资格成为主节点。这可以通过配置虚拟路由器ID (VRID) 的权重和节点的优先级来实现。
6.3. 恢复策略
- 预设优先级逻辑: 在配置中定义节点状态变更的预设优先级逻辑,以减少网络分区时的不一致性。
- 强制切换机制: 当发生裂脑时,通过手动或自动触发强制切换,确保只有一个节点成为主节点,避免多个节点同时拥有同一虚拟 IP。
6.4. 日志和监控
- 详细日志记录: 配置详细的日志记录,以便能够追踪裂脑发生的原因和影响。
- 实时监控: 使用监控工具实时监测 Keepalived 运行状态和节点的健康状况,及时发现裂脑问题并采取应对措施。
6.5. 网络设计和拓扑优化
- 网络分区隔离: 设计和优化网络拓扑,减少因网络分区导致的裂脑可能性。
- 物理隔离: 将不同 Keepalived 节点部署在物理隔离的网络区域,降低因网络问题导致的裂脑风险。
6.6. 版本更新和漏洞修复
- 保持更新: 定期更新 Keepalived 版本,应用已知的漏洞修复和改进,以提升系统的稳定性和安全性。