keepalived-1.2.9集羣的安裝及配置

最後更新於2013-11-19 17:03:40

說明:

一、目        的:本文實現的Linux集羣是基於Keepalived-1.2.9軟件實現,
二、難        點:實現虛擬IP(VIP)自動切換的同時,還要同時實現虛擬MAC地址(VMAC)的切換,即無論集羣中的Host如何切換,對外訪問的IP和MAC始終不變

三、適用環境:當對外路由或交換機綁定主機MAC時適用

四、整合資源: nginx-1.2.9

五、說        明:若無須對外綁定MAC地址,則大可簡化如下配置
 
1. 環境及軟件:
  1) 系統:Debian6  amd64
  2) 內核:linux 3.2.0-0.bpo.4-amd64
  3) 軟件:keepalived-1.2.9   nginx-1.2.9
 
2. 網卡配置說明:
   MASTER設備IP: eth0: 10.10.1.2/24  
   BACKUP設備IP: eth0: 10.10.1.3/24 
   VIP: 192.168.1.10/24
 

3. nginx安裝步驟:

    參見我的另一篇文件《Nginx的安裝與配置》

4. keepalived安裝步驟:

  1)升級當前Debian系統內核linux 2.6.32(升級內核的原因是因爲我測試時總是出問題,keepalived官方文檔要求有內核的patch,不過沒看懂,索性升級爲最新版本)
     a) 修改Debian源文件/etc/apt/sources.list,添加一個向後兼容的源(源地址如下)
          deb http://ftp.cn.debian.org/debian-backports squeeze-backports main contrib non-free
        
     b) 更新Debian源文件關聯並升級系統內核至3.2.0(如下標記的linux內核包版本隨着時間的推移可能會有所變化,可通過如下命令進行查詢:aptitude search linux-*)
        # aptitude update
        # aptitude -t squeeze-backports install linux-image-3.2.0-0.bpo.4-amd64
        如果編譯NVDIA的官方驅動的話,還要裝:

        # aptitude -t squeeze-backports install linux-headers-3.2.0.bpo.4-amd64


  2) 安裝keepalived-1.2.9
     a) 首先要安裝keepalived所依賴的組件
        # aptitude install make gcc libpopt-dev libnl-dev libcurl4-openssl-dev


     b) 將keepalived-1.2.9.tar.gz文件拷貝到/usr/local/soft下,解壓,編譯並安裝到/usr/local/keepalived

        # mkdir /usr/local/soft
        通過ftp將文件拷貝至/usr/local/soft
        # cd /usr/local/soft
        # tar zxvf keepalived-1.2.9.tar.gz
        # cd keepalived-1.2.9
        # ./configure --prefix=/usr/local/keepalived
        # make && make install


     c) 重置keepalived相關文件,以便開機自動啓動

        # cp /usr/local/keepalived/sbin/keepalived /usr/sbin
        # mkdir /etc/sysconfig
        # cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig
        # cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
      d) 修改keepalived啓動腳本
        # nano /etc/init.d/keepalived
            修改/etc/init.d/keepalived文件,部分片段如下(藍色標記爲註釋內容,紅色標記爲修改內容):
                    ……
            #. /etc/rc.d/init.d/functions
            . /lib/lsb/init-functions
            # Source configuration file (we set KEEPALIVED_OPTIONS there)
            . /etc/sysconfig/keepalived
            RETVAL=0
            prog="keepalived"
            start() {
                    echo -n $"Starting $prog: "
                     # keepalived ${KEEPALIVED_OPTIONS}
                     keepalived -D
                     RETVAL=$?
                     echo
                     [ $RETVAL -eq 0 ] && touch  /var/lock/$prog
            }
            stop() {
                     echo -n $"Stopping $prog: "
                     killproc keepalived
                     RETVAL=$?
                     echo
                     [ $RETVAL -eq 0 ] && rm -f  /var/lock/$prog
             }
             ……
              condrestart)
              if [ -f /var/lock/$prog ]; then
                          stop
                          start
              fi
              ;;
             ……
       e) 在/etc/keepalived下創建keepalived配置文件keepalived.conf
        # mkdir /etc/keepalived
        # nano /etc/keepalived/keepalived.conf
         global_defs {
            notification_email {
                [email protected]             
            }
            notification_email_from [email protected]
            smtp_server 192.168.1.5
            smtp_connect_timeout 30
            router_id  LVS_DEVEL_11  #與backup配置不相同的任意合法字符串
        }
        vrrp_script chk_http_port {
           script "/data/checkNginx.sh"       #監控腳本
           interval 2                                         #監控腳本檢測週期
           weight 2                                          #目前搞不清楚
        }
        vrrp_instance VI_1 {
            state MASTER                 #backup機器配置爲BACKUP
            interface eth0                  #綁定的網卡名稱
            virtual_router_id 250      #必須與backup機器配置相同
            use_vmac                        #名字可爲任意合法字符串(默認字符串 vrrp.${virtual_router_id} 此處默認使用vrrp.250)
            priority 200                       #優先級,要比backup機器高至少50
            advert_int 1
            authentication {
               auth_type PASS           #授權類型,必須與backup相同
               auth_pass 1111          #授權密碼,必須與backup相同

            }

           track_script {
                 chk_http_port              #執行監控的服務名稱
           }

            virtual_ipaddress {
                192.168.1.10/24          #虛擬ip地址,必須與backup相同

            }

            nopreempt                        #不搶佔IP,即當keepalived發生切換後,如果master服務器恢復正常後,backup不會自動重新切換回master,

                                                        #這樣避免來回切換帶來的系統開銷,同時也避免了IP切換帶來的系統不穩定性

        }

3) 監控腳本/data/checkNginx.sh內容

     #!/bin/bash
     # 監控腳本功能概述:首先檢查進程中的nginx進程數目,如果不存在(即爲0),則表示nginx未開啓,然後開啓nginx,3秒後重新檢查nginx進程數,若仍爲0,

     # 則表示nginx無法正常啓動,此時強制停止keepalived進程,讓虛擬ip切換到backup服務器上

     A=`ps -C nginx --no-header |wc -l`                                  ## 查看是否有 nginx進程 把值賦給變量A(注意:這裏不是單引號,而是主鍵盤數字1左邊的鍵"點")
     if [ $A -eq 0 ];then                                                                ## 如果沒有nginx進程,即值爲零
             /usr/local/nginx/sbin/nginx
            sleep 3
            if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
                pkill keepalived                                                        ## 則結束 keepalived 進程,使得服務器切換到BACKUP服務器上
            fi
     fi 

    

4) 啓動keepalived
     # invoke-rc.d keepalived start
5) 測試keepalived
     a)  MASTER啓動時,查看日誌/var/log/messages,顯示keepalived進入MASTER狀態同理,BACKUP機器將進入BACKUP狀態 
     b)  當MASTER機器down掉時,查看BACKUP機器日誌,顯示keepalived進入MASTER,當MASTER重新啓動時,MASTER機器進入MASTER狀態而BACKUP機器keepalived重新進入BACKUP狀態,此時表示keepalived安裝測試已成功!
 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章