Keepalived+Nginx架構配置

Keepalived介紹html

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

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

keepalved官方體系結構圖:web

Keepalived+Nginx架構配置Keepalived+Nginx架構配置

環境準備bash

操做系統: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 {
       admin@linuxeye.com     #設置報警郵件地址,能夠設置多個,每行一個。 需開啓本機的sendmail服務
   }
   notification_email_from no-reply@linuxeye.com  #設置郵件的發送地址
   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 {
       admin@linuxeye.com     #設置報警郵件地址,能夠設置多個,每行一個。 需開啓本機的sendmail服務
   }
   notification_email_from no-reply@linuxeye.com  #設置郵件的發送地址
   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

原文來自:http://www.linuxeye.com/Linux/2893.html

本文地址:http://www.linuxprobe.com/keepalived-nginx.html

相關文章
相關標籤/搜索