一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

架構(gòu)設(shè)計(jì):負(fù)載均衡層設(shè)計(jì)方案(6)

 Bladexu的文庫(kù) 2017-07-03

1、概述

前兩遍文章中,我們一直在說(shuō)后文要介紹Nginx + Keepalived的搭建方式。這篇文章開(kāi)始,我們就來(lái)兌現(xiàn)前文的承諾,后續(xù)的兩篇文章我們將介紹Nginx + Keepalived和 LVS + Keepalived搭建高可用的負(fù)載層系統(tǒng)。如果你還不了解Nginx和LVS的相關(guān)知識(shí),請(qǐng)參見(jiàn)我之前的兩篇文章《架構(gòu)設(shè)計(jì):負(fù)載均衡層設(shè)計(jì)方案(2)——Nginx安裝》(http://blog.csdn.net/yinwenjie/article/details/46620711)、《架構(gòu)設(shè)計(jì):負(fù)載均衡層設(shè)計(jì)方案(4)——LVS原理》(http://blog.csdn.net/yinwenjie/article/details/46845997

2、準(zhǔn)備工作

2.1、準(zhǔn)備兩臺(tái)獨(dú)立工作的Nginx系統(tǒng)

準(zhǔn)備兩臺(tái)Nginx的主機(jī),如果您不知道為什么需要準(zhǔn)備兩臺(tái),沒(méi)關(guān)系,準(zhǔn)備就行。保證兩臺(tái)Nginx主機(jī)能夠被外網(wǎng)訪問(wèn)。在我這里,安裝兩臺(tái)Nginx的虛擬機(jī)IP地址分別是:

  • Nginx VM1:192.168.61.129:80
  • Nginx VM2:192.168.61.130:80

訪問(wèn)相關(guān)的地址,確保兩臺(tái)Nginx都是可用的:

  • VM1:
    這里寫(xiě)圖片描述

  • VM2:
    這里寫(xiě)圖片描述

Nginx的安裝在我的前文《架構(gòu)設(shè)計(jì):負(fù)載均衡層設(shè)計(jì)方案(2)——Nginx安裝》(http://blog.csdn.net/yinwenjie/article/details/46620711)中已經(jīng)進(jìn)行了詳細(xì)的講解,所以這里的講解就一筆帶過(guò)。

2.2、再分別獨(dú)立安裝Keepalived系統(tǒng)

我們的目標(biāo)是“在一臺(tái)工作的Nginx崩潰的情況下,系統(tǒng)能夠檢測(cè)到,并自動(dòng)將請(qǐng)求切換到另外一臺(tái)備份的Nginx服務(wù)器上”。所以,之前安裝的兩臺(tái)Nginx,一臺(tái)是Master服務(wù)器是主要的工作服務(wù)器,另一臺(tái)是備份服務(wù)器,在Master服務(wù)器出現(xiàn)問(wèn)題后,由后者接替其工作。如下圖所示(外網(wǎng)的請(qǐng)求使用一個(gè)由keepalived控制的虛擬的浮動(dòng)IP進(jìn)行訪問(wèn)):

這里寫(xiě)圖片描述

  • 請(qǐng)到 www.keepalived.org 下載keepalived的穩(wěn)定版本,我下載的是1.2.17版本。

  • 解壓,并且安裝。注意,我在這里制定了perfix參數(shù),指定安裝位置,這是為了我自己便于管理。您在安裝的時(shí)候,可以根據(jù)自己的情況來(lái)決定是不是加這個(gè)參數(shù):

    tar -zxvf keepalived-1.2.17.tar.gz
    
    ./configure --perfix=/usr/keepalived-1.2.17
    
    make & make install 
    
  • 如果您不是安裝到默認(rèn)路徑,那么為了將keepalived做成系統(tǒng)服務(wù),您需要拷貝一些文件到指定的路徑下,如下:

    cp /usr/keepalived-1.2.17/etc/sysconfig/keepalived  /etc/sysconfig/keepalived
    
    cp /usr/keepalived-1.2.17/sbin/keepalived /usr/sbin/keepalived
    
    cp /usr/keepalived-1.2.17/etc/rc.d/init.d/keepalived  /etc/rc.d/init.d/keepalived
    
    mkdir /etc/keepalived
    
    cp /usr/keepalived-1.2.17/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
    
  • 然后您可以將keepalived做成服務(wù)了:

    /etc/rc.d/init.d/keepalived
    
    chkconfig keepalived on
    

3、檢查Nginx狀態(tài)

在正式介紹Nginx + Keepalived的配置前,我們首先介紹一下如何檢查Nginx的狀態(tài)。是的,這是為下一小節(jié)做準(zhǔn)備。我們只有能夠正確檢查Nginx的狀態(tài),才說(shuō)得上在Nginx節(jié)點(diǎn)出現(xiàn)問(wèn)題的情況下,切換到另一臺(tái)Nginx上接替其工作

Nginx為什么會(huì)停止響應(yīng)呢?在我的工作經(jīng)驗(yàn)中,無(wú)非有以下幾種情況:

  • Nginx的所有進(jìn)程被強(qiáng)行終止(或管理進(jìn)程)。
    這種情況,是我們需要檢查和切換的。無(wú)論什么情況下進(jìn)程被終止了,如果它不能重啟,我們就要切換到備機(jī)。

  • Nginx日志盤的掛載點(diǎn)崩潰或者磁盤寫(xiě)滿。
    這個(gè)也是我們需要檢查和切換的。

  • Nginx已經(jīng)達(dá)到設(shè)置的最大連接數(shù),暫時(shí)停止響應(yīng)。
    這種情況下,我們不能進(jìn)行備機(jī)切換,因?yàn)橥ㄟ^(guò)VIP:192.168.61.100連接過(guò)來(lái)的用戶請(qǐng)求比較多(在我們優(yōu)化參數(shù)后,可以達(dá)到65535 / 4的數(shù)量),一旦我們進(jìn)行備機(jī)切換,這些用戶請(qǐng)求將全部異常。這個(gè)問(wèn)題的解決需要靠增加負(fù)載機(jī)器,而不是主備切換。

  • Nginx物理機(jī)異常關(guān)機(jī)。
    這個(gè)肯定是需要進(jìn)行檢查和切換的。

我們來(lái)看一段Linux腳本:

#!/bin/sh
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then
    /usr/nginx-1.6.2/sbin/nginx
fi

sleep 2
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then
    service keepalived stop
fi

我們大致講解一下“ps -C nginx –no-header | wc -l”這個(gè)命令:
- ps 這個(gè)命令用來(lái)進(jìn)行linux中進(jìn)程相關(guān)的查詢,-C 意思是按照進(jìn)程名稱進(jìn)行查詢。查詢出來(lái)后的結(jié)果如下:

[root@vm2 ~]# ps -C nginx
  PID TTY          TIME CMD
 3374 ?        00:00:00 nginx
 3375 ?        00:00:01 nginx
  • 如果要去掉統(tǒng)計(jì)出來(lái)的結(jié)果表的頭部,那么要使用 –no-header參數(shù),加上參數(shù)后,查詢結(jié)果如下:

    [root@vm2 ~]# ps -C nginx  --no-header
     3374 ?        00:00:00 nginx
     3375 ?        00:00:01 nginx
    
  • “|”,這是Linux中的管道流命令,將上一個(gè)命令的輸出結(jié)果作為下一個(gè)命令的輸入。

  • wc 統(tǒng)計(jì)命令,-l 參數(shù),代表按行數(shù)進(jìn)行統(tǒng)計(jì)。所以整個(gè)命令的輸出結(jié)果為:

    [root@vm2 ~]# ps -C nginx --no-header | wc -l
    2
    

清楚了其中最關(guān)鍵的命令,我們?cè)賮?lái)講解一下整個(gè)腳本的含義:
第一個(gè)判斷說(shuō)明的是,如果當(dāng)前nginx的進(jìn)程數(shù)量 == 0,那么執(zhí)行nginx的啟動(dòng)命令,試圖重新啟動(dòng)nginx;接下來(lái)等待2秒(這是為了給nginx一定的啟動(dòng)時(shí)間),然后再次查看Nginx的進(jìn)程數(shù)量,如果仍然 == 0,那么停止這臺(tái)機(jī)器的keepalived服務(wù),以便備用的Keepalived節(jié)點(diǎn)檢查到Keepalived已經(jīng)停止這個(gè)事件,并將浮動(dòng)IP切換到備用服務(wù)器上。

