Keepalived:Nginx高可用的实现及抢占式与非抢占模式详解

1. 简介

Keepalived 是一种用于实现高可用性的工具,通过提供虚拟 IP(VIP),允许两个或多个服务器共享同一个 IP 地址,当一台服务器故障时,另一台服务器可以立即接管,确保服务的持续可用性。

2. Keepalived 安装

在 CentOS/RHEL 系统上,可以通过以下命令安装 Keepalived:

1
sudo yum install keepalived -y

3. Keepalived抢占式配置

3.1 Keepalived抢占式MASTER配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
vrrp_script chk_nginx {
script "/usr/local/bin/check_nginx.sh"
interval 2
}

vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 12345
}
virtual_ipaddress {
192.168.0.100
}
track_script {
chk_nginx
}
# 默认抢占模式,不需要额外设置
}

3.2 Keepalived抢占式BACKUP配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
vrrp_script chk_nginx {
script "/usr/local/bin/check_nginx.sh"
interval 2
}

vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 12345
}
virtual_ipaddress {
192.168.0.100
}
track_script {
chk_nginx
}
# 默认抢占模式,不需要额外设置
}

4 Keepalived非抢占式配置

4.1 Keepalived非抢占式MASTER配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 12345
}
virtual_ipaddress {
192.168.0.100
}
nopreempt # 禁用抢占模式
track_script {
chk_nginx
}
}

4.2 Keepalived非抢占式BACKUP配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 12345
}
virtual_ipaddress {
192.168.0.100
}
nopreempt # 禁用抢占模式
track_script {
chk_nginx
}
}

5. 启用并启动 Keepalived

1
2
sudo systemctl start keepalived
sudo systemctl enable keepalived

6. 测试配置

6.1 故障转移测试

在主节点上停止 Nginx:sudo systemctl stop nginx。
检查 VIP 是否转移到备用节点。

6.2 恢复测试

重新启动主节点上的 Nginx:sudo systemctl start nginx。
检查 VIP 是否回到主节点(针对抢占模式)。

7. 结论

通过 Keepalived,您可以实现高可用的 Nginx 集群。在抢占式模式下,主节点恢复后会重新获得 VIP,而在非抢占模式下,VIP 将继续保持在备节点,直到其停止运行。根据业务需求选择合适的模式,确保系统的高可用性和稳定性。