keepalived服务介绍
keepalived
Keepalived 是一个用于实现高可用性(HA)和负载均衡的开源工具,用 C 编写的路由软件,特别适用于 Linux 服务器。它通常与 HAProxy 等负载均衡器结合使用,以确保服务的高可用性。Keepalived 主要通过 VRRP(虚拟路由冗余协议)来实现虚拟 IP 地址的故障转移。官网
Keepalived 的主要功能
-
VRRP(Virtual Router Redundancy Protocol):
- 通过 VRRP 协议实现高可用性,多个服务器可以共享一个虚拟 IP 地址,保证在主服务器出现故障时,备用服务器能够快速接管虚拟 IP,继续提供服务。
-
健康检查:
- Keepalived 可以配置健康检查脚本,定期检测服务的状态。如果检测到服务故障,可以自动进行故障转移。
-
负载均衡:
- Keepalived 也可以实现简单的负载均衡,通过配置不同的调度算法将流量分配到多个后端服务器。
工作原理
-
VRRP 是一种网络协议,用于在多个路由器之间实现冗余,以确保当主路由器出现故障时,备用路由器可以迅速接管。Keepalived 使用 VRRP 协议实现虚拟 IP 地址的故障转移。
- 虚拟路由器:由多个物理路由器组成的一个虚拟路由器组。这个组共享一个虚拟 IP 地址(VIP),这个 VIP 是客户端用来访问服务的地址。
- 主路由器(Master):负责处理 VIP 上的所有流量。
- 备用路由器(Backup):处于待命状态,当主路由器发生故障时,备用路由器之一会接管 VIP。
Keepalived 的工作流程
- 初始化:当 Keepalived 启动时,所有配置的 VRRP 实例都会初始化。每个实例会根据配置文件设置* 初始状态(Master 或 Backup)、优先级和虚拟 IP 地址。
- 发送广告报文:主路由器定期发送 VRRP 广告报文,告知网络中的其他路由器它是主路由器。如果其他路由器在一定时间内没有收到广告报文,它们会认为主路由器失效。
- 健康检查:Keepalived 会定期运行健康检查脚本。如果主路由器的健康检查失败,Keepalived 会将其状态切换为 Backup,并停止发送广告报文。
- 故障转移:当备用路由器检测到主路由器的广告报文丢失时,它会根据优先级选举一个新的主路由器,并开始发送广告报文,同时接管虚拟 IP 地址。
- 恢复:如果主路由器恢复正常,它会重新加入 VRRP 实例。如果它的优先级高于当前的主路由器,它会重新夺回主路由器的角色。
安装使用
双节点下载
apt install -y keepalived
systemctl enable --now keepalived
实验环境;Ubuntu2404
| 节点 | IP |
|---|---|
| master | 192.168.200.190 |
| node | 192.168.200.195 |
主/备模式(同一子网)
官网文档
这种模式下,有一个主节点(Active)和一个或多个备节点(Passive)。只有主节点处理流量,当主节点出现故障时,备节点接管。
特点:
-
简单易配置
故障转移速度快
资源利用率较低,因为备节点在正常情况下处于待命状态 -
自带配置文件模板
cat /etc/keepalived/keepalived.conf.sample
- 配置keepalived.conf
vim /etc/keepalived/keepalived.conf
- 只需要配置全局和vrrp示例即可
root@master:~# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
#设置当前节点的状态,可以是 MASTER 或 BACKUP。MASTER 表示当前节点是主节点
interface eth0
#指定用于 VRRP 的网络接口,虚拟机为ens33
virtual_router_id 51
#设置 VRRP 实例的唯一标识符。这个 ID 在同一 VRRP 实例中必须唯一
priority 100
#设置节点的优先级,值范围是 1 到 254。优先级较高的节点更有可能成为主节点
advert_int 1
#设置 VRRP 广告的间隔时间(秒)。主节点每隔此时间广播一次 VRRP 广告
authentication {
#配置 VRRP 实例的认证信息,以确保只有授权的节点能参与 VRRP 选举
auth_type PASS
#auth_type: 认证类型,这里使用 PASS(简单密码认证)
auth_pass 1111
#auth_pass: 认证密码
}
virtual_ipaddress {
#配置要绑定到虚拟路由器的 IP 地址。所有参与此 VRRP 实例的节点共享这些 IP 地址
192.168.200.16
192.168.200.17
192.168.200.18
}
}
- 开始配置前需要开启参数;允许将非本地 IP 地址绑定到本地网络接口上。这个参数对于使用虚拟 IP 地址(VIP)和实现高可用性(如 Keepalived)特别重要
echo "net.ipv4.ip_nonlocal_bind=1" | tee -a /etc/sysctl.conf
sysctl -p
- 开始配置主节点
root@master:~# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.199/24
}
}
systemctl restart keepalived
- 配置备用节点
root@node:~# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.199/24
}
}
systemctl restart keepalived
- 主节点验证查看
root@master:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:5f:fb:01 brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 192.168.200.190/24 brd 192.168.200.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.200.199/24 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe5f:fb01/64 scope link
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:5f:fb:0b brd ff:ff:ff:ff:ff:ff
altname enp2s2
inet6 fe80::20c:29ff:fe5f:fb0b/64 scope link
valid_lft forever preferred_lft forever
- 虚拟机VIP192.168.200.199已经生成
root@master:~# systemctl status keepalived
● keepalived.service - Keepalive Daemon (LVS and VRRP)
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; enabled; preset: enabled)
Active: active (running) since Sun 2024-07-21 11:04:12 UTC; 32s ago
Docs: man:keepalived(8)
man:keepalived.conf(5)
man:genhash(1)
https://keepalived.org
Main PID: 3590 (keepalived)
Tasks: 2 (limit: 4556)
Memory: 2.0M (peak: 2.1M)
CPU: 49ms
CGroup: /system.slice/keepalived.service
├─3590 /usr/sbin/keepalived --dont-fork
└─3592 /usr/sbin/keepalived --dont-fork
Jul 21 11:04:26 master Keepalived_vrrp[3592]: (VI_1) received a 1 auth, expecting 0!
Jul 21 11:04:28 master Keepalived_vrrp[3592]: (VI_1) received a 1 auth, expecting 0!
Jul 21 11:04:30 master Keepalived_vrrp[3592]: (VI_1) received a 1 auth, expecting 0!
Jul 21 11:04:32 master Keepalived_vrrp[3592]: (VI_1) received a 1 auth, expecting 0!
Jul 21 11:04:33 master Keepalived_vrrp[3592]: (VI_1) received a 1 auth, expecting 0!
Jul 21 11:04:34 master Keepalived_vrrp[3592]: (VI_1) received a 1 auth, expecting 0!
Jul 21 11:04:38 master Keepalived_vrrp[3592]: (VI_1) received a 1 auth, expecting 0!
Jul 21 11:04:40 master Keepalived_vrrp[3592]: (VI_1) received a 1 auth, expecting 0!
Jul 21 11:04:43 master Keepalived_vrrp[3592]: (VI_1) received a 1 auth, expecting 0!
Jul 21 11:04:44 master Keepalived_vrrp[3592]: (VI_1) received a 1 auth, expecting 0!
- node节点ping
root@node:~# ping 192.168.200.199
PING 192.168.200.199 (192.168.200.199) 56(84) bytes of data.
64 bytes from 192.168.200.199: icmp_seq=1 ttl=64 time=0.040 ms
64 bytes from 192.168.200.199: icmp_seq=2 ttl=64 time=0.060 ms
64 bytes from 192.168.200.199: icmp_seq=3 ttl=64 time=1.55 ms
64 bytes from 192.168.200.199: icmp_seq=4 ttl=64 time=0.051 ms
^C
--- 192.168.200.199 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3083ms
rtt min/avg/max/mdev = 0.040/0.426/1.554/0.651 ms
- 关闭master节点keepalived后查看
root@master:~# systemctl stop keepalived
root@master:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:5f:fb:01 brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 192.168.200.190/24 brd 192.168.200.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe5f:fb01/64 scope link
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:5f:fb:0b brd ff:ff:ff:ff:ff:ff
altname enp2s2
inet6 fe80::20c:29ff:fe5f:fb0b/64 scope link
valid_lft forever preferred_lft forever
- IP由node节点接管
root@node:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:8b:b8:b3 brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 192.168.200.195/24 brd 192.168.200.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.200.199/24 scope global secondary ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe8b:b8b3/64 scope link
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:8b:b8:bd brd ff:ff:ff:ff:ff:ff
altname enp2s2
inet6 fe80::20c:29ff:fe8b:b8bd/64 scope link
valid_lft forever preferred_lft forever
- master节点恢复后再次接管,因为优先级高
root@master:~# systemctl restart keepalived
root@master:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:5f:fb:01 brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 192.168.200.190/24 brd 192.168.200.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.200.199/24 scope global secondary ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe5f:fb01/64 scope link
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:5f:fb:0b brd ff:ff:ff:ff:ff:ff
altname enp2s2
inet6 fe80::20c:29ff:fe5f:fb0b/64 scope link
valid_lft forever preferred_lft forever
但是这种情况下服务会中断一点时间,因为master节点恢复后备用节点将会把IP给主节点,而不是备用节点一直接管,用户会感到卡顿一下
主/备模式(跨网)
如果两台服务器不在同一子网,如(10.126.225.0/24 和 10.126.82.0/24),传统的 Keepalived + VRRP 可能无法直接使用(因为 VRRP 依赖二层广播)
改用 VRRP over Unicast(单播模式):如果两台服务器可以互相通信(即使不在同一子网),可以修改 Keepalived 配置,使用 单播(Unicast) 代替组播(Multicast)。
- 配置主节点
vi /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER # proxy01 用 MASTER,proxy02 用 BACKUP
interface ens192 # 或 eth0,确保接口名正确
unicast_peer {
10.126.82.86 # proxy02 的 IP(proxy01 的配置)
10.126.225.86 # proxy01 的 IP(proxy02 的配置)
}
virtual_router_id 51
priority 101 # proxy01 高,proxy02 低(如 99)
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.126.225.87/24 # VIP
}
}
[root@proxy01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:85:3e:2a brd ff:ff:ff:ff:ff:ff
inet 10.126.225.86/24 brd 10.126.225.255 scope global noprefixroute ens192
valid_lft forever preferred_lft forever
inet6 fe80::306f:ffa5:1ff:704a/64 scope link noprefixroute
valid_lft forever preferred_lft forever
- 配置从节点
vi /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state BACKUP # proxy01 用 MASTER,proxy02 用 BACKUP
interface eth0 # 或 eth0,确保接口名正确
unicast_peer {
10.126.82.86 # proxy02 的 IP(proxy01 的配置)
10.126.225.86 # proxy01 的 IP(proxy02 的配置)
}
virtual_router_id 51
priority 99 # proxy01 高,proxy02 低(如 99)
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.126.225.87/24 # VIP
}
}
[root@proxy02 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 0c:da:41:1d:e0:ef brd ff:ff:ff:ff:ff:ff
inet 10.126.82.86/24 brd 10.126.82.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::eda:41ff:fe1d:e0ef/64 scope link
valid_lft forever preferred_lft forever
- 重启服务
systemctl restart keepalived
[root@proxy01 ~]# systemctl status keepalived
● keepalived.service - LVS and VRRP High Availability Monitor
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2025-04-17 19:18:53 CST; 42min ago
Process: 12810 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 12811 (keepalived)
CGroup: /system.slice/keepalived.service
├─12811 /usr/sbin/keepalived -D
├─12812 /usr/sbin/keepalived -D
└─12813 /usr/sbin/keepalived -D
Apr 17 19:18:55 proxy01 Keepalived_vrrp[12813]: Sending gratuitous ARP on ens192 for 10.126.225.87
Apr 17 19:18:55 proxy01 Keepalived_vrrp[12813]: Sending gratuitous ARP on ens192 for 10.126.225.87
Apr 17 19:18:55 proxy01 Keepalived_vrrp[12813]: Sending gratuitous ARP on ens192 for 10.126.225.87
Apr 17 19:18:55 proxy01 Keepalived_vrrp[12813]: Sending gratuitous ARP on ens192 for 10.126.225.87
Apr 17 19:19:00 proxy01 Keepalived_vrrp[12813]: Sending gratuitous ARP on ens192 for 10.126.225.87
Apr 17 19:19:00 proxy01 Keepalived_vrrp[12813]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens192 for 10.126.225.87
Apr 17 19:19:00 proxy01 Keepalived_vrrp[12813]: Sending gratuitous ARP on ens192 for 10.126.225.87
Apr 17 19:19:00 proxy01 Keepalived_vrrp[12813]: Sending gratuitous ARP on ens192 for 10.126.225.87
Apr 17 19:19:00 proxy01 Keepalived_vrrp[12813]: Sending gratuitous ARP on ens192 for 10.126.225.87
Apr 17 19:19:00 proxy01 Keepalived_vrrp[12813]: Sending gratuitous ARP on ens192 for 10.126.225.87
- 地址已生成
[root@proxy01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:85:3e:2a brd ff:ff:ff:ff:ff:ff
inet 10.126.225.86/24 brd 10.126.225.255 scope global noprefixroute ens192
valid_lft forever preferred_lft forever
inet 10.126.225.87/24 scope global secondary ens192
valid_lft forever preferred_lft forever
inet6 fe80::306f:ffa5:1ff:704a/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@proxy01 ~]#
- 停止主节点测试,查看vip是否飘到从节点
[root@proxy01 ~]# systemctl stop keepalived
[root@proxy01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:85:3e:2a brd ff:ff:ff:ff:ff:ff
inet 10.126.225.86/24 brd 10.126.225.255 scope global noprefixroute ens192
valid_lft forever preferred_lft forever
inet6 fe80::306f:ffa5:1ff:704a/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@proxy01 ~]#
[root@proxy02 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 0c:da:41:1d:e0:ef brd ff:ff:ff:ff:ff:ff
inet 10.126.82.86/24 brd 10.126.82.255 scope global eth0
valid_lft forever preferred_lft forever
inet 10.126.225.87/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::eda:41ff:fe1d:e0ef/64 scope link
valid_lft forever preferred_lft forever
[root@proxy02 ~]#
脚本健康检测
场景:keepalived只有本身服务挂掉后才会触发切换,当keepalived和其他服务在同一节点上,例如haproxy,如果haproxy挂了,keepalived还在正常运行,则业务已经中断
-
没有健康检测的情况
Keepalived只检查自己是否存活
HAProxy进程挂了,但Keepalived还在运行
VIP不会漂移,用户请求依然发到故障节点
结果:服务中断!❌ -
有健康检测的情况
Keepalived定期检查HAProxy状态
检测到HAProxy故障 → 自动降低本机优先级
VIP漂移到备用节点
结果:服务不中断!✅ -
安装服务
yum install -y haproxy keepalived
- 创建健康检测脚本(双节点)
# 使用 systemctl 检测服务状态
cat > /etc/keepalived/check_haproxy.sh << 'EOF'
#!/bin/bash
# 使用systemctl检测haproxy服务状态
if systemctl is-active --quiet haproxy; then
exit 0
else
exit 1
fi
EOF
chmod +x /etc/keepalived/check_haproxy.sh
# 1. 确认脚本当前返回0(HAProxy运行中)
/etc/keepalived/check_haproxy.sh
echo "当前返回值: $?"
- 主节点keepalived配置文件
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_MASTER
}
vrrp_script chk_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 2 # 每2秒检查一次
weight -20 # 检查失败时,优先级降低20
fall 2 # 连续失败2次才判定失败
rise 1 # 成功1次即恢复
}
vrrp_instance VI_1 {
state MASTER
interface ens33 # 替换为你的网卡名
virtual_router_id 51
priority 100 # 主节点优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 123456 # 统一密码
}
virtual_ipaddress {
192.168.200.99/24 # 替换为你的VIP
}
track_script {
chk_haproxy # 关联健康检查
}
}
- 从节点配置文件
! Configuration File for keepalived
global_defs {
router_id LVS_MASTER
}
vrrp_script chk_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 2
weight -20
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP # 区别在这里
interface ens33
virtual_router_id 51
priority 90 # 比主节点低
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.200.99/24
}
track_script {
chk_haproxy
}
}
- 启动服务
systemctl restart haproxy keepalived
- 节点1查看
[root@redis01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:95:44 brd ff:ff:ff:ff:ff:ff
inet 192.168.200.100/24 brd 192.168.200.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.200.99/24 scope global secondary ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feeb:9544/64 scope link
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:0c:29:eb:95:4e brd ff:ff:ff:ff:ff:ff
[root@redis01 ~]#
- 停止服务验证
[root@redis01 ~]# systemctl stop haproxy
[root@redis01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:95:44 brd ff:ff:ff:ff:ff:ff
inet 192.168.200.100/24 brd 192.168.200.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.200.99/24 scope global secondary ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feeb:9544/64 scope link
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:0c:29:eb:95:4e brd ff:ff:ff:ff:ff:ff
[root@redis01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:95:44 brd ff:ff:ff:ff:ff:ff
inet 192.168.200.100/24 brd 192.168.200.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feeb:9544/64 scope link
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:0c:29:eb:95:4e brd ff:ff:ff:ff:ff:ff
[root@redis01 ~]#
[root@redis02 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:f2:5e:88 brd ff:ff:ff:ff:ff:ff
inet 192.168.200.101/24 brd 192.168.200.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.200.99/24 scope global secondary ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fef2:5e88/64 scope link
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:0c:29:f2:5e:92 brd ff:ff:ff:ff:ff:ff
[root@redis02 ~]#
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)