通过Nginx负载均衡+Keepalived实现业务高可用
通过Nginx负载均衡和Keepalived可以实现业务的高可用,以下是详细的实现步骤:
环境准备
假设我们有3台服务器,IP地址分别为:
- 服务器1(Nginx + Keepalived 主节点):192.168.1.100
- 服务器2(Nginx + Keepalived 备节点):192.168.1.101
- 后端应用服务器:192.168.1.102、192.168.1.103
步骤一:安装Nginx和Keepalived
在服务器1和服务器2上分别安装Nginx和Keepalived:
安装Nginx
# 更新系统包列表
sudo apt update
# 安装Nginx
sudo apt install nginx -y
安装Keepalived
sudo apt install keepalived -y
步骤二:配置Nginx负载均衡
在服务器1和服务器2上进行相同的Nginx配置。编辑Nginx的配置文件 /etc/nginx/sites-available/default
:
http {
upstream backend {
server 192.168.1.102;
server 192.168.1.103;
}
server {
listen 80;
server_name _;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
上述配置中,upstream
块定义了后端应用服务器列表,server
块将所有请求代理到后端服务器。
配置完成后,重启Nginx服务:
sudo systemctl restart nginx
步骤三:配置Keepalived
主节点(服务器1)配置
编辑 /etc/keepalived/keepalived.conf
文件:
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.110
}
}
virtual_server 192.168.1.110 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.1.100 80 {
weight 1
SSL_GET {
url {
path /
digest ff20ad2481f8d0385d96a347da6cdb0c
}
url {
path /mrtg/
digest 9b3a0c85a8872a256d6939da88aabd8cd
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
state MASTER
:表示该节点为主节点。interface eth0
:指定使用的网络接口。virtual_router_id 51
:虚拟路由ID,主备节点需保持一致。priority 100
:优先级,主节点优先级要高于备节点。virtual_ipaddress
:指定虚拟IP地址(VIP)。
备节点(服务器2)配置
编辑 /etc/keepalived/keepalived.conf
文件:
! Configuration File for keepalived
global_defs {
router_id LVS_BACKUP
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.110
}
}
virtual_server 192.168.1.110 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.1.101 80 {
weight 1
SSL_GET {
url {
path /
digest ff20ad2481f8d0385d96a347da6cdb0c
}
url {
path /mrtg/
digest 9b3a0c85a8872a256d6939da88aabd8cd
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
与主节点配置的主要区别在于 state
为 BACKUP
,priority
较低。
配置完成后,分别在服务器1和服务器2上启动Keepalived服务:
sudo systemctl start keepalived
sudo systemctl enable keepalived
步骤四:验证高可用性
- 访问业务:在客户端浏览器中输入虚拟IP地址
192.168.1.110
,应该可以正常访问后端应用服务。 - 模拟主节点故障:在服务器1上停止Keepalived服务:
sudo systemctl stop keepalived
此时,虚拟IP地址会自动漂移到服务器2上,再次在客户端浏览器中输入虚拟IP地址,仍然可以正常访问后端应用服务。
- 恢复主节点:在服务器1上启动Keepalived服务:
sudo systemctl start keepalived
由于主节点优先级较高,虚拟IP地址会再次漂移回服务器1。
注意事项
- 确保服务器之间网络连通,并且防火墙允许相关端口(如80、VRRP协议)的通信。
- 可以根据实际需求调整Nginx的负载均衡算法和Keepalived的优先级等参数。