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上