Nginx+Keepalived 實現高可用

Keepalived 是一個高性能的 服務器高可用 或 熱備解決方案,Keepalived主要來防止服務器單點故障的問題,能夠經過其與Nginx的配合來實現web服務端的高可用。html

Keepalived 以VRRP協議爲實現基礎,用VRRP協議來實現高可用性(HA)。mysql

VRRP(Virtual Router Redundancy Protocol)協議是用於實現路由器冗餘的協議,VRRP協議將兩臺或多臺路由器設備虛擬成一個設備,對外提供虛擬路由器IP(一個或者多個),如圖:linux

 

安裝Keepalivednginx

準備環境web

準備兩臺 linux虛擬機,這裏是centos 6.4redis

192.168.85.3  sql

192.168.85.4vim

如今兩臺機器上安裝好nginx,配置就用默認的就行(以前博文有寫安裝nginx過程)。centos

接下來兩臺linux作一樣操做。bash

第一步

版本: keepalived-1.2.18.tar.gz

Keepalived 下載地址:http://www.keepalived.org/download.html

下載Keepalived ,並上傳到準備好的兩臺虛擬機上,這裏上傳到了 /lhy/software 

解壓安裝到/usr/local下:tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/

 

安裝OpenSSL:yum install -y openssl openssl-devel 

進入到/usr/local 下,執行命令:cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived

而後在/usr/local/keepalived-1.2.18下安裝和編譯:make && make install

第二步:

keepalived安裝成Linux系統服務,由於沒有使用keepalived的默認安裝路徑(默認路徑:/usr/local,安裝完成以後,須要作一些修改工做:

首先建立文件夾,將keepalived配置文件進行復制:

mkdir /etc/keepalived

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

而後複製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/                                            (創建軟鏈接)

能夠設置開機啓動:chkconfig keepalived on,到此咱們安裝完畢!

=================================================================

軟連接:軟連接,以路徑的形式存在。相似於Windows操做系統中的快捷方式。這是linux中一個很是重要命令,請你們必定要熟悉。它的功能是爲某一個文件在另一個位置創建一個同不的連接,這個命令最經常使用的參數是-s,具體用法是:ln -s 源文件 目標文件。 
當 咱們須要在不一樣的目錄,用到相同的文件時,咱們不須要在每個須要的目錄下都放一個必須相同的文件,咱們只要在某個固定的目錄,放上該文件,而後在其它的 目錄下用ln命令連接(link)它就能夠,沒必要重複的佔用磁盤空間。
例如:ln -s /bin/less /usr/local/bin/less 

-s 是代號(symbolic)的意思。 
這 裏有兩點要注意:第一,ln命令會保持每一處連接文件的同步性,也就是說,不論你改動了哪一處,其它的文件都會發生相同的變化;第二,ln的連接又軟連接 和硬連接兩種,軟連接就是ln -s ** **,它只會在你選定的位置上生成一個文件的鏡像,不會佔用磁盤空間,硬連接ln ** **,沒有參數-s, 它會在你選定的位置上生成一個和源文件大小相同的文件,不管是軟連接仍是硬連接,文件都保持同步變化。 
若是你用ls察看一個目錄時,發現有的文件後面有一個@的符號,那就是一個用ln命令生成的文件,用ls -l命令去察看,就能夠看到顯示的link的路徑了。

=================================================================

執行命令 service keepalived start ,若是看到能夠以下啓動,說明系統服務配置成功。

也能夠關閉和重啓:  service keepalived stop/restart

第三步、對配置文件進行修改:vim /etc/keepalived/keepalived.conf

 Keepalived 主要做用有兩點,1,虛擬一個VIP出來,讓兩個Linux的入口統一。2,寫一個腳本,作主備切換的時候的一個校驗,好比服務掛了怎麼辦。

兩個文件:

1,keepalived.conf ,覆蓋 /etc/keepalived下的keepalived.conf 

! Configuration File for keepalived

global_defs {
   router_id edu-proxy-01
}

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state MASTER
    interface eth1
    virtual_router_id 51
    mcast_src_ip 192.168.1.51
    priority 100
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    track_script {
        chk_nginx
    }

    virtual_ipaddress {
        192.168.1.50
    }
}

+++++++++++++++++++++++++++++++++++++ 分割線 ++++++++++++++++++++++++++++++++++++++++++++++++++++++

keepalived.conf配置文件說明:

A) Master    

 

! Configuration File for keepalived

