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 或资源,这会导致网络中出现竞争条件和数据不一致性问题
一般来说,裂脑的发生,有以下几种原因。
1、高可用服务器对之间心跳线链路故障,导致无法正常通信。
>心跳线坏了(包括断了,老化)
>网卡及相关驱动坏了,IP配置及冲突问题(网卡直连了
>心跳线间连接的设备故障(网卡及交换机)
>仲裁的机器出问题(采用仲裁的方案)
2、高可用服务器对上开启了 iptables 防火墙阻挡了心跳消息传输!
3、高可用服务器对上心跳网卡地址等信息配置不正确,导致发送心跳失败。
4、其他服务配置不当等原因,如心跳方式不同,心跳广播冲突、软件 BUG 等。