linux集羣學習實驗:使用heartbeat實現對httpd的高可用

一、 實驗環境:
如下圖所示:兩臺服務器節點,一臺客戶端通過交換機互連,相關數據規劃如下:
設備名稱 IP地址 主機名
客戶端 192.168.110.2 Client(win7)
服務器1 192.168.110.128 node1.yang.com
服務器2 192.168.110.129 node2.yang.com
linux集羣學習實驗:使用heartbeat實現對httpd的高可用

二、 配置步驟及說明

  1. 準備工作
    a. 主機名解析
    在heartbeat中,節點之間的通信使用的節點主機名稱,因此必須確保每臺主機的名稱惟一,並且通過主機名能夠訪問到對應的IP地址。建議修改每個節點的/etc/hosts文件,使各節點保持一致:
    [root@node1 ha.d]# cat /etc/hosts
    192.168.110.128 node1 node1.yang.com
    192.168.110.129 node2 node2.yang.com
    b. 主機互信
    在集羣中,建議使用集羣主來管理整個集羣,需要頻繁的從主遠程登錄其他的成員,因此建議配置主機互信避免每次都輸入密碼進行操作。
    [root@node1 .ssh]# ssh-keygen -t rsa //全部回車,使用空密碼即可,此時會在/root/.ssh目錄中產生id_rsa.pub的文件
    [root@node1 .ssh]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node2
    //在節點1上將id_rsa.pub拷貝到node2即可。
    Node2上的配置與此類似。

  2. 安裝heartbeat軟件
    由於在CENTOS6的YUM源中沒有配置有heartbeat,因此需要安裝額外的YUM源:
    a. 獲取YUM源:
    wget http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
    rpm -ivh epel-release-6-6.noarch.rpm
    b. Yum安裝heartbeat
    Yum install –y heartbeat即可,安裝完成後可以使用rpm –ql heartbeat |less查看一下安裝產生的相關文件。
  3. Heartbeat安裝完成後,其工作目錄爲/etc/ha.d目錄,工作依賴於ha.cf,haresources以及authkeys三個文件,這三文件需要手工從安裝的幫助路徑拷貝到/etc/ha.d目錄。
    #cp-p /usr/share/doc/heartbeat-3.0.4/{ha.cf,authkeys,haresources} /etc/ha.d/
  4. 配置ha.cf文件
    該文件爲主配置文件,其中定義了相關日誌文件位置、成員節點的信息、消息事件層通信的機制(單播、組播還是廣播)等,在我們的場景中需要修改如下的事項,去掉相應行前面的註釋標誌#:
    [root@node1 ha.d]# cat /etc/ha.d/ha.cf
    debugfile /var/log/ha-debug //用於觀察heartbeat事務行爲
    logfile /var/log/ha-log //記錄相關的日誌
    udpport 694 //通信端口694
    mcast eth0 225.0.0.1 694 1 0 //採用組播通信機制
    auto_failback on //當主節點恢復時,資源回切
    node node1.yang.com //定義兩個node,分別使用其主機名
    node node2.yang.com
    ping 192.168.110.2 //由於集羣只有2個節點,需要藉助ping進行檢測
  5. 配置authkeys文件
    authkeys爲成員節點通信的時候採用的加密機制確保通信安全,有三種加密機制,分別爲CRC,MD5以及SHA。寫法較簡單,如下:
    auth 3 //定義認證採用的id
    3 md5 Hello! //定義該id所對應的認證算法以及密鑰
    該文件是爲了確保節點間通信的安全性,建議配置權限爲600.
  6. 配置haresources文件
    haresouces文件爲狀態爲主的節點需要啓用的資源,以及狀態爲備的節點需要關閉的資源。資源以行爲單位,格式如下:
    nodename resources1 resource2 …
    其中nodename必須爲ha.cf文件中配置的其中一個節點名稱,用於表示資源希望運行在的那個服務器,稱爲集羣主服務器。Resources之間使用空格隔開,這些resources實際上是heartbeat可以調用的腳本,其中IPaddr爲軟件提供的腳本,其他的腳本位於/etc/ha.d/rc.d/目錄中;除了這些腳本外,/etc/init.d/中的腳本,只有符合LSB風格的也可以被調用。因此安裝httpd後的httpd腳本是可以直接調用的。
    如果resources有參數傳遞,需要使用::進行分隔,多個參數之間也使用::進行分隔。
    本實驗爲httpd提供高可用服務,因此需要用到的資源如下:
    a. 對外提供服務的虛擬IP
    b. 提供WEB服務的httpd腳本,(安裝apache後就有此腳本)
    haresource文件配置:
    node1.yang.com 192.168.110.100/24/eth0 httpd
    到此三個關鍵的文件就配置完成了,現在將三個文件拷貝至備機:
    scp -p authkeys haresources ha.cf node2:/etc/ha.d/
    特別注意:備機與主機的文件保持一致即可,注意haresources文件中的node1.yang.com不能修改爲node2.yang.com,原因前面已經解釋過。
  7. 其他設置
    a. 由於集羣所需要使用的服務都交由heartbeat軟件進行整體控制,因此在兩臺設備需要確保的是heartbeat在運行,而諸如vip,httpd等資源由heartbeat控制即可。因此可以設置heartbeat開機即啓動,將httpd開機關閉。
    [root@node1 ha.d]# chkconfig --list heartbeat
    heartbeat 0:off 1:off 2:on 3:on 4:on 5:on 6:off
    [root@node1 ha.d]# chkconfig --list httpd
    httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
    b. 爲了方便後續測試,將兩個節點的httpd的網頁文件中寫入不同的內容以示區分:
    [root@node1 ha.d]# cat /var/www/html/index.html
    Comes from node1.yang.com
    [root@node2 ha.d]# cat /var/www/html/index.html
    Comes from node2.yang.com
  8. 開啓heartbeat服務
    a. 啓動主節點服務:
    Service heartbeat start
    b. 在主節點上啓動備節點上面的服務:
    ssh root@node2 “service heartbeat start”
  9. 測試
    a. 在node1上面ip addr查看VIP地址:
    [root@node1 ha.d]# ip addr
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:70:82:69 brd ff:ff:ff:ff:ff:ff
    inet 192.168.110.128/24 brd 192.168.110.255 scope global eth0
    inet 192.168.110.100/24 brd 192.168.110.255 scope global secondary eth0
    inet6 fe80::20c:29ff:fe70:8269/64 scope link
    valid_lft forever preferred_lft forever
    b. 從客戶端訪問http://192.168.110.100
    linux集羣學習實驗:使用heartbeat實現對httpd的高可用
    c. 在集羣主上面將eth0 down掉,再刷新頁面:
    linux集羣學習實驗:使用heartbeat實現對httpd的高可用
    d. 在集羣備上機查看VIP:
    [root@node2 ha.d]# ip addr
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:46:09:ee brd ff:ff:ff:ff:ff:ff
    inet 192.168.110.129/24 brd 192.168.110.255 scope global eth0
    inet 192.168.110.100/24 brd 192.168.110.255 scope global secondary eth0
    inet6 fe80::20c:29ff:fe46:9ee/64 scope link
    valid_lft forever preferred_lft forever
    分析:
    此時主節點ping192.168.110.2不通,同時與不能與備節點通信,因此主節點認爲自己故障,將資源放棄;而備節點可以ping通192.168.110.2,而不能與主節點通信,因此認爲自己正常,啓用相應的資源。可以分析/var/log/ha-debug以及/var/log/ha-log日誌中的詳細過程。同時可以通過抓包看到節點間的通信以及各節點ping 192.168.110.2地址。
  10. 總結:
    本實驗簡要的說明了heartbeat如何爲集羣提供httpd的高可用,在真實的環境中應當是heartbeat爲各種服務代理服務提供高可用,通過將反向代理將服務轉發到後端服務的集羣進行處理。而heartbeat爲反向代理本身提供集羣服務。可以看到所有用於提供服務的資源被heartbeat統一管理,在主節點上開啓,當主節點出現故障經過集羣判斷新的主後,在新的主上面重新啓用這些資源。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章