一步步教你爲LVS中的Director實現高可用集羣

       Director對於LVS來說,是重中之重,所有對服務的請求都要經過它 向他身後提供服務的集羣進行轉發,但它也是LVS高負載均衡集羣的不穩定因素,如果Director主機宕機,後方的服務集羣也就不能夠提供服務了,這是堅決不允許出現的情況,因此我們可以通過爲Director提供高可用集羣服務來保證當一個Director宕機之後,還有其它的Director可以替代提供服務,知道宕機的Director重新恢復。
        我們使用高可用集羣解決方案之一 ——Heartbeat來實現這個目的
        我們先來考慮一個問題,當Director的主節點宕機之後,必須要將資源轉移到備節點上,否則備節點也只是擺設,並不能替代宕機的主節點來完成Director的工作。關鍵就在這個資源轉移的方法上。
         Heartbeat爲LVS中的Director實現高可用集羣量身定做了套解決方案,我們只需要在Heartbeat的幾個配置文件中進行簡單的配置,我們所需要的目的都統統能夠實現,不僅如此,它自身還具備了幫我們檢測後方服務集羣中主機服務狀態的功能,簡直讓我們喜出望外,下面我們就通過一個簡單的實驗來闡明這個觀點。

         實驗拓撲如圖:
         2011-09-10 18-32-13
        我們要實現的LVS的類型爲DR,即直接路由
        route爲連接外網的路由器,switch爲內網中的交換機,RS1、RS2爲提供web服務的集羣,直接和交換機相連,ND1、ND2爲LVS中的兩個Director節點,我們要對這連個Director節點實現高可用集羣服務,兩個Director和交換機直接相連之外,兩個節點之間還需要直接連接進行心跳等基本信息的傳遞。
        每個有標記的塊狀物爲網卡,上面是編號,在連個ND節點之間有一個被稱爲資源一部分的VIP在哪個節點上是不固定的,外網的用戶也是通過這個VIP來訪問我們的web服務的。

         開始配置:  設定VIP爲192.168.0.85/24

一、我們先來RS1和RS2讓其稱爲一個web服務的集羣
      
     1、對RS1的配置

      (1)、對realserver配置內核參數:
                  先來解釋一下修改內核參數的原因,因爲在DR模型中RS1、RS2在lo:0上都配置了VIP的地址,是爲了在數據包響應用戶的時候源地址爲用戶訪問的VIP地址,但是在數據包進入路由器之後,在我們的內網中有多個VIP地址,路由器將不能將其轉發到應該得到數據包的ND上,爲了避免這種情況出現,我們就修改內核參數來讓RS上的VIP網卡不對路由器的產生響應即可。
                 echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
                 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
                 echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
                 echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

      (2)、爲RS1配置虛擬的VIP地址(是爲了實現在數據包返回用戶的時候源地址爲用戶訪問的地址)
                 ifconfig lo:0 192.168.0.85 broadcast 192.168.0.85 netmask 255.255.255.255 up
                   爲RS1的eth0網卡添加地址
                 ifconfig eth0 192.168.0.206/24

      (3)、給realserver主機添加路由信息
                route add -host 192.168.0.85 dev lo:0  設定相應的數據包的源地址都爲這個地址

      (4)、爲RS1安裝web服務
                yum install php php-mbstring mysql mysql-server httpd php-mysql 
      (5)、爲實現結果爲web指定一個有其代號的網頁,並寫一個有ok的測試網頁
                echo RS1 > /var/www/html/index.html
                echo ok > /var/www/html/.ok.html

      (6)、測試httpd服務能否正常運行,測試結果如下:

 

 2011-09-10 19-04-52


      2、對RS2進行配置
          (1)、RS2的eth0端口配置
                   ifconfig eth0 192.168.0.207/24
          (2)、寫入網頁
                   echo RS2 > /var/www/html/index.html
           其他配置和RS1完全一樣,不再演示:
           對RS2的web服務進行驗證,結果如下:
            2011-09-10 19-11-07
         

