Nginx (三) 使用Keepalived搭建高可用服務

Nginx能夠實現高併發反向代理,實現負載均衡,可是有個問題就是Nginx是單點的。若是Nginx故障,則整個服務將會處於不可用狀態。因此咱們就須要想辦法讓nginx高可用,即便一個Nginx宕機,還能夠有其餘的Nginx來支持服務。如今咱們經過Keepalived的就能夠實現多臺Nginx做爲主備機,當主機宕機時,可讓備機切換成主機繼續提供服務,對整個用戶服務幾乎沒有影響。html

1. Keepalived介紹

Keepalived是一個基於VRRP協議來實現的服務高可用方案,能夠利用其來避免IP單點故障,相似的工具還有heartbeat、corosync、pacemaker。可是它通常不會單獨出現,而是與其它負載均衡技術(如lvs、haproxy、nginx)一塊兒工做來達到集羣的高可用。linux

2. keepalived 安裝(同Nginx安裝相似)

      a. 下載安裝包:nginx

       http://www.keepalived.org/download.htmlbash

      b. 解壓 keepalived-1.2.18.tar.gz(我下載到Windows下,使用ftp上傳到linux虛擬機上,能夠直接在linux上使用wget url 進行下載),解壓到/usr/local目錄下併發

           tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/  負載均衡

      c. 安裝依賴包高併發

    yum -y install openssl,openssl-devel工具

      d. 檢查環境,設置安裝目錄ui

    cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalivedurl

         

    如上說明環境檢查經過。

      e.  安裝: make && make install

     

3. 將安裝的keepalived配置成服務,而且開機啓動:

  a. 由於沒有使用keepalived的默認安裝路徑(默認路徑:/usr/local),安裝完成以後,須要作一些修改工做,首先建立文件夾,將keepalived配置文件進行復制:

    mkdir /etc/keepalived

    cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

  b. 而後複製keepalived腳本文件:

    cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

    cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

    ln -s /usr/local/sbin/keepalived /usr/sbin/

    ln -s /usr/local/keepalived/sbin/keepalived /sbin/

      c. 能夠設置開機啓動:

    chkconfig keepalived on;

到此咱們安裝完畢,開機則keepalived就已經啓動!

4. 配置主備機keepalived配置文件:keepalived.conf

 

   a. master配置文件以下:

! Configuration File for keepalived

global_defs {
    router_id aries114 ##真實主機名或者ip
}

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" ##要執行的檢查腳本
    interval 2 ##keepalived多久執行一次
    weight -20 ##權重-20
}

vrrp_instance VI_1 {
    state MASTER ##主備機配置
    interface eth0  ##默認使用網卡
    virtual_router_id 88  ##虛擬id號,主備機配置一致
    mcast_src_ip 192.168.137.114 ##真實主機ip
    Nopreempt  ##非搶佔式
    priority 100  ##權重優先級
    advert_int 1  ##組播信息發送間隔,倆個節點必須配置一致,默認1s

    authentication {
        auth_type PASS
        auth_pass 1111 ##驗證密碼,主備機一致
    }

    track_script {
        chk_nginx
    }

    virtual_ipaddress {
        192.168.137.110 ##虛擬ip(vip)能夠配置多個
    }
}

  b. backup配置文件:

! Configuration File for keepalived

global_defs {
    router_id aries111
}

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 88
    mcast_src_ip 192.168.137.111
    priority 90
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass 1111
    }

    track_script {
        chk_nginx
    }

    virtual_ipaddress {
        192.168.137.110
    }
}

不一樣點已用紅色標出: 

  router_id 主機名或者ip

  mcast_src_ip 真實主機ip

  state 表示主備機master表示主BACKUP表示備,兩個也能夠都設置成backup,則兩個搶佔主機服務,一個宕機另外一個就作爲主機。

  virtual_ipaddress 虛擬出來的主機ip , 可配置多個;

  script "/etc/keepalived/nginx_check.sh" 這個是keepalived要執行的檢查Nginx服務是否正常的腳本,須要咱們去編寫。

 c. 編寫檢查腳本,命名nginx_check.sh,而後置於"/etc/keepalived/"目錄下 

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ]; then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

  以上腳本的做用是,檢查是否有nginx服務進程,若是有則執行結束不作處理;若是沒有,則啓動Nginx服務,間隔兩秒鐘再去檢查是否有Nginx服務,若是沒有就殺死此keepalived進程,若是有

則不作處理。

  到此就經過keepalived配置完了Nginx的高可用服務。

使用 ip a 查看主節點則有一個虛擬IP:

客戶機訪問: 192.168.137.110 此時 192.168.137.114 提供服務;若是讓192.168.137.114宕機,則vip則會浮動到備機 192.168.137.111上,有192.168.137.111提供服務。

以下是一個訪問模型圖: 

                

 

 參考材料:

  http://blog.csdn.net/hechurui/article/details/51065467

  白鶴翔老師的Nginx教學視頻。

相關文章
相關標籤/搜索