danny 2007-11-6 21:06
RHEL4 Update4(CentOS 4.4) & Red Hat Cluster Suite 安裝實錄
RHEL4 Update4(CentOS 4.4) & Red Hat Cluster Suite 安裝實錄
1. 硬體
伺服主機: DELL PowerEdge 1950 x 2
儲存裝置: DELL PowerVault x 1
電源管理: Dell Remote Access Card V5 (DRAC5) (Fence Device)
2. 軟體、服務、套件
作業系統:Red Hat Enterprise 4 Update4 / CentOS 4.4
HA軟體:Red Hat Cluster Suite 4
使用服務:Apache2(httpd 2.0.5.2-28)、MySQL4(mysql-4.1.20-1)
3.Cluster Suite 取得方法
1.RHCS4 的安裝光碟,透過 autorun 進行選擇套件(可經由註冊至 RHN 取得)
2.或是 [url]ftp://ftp.redhat.com/pub/redhat/linux/updates/enterprise/4AS/en/[/url] 取得 srpm
自行編譯套件
3.也可以使用 CentOS 編譯好的套件 [url]http://isoredirect.centos.org/centos/4/csgfs/[/url]
4.所需套件
ccs
gulm
iddev
fence
magma
magma-plugins
rgmanager
system-config-cluster
dlm
dlm-kernel
(如果使用的核心是 smp 或是 largesmp 雙 CPU 以上的架構, 請再加裝 dlm-kernel-smp or dlm-kernel-largesmp。
注意! dlm-kernel 必須使用在相對應的 kernel 版本才能啟動)
cman-kernheaders
dlm-kernheaders
cman
cman-kernel
(如果使用的核心是 smp 或是 largesmp 雙 CPU 以上的架構, 請再加裝 cman-kernel-smp or cman-kernel-largesmp。
注意! cman-kernel 必須使用在相對應的 kernel 版本才能啟動)
cman-kernheaders
5.設定配置
先取消開機自動啟動服務,便於除錯設定配置。
# chkconfig ccsd off
# chkconfig cman off
# chkconfig fenced off
# chkconfig lock_gulmd off
# chkconfig rgmanager off
在本機端的 /etc/hosts
內加入兩筆 DNS 反查資料
192.168.1.101 node1
192.168.1.102 node2
將 /etc/hosts 傳至另一台主機
進入圖形視窗介面執行 system-config-cluster。(除非您想用vi來配置cluster.conf撰寫xml語法) @@
新增一組設定,請使用 Distributed Lock Manager 並選定 Multicast (227.0.0.1) or (227.0.0.x)。
新增兩組 cluster node, 分別為 node1、node2 (這裡的名稱必須與 /etc/hosts 內所新增的 DNS 反查資料一致)
新增 Fence Device 如果沒有 Fence 設備(電源控制) 請新增 menual fenceing
如果有 Fence 設備請依照廠牌選擇進行配置。
(個人使用的是 DRAC5 本應理所當然的選擇 DRAC 但是截至 RHEL Update4 為止, DRAC 僅支援至 DRAC4,
個人初期一直無法成功完成,最後找到 /sbin/fence_drac 這個 script 才發現不支援 DRAC5,最後與
RedHat技術服務取得預定在 update5 會加入的 fence_drac sctipt 需要的人可以透過附件下載。
此一 script 版本專為 Dell PowerEdge 1950 撰寫。其他設備就不保證一定能用。
另外您如果要使用 DRAC 的話,必須 將 DRAC 上的 Telnet 開啟。
個人最後選用的是 ipmilan 這應該是一個標準協定、剛好 DRAC 有支援這項協定,)
如果是 menual 只需要新增一組,如果使用 DRAC or ipmilan 必須為有獨立 IP 的設備各自新增。
鍵入名稱、IP位置、控制帳號、密碼即可。
(可以的話最好在 DRAC 的 WebUI 內新增一組專門給 ipmi 使用的帳號密碼,對於安全性比較有所幫助)
再回到上面的 Cluster Node 配置裡, 點選右下角的 manage fencing for this node 個別新增一組 Level
點選 Level 將剛才配置好的 fence device 個別配置到各別的 cluster node 裡。
建立 failover domains 新增一組 failover domain(個人直接取名為 failover),點右下角進入編輯剛剛所新增的
failover 點選選單中央上方的 available cluster node 將 node1、node2 新增進來。
右邊的兩個打勾選向分別是 “Restrict Failover Domains members” 以及 “Priotitzed List”
如果妳只有兩台, 打勾第一項 “Restrict Failover Domains members” 就可以了,這項是只允許這兩台做輪替
另外一項則是你可能有兩台以上的服務器,您可以分別設定輪替的優先權。
(其實真的只有兩台其實根本不用勾選….)
建立 Resource,依照妳所需要提供的服務新增資源設備。
由於個人使用的是 web、database、share storage
所以新增了以下資源:
IP Address:192.168.1.100 (Monitor Link 打勾)
File System: /dev/sda1 (mysql) /dev/sda2 (web root)
Script: /etc/init.d/httpd、/etc/init.d/mysqld
建立 Service 名稱, (個人取名為 http_server)
add Shared Resoure 先加入 IP Address 再選擇 attach a shared resource to the selecetion
將 File System 加在 IP 底下,再選擇 File System 將 Script 加在底下
這個具個人瞭解應該是先後執行的順序、所以個人的順序是 IP Address -> File System -> Script
再把右上角的 failover domain 選入 failover (個人定義的名稱)
請將 Autostart this service 勾選。
在 Recovery Policy 有三個選項分別是 Restart、Relcate、Disable
據個人的測試結果 Restart 當服務發生錯誤會嘗試重新啟動服務,除非超過太多次重新啟動系統認為不穩定
才會進行換手更換主機服務。
Relcate 則是一旦服務發生問題馬上換手交付其他主機負責服務。
Disable 你不會無聊的想去試吧? -_-
在這裡建議是選擇 Relcate。
設定完成,存檔。
將/etc/cluster/cluster.conf 傳至另外一台,由於其他台並沒有執行 config-system-cluster
所以你必須手動建立 /etc/cluster 這個目錄。
啟動服務,對所有的 cluster node 啟動
# service ccsd restart
# service cman start
# service fenced start
# service rgmanager start
使用瀏覽器測試, 當然您的 web 必須事先已經配置好了。
如果都順利執行成功,再次使用 system-config-cluster 會多出一個分頁 Cluster Management
可以觀察目前 Cluster Node 的狀態以及下達幾個簡單的控制命令。
注意:目前這一版的 system-config-cluster 再次進入會有錯誤訊息、大概是判斷 xml 有些問題,
但是不影響配置及設定點選 OK 跳過即可。
可以使用 clusvcadm -r http_server (定義的 service 名稱)
做 Cluster Node 切換的測試。
這樣做當然不能滿足個人,所以採用更激烈的手段做測試,首先選定目前服務的 onwer
下達 service httpd stop 或 killall httpd ,理論上應該有類似 watch dog 的功能來對 httpd 重啟,但是並沒有,服務就停在那邊了。
又撥了一通電話給 redhat 得到的答案是,請修改 /etc/init.d/functinos 將 219 行的
RC=1 修改為 RC=0 , 這個應該是 httpd 的 return 值錯誤,造成無法判斷而卡住。
改好後 httpd 就可以順利的重新啟動、換手。
測試將 mysql 服務中斷,一樣無法重新啟動,服務又停在那邊了。求助得到的結果一樣是
return 值的問題, 修改 /etc/init.d/mysqld
找約 99 行處
stop(){
在下面新增
status mysqld >/dev/null >&1
if [ $? -eq 3 ]; then
return 0
fi
也是幫助 return 值的修改。
以上也是 redhat 的技術支援提供的。
由於知道問題,個人也嘗試將(不照上述新增)
124 行左右的ret=1 改為 ret=0 也有一樣的效果,但不知會不會其他影響,
測試完之後 rh 才回覆,所以我採用 rh 提供的方法。
不過以上這兩個方法似乎只能夠套用在 Relcate 的模式下,就算妳換成 Restert 好像也是會做
Relcate 反正解決了,後來就沒有繼續去測了。
最後使用最暴力的手段進行測試,拔除網路線,如果有 fence 設備,另外一台會對網路線斷掉的
cluster node 下達 reboot 命令,並接手服務。
由於個人的 fence 設備是內部 fence 設備,電源是來自於主機所以無法進行電源斷電的 fence
測試,如果是類似 APC Power Switch 這類的外部 fence 設備就可以進行這類的測試。
如果都沒有問題,那就列入自動啟動的程序吧。
# chkconfig ccsd on
# chkconfig cman on
# chkconfig fenced on
# chkconfig rgmanager on
6.除錯
提供幾個可能發生的錯誤檢查,不過最好還是留意 log 內的訊息
由於設定都在圖形介面, 個人習慣會多開一個終端機
# tail -f /var/log/messages
進行測試命令後可觀察服務狀態是否卡在那個部分。
1. hosts 是否加入了對方的 domain ,是否可以順利解析名稱?
2. muticast 是否有設定? cluster node Ethernet heartbeat 的介面是否正確?
3. fence device 的帳號是否正確? 可以在shell下執行 fence_drac or fence_ipmilan
(依照你的fence device設備來選擇合適的 script)
進行測試,ex: # fence_ipmilan -a 192.168.1.201 -l username -p password -o status
如果手動都無法下達,那妳可能要檢查 fence 設備的配置了。
4.Kernel 的版本是否跟 cman 與 dlm 相符呢?
5.log 檔內的 return 值是否正確呢?
後記:
這次剛好公司有專案進行,買了rh更新服務跟電話技術服務,不然像 httpd 跟 mysqld
的 bug 還真的死不瞑目,因此特別把它打成筆記,由於沒有做更大的服務所以沒有加入
GFS 的設定,不過為了加強後來也把 eth0 & eth1 做成 bonding ,在這邊提供給各位參考。
希望對各位能有所幫助。
如果其他服務也有問題這類問題不妨試著看看 log 檔修改 script 看看。
fence_drac for Dell PowerEdge 1950
[url]http://rsbl.net/linux/rhcs/fence_drac[/url]
修改後的 mysql srcipt
[url]http://rsbl.net/linux/rhcs/mysqld[/url]
from: [url]http://rsbl.net/blog/?p=107[/url]