global_defs {
   router_id lihaoyang ##標識節點的字符串,一般爲hostname
}
## keepalived 會定時執行腳本而且對腳本的執行結果進行分析,動態調整vrrp_instance的優先級。
##這裏的權重weight 是與下面的優先級priority有關,若是執行了一次檢查腳本成功,則權重會-20,也就是由100 - 20 變成了80,Master 的優先級爲80 就低於了Backup的優先級90,那麼會進行自動的主備切換。
#若是腳本執行結果爲0而且weight配置的值大於0,則優先級會相應增長。 #若是腳本執行結果不爲0 而且weight配置的值小於0,則優先級會相應減小。 vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" ##執行腳本位置 interval 2 ##檢測時間間隔 weight -20 ## 若是條件成立則權重減20(-20) } ## 定義虛擬路由 VI_1爲自定義標識。 vrrp_instance VI_1 { state MASTER ## 主節點爲MASTER,備份節點爲BACKUP ## 綁定虛擬IP的網絡接口(網卡),與本機IP地址所在的網絡接口相同(我這裏是eth0,經過ip a命令可查看 interface eth6 virtual_router_id 3 ## 虛擬路由ID號,主備節點必須同樣 mcast_src_ip 192.168.85.3 ## 本機ip地址 priority 100 ##優先級配置(0-254的值) Nopreempt ## advert_int 1 ## 組播信息發送間隔,倆個節點必須配置一致,默認1s authentication { auth_type PASS auth_pass bhz ## 真實生產環境下對密碼進行匹配,MASTER和Backup要一致 } track_script { chk_nginx } virtual_ipaddress { 192.168.85.10 ## 虛擬ip(vip),能夠指定多個 } }

 注意:virtual_router_id 3 ## 虛擬路由ID號,主備節點必須同樣,才能保證同一時刻只有一個節點有虛擬IP。

B)Backup

 

! Configuration File for keepalived

global_defs {
   router_id bhz006
}

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 3
    mcast_src_ip 192.168.85.4
    priority 90 ##優先級配置
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass bhz
    }

    track_script {
        chk_nginx
    }

    virtual_ipaddress {
        192.168.85.10
    }
}

 

2,nginx_check.sh  腳本

#!/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進程個數,若是是0,則啓動nginx,若是啓動後,nginx進程個數仍是0,就殺死 keepalived ,這樣就實現了 主備切換,keepalived.conf 中配置的2秒執行一次nginx_check.sh  腳本,因此當本節點的 nginx恢復後,就能

+++++++++++++++++++++++++++++++++++++ 分割線 ++++++++++++++++++++++++++++++++++++++++++++++++++++++

第四步 :

masterkeepalived 配置文件 copymaster機器(172)的 /etc/keepalived/ 文件夾下,

在把backupkeepalived配置文件copybackup機器(173)的 /etc/keepalived/ 文件夾下,

最後把nginx_check.sh腳本分別copy到兩臺機器的 /etc/keepalived/文件夾下。

 第五步:

nginx_check.sh腳本受權。賦予可執行權限:chmod +x /etc/keepalived/nginx_check.sh   。

第六步:

啓動2臺機器的nginx以後。咱們啓動兩臺機器的keepalived。

 /usr/local/nginx/sbin/nginx

  service keepalived start

  ps -ef | grep nginx

  ps -ef | grep keepalived

  能夠進行測試,首先看一下倆臺機器的ip a 命令下 都會出現一個虛擬ip,咱們能夠停掉一個機器的keepalived,而後測試,命令:service keepalived stop。結果發現當前停掉的機器已經不可用,keepalived會自動切換到另外一臺機器上。

192.168.85.3 機器 ip a:

192.168.85.4 機器 ip a :

 

此時訪問 虛擬出來的IP 192.168.85.10,結果訪問到的是master節點:

a) 測試 keepalived 掛了,實現切換

執行命令service keepalived stop 關閉192.168.85.3的keepalived:

 

執行命名 ip a 查看虛擬IP是否存在:

發現中止了keepalived後,192.168.85.3 的虛擬IP已經不存在。此時已虛擬IP經漂移到了備用節點

 

繼續訪問虛擬IP 192.168.85.10,能夠看到,keepalived 正在啓用備用節點:

稍等片刻,能夠看到備用節點已經啓用:

b)測試在nginx出現問題的狀況下,實現切換

 

還把192.168.85.3 的keepalived啓動:service keepalived start,ip a查看虛擬IP

 

這個時候咱們只須要把nginx的配置文件進行修改,讓其變得不可用(如 隨便去掉一個分號)vim /usr/local/nginx/conf/nginx.conf  修改nginx配置文件,保存。kill 強殺掉nginx進程 

從新加載nginx配置文件,已經報錯:

ip a查看虛擬IP,已經不存在:

訪問 虛擬IP 192.168.85.10,能夠看到,keepalived正在切換到備用節點:

稍等片刻,即會切換到備用節點 192.168.85.4 :

 將nginx修復後,重啓nginx,service  keekalived start重啓keepalived,便可恢復到master節點。

 

keepalived 還能夠用於redis、mysql等等全部服務的高可用

相關文章
相關標籤/搜索