二、對兩個Director節點進行配置:

      配置兩個Director節點,ND1爲node1,ND2爲node2

      1、給node1配置地址
       ifconfig eth0 192.168.0.202/24 
       ifconfig eth1 1.1.1.1
           給noid2配置地址
       ifconfig eth0 192.168.0.204/24 
       ifconfig eth1 1.1.1.2

     2、配置本地主機名稱解析

       在node1上
       vim /etc/hosts 添加如下內容
      192.168.0.202 node1.a.org
      192.168.0.204 node2.a.org

       對node1、node2的主機名進行相應的修改
       在node1上 
       hostname node1.a.org
       在node2上 
       hostname node2.a.org

    3、只有我們要多次在連個節點間拷貝文件,爲了省去繁瑣的密碼輸入,我們在兩個節點上進行如下配置

       在node1上
       ssh-keygen -t rsa
       ssh-copy-id -i .ssh/id_rsa.pub [email protected]
       在node2上 
       ssh-keygen -t rsa
       ssh-copy-id -i .ssh/id_rsa.pub [email protected]
       從此我們在兩個節點上拷貝文件就不需要輸入密碼了

  4、開始安裝集羣服務

    (1)、下載安裝包
        heartbeat-ldirectord-2.1.4-9.el5.i386.rpm
        perl-MailTools-1.77-1.el5.noarch.rpm
        heartbeat-2.1.4-9.el5.i386.rpm
        heartbeat-pils-2.1.4-10.el5.i386.rpm
        heartbeat-devel-2.1.4-9.el5.i386.rpm
        heartbeat-stonith-2.1.4-10.el5.i386.rpm
        heartbeat-gui-2.1.4-9.el5.i386.rpm 
        libnet-1.1.4-3.el5.i386.rpm
        創建一個目錄將所用的安裝包都放在這個目錄內
       mkdir node 
        將軟件包移動進目錄的命令我就不再說明了     

  (2)、安裝 這些軟件包,因爲他們之間有依賴關係,所以使用yum安裝

        cd node
        yum localinstall * --nogpgcheck –y

        前兩步需要在兩個節點上都進行同樣的操作

  (3)、將heartbeat的配置文件移動到/etc/下
        cd /usr/share/doc/hearbeat-2.1.4
        cp ha.cf  authkeys /etc/ha.d
        cd /usr/share/doc/heartbeat-ldirectord-2.1.4  
        cp   ldirectord.cf  /etc/ha.d/  

  (4)、編輯配置文件/etc/ha.d/ha.cf

        vim /etc/ha.d/ha.cf 進行如下修改 
        打開日誌 logfile /var/log/ha-log
        打開 udpport 694 兩節點用此端口發送心跳信息
        添加 bcast eth1 發送心跳信息的網卡
        添加定義節點 node node1.a.org
       node node2.a.org

   (5)、編輯配置文件/etc/ha.d/authkeys
        vim /etc/ha.d/authkeys 添加如下內容
        auth 2
        2 sha1 kfhslkdhfsk(md5加密後的字符串,想要得到這個字符串運行如下命令,在將結果粘貼即可 
       dd if=/dev/urandom bs=512 count=1 | md5sum)

       將此文件的權限改爲400
       chmod 400 authkeys

    (6)、編輯配置文件/etc/ha.d/ldirectord.cf
      修改結果如下:
      checktimeout=3   對後端的RS進行服務狀態檢測的超時時間
      checkinterval=1    每次一秒檢測一次
      autoreload=yes   
      logfile="/var/log/ldirectord.log"  開啓錯誤日誌
      quiescent=yes   

virtual=192.168.0.85:80   指定VIP地址
        real=192.168.206:80 gate 200     指定RS1的IP、服務端口、lvs的類型、權重(實際的大小爲*100)  
        real=192.168.207:80 gate 600   
        fallback=127.0.0.1:80 gate
        service=http      提供的服務
        request=".ok.html"    對RS進行狀態檢測是檢測的網頁
        receive="ok"               在網頁中搜索的關鍵字,只要找到這個關鍵字就認爲是服務正常
        scheduler=rr   LVS使用的調度算法
        protocol=tcp    使用的協議
        checktype=negotiate    檢測的類型
        checkport=80    檢測的端口
               

    (7)、將我們配置的這三個文件拷貝到node2上

        cd /etc/ha.d
        scp ha.cf authkeys ldirectord node2.a.org:/etc/ha.d

    (8)、啓動heartbeat
        在哪個節點上啓動第一個該服務,以後所有的這個服務必須在這個節點上啓動
        我們就在node1上啓動heartbeat服務
         /etc/init.d/heartbeat start 
        在node1上啓動node2的heartbeat服務
        ssh node2 --‘/etc/init.d/heartbeat start’
    (9)、在每個節點上都啓動ldirectord服務
         service ldirectord  start

      查看我們的Director高可用集羣是否正常啓動:
      執行命令:
      crm_mon
      可能剛開始看到的顯示爲:
      2011-09-10 19-39-32
       表示沒有啓動,但是別急多等一會,比較慢,我們過一會再看,如果看到顯示如下表示成功:
      2011-09-10 19-43-13
        圖片底部的信息表示Director的主節點爲ND1
      
      接下來我們在瀏覽器中輸入192.168.0.85進行測試,看能夠看到網頁,如果看到表示LVS的服務正常:
      2011-09-10 19-45-38
     

      我們將主節點的服務關閉,看資源是否成功流轉到ND2上
      在node1上執行  /etc/init.d/heartbeat stop

       至執行成功之後到node2上,在此查看資源狀態
        2011-09-10 19-50-40
        結果顯示,node1已經宕機,此時node2已經稱爲主節點

        我們再次驗證,Director高性能集羣能否提供LVS功能:
        繼續在瀏覽器中數據192.168.0.85
         2011-09-10 19-45-38
         結果顯示,RS集羣還能夠提供web服務,表示Director集羣依然能夠正常工作

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