注意,這段腳本是和我機(jī)器上的Nginx安裝路徑、Keepalived服務(wù)的狀態(tài)有關(guān)的,您如果要用的話,請(qǐng)進(jìn)行相應(yīng)的更改。

4、Nginx + Keepalived最簡(jiǎn)配置

4.1、請(qǐng)?jiān)俅未_認(rèn)前提

(首先,為了保證不會(huì)出現(xiàn)額外的問(wèn)題,請(qǐng)首先關(guān)閉防火墻,當(dāng)然正式環(huán)境里面,防火墻不能關(guān)閉)

外網(wǎng)進(jìn)行Nginx訪問(wèn)的浮動(dòng)IP:192.168.61.100

  • 我們將192.168.61.129這臺(tái)服務(wù)器上運(yùn)行的Nginx作為主要的Nginx,其上的keepalived服務(wù)我們?cè)O(shè)置成Master方式。

  • 我們將192.168.61.129這臺(tái)服務(wù)器上運(yùn)行的Nginx作為備用的Nginx服務(wù),其上的keepalived服務(wù)我們?cè)O(shè)置為Backup方式。

4.2、正式開(kāi)始設(shè)置

注意,經(jīng)過(guò)安裝,您的keepalived配置文件的位置在“/etc/keepalived/keepalived.conf”(如果沒(méi)有,請(qǐng)創(chuàng)建一個(gè),但是經(jīng)過(guò)之前的步驟,這個(gè)位置肯定是有文件的,如果沒(méi)有可能是之前您的步驟出現(xiàn)了什么問(wèn)題)。

