keepalived雙主模型高可用Nginx服務

配置前提:
(1) 各節點時間必須同步;
            ntp, chrony
(2) 確保iptables及selinux不會成為阻礙;
(3) 各節點之間可通過主機名互相通信(對KA并非必須);
            建議使用/etc/hosts文件實現;

(4) 確保各節點的用于集群服務的接口支持MULTICAST通信;

keepalived雙主模型高可用Nginx服務

            ip link set multicast on interface

配置語法:
    配置虛擬路由器:
    vrrp_instance <STRING> {
                                    ………
                                }
    專用參數:
            state MASTER|BACKUP:當前節點在此虛擬路由器上的初始狀態;只能有一個是MASTER,余下的都應該為BACKUP;
            interface IFACE_NAME:綁定為當前虛擬路由器使用的物理接口;
            virtual_router_id VRID:當前虛擬路由器的惟一標識,范圍是0-255;
            priority 100:當前主機在此虛擬路徑器中的優先級;范圍1-254;
            advert_int 1:vrrp通告的時間間隔;
     authentication {
            auth_type AH|PASS
            auth_pass <PASSWORD>(這里為任意的8個字符,各節點要保持一致

可以用“openssl rand -base64 7”生成

            }
    virtual_ipaddress {
        <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
            例如:192.168.200.17/24 dev eth1
                      192.168.200.18/24 dev eth2 label eth2:1
        }
    track_interface {
                eth0
                eth1
                …
            }
配置要監控的網絡接口,一旦接口出現故障,則轉為FAULT狀態;
    nopreempt:定義工作模式為非搶占模式;
    preempt_delay 300:搶占式模式下,節點上線后觸發新選舉操作的延遲時長;

vrrp_script <SCRIPT_NAME> {
                    script “”
                    interval INT 每隔多長時間腳本執行一次
                    weight -INT 減去的優先級
                }
track_script {                               #跟蹤監控腳本,放在vrrp_instance中
                SCRIPT_NAME_1
                SCRIPT_NAME_2
                            …
                }

雙主模型示例:

vim /etc/keepalived/keepalived.conf

    節點一配置:

! Configuration File for keepalived
global_defs {
            notification_email {
            root@localhost
        }
notification_email_from keepalived@localhost
                smtp_server 127.0.0.1
                smtp_connect_timeout 30
                router_id node1
               vrrp_mcast_group4 224.0.100.19(組播地址自行定義)

    }
keepalived雙主模型高可用Nginx服務

    節點二配置:

! Configuration File for keepalived
global_defs {
            notification_email {
            root@localhost
        }
notification_email_from keepalived@localhost
                smtp_server 127.0.0.1
                smtp_connect_timeout 30
                router_id node2
               vrrp_mcast_group4 224.0.100.19(組播地址自行定義,要與節點一一直)

    }

keepalived雙主模型高可用Nginx服務

通過systemctl status keepalived.service查看結果

高可用:
        keepalived調用外部的輔助腳本進行資源監控,并根據監控的結果狀態能實現優先動態調整;
分兩步:(1) 先定義一個腳本,為MASTER時啟動nginx,BACKUP時關閉nginx,對于雙主模型,只需啟動不能關閉,地址轉移走后可以重啟,但是不能關閉;(2) 調用此腳本;

在各個節點上定義通知腳本,放在vrrp_instance中:

    notify_master <STRING>|<QUOTED-STRING>:當前節點成為主節點時觸發的腳本;
    notify_backup <STRING>|<QUOTED-STRING>:當前節點轉為備節點時觸發的腳本;
    notify_fault <STRING>|<QUOTED-STRING>:當前節點轉為“失敗”狀態時觸發的腳本;

    notify <STRING>|<QUOTED-STRING>:通用格式的通知觸發機制,一個腳本可完成以上三種狀態的轉換時的通知;

通知腳本配置:

keepalived雙主模型高可用Nginx服務

節點配置示例:

在配置文件中加入下圖中的配置

vrrp_script chk_down {
        script “[[ -f /etc/keepalived/down ]] && exit 1 || exit 0”
       ……….
}

vrrp_script chk_nginx {
        script “killall -0 nginx && exit 0 || exit 1” killall -0 測試能否殺掉進程 用來查詢nginx進程是否存在

        interval 1
    ………

        fall 1 檢查1次
        rise  1 若是之后檢查是正常的則把權重加回去
}

配置示例:

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node1
   vrrp_mcast_group4 224.0.100.19
}

vrrp_script chk_down {
        script “[[ -f /etc/keepalived/down ]] && exit 1 || exit 0”
        weight -10
        interval 1
        fall 1
        rise 1
}
vrrp_script chk_ngx {
        script ” killall -0 nginx && exit 0 || exit 1″
        weight -10
        interval 1
        fall 1
        rise 1
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass tEtMBpfA
    }
    virtual_ipaddress {
        172.16.0.66/16 dev ens33 label ens33:0
    }
track_script {
                chk_down
                chk_nginx
   }
        notify_master “/etc/keepalived/notify.sh master”
        notify_backup “/etc/keepalived/notify.sh backup”
        notify_fault “/etc/keepalived/notify.sh fault”
}
vrrp_instance VI_2 {
    state  BACKUP
    interface ens33
    virtual_router_id 41
    priority 96
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass d/aiJhXT
    }
    virtual_ipaddress {
        172.16.0.67/16 dev ens33 label ens33:1
                }
    }
track_script {
                chk_down
                chk_nginx
   }
        notify_master “/etc/keepalived/notify.sh master”
        notify_backup “/etc/keepalived/notify.sh backup”
        notify_fault “/etc/keepalived/notify.sh fault”

}


原創文章,作者:Immortals、zcy,如若轉載,請注明出處:http://www.www58058.com/79409

(0)
Immortals、zcyImmortals、zcy
上一篇 2017-07-06
下一篇 2017-07-07

相關推薦

  • 馬哥網絡班21期-第四周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。        cp -r /etc/skel /home/tuser1        chmod 700 /home/tuser1  …

    Linux干貨 2016-08-02
  • Linux 系統終端

    Linux系統的主要終端主要包含:控制臺終端、控制終端、串口終端、偽終端、虛擬終端。 控制臺終端:在Linux 系統中,計算機顯示器通常被稱為控制臺終端(Console)內核將信息送到控制臺終端上(/dev/console), 通過與console相關聯的虛擬終端將信息顯示到屏幕上。再開機過程中屏幕輸出的信息,這個屏幕就是Console; 控制終端:鍵盤,顯…

    Linux干貨 2016-10-19
  • 系統自動化安裝的實現及SELINUX的設置

    系統的自動化安裝     anaconda:系統安裝程序         tui:基于圖形庫curses的文本窗口         gui:圖形窗口     裝載根文件系統,并啟動…

    Linux干貨 2016-09-16
  • grep、egrep、fgrep 正則表達式詳解

    大綱一、grep分類       –1.1基本定義       –1.2常用選項       –1.3不常用選項二、正則表達式       –2.1基本…

    Linux干貨 2015-07-01
  • 馬哥教育網絡班22期第3周課程作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@MyCloudServer ~]# who | cut -d " " -f1 |sort -u root 2、取出最后登錄到當前系統的用…

    Linux干貨 2016-09-19
欧美性久久久久