架設 High Availability (HA) Cluster (Heartbeat) (CentOS 5.4 x86)
這篇主要是 High Availability (HA , 高可用性) 的研究測試
以兩台主機做 HA,當一台掛了後,另一台自動接手工作
以 Apache Web Server (httpd) 當測試的服務
使用的套件是 HeartBeat
環境 :
虛擬IP : 192.168.128.10
Server A :
主機名稱 : server1
eth0 192.168.128.11
Server B :
主機名稱 : server2
eth0 192.168.128.12
1. 設定主機名稱
在 Server A 上執行 uname -n 或 hostname 確認一下目前的主機名稱是甚麼
代碼:
[root@server1 ~]# uname -n
server1
或
代碼:
[root@server1 ~]# hostname
server1
如果想設定主機名稱為server1,方法如下
代碼:
[root@server1 ~]# hostname server1
同理,Server B設定個想要的名稱
另外 vim /etc/hosts,增加兩行 (Server A 和 Server B 上都要各設定兩行)
192.168.128.11 server1
192.168.128.12 server2
PS : 如果想要 hostname 在 reboot 後設定仍有效,必須修改 /etc/sysconfig/network 的內容
PS: 名稱不一定要 server1 和 server2,只要和稍後設定的一相同即可
2. 安裝與設定 heartbeat 套件
(1) 安裝
在 Server A 和 Server B 都執行
代碼:
[root@server1 ~]# yum -y install heartbeat httpd
(httpd 不是必須的,但是我們是測試 Web Server 的 HA,所以需要安裝)
(2) 複製範例
先找一下設定檔(也是說明檔案)被 yum 安裝去哪了
代碼:
[root@server1 ~]# find / -name authkeys
/usr/share/doc/heartbeat-2.1.3/authkeys
如果找不到,請再執行一次
代碼:
[root@server1 ~]# yum -y install heartbeat
( CentOS 對 heartbeat 套件安裝似乎有點問題,所以需要 yum 安裝兩次才能成功)
開始設定工作,把文件拷貝過來當設定檔案,再修改
代碼:
cp /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d/
cp /usr/share/doc/heartbeat-2.1.3/ha.cf /etc/ha.d/
cp /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d/
(3) 設定 authkeys
執行 vi /etc/ha.d/authkeys,在最後加上
代碼:
auth 1
1 crc
改變權限
代碼:
chmod 600 /etc/ha.d/authkeys
(4) 設定 ha.cf
因為這個檔案說明太多,尋找和修改不方便
執行下面把原來的換個名稱,把 ha.cf.old 檔案過濾掉註解,剩下的輸出到 ha.cf 檔案中再修改
代碼:
mv /etc/ha.d/ha.cf /etc/ha.d/ha.cf.old
sed -e '/^#/d' -e '/^$/d' /etc/ha.d/ha.cf.old > /etc/ha.d/ha.cf
然後再去修改 /etc/ha.d/ha.cf 內容 (參數說明去看剛剛備份的 /etc/ha.d/ha.cf.old)
代碼:
logfile /var/log/ha.log
logfacility local0
keepalive 2
deadtime 30
initdead 120
bcast eth0
udpport 694
auto_failback on
node server1
node server2
ping 192.168.128.2
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
注意,node 值必須和兩台主機的 uname -n 執行結果相符合
可以用 ping gateway ip 來偵測
logfile 是設定 heartbeat 執行情況的 log
(5) 設定 haresources
執行 vi /etc/ha.d/haresources,最後加入一行
代碼:
server1 192.168.128.200 httpd
第1個參數是 HA 的主要電腦的 hostname
第2個參數是虛擬介面 IP
第3個參數服務名稱
(6) 把 heartbeat 設定全部複製到 Server B 上
代碼:
scp -r /etc/ha.d/
[email protected]:/etc/
(7) 建立網站首頁
在 Server A 上執行
代碼:
echo "I am Server A" > /var/www/html/index.html
在 Server B 上執行
代碼:
echo "I am Server B" > /var/www/html/index.html
因為 haresources 中定義了資源,heartbeat 會自動啟動和停止 httpd,不需要我們插手
4. 啟動 HeartBeat
請在 Server A 和 Server B 啟動 HeartBeat
代碼:
service heartbeat restart
這可能需要 1, 2 分鐘
5. 測試
(1) Server A 正常時
用瀏覽器連上
http://192.168.128.11,應該會出現 "I am Server A "
用瀏覽器連上
http://192.168.128.12,應該會出現 "連線失敗" 一類訊息
用瀏覽器連上
http://192.168.128.10,應該會出現 "I am Server A "
(2) Server A 當掉時
假設 Server A 當了,心跳 (heartbeat) 停了,請執行
代碼:
service heartbeat stop
或把 Server A 關機
(工作接管可能需要 1,2分鐘)
用瀏覽器連上
http://192.168.128.11,應該會出現 "連線失敗" 一類訊息
用瀏覽器連上
http://192.168.128.12,應該會出現 "I am Server B "
用瀏覽器連上
http://192.168.128.10,應該會出現 "I am Server B "
(3) Server A 又復原
假設 Server A 復原,心跳 (heartbeat) 復原,請執行
代碼:
service heartbeat start
(工作接管可能需要 1,2分鐘)
用瀏覽器連上
http://192.168.128.11,應該會出現 "I am Server A "
用瀏覽器連上
http://192.168.128.12,應該會出現 "連線失敗" 一類訊息
用瀏覽器連上
http://192.168.128.10,應該會出現 "I am Server A "
這樣表示測試成功
(完)
PS : 防火牆設定
代碼:
# 開機時自動啟動 iptables 防火牆
chkconfig iptables on
# 現在立刻啟動 iptables 防火牆
service iptables start
# 開放 UDP port 694 連線
iptables -A RH-Firewall-1-INPUT -p udp --dport 694 -j ACCEPT
或
iptables -A RH-Firewall-1-INPUT -s 192.168.128.101 -p udp --dport 694 -j ACCEPT
iptables -A RH-Firewall-1-INPUT -s 192.168.128.102 -p udp --dport 694 -j ACCEPT
或
iptables -A RH-Firewall-1-INPUT -s 192.168.128.0/24 -p udp --dport 694 -j ACCEPT
# 儲存防火牆規則到 /etc/sysconfig/iptables,否則防火牆重新啟動後臨時增加的設定會消失
iptables-save
_________________
天道循環,生死不昧,真空妙有,還於本然
諦聽我們的靈魂之聲,所有飄零的靈魂,此世虛幻,此生一夢,生者必死
勢不可去盡,話不可說盡,福不可享盡,規矩不可行盡,凡事太盡,緣分勢必早盡
貼圖空間
viewtopic.php?t=8816