安装部署
环境
服务器 | ip | 备注 |
---|---|---|
主lvs调度器(MASTER) | 192.168.1.110 | vip地址:192.168.1.120,使用keepalived配置 |
备lvs调度器(MASTER) | 192.168.1.111 | vip地址:192.168.1.120,使用keepalived配置 |
http服务器RS1 | 192.168.1.101 | 部署nginx测试 |
http服务器RS2 | 192.168.1.103 | 部署nginx测试 |
- 部署LB和RS的lvs,部署keepalived,参考《keepalived原理与部署》
- 配置LVS-LB-MASK的keepalived.conf配置文件,注意此时LVS-LB不需要手动配置VIP,keepalived会自动配置
global_defs {
router_id LVS_DEVEL # 标识当前节点,主从节点的设置可相同,也可不同
}
vrrp_instance VI_1 { # 定义虚拟路由实例,不同实例ID不同
state MASTER # 定义服务器在keepalived中的角色主服务器,主LVS是MASTER,从的BACKUP
interface eth0 # 定义LVS监控的网络接口eth0
virtual_router_id 51 # 定义虚拟路由ID,同一个实例的主从一样
priority 100 # 定义在虚拟路由器组的权限,越大越高
advert_int 1 # MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { # 定义认证方式密码,主从必须一样
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # 指定虚拟IP地址
192.168.1.120
}
}
virtual_server 192.168.1.120 80 { # 定义虚拟服务,需指定IP地址和端口,空格隔开
delay_loop 6 # 定义RS运行情况监测时间间隔
lb_algo rr # 定义负载调度算法,这里设置为rr,即轮询算法
lb_kind DR # LVS实现负载均衡的机制,可以有NAT、TUN和DR三个模式
nat_mask 255.255.255.0 # 定义虚拟服务的mask
persistence_timeout 50 # 定义会话保持时间,单位是秒
protocol TCP # 转发协议类型,有tcp和udp两种
sorry_server 127.0.0.1 80 # web服务器全部失败,vip指向本机80端口
real_server 192.168.1.101 80 { # 定义真实服务器IP地址和端口
weight 1 # 定义RS的权重
TCP_CHECK { # RS server健康检查部分
connect_timeout 10 # 定义超出10s连接超时
nb_get_retry 3 # 定义重试次数
delay_before_retry 3 # 定义重试时间间隔
connect_port 80 # 定义健康检查端口
}
}
real_server 192.168.1.103 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
- 配置LVS-DR-BACKUP的keepalived.conf配置文件
global_defs {
router_id LVS_DEVEL # 标识当前节点,主从节点的设置可相同,也可不同
}
vrrp_instance VI_1 { # 定义虚拟路由实例,不同实例ID不同
state BACKUP # 定义服务器在keepalived中的角色主服务器,主LVS是MASTER,从的BACKUP
interface eth0 # 定义LVS监控的网络接口eth0
virtual_router_id 51 # 定义虚拟路由ID,同一个实例的主从一样
priority 50 # 定义在虚拟路由器组的权限,越大越高
advert_int 1 # MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { # 定义认证方式密码,主从必须一样
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # 指定虚拟IP地址
192.168.1.120
}
}
virtual_server 192.168.1.120 80 { # 定义虚拟服务,需指定IP地址和端口,空格隔开
delay_loop 6 # 定义RS运行情况监测时间间隔
lb_algo rr # 定义负载调度算法,这里设置为rr,即轮询算法
lb_kind DR # LVS实现负载均衡的机制,可以有NAT、TUN和DR三个模式
nat_mask 255.255.255.0 # 定义虚拟服务的mask
persistence_timeout 50 # 定义会话保持时间,单位是秒
protocol TCP # 转发协议类型,有tcp和udp两种
sorry_server 127.0.0.1 80 # web服务器全部失败,vip指向本机80端口
real_server 192.168.1.101 80 { # 定义真实服务器IP地址和端口
weight 1 # 定义RS的权重
TCP_CHECK { # RS server健康检查部分
connect_timeout 10 # 定义超出10s连接超时
nb_get_retry 3 # 定义重试次数
delay_before_retry 3 # 定义重试时间间隔
connect_port 80 # 定义健康检查端口
}
}
real_server 192.168.1.103 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
说明:这里主LVS-DR-MASTER和LVS-DR-BACKUP之间的配置的差别就只有红色部分:HA的角色(MASTER,BACKUP)和优先级不同,还有router_id。
- 启动keepalived,注意/var/log/message的日志输出
keepalived -D -f ~/etc/keepalived/keepalived.conf
- 测试
- 模拟其中一台RS节点无法提供http服务时keepalive的监控和lvs和情况 关闭RS1节点(192.168.1.101)服务:killall nginx或者init 0关机 查看LB keepalive日志,输出如下
May 22 11:16:22 qun Keepalived_healthcheckers[24168]: TCP connection to [192.168.1.101]:80 failed.
May 22 11:16:25 qun Keepalived_healthcheckers[24168]: TCP connection to [192.168.1.101]:80 failed.
May 22 11:16:25 qun Keepalived_healthcheckers[24168]: Check on service [192.168.1.101]:80 failed after 1 retry.
May 22 11:16:25 qun Keepalived_healthcheckers[24168]: Removing service [192.168.1.101]:80 from VS [192.168.1.120]:80
keepalived在检测到其实一个RS节点(192.168.1.101)故障时自动从LVS移除故障节点 LB通过ipvsadm -L -n,输出如下
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.120:80 rr persistent 50
-> 192.168.1.103:80 Tunnel 1 0 122
此时192.168.1.101故障节点已经被移除,只有192.168.1.103节点依然保持服务 再次启动RS1节点(192.168.1.101)服务时,keepalived检查到节点恢复正常,自动添加到lvs恢复正常服务
2.模块其中一台LB节点无法正常工作时keepalive的监控和lvs和情况 关闭LB主服务器(192.168.1.110)服务:killall keepalived或者init 0关机 LB从服务器(192.168.1.111)keepalived日志输出如下
May 22 11:34:13 quns Keepalived_vrrp[10227]: VRRP_Instance(VI_1) Transition to MASTER STATE
May 22 11:34:14 quns Keepalived_vrrp[10227]: VRRP_Instance(VI_1) Entering MASTER STATE
May 22 11:34:14 quns Keepalived_vrrp[10227]: VRRP_Instance(VI_1) setting protocol VIPs.
May 22 11:34:14 quns Keepalived_healthcheckers[10226]: Netlink reflector reports IP 192.168.1.120 added
May 22 11:34:14 quns Keepalived_vrrp[10227]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.1.120
May 22 11:34:19 quns Keepalived_vrrp[10227]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.1.120
ip addr输出如下
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:da:71:51 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.111/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.120/32 scope global eth0
inet6 fe80::a00:27ff:feda:7151/64 scope link
valid_lft forever preferred_lft forever
此时LB从服务器在检测到LB主服务器挂掉时会自动绑定vip,将vip漂移到当前服务器 再次启动LB主服务器服务时,keepalived vrrp协议又会经过协商取回vip的管理权,将vip重新漂移回LB主服务器