4.2.1、設(shè)置192.168.61.129上的MASTER

我們先來(lái)看看192.168.61.129上的原始ip信息:

這里寫(xiě)圖片描述

注意,這個(gè)129機(jī)器上的網(wǎng)卡設(shè)備號(hào)是eth1,而不是eth0,這個(gè)參數(shù)我們將在配置keepalived的時(shí)候使用到。

下面是129上keepalived的最簡(jiǎn)配置:

! Configuration File for keepalived
# global setting , notify email setting
global_defs {
   #存在于同一個(gè)網(wǎng)段中,一組keepalived的各個(gè)節(jié)點(diǎn)都有不同的名字
   #在全局設(shè)置中,我們還可以設(shè)置管理員的email信息等。
   router_id LVS_V1
}

#這個(gè)是我們?cè)谏弦恍〗Y(jié)講到的nginx檢查腳本,我們保存在這個(gè)文件中(注意文件權(quán)限)
vrrp_script chknginx {
    script "/usr/keepalived-1.2.17/bin/checknginx.sh"
    #每10秒鐘,檢查一次
    interval 10
}

#keepalived實(shí)例設(shè)置,是最重要的設(shè)置信息
vrrp_instance VI_1 {
    #state狀態(tài)MASTER表示是主要工作節(jié)點(diǎn)。
    #一個(gè)keepalived組中,最多只有一個(gè)MASTER節(jié)點(diǎn),當(dāng)然也可以沒(méi)有
    state MASTER
    #實(shí)例所綁定的網(wǎng)卡設(shè)備,我的網(wǎng)卡設(shè)備是eth1。您按照您自己的來(lái)
    interface eth1
    #同一個(gè)keepalived組,節(jié)點(diǎn)的設(shè)置必須一樣,這樣才會(huì)被識(shí)別
    virtual_router_id 52
    #節(jié)點(diǎn)優(yōu)先級(jí),BACKUP的優(yōu)先級(jí)一定要比MASTER的優(yōu)先級(jí)低
    priority 100
    #組播信息發(fā)送間隔,兩個(gè)節(jié)點(diǎn)設(shè)置必須一樣
    advert_int 1
    #實(shí)際的eth1上的固定ip地址
    mcast_src_ip=192.168.61.129
    #驗(yàn)證信息,只有驗(yàn)證信息相同,才能被加入到一個(gè)組中。
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    #虛擬地址和綁定的端口,如果有多個(gè),就綁定多個(gè)
    #dev 是指定浮動(dòng)IP要綁定的網(wǎng)卡設(shè)備號(hào)
    virtual_ipaddress {
        192.168.61.100 dev eth1
    }

    #設(shè)置的檢查腳本
    #關(guān)聯(lián)上方的“vrrp_script chknginx”
    track_script {
        chknginx
    }
}

