LVS - linux LVS + Keepalived + Nginx Keepalived对LVS(DR)的自动装配与RS节点的心跳监听
- 安装keepalived
- 安装nginx
- RS(nginx)节点回环配置
- 测试环境:LVS*2 + nginx*2
- 安装 ipvsadm 便于查看 LVS 信息
- yum install ipvsadm
- 配置keepalived
- LVS与Keepalived以对应关系分别部署在两个不同节点
- 主节点:192.168.213.139,启用LVS+Keepalived
- 备节点:192.168.213.146,启用LVS+Keepalived
- 让其对LVS自动装配
- 让其对RS节点监听
- 清除对ipvsadm所有配置并保存
- 主节点与备节点配置大致相同,注意一下几点
- router_id:唯一,每一个keepalived节点的router_id都是唯一的
- state:主节点为MASTER,备用节点为BACLUP
- interface:真实网卡名称,每一个服务器的网卡名称都有可能不同,可以用ip addr 查询
- virtual_router_id:识别主备关系的属性,主备必须配置一致
- priority:权重,官方建议两者相差50
! Configuration File for keepalived
global_defs {
router_id keep_1
}
vrrp_instance VI_1 {
# 表示状态是MASTER主机还是备用机BACKUP
state MASTER
# 该实例绑定的网卡
interface ens33
#0保证主备节点一致即可
virtual_router_id 77
# 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
priority 100
# 主备之间同步检查时间间隔,单位秒
advert_int 1
# 认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟出来的ip,可以有多个(vip)
virtual_ipaddress {
192.168.213.77
}
}
#入口ip+端口,最好端口与RS服务保持一致
virtual_server 192.168.213.77 80 {
#健康检查间隔时间,单位:秒
delay_loop 6
#配置LVS 负载模式 rr表示轮询
lb_algo rr
# 设置LVS运行模式 NAT|TUN|DR
lb_kind DR
#设置会话持久化时间,方便测试只设置5秒,默认300秒
persistence_timeout 5
# 协议 -t
protocol TCP
#RS配置
real_server 192.168.213.140 80 {
#轮询权重,默认为1
weight 1
#RS健康检查
TCP_CHECK {
#检查的端口号
connect_port 80
#超时时间,超时算不健康 秒
connect_timeout 3
#重试次数
nb_get_retry 3
#检查间隔时间 3秒
delay_before_retry 3
}
}
#RS配置
real_server 192.168.213.141 80 {
#轮询权重,默认为1
weight 1
#RS健康检查
TCP_CHECK {
#检查的端口号
connect_port 80
#超时时间,超时算不健康 秒
connect_timeout 3
#重试次数
nb_get_retry 3
#检查间隔时间 3秒
delay_before_retry 3
}
}
}
- 启动keepalived(主备节点都启动)
- 如图,vip192.168.213.77只与主节点192.168.213.139建立了绑定关系
- 访问虚拟ip192.168.213.77
- 会轮询访问RS节点,这里注意会话过期时间,在未过期前不会切换
- 关闭主节点keepalived使其LVS配置失效
- 如图,vip192.168.213.77解除了与192.168.213.139绑定关系
- vip192.168.213.77与备用节点192.168.213.146建立了绑定关系
- 实现了ip漂移
- 恢复主节点停掉192.168.213.140RS节点
- 如图,当前反向代理服务由LVS主节点提供
- 只能访问RS(nginx)192.168.213.141服务
- 查看LVS服务状态
- 如图可以看出,由于RS(nginx)节点停止服务,已经被keepalived检测到,并踢出LVS代理服务
- 当前LVS只负责接收请求,而响应有RS(nginx)节点自己做,说明DR,模式配置成功