keepalived实现nginx负载均衡
keepalived 實現nginx 負載均衡+主備高可用
概述
nginx作為負載均衡器,所有請求都到nginx,可見nginx處于非常重點的位置,如果nginx服務器宕機,后端web服務將無法提供服務,影響嚴重。
所以在架構設計中,可以利用nginx的反向代理和負載均衡實現后端應用的負載均衡和高可用性,同時我們還需要考慮Nginx的單點故障。真正做到架構高可用性。
主要考慮以下幾點:
1、Nginx服務因為意外現象掛掉
2、服務器宕機導致nginx不可用
目前主流的解決方案就是keepalived+nginx 實現nginx的故障轉移,同時做好監控報警。在自動故障轉移的同時能通知到相關的應用負責人檢查相關應用,排查隱患,徹底解決問題。
keepalived的HA分為搶占模式和非搶占模式,搶占模式即MASTER從故障中恢復后,會將VIP從BACKUP節點中搶占過來。非搶占模式即MASTER恢復后不搶占BACKUP升級為MASTER后的VIP。
使用阿里云epel鏡像
兩臺虛擬機都安裝
[root@nginx01 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@nginx01 ~]# yum -y install nginx?
啟動服務和開機自啟
[root@nginx01 ~]# systemctl start nginx
[root@nginx01 ~]# systemctl enable nginx
安裝keepalived
用剛才實驗的倆臺虛擬機,暫時不用安裝,沒有的話按之前安裝下
修改keepalived.conf配置文件
nginx-01主機上的keepalived.conf文件的修改
[root@nginx01 ~]# vim? /etc/keepalived/keepalived.conf
keepalived.conf配置文件完整內容如下所示:
! Configuration File for keepalivedglobal_defs {router_id nginx01 } vrrp_script chk_nginx{script "/etc/keepalived/nginx_check.sh"interval 2weight -20} vrrp_instance nginx {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.100}track_script{chk_nginx} }重啟服務
[root@nginx01 ~]# systemctl restart nginx
把配置文件傳給nginx02
[root@nginx01 ~]# scp /etc/keepalived/keepalived.conf? 192.168.10.7:/etc/keepalived/
[root@nginx02 ~]#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id nginx02 } vrrp_script chk_nginx{script "/etc/keepalived/nginx_check.sh"interval 2weight -20} vrrp_instance nginx {state MASTERinterface ens33virtual_router_id 51priority 99advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.100}track_script{chk_nginx} }重啟服務
[root@nginx02 ~]# systemctl restart nginx
創建nginx服務檢測腳本
? 分別在nginx-01和nginx-02服務器的/etc/keepalived目錄下創建nginx_check.sh腳本,并為其添加執行權限。用于keepalived定時檢測nginx的服務狀態,如果nginx停止了,會嘗試重新啟動nginx,如果啟動失敗,會將keepalived進程殺死,將vip漂移到備用機器上。
[root@nginx01?~]# vim /etc/keepalived/nginx_check.sh
#!/bin/bashnum=$(ps -C nginx --no-header | wc -l)if [ $num -eq 0 ];thensystemctl start nginx #嘗試重新啟動nginxsleep 1 #睡眠1秒if [ $(ps -C nginx --no-header | wc -l) -eq 0 ];thenkillall keepalived #若nginx啟動失敗,將keepalived服務殺死。將vip漂移到其它備份節點fifi說明:
ps -C nginx --no-header | wc -l一般用于shell腳步編寫用
-C <指令名稱> 選項用來指定程序的名稱
--no-header選項去掉頭部
killall命令由軟件包psmisc提供,確保兩臺主機要安裝psmisc
[root@nginx-01 ~]# chmod +x /etc/keepalived/nginx_check.sh? ?
[root@nginx01 ~]# scp /etc/keepalived/nginx_check.sh 192.168.10.7:/etc/keepalived/
[root@nginx02?~]#chmod +x /etc/keepalived/nginx_check.sh
查看進程
[root@nginx01]#ps -ef | grep keepalived
查看進程
[root@nginx02]#ps -ef | grep keepalived
看到如上進程信息,表示keepalived已經啟動成功。下面用ip addr命令查看vip綁定的情況,如下所示:
[root@nginx01 ~]# ip addr show dev ens33
?[root@nginx02 ~]# ip addr show dev ens33
vip地址192.168.10.100綁定在nginx01的ens33網卡上。
測試
搶占模式
將nginx-01的keepalived服務和nginx服務停掉,查看vip是否漂移到nginx-02
[root@nginx01 ~]# systemctl stop keepalived
[root@nginx01 ~]# nginx -s stop
下面用ip addr命令查看vip綁定的情況,如下所示:
[root@nginx01 ~]# ip addr show dev ens33
?[root@nginx02 ~]# ip addr show dev ens33
從上面顯示可以看出,vip已經成功從nginx-01漂移到了nginx-02。
將nginx-01的nginx服務和keepalived服務啟動,查看搶占模式的效果。
[root@nginx01 ~]# nginx
[root@nginx01 ~]# systemctl start keepalived
[root@nginx01 ~]# ip addr show dev ens33
此時再將nginx-01的nginx服務和keepalived服務啟動后,由于nginx-01是MASTER且優先級高,所以會將nginx-02的VIP搶占過來。從上面的顯示結果可以看到,VIP又漂移到了nginx-01主機。
非搶占模式
和搶占模式的配置相比,只改了兩個地方:
在vrrp_instance塊下,兩個節點各增加了nopreempt指令,表示不爭搶vip。
兩個節點的state都為BACKUP。
在非搶占模式下,兩個keepalived節點都啟動后,默認都是BACKUP狀態,雙方在發送組播信息后,會根據優先級來選舉一個MASTER出來。由于兩者都配置了nopreempt,所以MASTER從故障中恢復后,不會搶占vip。這樣會避免VIP切換可能造成的服務延遲。
改nginx-01和nginx-02的keepalived.conf內容(標紅色部分):
?重啟keepalived? ? ? ?systemctl restart keepalived
?[root@nginx01 ~]# ip addr show dev ens33
?[root@nginx02 ~]# ip addr show dev ens33
停掉nginx01上服務后在查看
?[root@nginx01 ~]# ip addr show dev ens33
?[root@nginx02 ~]# ip addr show dev ens33
VIP地址漂移到了nginx-02上
再將nginx-01的keepalived服務啟動,查看是否搶占VIP
??[root@nginx01 ~]# ip addr show dev ens33
?[root@nginx02 ~]# ip addr show dev ens33
VIP還在nginx02上面說明沒搶占VIP
總結
以上是生活随笔為你收集整理的keepalived实现nginx负载均衡的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高中优质计算机课ppt课件ppt课件pp
- 下一篇: mysql checksum_mysql