1. 程式人生 > >Nginx+Keepalive高可用之主從配置

Nginx+Keepalive高可用之主從配置

高可用 nginx keepalived

實驗環境

操作系統:CentOS 7.4 1708

軟件安裝:yum -y install epel-release && yum -y install nginx keepalived

Nginx+Keepalived NodeA:18.50.129.72(master)

Nginx+Keepalived NodeB:18.50.129.73(slave)

VIP:18.50.129.74

實現目標

  1. 當Nginx服務停止後Keepalived會自動去啟動此服務,如果無法啟動將VIP轉移至Slave節點

  2. 當Master節點Nginx配置文件更新後,Slave節點的Nginx配置文件及時同步

Node1的Keepalived配置

! Configuration File for keepalived

global_defs {
   router_id NodeA              #路由器標識,最好寫主機名,用於標識
}

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
    }
}

Node2的Keepalived配置

! Configuration File for keepalived

global_defs {
   router_id NodeB
}

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.sh腳本內容:

#!/bin/bash

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

腳本說明:

  1. 腳本邏輯為檢測進程如果沒有nginx就嘗試啟動一次,然後等礴兩秒,再檢測,如果還沒有上進程就結束keepalived進程。這樣VIP就會移動到備份節點

  2. 我這裏是yum安裝的Nginx,所以直接使用nginx命令可以啟動nginx,如果你是源碼安裝,或者需要配置下環境變量或者更改下啟動命令和絕對路徑,並測試是否能正常啟動

  3. 如果覺得等待兩秒的時候過長可以更改為1秒

啟動服務:

在NodeA和NodeB執行後面命令:systemctl start keepalived

測試:

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

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

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

小知識:

查看VIP使用:ip addr 命令

keepalived日誌默認記錄在:/var/log/messages


最後關於Nginx配置文件同步問題,我只說明了一下思路,不作演示,可以參考我自動運維上關文章, 我們可以使用salt來管理Nginx的配置文件,這樣就可以做到指的更新,這樣就解決了我們多臺Nginx配置文件同步問題


本文出自 “藍色_風暴” 博客,請務必保留此出處http://270142877.blog.51cto.com/12869137/1969359

Nginx+Keepalive高可用之主從配置