輕鬆實現基於Heartbeat的高可用web服務集羣

       高可用集羣就是爲了保證某項服務能夠時時在線,我們可以通過幾個9來衡量一個高可用集羣提供服務的穩定性,例如5個9的高可用集羣必須保證服務一年在線的時間佔99.999%,也就是說一年的時間中僅允許服務電線不到6分鐘的時間,可見高可用集羣非同反響。
       下面我就給大家講解一下高可用性集羣的工作機制,由於只是爲了講明原理,在此處我們就假設一個集羣中之後兩個節點(即兩臺提供服務的主機,假設提供的是web服務)。
       最簡單的高可用集羣的工作機制爲,兩個節點都在線,但是隻有節點1提供web服務,在提供服務的同時,節點1還要在特定的時間段內不停的向外發送自己的心跳信息,以此來通告在同一個集羣中的節點2自己運行正常,當節點2連續2-3此在規定的時間段內沒有接受到幾點1的心跳信息,則就認爲節點1已經不能正常的提供web服務了,此時節點2就直接將節點1的資源(資源:就是爲提供一個服務所需要必須東西,如IP,數據等)搶奪過來,並立刻提供相同的服務,這樣就保證了服務的時時在線。
       當然這是最簡單的靠可用集羣的工作機制,但是隻有理解了基本的原理,才能進行更高層次的探索,下面我們就基於這個最簡單、最基本的高可用集羣的原理來實現基於Heartbeat的高可用web服務集羣

 

       實驗目的:通過Heartbeat來實現高可用web服務集羣模擬

       實驗拓撲圖如下圖所示:

 

image

        每個節點都有兩塊網卡分別爲eth0、eth1,前者和交換機或路由器相連來爲外界提供服務,後者直接連接爲彼此傳遞心跳信息,VIP爲在線提供服務的節點向外提供服務的IP地址,這是一個虛擬的IP地址,當提供服務的節點宕機之後,這個VIP就將被替代者所使用。
        這裏我們要使用到heartbeat軟件,下面我們就對這款軟件的三個主要的配置問津進行一下介紹:

        /etc/ha.d/ha.cf 定義心跳信息傳輸的端口以及整個集羣一共有多少個節點
       /etc/ha.d/haresources 本地最簡單的基於純文本文件的CRM,用來定義集羣使用的VIP、廣播等基本資源  
      /etc/ha.d/authkeys(400) 對傳遞的心跳信息進行簽名,防止心跳信息被改動

      下面 我們就開始進行相應的配置:

       1、給noid1配置地址
             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、在兩個節點上分別安裝httpd
             yum install httpd –y
             任何集羣服務都需要使用集羣啓動,而非手動啓動,並保證開機不能自動啓動
             chkconfig httpd off  防止開機自動啓動 
             給每個http寫一個網頁,內容分別爲自己的主機名,以便進行測試
             在兩個節點上進行同樣的操作

         5、開始安裝集羣服務

         (1)、下載安裝包

                        創建一個目錄將所用的安裝包都放在這個目錄內
                        mkdir node
                        所用到的安裝包如下
                                    

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

                       cd node
                       yum localinstall * --nogpgcheck –y

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

         (3)、將heartbeat的配置文件移動到/etc/下
                       cd /usr/share/doc/hearbeat-2.1.4
                       cp ha.cf harisources authkeys /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/haresources

                      vim /etc/ha.d/haressources  添加如下內容
                      node1.a.org 192.168.0.85/24/eth0/192.168.0.255 httpd
                      上面的內容依次爲:主節點的主機名,提供服務的IP即VIP,設定VIP的端口,廣播地址,提供的服務

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

                       cd /etc/ha.d
                       scp ha.cf authkeys  haresources  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’

           驗證:我們設定的node1爲主節點,所以服務應該由node1提供,即VIP在node1上,執行
                     ifconfig  進行查看,結果如下圖:

                     2011-09-10 10-01-38

                     我們在node1上使用瀏覽器輸入192.168.0.85這個VIP來對我們的web服務進行測試:

                     2011-09-10 10-02-28
                     表示此時提供web服務的節點爲node1
                     
                     當node1宕機之後,服務將有node2進行提供,所以VIP將在node2上,爲達到node1宕機的目的,我們將node1的heartbeat服務關閉,讓其不能發送心跳信息(注意:不能在本機上停止服務,需要在另個節點上執行)在node2上執行如下命令:
                      ssh node1.a.org   --‘/etc/init.d/heartbeat stop’
                      對node2執行ifconfig 命令,將得到如下結果:
                      2011-09-10 10-04-10
                      我們在node1上使用瀏覽器輸入192.168.0.85這個VIP來對我們的web服務進行測試:
                      2011-09-10 10-03-50

          本實驗只是簡單的模擬了基於heartbeat實現高可用的web集羣,其更深層次的內容還需大家繼續學習

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