nginx + keepAlive 實現高可用主從配置

1、keepAlived 簡介

Keepalived軟件起初是專爲LVS負載均衡軟件設計的,用來管理並監控LVS集羣系統中各個服務節點的狀態,後來又加入了能夠實現高可用的VRRP (Virtual Router Redundancy Protocol ,虛擬路由器冗餘協議)功能。所以,Keepalived除了可以管理LVS軟件外,還能夠做爲其餘服務(例如:Nginx、Haproxy、MySQL等)的高可用解決方案軟件nginx

 

2、如何實現故障轉移 

  Keepalived高可用服務對之間的故障切換轉移,是經過 VRRP 來實現的。在 Keepalived服務正常工做時,主 Master節點會不斷地向備節點發送(多播的方式)心跳消息,用以告訴備Backup節點本身還活着,當主 Master節點發生故障時,就沒法發送心跳消息,備節點也就所以沒法繼續檢測到來自主 Master節點的心跳了,因而調用自身的接管程序,接管主Master節點的 IP資源及服務。而當主 Master節點恢復時,備Backup節點又會釋放主節點故障時自身接管的IP資源及服務,恢復到原來的備用角色
 bash

3、keepAlive配置

關於怎麼安裝這裏不作敘述,首先配置 master 節點負載均衡

! Configuration File for keepalived

global_defs {
   router_id ip地址              #路由器標識,最好寫主機名或者IP地址,用於標識
}

vrrp_script chk_nginx {        #配置檢查方式,chk_nginx爲自定義名稱
    script "/etc/keepalived/nginx_check.sh"   #腳本的文件地址
    interval 2
    weight 20                   #此值須要大於MASTER的priority減去BACKUP的priority
}

vrrp_instance VI_1 {
    state MASTER                #主節點爲:MASTER,備節點爲:BACKUP
    interface eth0              #當前虛擬機網卡
    virtual_router_id 51        # 虛擬路由編號,主從要一直
    priority 100                #優先級 數值越大,獲取處理請求的優先級越高
    advert_int 1
    authentication {            #此爲認證方式,MASTER和BACKUP統一
        auth_type PASS
        auth_pass 1314
    }
    track_script {              #調用上面的檢查腳本
        chk_nginx
    }
    virtual_ipaddress {         #設定VIP地址
        18.50.129.74/24
    }
}

繼續配置slave節點。從節點backup配置和主節點同樣,只是state要改爲backup,  priority 值要比master小點便可。測試

! Configuration File for keepalived

global_defs {
   router_id ip地址
}

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight 20
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1314
    }
    track_script {
        chk_nginx
    }
    virtual_ipaddress {
        18.50.129.74/24
    }
}

最後編寫腳本 nginx_check.shspa

#!/bin/bash

A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];
then
    /usr/local/nginx/sbin/nginx 
    sleep 2
    if [ `ps -C nginx --no-header | wc -l` -eq 0 ];
        then
        pkill keepalived
    fi
fi

腳本說明:設計

  1. 腳本邏輯爲檢測進程若是沒有nginx就嘗試啓動一次,而後等礴兩秒,再檢測,若是尚未上進程就結束keepalived進程。這樣VIP就會移動到備份節點code

  2. 我這裏是yum安裝的Nginx,因此直接使用nginx命令能夠啓動nginx,若是你是源碼安裝,或者須要配置下環境變量或者更改下啓動命令和絕對路徑,並測試是否能正常啓動router

  3. 若是以爲等待兩秒的時候過長能夠更改成1秒進程

 

測試:ip

  1. 查看兩個節點的Nginx服務是否啓動成功,若是keepalived啓動成功會調用啓動Nginx,前提須要保證Nginx能正常啓動

  2. 在Master故意更改錯Nginx配置文件,並中止Nginx服務過幾秒查看VIP是否已經移動至BACKUP,正常是會移動到BACKUP節點

  3. 恢復Master節點,查看VIP是否回到Master,正常VIP會綁定到Master

相關文章
相關標籤/搜索