天天看點

keepalived+nginx實作雙機熱備

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

本文目錄:

[一]、實驗環境介紹

[二]、伺服器層的雙機熱備(比如伺服器當機、keepalived宕、網絡不通)

[三]、應用層(web)的雙機熱備(比如web應用端口不通、 nginx程序被意外kill )

    1.1、軟體資訊:

S-A 192.168.8.183 centos5 keepalived nginx

S-B 192.168.8.150 centos5 keepalived nginx

VirtualIP (虛拟IP):192.168.8.191

   1.2、keepalived 标準的安裝步驟:

安裝依賴

yum -y install gcc gcc+ gcc-c++

yum install popt-devel openssl openssl-devel libssl-dev libnl-devel popt-devel

安裝核心

yum -y install kernel kernel-devel

目前kernel代碼建立連接配接 ln -s /usr/src/kerners/2.6....../ /usr/src/linux

安裝keepalived

# tar -zxvf keepalived-1.2.2.tar.gz  

# cd keepalived-1.2.2  

# ./configure  

# make  

# make install   

   拷貝相應的檔案

cp /usr/local/sbin/keepalived /usr/sbin/ 

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

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

cp -r /usr/local/etc/keepalived/ /etc/  

   1.3、nginx的安裝和keepalived類似

     修改nginx.conf 中監聽端口80->8088:

listen       8088;  

server_name  localhost;  

    修改/usr/local/nginx/html/index.html的内容:

    192.168.8.183

<html>  

<head>  

<title>Welcome to nginx!</title>  

</head>  

<body bgcolor="white" text="black">  

<center><h1>Welcome to nginx! 192.168.8.183</h1></center>  

</body>  

</html>  

   192.168.8.150:

<center><h1>Welcome to nginx! 192.168.8.150</h1></center>  

   兩台server(S-A,S-B)都需要安裝這兩款軟體。

[二]、伺服器層的雙機熱備(比如伺服器當機、keepalived宕了)

    2.1、測試要求:

       主機當機、keepalived宕了、網絡不通時,備機能自動接管,不影響VIP:192.168.8.191的通路

    2.2、Master(S-A 192.168.8.181)配置檔案/etc/keepalived/keepalived.conf:

! Configuration File for keepalived  

global_defs {  

   notification_email {  

     #[email protected]  

   }  

   #notification_email_from [email protected]  

   #smtp_server 127.0.0.1  

   #smtp_connect_timeout 30  

   router_id LVS_DEVEL  

}  

vrrp_instance VI_1 {  

    state MASTER  

    interface eth0  

    virtual_router_id 51  

    priority 100  

    advert_int 1  

    authentication {  

        auth_type PASS  

        auth_pass 1111  

    }  

    virtual_ipaddress {  

        192.168.8.191  

    2.3、Backup(S-B 192.168.8.150)配置資訊/etc/keepalived/keepalived.conf:

    state BACKUP  

    priority 99  

  Tips:

state   參數值:主的是MASTER、備用的是BACKUP

priority 參數值: MASTER > BACKUP

virtual_router_id: 參數值要一樣

   2.4、測試:

     兩台測試機S-A、S-B均啟動keepalived和nginx

     2.4.1、驗證nginx啟動正常:

    通路 master : http://192.168.8.183:8088/ 

    通路 backup: http://192.168.8.150:8088/

     2.4.2、檢視keepalived的日志資訊:

     master :192.168.8.183 

    backup:192.168.8.150

     2.4.3、浏覽器打開虛拟ip通路:http://192.168.8.191:8088/ 

    2.4.4、kill 192.168.8.181(master) 的keepalived程序,日志資訊如下:

keepalived+nginx實作雙機熱備

     backup:192.168.8.150 

keepalived+nginx實作雙機熱備

    2.4.5、浏覽器打開虛拟ip通路:http://192.168.8.191:8088/

      2.4.6、再次啟動192.168.8.181的keepalived程序,192.168.8.181會自動接管成為master,192.168.8.150自動轉為backup,從測試結果看,備機能成功接管,已經實作了熱備。

 Tips: 如果我們停掉master上的nginx程序,你會發現此時應用通路就失敗了,很顯然這不是我們希望看到的結果,那如何實作web應用的熱備呢,在下一節中我們将詳細講述。

[三]、應用層(web)的雙機熱備(比如nginx程序被意外kill、web端口不通)

      3.1.主要是利用keepalived的track_script檢測腳本的原理實作的。

      3.2.配置檔案的修改

        3.2.1、Master(S-A 192.168.8.181)配置檔案/etc/keepalived/keepalived.conf:

/etc/keepalived/keepalived.conf  

vrrp_script chk_http_port {  

        script "</dev/tcp/127.0.0.1/8088"  

        interval 1  

        weight -2  

    track_script {  

        chk_http_port  

        3.2.2、Backup(S-B 192.168.8.150)配置檔案/etc/keepalived/keepalived.conf:

        3.2.3、注意點(非常重要)

             1)、為什麼主備的參數state都是MASTER,對的你沒有看錯确實要都設定成一樣的,不然并不能實作我們想要的VIP漂浮的效果,我測試很久才發現的.state都設定成MASTER後,會根據priority的值大小競争來決定誰是真正的MASTER,腳本檢測也是在失敗的時候會把權重減去相應的值,比如原來master(181)的priority=100,如果腳本檢測到端口8088無法連接配接,就會priority-2=98,< S-B(150)的priority(99),此時 S-B(150) 将競争成為master,這樣就實作了web應用的熱備。

           2)、配置檔案格式一定要注意,比如:track_script   {,在“track_script”和“{”之間一定要加空格 ,本來測試時少了個空格,一直無法運作檢測腳本,調試了很久,非常郁悶

       3.3、測試過程和上面的過程基本一緻。

本文轉自 yntmdr 51CTO部落格,原文連結:http://blog.51cto.com/yntmdr/1590387,如需轉載請自行聯系原作者