- 服务器与IP约定
LVS1-Master:
DIP:192.168.1.151(内网IP)
VIP:192.168.1.150(虚拟IP)
LVS2-Backup:
DIP:192.168.1.152(内网IP)
VIP:192.168.1.150(虚拟IP)Nginx-RS-1:
RIP:192.168.1.171(内网IP)
VIP:192.168.1.150(虚拟IP)Nginx-RS-2:
RIP:192.168.1.172(内网IP)
VIP:192.168.1.150(虚拟IP)
1. 配置 LVS Master
192.168.1.151
- 安装 keepalived 可参考文章:高可用集群架构 Keepalived
安装 Keepalived
- 上传 keepalived
- ./configure
- make
- make install
- 把 Keepalived 注册到系统服务
配置 Keepalived
global_defs {
router_id LVS_151
}
varrp_instance VI_1 {
state MASTER
interface ens33 # 需根据具体网卡名
virtual_router_id 41
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.150
}
}
# LVS 配置
# 配置集群地址访问的IP+端口,端口和Nginx保持一致,都是80
virtual_server 192.168.1.150 80 {
# 健康检查的时间,单位:秒
delay_loop 6
# 配置负载均衡的算法,默认:轮询
lb_algo rr
# 设置 LVS 的模式 NAT|TUN|DR
lb_kind DR
# 设置会话持久化的时间,默认:50秒
persistence_timeout 5
# 协议 -t
protocol TCP
# 负载均衡的真实服务器
real_server 192.168.1.171 80 {
weight 1
# 设置健康检查
TCP_CHECK {
# 检查80端口
connect_port 80
# 超时时间 2s
connect_timeout 2
# 重试次数 2次
nb_get_retry 2
# 间隔时间 3s
delay_before_retry 3
}
}
real_server 192.168.1.172 80 {
weight 1
# 设置健康检查
TCP_CHECK {
# 检查80端口
connect_port 80
# 超时时间 2s
connect_timeout 2
# 重试次数 2次
nb_get_retry 2
# 间隔时间 3s
delay_before_retry 3
}
}
}
- 清除原有的LVS规则(如有)
# 查看规则
ipvsadm -Ln
# 清楚
ipvsadm -C
- 重启 Keepalived
systemctl restart keepalived
2. 配置 LVS Backup
192.168.1.152
- 进入 keepalived 配置文件
cd /etc/keepalived
vim keepavlived.conf
- 配置(可复制Master,再进一步修改)
global_defs {
# 节点名
router_id LVS_152
}
varrp_instance VI_1 {
state BACKUP
interface ens33 # 需根据具体网卡名
virtual_router_id 41
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.150
}
}
# LVS 配置
# 配置集群地址访问的IP+端口,端口和Nginx保持一致,都是80
virtual_server 192.168.1.150 80 {
# 健康检查的时间,单位:秒
delay_loop 6
# 配置负载均衡的算法,默认:轮询
lb_algo rr
# 设置 LVS 的模式 NAT|TUN|DR
lb_kind DR
# 设置会话持久化的时间,默认:50秒
persistence_timeout 5
# 协议 -t
protocol TCP
# 负载均衡的真实服务器
real_server 192.168.1.171 80 {
weight 1
# 设置健康检查
TCP_CHECK {
# 检查80端口
connect_port 80
# 超时时间 2s
connect_timeout 2
# 重试次数 2次
nb_get_retry 2
# 间隔时间 3s
delay_before_retry 3
}
}
real_server 192.168.1.172 80 {
weight 1
# 设置健康检查
TCP_CHECK {
# 检查80端口
connect_port 80
# 超时时间 2s
connect_timeout 2
# 重试次数 2次
nb_get_retry 2
# 间隔时间 3s
delay_before_retry 3
}
}
}
- 清除原有的LVS规则(如有)
# 查看规则
ipvsadm -Ln
# 清楚
ipvsadm -C
- 重启 Keepalived
systemctl restart keepalived
# 查看规则
ipvsadm -Ln
3. 测试 LVS
- 进入到主节点Master 192.168.1.151
# 停止 keepavlied
systemctl stop keepavlived
# 查看 虚拟ip 192.168.1.150 是否还存在
ip addr
虚拟ip 192.168.1.150 不存在,说明已解绑当前节点
- 进入到备用节点 Backup 192.179.1.152
# 查看 虚拟ip 192.168.1.150 是否存在
虚拟ip 192.168.1.150 存在,说明已绑定当前节点(也叫IP漂移技术~)
- 再恢复主节点 Mater 192.168.1.151
# 停止 keepavlied
systemctl start keepavlived
# 查看 虚拟ip 192.168.1.150 是否还存在
ip addr
虚拟ip 192.168.1.150 存在,说明已重新绑定当前节点
- 再进入到备用节点 Backup 192.168.1.152
# 查看 虚拟ip 192.168.1.150 是否存在
虚拟ip 192.168.1.150 不存在,说明已解绑当前节点
- 总结
当其中任一 LVS 停止,或者恢复,都会被 Keepalived结合LVS 的健康检查监测,从而剔除和恢复节点
通过测试
- 总结
3. 测试 Nginx(RS真实服务器)
进入两台中任一一台 RS,如(192.168.1.171)停止 Nginx 服务(模拟宕机)
cd /usr/local/nginx/sbin ./nginx -s stop停止以后观察用户请求,只会请求到 192.168.1.172
查看 LVS 规则
进入到 LVS 服务器,如 192.168.1.151,查看目前节点规则
ipvsadm -Ln发现目前真实服务器节点只有一个 192.168.1.172(原来为两个)
再恢复上面停止的 Nginx(192.168.1.171),观察 LVS 节点规则
发现目前真实服务器节点已恢复至原来的两个节点 192.168.1.171 和 192.168.1.172
总结
当前 Nginx 停止,或者恢复,都会被 Keepalived结合LVS 的健康检查监测,从而剔除和恢复节点
通过测试
4. 总结
以上,我们就完成了 Keepalived+Lvs+Nginx 实现的高可用构架。