LVS DR +keepalived配置nginx
咱们先来看看为何要引入 keepalived,前面的 lvs 虽然已经配置成功也实现了负载均算法
衡,可是咱们测试的时候发现,当某台 real server 把 nginx 停掉,那么 director 照样会把请vim
求转发过去,这样就形成了某些请求不正常。因此须要有一种机制用来检测 real server 的状服务器
态,这就是 keepalived。它的做用除了能够检测 RS 状态外, 还能够检测备用 director 的状态,curl
也就是说 keepalived 能够实现 ha 集群的功能,固然了也须要一台备用 director 服务器。备用oop
director 也须要安装一下 keepalived 软件。两台 director 上都执行以下命令:测试
# yum install -y keepalivedurl
主 director 上安装好后,编辑配置文件router
# vim /etc/keepalived/keepalived.conf //加入以下:server
#全局部分配置主从#
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上