歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Keepalived+Nginx架構整理版

Keepalived+Nginx架構整理版

日期:2017/2/27 15:43:15   编辑:Linux教程

Keepalived介紹

keepalived是一個類似於layer3, 4, 5 交換機制的軟件,也就是我們平時說的第3層、第4層和第5層交換。Keepalived的作用是檢測web服務器的狀態,如果有一台web服務器死機,或 工作出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工作正常後Keepalived自動將web服務器 加入到服務器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的web服務器

官網地址:http://www.keepalived.org

keepalved官方體系結構圖:

環境准備

操作系統:CentOS6.6 64位 2台
Nginx-Master   10.0.0.60
Nginx-Backup   10.0.0.61
VIP                      10.0.0.62
注:未做特別說明,兩台服務器(兩個節點)都一樣操作

安裝Nginx

使用《OneinStack》Nginx選擇y,其余n

安裝Keepalived

在Nginx-Master、Nginx-Backup:

cd ~/oneinstack/src
wget http://www.keepalived.org/software/keepalived-1.2.22.tar.gz
tar xzf keepalived-1.2.22.tar.gz
cd keepalived-1.2.22
./configure --prefix=/usr/local/keepalived
make && make install
配置Keepalived

在Nginx-Master、Nginx-Backup:

ln -s /usr/local/keepalived/etc/keepalived /etc/keepalived
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/keepalived
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
ln -s /usr/local/keepalived/sbin/keepalived /usr/bin/keepalived
chkconfig keepalived on
在Nginx-Master修改配置文件,vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
       [email protected]     #設置報警郵件地址,可以設置多個,每行一個。 需開啟本機的sendmail服務
   }
   notification_email_from [email protected]  #設置郵件的發送地址
   smtp_server 127.0.0.1            #設置smtp server地址
   smtp_connect_timeout 30    #設置連接smtp server的超時時間
   router_id LVS_DEVEL              #表示運行keepalived服務器的一個標識。發郵件時顯示在郵件主題的信息
}

vrrp_script chk_nginx {
    script "/usr /local/keepalived/sbin/check_nginx.sh"   #該腳本檢測ngnix的運行狀態,並在nginx進程不存在時嘗 試重新啟動ngnix,如果啟動失敗則停止keepalived,准備讓其它機器接管。
    interval 2              #每2s檢測一次
    weight 2               #檢測失敗(腳本返回非0)則優先級2
}

vrrp_instance VI_1 {
    state MASTER              #指定keepalived的角色,MASTER表示此主機是主服務器,BACKUP表示此主機是備用服務器
    interface eth0              #指定HA監測網絡的接口
    virtual_router_id 55    #虛擬路由標識,這個標識是一個數字,同一個vrrp實例使用唯一的標識。即同一vrrp_instance下,MASTER和BACKUP必須是一致的
    priority 100                  #定義優先級,數字越大,優先級越高,在同一個vrrp_instance下,MASTER的優先級必須大於BACKUP的優先級
    advert_int 1            #設定MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒
    authentication {        #設置驗證類型和密碼
        auth_type PASS      #設置驗證類型,主要有PASS和AH兩種
        auth_pass linuxeye  #設置驗證密碼,在同一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通信
    }
    virtual_ipaddress {     #設置虛擬IP地址,可以設置多個虛擬IP地址,每行一個
        10.0.0.62
    }
    track_script {
        chk_nginx           #引用VRRP腳本,即在 vrrp_script 部分指定的名字。定期運行它們來改變優先級,並最終引發主備切換。
    }
}

在Nginx-Backup修改配置文件,vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
       [email protected]     #設置報警郵件地址,可以設置多個,每行一個。 需開啟本機的sendmail服務
   }
   notification_email_from [email protected]  #設置郵件的發送地址
   smtp_server 127.0.0.1      #設置smtp server地址
   smtp_connect_timeout 30    #設置連接smtp server的超時時間
   router_id LVS_DEVEL        #表示運行keepalived服務器的一個標識。發郵件時顯示在郵件主題的信息
}

vrrp_script chk_nginx {
    script "/usr /local/keepalived/sbin/check_nginx.sh"   #該腳本檢測ngnix的運行狀態,並在nginx進程不存在時嘗 試重新啟動ngnix,如果啟動失敗則停止keepalived,准備讓其它機器接管。
    interval 2              #每2s檢測一次
    weight 2                #檢測失敗(腳本返回非0)則優先級2
}

vrrp_instance VI_1 {
    state BACKUP            #指定keepalived的角色,MASTER表示此主機是主服務器,BACKUP表示此主機是備用服務器
    interface eth0          #指定HA監測網絡的接口
    virtual_router_id 55    #虛擬路由標識,這個標識是一個數字,同一個vrrp實例使用唯一的標識。即同一vrrp_instance下,MASTER和BACKUP必須是一致的
    priority 50             #定義優先級,數字越大,優先級越高,在同一個vrrp_instance下,MASTER的優先級必須大於BACKUP的優先級
    advert_int 1            #設定MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒
    nopreempt               #設置nopreempt防止搶占資源,只生效BACKUP節點
    authentication {        #設置驗證類型和密碼
        auth_type PASS      #設置驗證類型,主要有PASS和AH兩種
        auth_pass linuxeye  #設置驗證密碼,在同一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通信
    }
    virtual_ipaddress {     #設置虛擬IP地址,可以設置多個虛擬IP地址,每行一個
        10.0.0.62
    }
    track_script {
        chk_nginx           #引用VRRP腳本,即在 vrrp_script 部分指定的名字。定期運行它們來改變優先級,並最終引發主備切換。
    }
}
檢測腳本,vi /usr/local/keepalived/sbin/check_nginx.sh
#!/bin/bash
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ];then
    #echo 1
    /etc/init.d/nginx start
    sleep 5

    if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ];then
        /etc/init.d/keepalived stop
        #echo 2
    fi
fi

腳本加上可執行權限

chmod +x /usr/local/keepalived/sbin/check_nginx.sh

驗證

service keepalived start  #啟動Nginx-Master
service keepalived start  #啟動Nginx-Backup
ip addr  #2台服務器分別執行,綁定虛擬IP在Nginx-Master
service keepalived stop  #停止Nginx-Backup
ip addr  #2台服務器分別執行,綁定虛擬IP在Nginx-Backup
service keepalived start  #再啟動Nginx-Backup
ip addr  #2台服務器分別執行,綁定虛擬IP在Nginx-Master

上述切換默認測試會導致的master和backup之間來回切換

通 常如果master服務死掉後backup會變成master,但是當master服務又好了的時候master此時會搶占VIP,這樣就會發生兩次切換 對業務繁忙的網站來說是不好的。我們可以在配置文件加入nopreempt非搶占,但是這個參數只能用於state為BACKUP,故我們在用HA的時候 最好MASTER和backup的state都設置成BACKUP讓其通過priority來競爭。

拓展

假設我要重裝這2台服務器,但是過程不容許丟一個包,通常情況下先替換backup,把master停止,讓vip漂移只backup,替換master,但是在vip漂移過程可能會有丟2個包,如果避免丟包?

方法:我們可以在master替換之前,利用iptables將數據包轉發到backup,再停止master keepalived

iptables -F
iptables -t nat -I PREROUTING -i eth0 -j DNAT --to-destination 10.0.0.61
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
原文:https://blog.linuxeye.com/447.html
Copyright © Linux教程網 All Rights Reserved