關於使用Keepalived實現Nginx的自動重啟及雙主熱備高可用問題
1、概述
之前我們使用Keepalived實現瞭Nginx服務的雙機主備高可用,但是有幾個問題沒有解決,今天一起探討一下。
1)在雙機主備機制中,Keepalived服務如果宕瞭,會自動啟用備機進行服務,但Nginx服務如果負載過大宕瞭,虛擬ip是不會指向備機的。
2)雙機主備的特點是,隻有1臺機器在提供服務,備機在主機的Keepalived服務宕掉後才會提供服務,大大的造成瞭資源的浪費。
3)目前比較流行租用雲服務器去運營公司的產品,那雲服務器支不支持虛擬IP呢?
今天我們就上述的三個問題來講解一下。
2、使用Keepalived實現Nginx的自動重啟
2.1 借助Shell腳本,完成Nginx的重啟
Keepalived不能直接啟動Nginx,但可以執行shell腳本,因此這裡我們需要借助Shell腳本啟動Nginx。
在 /etc/keepalived 目錄下,新建一個腳本 check_nginx.sh,以下是腳本的具體內容:
#!/bin/bash # 執行查看Nginx進程的命令,並放在變量A中 A=`ps -C nginx --no-header | wc -l` # 判斷是否宕機,如果宕機嘗試重啟,如果重啟不成功,則停止Keepalived if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx sleep 3 if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then killall keepalived fi fi
腳本來源於網絡
2.2 為腳本賦予運行權限
# chmod +x /etc/keepalived/check_nginx.sh
2.3 在Keepalived配置文件中增加配置
打開Keepalived配置文件,# vi /etc/keepalived/keepalived.conf
修改配置文件,增加vrrp_script 和track_script的配置,配置如下:
global_defs { # 全局唯一的主機標識 router_id server_a } vrrp_script check_nginx { script "/etc/keepalived/check_nginx.sh" interval 3 # 每隔3秒運行一次Shell腳本 weight 10 # 腳本運行成功,權重加10 } vrrp_instance VI_1 { # 標識是主節點還是備用節點,值為 MASTER 或 BACKUP state MASTER # 綁定的網卡 interface ens33 # 虛擬路由id,保證主備節點是一致的 virtual_router_id 51 # 權重 priority 100 # 同步檢查時間,間隔默認1秒 advert_int 1 # 認證授權的密碼,所有主備需要一樣 authentication { auth_type PASS auth_pass 1111 } track_script { check_nginx } # 虛擬IP virtual_ipaddress { 192.168.1.88 } }
2.4 重啟Keepalived服務
重啟後,發現,Nginx停掉後,很快會自動啟動。
3、雙主熱備的搭建
3.1 雙主熱備概述
由於雙機主備機制,每次隻會由一臺服務器對外提供服務,且主備機的配置是相同的,因此極大地造成瞭資源的浪費。
雙主熱備則解決瞭這個問題,雙主熱備的原理是兩臺服務器利用Keepalived互為主備,因此需要兩個虛擬IP,再利用DNS輪詢的配置,讓一個域名按輪詢的方式分別路由到兩個虛擬IP上,最終達到高可用的目的。
3.2 場景說明
虛擬IP1:192.168.1.88
虛擬IP2:192.168.1.66
A服務器IP(主):192.168.1.144
B服務器IP(備):192.168.1.22
3.3 修改A服務器配置
配置如下:
! Configuration File for keepalived global_defs { # 全局唯一的主機標識 router_id server_a } vrrp_instance VI_1 { # 標識是主節點還是備用節點,值為 MASTER 或 BACKUP state MASTER # 綁定的網卡 interface ens33 # 虛擬路由id,保證主備節點是一致的 virtual_router_id 51 # 權重 priority 100 # 同步檢查時間,間隔默認1秒 advert_int 1 # 認證授權的密碼,所有主備需要一樣 authentication { auth_type PASS auth_pass 1111 } # 虛擬IP virtual_ipaddress { 192.168.1.88 } } vrrp_instance VI_2 { # 標識是主節點還是備用節點,值為 MASTER 或 BACKUP state BACKUP # 綁定的網卡 interface ens33 # 虛擬路由id,保證主備節點是一致的 virtual_router_id 52 # 權重 priority 80 # 同步檢查時間,間隔默認1秒 advert_int 1 # 認證授權的密碼,所有主備需要一樣 authentication { auth_type PASS auth_pass 1111 } # 虛擬IP virtual_ipaddress { 192.168.1.66 } }
3.4 修改B服務器配置
配置如下:
! Configuration File for keepalived global_defs { router_id server_b } vrrp_instance VI_1 { # 設置為備機 state BACKUP interface ens33 virtual_router_id 51 # 權重設置的要比主機低 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } # 虛擬IP需要主備設置成一樣 virtual_ipaddress { 192.168.1.88 } } vrrp_instance VI_2 { # 設置為主機 state MASTER interface ens33 virtual_router_id 52 # 權重設置的要比主機低 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } # 虛擬IP需要主備設置成一樣 virtual_ipaddress { 192.168.1.66 } }
3.5 重啟兩臺服務器的Keepalived
重啟Keepalived即可。
3.6 設置DNS輪詢
聯系網絡運營商解決。
4、雲服務器的負載均衡
現在,很多公司都會選擇租用雲服務器運行自己的產品,因為更劃算、更穩定,有專業人員負責運維。
但使用瞭雲服務器,就要受雲服務運營商的限制。
就拿虛擬IP這個事兒來說,一些雲服務運營商就是不支持的。
如果不支持虛擬IP,則Keepalived這個方案就隻能放棄瞭。
但即使Keepalived用不瞭,Nginx的高可用還是有解決方案的,很多雲服務商都已經推出瞭自己的負載均衡服務(例如:阿裡雲的負載均衡 SLB 和 騰訊雲的負載均衡 CLB)。我們直接租用就好瞭,不需要我們自己去配置。
5、綜述
今天大概聊瞭一下KeepAlived自動重啟Nginx,Keepalived的雙主熱備高可用的搭建,以及雲服務器負載均衡的解決方案,希望能對大傢有所幫助。
到此這篇關於使用Keepalived實現Nginx的自動重啟及雙主熱備高可用的文章就介紹到這瞭,更多相關Keepalived實現Nginx的自動重啟內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Ubuntu搭建Mysql+Keepalived高可用的實現(雙主熱備)
- 運用.net core中實例講解RabbitMQ高可用集群構建
- Linux上搭載Nginx負載均衡配置使用案例詳解
- Nginx使用ngx_http_upstream_module實現負載均衡功能示例
- 構建雙vip的高可用MySQL集群