keepalived實現雙機熱備

原文地址:http://sjsky.iteye.com/blog/1156403


blog遷移至 :http://www.micmiu.com


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

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

       截止目前最新版本1.2.2 附件提供下載:keepalived-1.2.2.tar.gz

       keepalived 中文權威指南:KEEPALIVED權威指南_中文_.pdf

本文目錄:

  • [一]、實驗環境介紹

  • [二]、服務器層的雙機熱備(比如服務器宕機、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 標準的安裝步驟:

Shell代碼  收藏代碼
  1. # tar -zxvf keepalived-1.2.2.tar.gz  

  2. # cd keepalived-1.2.2

  3. # ./configure  

  4. # make  

  5. # make install  

  6. # mkdir /etc/keepalived/  

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


  1.3、nginx的安裝和keepalived類似

    不熟悉的可參考:nginx安裝及負載均衡配置 (http://sjsky.iteye.com/blog/1156195)


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


Conf代碼  收藏代碼
  1. listen       8088;  

  2. server_name  localhost;  

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

   192.168.8.183

Html代碼  收藏代碼
  1. <html>

  2. <head>

  3. <title>Welcome to nginx!</title>

  4. </head>

  5. <bodybgcolor="white"text="black">

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

  7. </body>

  8. </html>

  192.168.8.150:

Html代碼  收藏代碼
  1. <html>

  2. <head>

  3. <title>Welcome to nginx!</title>

  4. </head>

  5. <bodybgcolor="white"text="black">

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

  7. </body>

  8. </html>


  兩臺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:

Conf代碼  收藏代碼
  1. ! Configuration File for keepalived  

  2. global_defs {  

  3.   notification_email {  

  4.     #[email protected]  

  5.   }  

  6.   #notification_email_from [email protected]  

  7.   #smtp_server 127.0.0.1

  8.   #smtp_connect_timeout 30

  9.   router_id LVS_DEVEL  

  10. }  

  11. vrrp_instance VI_1 {  

  12.    state MASTER  

  13.    interface eth0  

  14.    virtual_router_id 51

  15.    priority 100

  16.    advert_int 1

  17.    authentication {  

  18.        auth_type PASS  

  19.        auth_pass 1111

  20.    }  

  21.    virtual_ipaddress {  

  22. 192.168.8.191

  23.    }  

  24. }  


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

Conf代碼  收藏代碼
  1. ! Configuration File for keepalived  

  2. global_defs {  

  3.   notification_email {  

  4.     #[email protected]  

  5.   }  

  6.   #notification_email_from [email protected]  

  7.   #smtp_server 127.0.0.1

  8.   #smtp_connect_timeout 30

  9.   router_id LVS_DEVEL  

  10. }  

  11. vrrp_instance VI_1 {  

  12.    state BACKUP  

  13.    interface eth0  

  14.    virtual_router_id 51

  15.    priority 99

  16.    advert_int 1

  17.    authentication {  

  18.        auth_type PASS  

  19.        auth_pass 1111

  20.    }  

  21.    virtual_ipaddress {  

  22. 192.168.8.191

  23.    }  

  24. }  

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/
54cad4a6-e3f0-397d-81b7-6d609b91274f.png


訪問 backup: http://192.168.8.150:8088/

282d6322-2a87-3bc0-9226-52326097f3fe.png


    2.4.2、查看keepalived的日誌信息如下:

master :192.168.8.183
43f45253-1b43-3a12-b53e-a3a9f3dfe7b3.png


backup:192.168.8.150

5b8a8579-6437-3910-bc88-304338774c99.png


2.4.3、瀏覽器打開虛擬ip訪問:http://192.168.8.191:8088/
80857133-751d-3c85-91e0-7449f349e632.png


   2.4.4、kill 192.168.8.181(master) 的keepalived進程,日誌信息如下:

master :192.168.8.183
9e13bbbe-bffb-3755-b33f-13fa8f33fae7.png

backup:192.168.8.150
9192d8fe-f935-319d-a798-7a936dcd531f.png


2.4.5、瀏覽器打開虛擬ip訪問:http://192.168.8.191:8088/

7e18f75e-4961-3277-8695-b974c67d273b.png


     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:

Java代碼  收藏代碼
  1. /etc/keepalived/keepalived.conf  

  2. ! Configuration File for keepalived  

  3. global_defs {  

  4.   notification_email {  

  5.     #admin@michael-demo.com  

  6.   }  

  7.   #notification_email_from admin@michael-demo.com  

  8.   #smtp_server 127.0.0.1

  9.   #smtp_connect_timeout 30

  10.   router_id LVS_DEVEL  

  11. }  

  12. vrrp_script chk_http_port {  

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

  14.        interval 1

  15.        weight -2

  16. }  

  17. vrrp_instance VI_1 {  

  18.    state MASTER  

  19. interface eth0  

  20.    virtual_router_id 51

  21.    priority 100

  22.    advert_int 1

  23.    authentication {  

  24.        auth_type PASS  

  25.        auth_pass 1111

  26.    }  

  27.    virtual_ipaddress {  

  28. 192.168.8.191

  29.    }  

  30.    track_script {  

  31.        chk_http_port  

  32.    }  

  33. }  

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


Java代碼  收藏代碼
  1. /etc/keepalived/keepalived.conf  

  2. ! Configuration File for keepalived  

  3. global_defs {  

  4.   notification_email {  

  5.     #admin@michael-demo.com  

  6.   }  

  7.   #notification_email_from admin@michael-demo.com  

  8.   #smtp_server 127.0.0.1

  9.   #smtp_connect_timeout 30

  10.   router_id LVS_DEVEL  

  11. }  

  12. vrrp_script chk_http_port {  

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

  14.        interval 1

  15.        weight -2

  16. }  

  17. vrrp_instance VI_1 {  

  18.    state MASTER  

  19. interface eth0  

  20.    virtual_router_id 51

  21.    priority 99

  22.    advert_int 1

  23.    authentication {  

  24.        auth_type PASS  

  25.        auth_pass 1111

  26.    }  

  27.    virtual_ipaddress {  

  28. 192.168.8.191

  29.    }  

  30.    track_script {  

  31.        chk_http_port  

  32.    }  

  33. }  

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、測試過程和上面的過程基本一致。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章