【學習Nginx-09】Nginx+Keepalived實現高可用

Nginx+Keepalived實現高可用

準備資源

2臺Nginx

服務器 IP 端口 角色
Nginx - master 192.168.1.20 80 MASTER
Nginx - master - 2 192.168.1.200 80 BACKUP

安裝Keepalived

在2臺Nginx下都安裝Keepalived

yum -y install keepalived

配置Keepalived

主要配置4個地方

image-20200425095003540

主節點配置

修改主Nginx服務器的/etc/keepalived/keepalived.conf文件,內容如下

! Configuration File for keepalived

#全局配置
global_defs {
   notification_email {  #指定keepalived在發生切換時需要發送email到的對象,一行一個
     [email protected]
   }
   notification_email_from [email protected]  #指定發件人
   #smtp_server XXX.smtp.com                             #指定smtp服務器地址
   #smtp_connect_timeout 30                               #指定smtp連接超時時間
   router_id LVS_DEVEL                                    #運行keepalived機器的一個標識
}

vrrp_instance VI_1 { 
    state MASTER           #標示狀態爲MASTER 備份機爲BACKUP
    interface ens33         #設置實例綁定的網卡
    virtual_router_id 51   #同一實例下virtual_router_id必須相同
    priority 100           #MASTER權重要高於BACKUP 比如BACKUP爲99  
    advert_int 1           #MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒
    authentication {       #設置認證
        auth_type PASS     #主從服務器驗證方式
        auth_pass 8888
    }
    virtual_ipaddress {    #設置vip
        192.168.1.100       #可以多個虛擬IP,換行即可
    }
}

查看ip

image-20200425102447353

備用節點配置

修改備用Nginx服務器的/etc/keepalived/keepalived.conf文件,內容如下

! Configuration File for keepalived

#全局配置
global_defs {
   notification_email {  #指定keepalived在發生切換時需要發送email到的對象,一行一個
     [email protected]
   }
   notification_email_from [email protected]  #指定發件人
   #smtp_server XXX.smtp.com                             #指定smtp服務器地址
   #smtp_connect_timeout 30                               #指定smtp連接超時時間
   router_id LVS_DEVEL                                    #運行keepalived機器的一個標識
}

vrrp_instance VI_1 { 
    state BACKUP           #標示狀態爲MASTER 備份機爲BACKUP
    interface ens33         #設置實例綁定的網卡
    virtual_router_id 51   #同一實例下virtual_router_id必須相同
    priority 99           #MASTER權重要高於BACKUP 比如BACKUP爲99  
    advert_int 1           #MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒
    authentication {       #設置認證
        auth_type PASS     #主從服務器驗證方式
        auth_pass 8888
    }
    virtual_ipaddress {    #設置vip
        192.168.1.100       #可以多個虛擬IP,換行即可
    }
}

查看ip

image-20200425102552945

只有當主節點的Keepalived停掉時,備用節點纔會生成虛擬ip

image-20200425120316441

配置主從切換

keepalived是通過檢測keepalived進程是否存在判斷服務器是否宕機,如果keepalived進程在但是nginx進程不在了那麼keepalived是不會做主備切換,所以我們需要寫個腳本來監控nginx進程是否存在,如果nginx不存在就將keepalived進程殺掉。

在主nginx上需要編寫nginx進程檢測腳本(check_nginx.sh),判斷nginx進程是否存在,如果nginx不存在就將keepalived進程殺掉

check_nginx.sh內容如下:

#!/bin/bash
# 如果進程中沒有nginx則將keepalived進程kill掉
A=`ps -C nginx --no-header |wc -l`      ## 查看是否有 nginx進程 把值賦給變量A 
if [ $A -eq 0 ];then                    ## 如果沒有進程值得爲 零
       service keepalived stop          ## 則結束 keepalived 進程
fi

添加客執行權限

chmod +x /etc/keepalived/check_nginx.sh

修改主Nginx的配置

添加如下兩段代碼

在vrrp_instance VI_1上面添加下面這段代碼

vrrp_script check_nginx {
    script "/etc/keepalived/check_nginx.sh"         ##監控腳本
    interval 2                                      ##時間間隔,2秒
    weight 2                                        ##權重
}

在virtual_ipaddress上面添加下面這段代碼

track_script {
	check_nginx        #監控腳本
}

訪問測試

啓動keepalived

service keepalived start

爲了區分主備Nginx,修改一下Nginx主頁

image-20200425100407097

image-20200425100502281

瀏覽器訪問虛擬ip,http://192.168.1.100/

首先進來的是主Nginx

image-20200425100638472

當停掉主Nginx,會訪問到備用Nginx

service nginx stop

再次訪問http://192.168.1.100/,進入到備用Nginx

image-20200425111547000

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章