4.2.2、設(shè)置192.168.61.130上的BACKUP

再來(lái)看看192.168.61.130這個(gè)備用節(jié)點(diǎn)上keepalived的設(shè)置:

! Configuration File for keepalived
# global setting , notify email setting
global_defs {
   #這里和master節(jié)點(diǎn)不同
   router_id LVS_V2
}

#check nginx
vrrp_script chknginx {
    script "/usr/keepalived-1.2.17/bin/checknginx.sh"
    interval 10
}

# instance setting
vrrp_instance VI_1 {
    # 這里和Master節(jié)點(diǎn)不一樣
    state BACKUP
    interface eth1
    # 這里一定是一樣的
    virtual_router_id 52
    # 這里的優(yōu)先級(jí)比Master節(jié)點(diǎn)低
    priority 99
    advert_int 1
    # 這里和Master節(jié)點(diǎn)不一樣
    mcast_src_ip=192.168.61.130
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.61.100 dev eth1
    }

    track_script {
        chknginx
    }
}

4.3、啟動(dòng)主節(jié)點(diǎn)和備用節(jié)點(diǎn)

以上配置中請(qǐng)注意幾個(gè)關(guān)鍵點(diǎn):

  • 注意nginx狀態(tài)檢查的腳本的位置,根據(jù)自己創(chuàng)建文件的位置不一樣,腳本檢查的指定位置也不一樣
  • 注意優(yōu)先級(jí),MASTER節(jié)點(diǎn)的優(yōu)先級(jí)一定要高于所有的BACKUP節(jié)點(diǎn)。
  • 注意局域網(wǎng)的組播地址,一定要可用。局域網(wǎng)內(nèi)所有keepalived節(jié)點(diǎn)都是利用組播方式尋找對(duì)方。
  • 誰(shuí)說(shuō)BACKUP節(jié)點(diǎn)只能有一個(gè)?。?/li>
  • 最后,keepalived一定要注冊(cè)成服務(wù)形式,您可以想象上面所有腳本、配置、命令如果重啟后再來(lái)一次,會(huì)是什么情況。

接下來(lái),我們要開(kāi)始啟動(dòng)Master節(jié)點(diǎn)和Backup節(jié)點(diǎn)了,為了準(zhǔn)確的查看日志狀態(tài),您需要觀察系統(tǒng)日志。系統(tǒng)日志所在的位置:

tail -f /var/log/messages

先啟動(dòng)Master節(jié)點(diǎn):

service keepalived start

再啟動(dòng)Backup節(jié)點(diǎn):

service keepalived start

如果設(shè)置和啟動(dòng)都是成功的,您不會(huì)在日志信息中收到任何的keepalived報(bào)錯(cuò)信息。接下來(lái)您就可以使用192.168.61.100這個(gè)IP訪問(wèn)Nginx了:

這里寫(xiě)圖片描述

另外,這個(gè)綁定在192.168.61.129上的浮動(dòng)ip:192.168.61.100,您通過(guò)ipconfig命令一般是看不到的,要使用ip addr命令進(jìn)行查看:

這里寫(xiě)圖片描述

為了試驗(yàn),我們主動(dòng)停止Master節(jié)點(diǎn)上的keepalived服務(wù)(注意,殺Nginx進(jìn)程不起作用,因?yàn)槲覀兊臋z查腳本會(huì)試圖重新啟動(dòng)Nginx進(jìn)程),接下來(lái)我們可以看到浮動(dòng)IP漂移到了130備機(jī)上:

這里寫(xiě)圖片描述

5、Nginx + Keepalived非搶占模式

通過(guò)第4節(jié)的詳細(xì)介紹,相信您對(duì)Nginx + Keepalived的安裝方式有了一個(gè)明確的理解。keepalived的切換可以是自動(dòng)的,但是卻做不到毫秒級(jí)別,他怎么都需要幾秒鐘的時(shí)間進(jìn)行切換。

這就有一個(gè)問(wèn)題,雖然在主節(jié)點(diǎn)出現(xiàn)問(wèn)題我們轉(zhuǎn)向備份節(jié)點(diǎn)時(shí),這個(gè)延時(shí)無(wú)可避免,但是在我們修復(fù)主節(jié)點(diǎn)后,實(shí)際上并沒(méi)有必要再馬上做一次切換,所以Keepalived提供了一種非搶占模式,來(lái)滿足這個(gè)要求。

