1、Nginx + Keepalived 集群概述
1.1 什么是 Nginx + Keepalived 集群
Nginx 是一款高性能的 HTTP 和反向代理服务器,广泛应用于网站的负载均衡和静态资源服务。而 Keepalived 是一款基于 VRRP 协议实现高可用的软件。将 Nginx 与 Keepalived 结合,可以构建一个高可用的负载均衡集群,确保在服务器故障时,业务能够无缝切换,提高系统的可靠性和稳定性。
1.2 集群实现高可用的优势
故障自动切换:当主服务器出现故障时,备用服务器能够自动接管,确保服务不间断。
负载均衡:通过 Nginx 可以将流量合理分配到多台后端服务器,提高资源利用率。
提高可用性:通过冗余设计,减少单点故障风险,提高系统的整体可用性。
2、环境准备
服务器角色 | IP | 操作系统 |
---|---|---|
主节点 | 192.168.148.1 | ubuntu 20.04 |
备用节点1 | 192.168.148.2 | ubuntu 20.04 |
备用节点2 | 192.168.148.3 | ubuntu 20.04 |
虚拟IP | 192.168.148.100 |
注意:确保所有服务器之间网络互通,可以通过 ping 命令测试
3、Nginx 安装与配置
自行安装
4、Keepalived 安装与配置
4.1 安装 Keepalived
sudo apt update
sudo apt install keepalived -y
4.2 配置 Keepalived
vi /etc/keepalived/keepalived.conf
Master 配置
global_defs {
router_id keep01
}
vrrp_script chk_nginx {
script "killall -0 nginx"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface ens7
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.148.100
}
track_script {
chk_nginx
}
}
Backup1配置
global_defs {
router_id keep02
}
vrrp_script chk_nginx {
script "killall -0 nginx"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface ens7
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.148.100
}
track_script {
chk_nginx
}
}
Backup2配置
global_defs {
router_id keep03
}
vrrp_script chk_nginx {
script "killall -0 nginx"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface ens7
virtual_router_id 51
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.148.100
}
track_script {
chk_nginx
}
}
启动 Keeplived
sudo systemctl start keepalived
sudo systemctl enable keepalived
5、测试与验证
5.1停止主节点的nginx或者keepalive或者直接关机
sudo systemctl stop keepalived
#或者
sudo systemctl stop nginx
通过命令
ip addr
检查 Backup1 和 Backup2,确认 虚拟IP 地址漂移到优先级最高的 Backup1,重新启动 Master 上的 Keepalived,VIP 地址会重新漂移回 Master。
5.2 客户端访问测试
从客户端访问 VIP 地址 192.168.1.200,确保可以正常访问后端服务。关闭 Master,验证 Backup1 是否能够接管流量。