LVS DR +keepalived配置
我们先来看看为什么要引入 keepalived,前面的 lvs 虽然已经配置成功也实现了负载均
衡,但是我们测试的时候发现,当某台 real server 把 nginx 停掉,那么 director 照样会把请
求转发过去,这样就造成了某些请求不正常。所以需要有一种机制用来检测 real server 的状
态,这就是 keepalived。它的作用除了可以检测 RS 状态外, 还可以检测备用 director 的状态,
也就是说 keepalived 可以实现 ha 集群的功能,当然了也需要一台备用 director 服务器。备用
director 也需要安装一下 keepalived 软件。两台 director 上都执行如下命令:
# yum install -y keepalived
主 director 上安装好后,编辑配置文件
# vim /etc/keepalived/keepalived.conf //加入如下:
#全局部分配置主从#
vrrp_instance VI_1 {
state MASTER
#备用服务器上为 BACKUP
interface eth0
virtual_router_id 51
priority 100
#权重优先级备用服务器上为90,或比主上小也可以
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
#认证机制
}
virtual_ipaddress {
192.168.0.110
#规定虚拟VIP,也是对外的vip
}
}
#dir部分包含rs部分#
virtual_server 192.168.0.110 80 {
#规定虚拟VIP,也是对外的vip
delay_loop 6
#(每隔6秒查询realserver状态)
lb_algo wlc
#(lvs 算法可以是wlc lc rr wrr)
lb_kind DR
#(Direct Route可自动识别)
persistence_timeout 60
#(同一IP的连接60秒内被分配到同一台realserver,长连接60秒,可改成0,不需要长连接)
protocol TCP
#(用TCP协议检查realserver状态)
real_server 192.168.0.43 80 {
#真实real_server
weight 100
#(权重)
TCP_CHECK {
connect_timeout 10
#(10秒无响应超时,就自动把这台server取消掉)
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.0.45 80 {
#真实real_server
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
以上为主 director 的配置文件,从 director 的配置文件只需要修改如下内容:
state MASTER -> state BACKUP
priority 100 -> priority 90
配置完 keepalived 后,需要开启端口转发(主从都要做):
# echo 1 > /proc/sys/net/ipv4/ip_forward
然后,两个 rs 上执行/usr/local/sbin/lvs_dr_rs.sh 脚本
另外,需要注意的是,启动keepalived服务会自动生成vip和ipvsadm规则,不需要再去执行上面提到的/usr/local/sbin/lvs_dr.sh 脚本。
测试
把主上的keepalived服务停掉
# service keeplived stop
查看从上的keepalived服务
# ip addr 查看ip地址
把其中的一个real_server1的nginx服务停掉,在打开一个虚拟机,测试
[root@wjh2 ~]# curl 192.168.0.111
rs2rs2
[root@wjh2 ~]# curl 192.168.0.111
rs2rs2
[root@wjh2 ~]# curl 192.168.0.111
rs2rs2
[root@wjh2 ~]# curl 192.168.0.111
rs2rs2
会自动把rs1摘除掉,转到rs2上