下面我們就來(lái)介紹一下Keepalived的非搶占模式的配置(無(wú)MASTER節(jié)點(diǎn),全部依據(jù)優(yōu)先級(jí)確定哪個(gè)節(jié)點(diǎn)進(jìn)行工作):

5.1、原來(lái)主節(jié)點(diǎn)的配置改動(dòng)

! Configuration File for keepalived
# global setting , notify email setting
global_defs {
   router_id LVS_V1
}

vrrp_script chknginx {
    script "/usr/keepalived-1.2.17/bin/checknginx.sh"
    interval 10
    # 一旦節(jié)點(diǎn)失效,節(jié)點(diǎn)的優(yōu)先級(jí)就減少2
    # 有多少個(gè)keepalived節(jié)點(diǎn),就填寫(xiě)多少數(shù)量。
    # 這樣保證這個(gè)節(jié)點(diǎn)的優(yōu)先級(jí)比其他節(jié)點(diǎn)都低
    weight -2
    # fall 表示多少次檢查失敗,就算節(jié)點(diǎn)失效。默認(rèn)1
    #fall 1
}

vrrp_instance VI_1 {
    #state狀態(tài)都是BACKUP表示是主要工作節(jié)點(diǎn)。
    state BACKUP
    interface eth1
    virtual_router_id 52
    # 這個(gè)關(guān)鍵配置項(xiàng),設(shè)置為“非搶占”模式
    nopreempt
    # 每個(gè)節(jié)點(diǎn)的優(yōu)先級(jí)一定要不一樣
    priority 100
    advert_int 1
    mcast_src_ip=192.168.61.129
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    #虛擬地址和綁定的端口,如果有多個(gè),就綁定多個(gè)
    #dev 是指定浮動(dòng)IP要綁定的網(wǎng)卡設(shè)備號(hào)
    virtual_ipaddress {
        192.168.61.100 dev eth1
    }

    #設(shè)置的檢查腳本
    #關(guān)聯(lián)上方的“vrrp_script chknginx”
    track_script {
        chknginx
    }
}

原來(lái)的主節(jié)點(diǎn)設(shè)置更改完成。

5.2、原來(lái)備份節(jié)點(diǎn)的配置改動(dòng)

加入“非搶占”模式的關(guān)鍵字、更改一個(gè)確定的優(yōu)先級(jí),設(shè)置檢查失敗后優(yōu)先級(jí)的遞減量,就行了。

6、后文介紹

這是我8月份的首篇文章,后文我們將介紹LVS + Keepalived + Nginx的安裝和配置方式。注意,LVS被Keepalived后,就沒(méi)有必要在對(duì)Nginx做Keepalived了。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲精品成人午夜久久| 99亚洲综合精品成人网色播 | 99久久国产精品免费| 亚洲精品国产第一区二区多人| 一本久道久久综合中文字幕| 亚洲男人天堂成人在线视频| 亚洲欧美日韩国产综合在线| 国产成人精品久久二区二区| 空之色水之色在线播放| 91麻豆视频国产一区二区| 国产又大又猛又粗又长又爽| 日韩欧美中文字幕av| 亚洲精品黄色片中文字幕 | 日韩在线视频精品中文字幕| 欧美一区二区黑人在线| 亚洲精品福利视频你懂的| 久久国产青偷人人妻潘金莲| 国产精品伦一区二区三区四季| 国产内射一级二级三级| 黑色丝袜脚足国产一区二区| 日本人妻丰满熟妇久久| 日韩专区欧美中文字幕| 精品少妇人妻一区二区三区| 国内尹人香蕉综合在线| 亚洲一区二区三区三州| 久久一区内射污污内射亚洲| 久久永久免费一区二区| 一区二区三区亚洲天堂| 国产日韩精品激情在线观看| 欧美大黄片在线免费观看| 久久热九九这里只有精品| 国产精品涩涩成人一区二区三区| 国产一区二区精品丝袜| 国产日韩在线一二三区| 久热青青草视频在线观看| 99在线视频精品免费播放| 日本午夜福利视频免费观看| 亚洲最新中文字幕一区| 亚洲最新av在线观看| 国产精品午夜一区二区三区| 亚洲丁香婷婷久久一区|