搭建一個高可用集羣(httpd)html
實驗前準備:準備三臺乾淨的虛擬機,其IP分別爲192.168.0.20、192.168.0.21和192.168.0.1(此臺主機爲測試主機),VIP爲192.168.0.251:從網上下載與heartbeat有關的rpm包:
heartbeat-2.1.4-9.el5.i386.rpm
heartbeat-devel-2.1.4-9.el5.i386.rpm
heartbeat-gui-2.1.4-9.el5.i386.rpm
heartbeat-ldirectord-2.1.4-9.el5.i386.rpm
heartbeat-pils-2.1.4-10.el5.i386.rpm
heartbeat-stonith-2.1.4-10.el5.i386.rpm
libnet-1.1.4-3.el5.i386.rpm
perl-MailTools-1.77-1.el5.noarch.rpm
把它們放到root目錄下;虛擬機配好yum源;開始實驗:node
配置Primary Node:
1.)安裝heartbeat(切換到root目錄)
yum -y --nogpgcheck localinstall *.rpm
2.)安裝Apache:
yum install httpd
chkconfig --list httpd(查看httpd進程,保證開機時httpd進程不會自動啓動)
echo "<h1>Primary Node</h1>" >> /var/www/html/index.html(爲httpd服務建立一個靜態網頁)
3.)修改/etc/sysconfig/network文件,修改主機FQDN
vim /etc/sysconfig/network
HOSTNAME=node1.example.com
hostname(查看當前主機FQDN)
hostname node1.example.com(修改當前主機FQDN)
uname -a(查看當前主機FQDN)
4.)配置/etc/hosts文件,在文件中添加語句
vim /etc/hosts
192.168.0.20 node1.example.com node1
192.168.0.21 node2.example.com node2
5.)拷貝配置文件到主配置目錄(/etc/ha.d/)內:
cd /etc/ha.d/
cp /usr/share/doc/heartbeat-2.1.4/authkeys ./
cp /usr/share/doc/heartbeat-2.1.4/haresources ./
cp /usr/share/doc/heartbeat-2.1.4/ha.cf ./
6.)配置heartbeat的主配置文件/etc/ha.d/ha.cf:
vim /etc/ha.d/ha.cf
*****************************************************************
keepalive 2
deadtime 30
warntime 10
initdead 120
bcast eth0
auto_failbask on
node node1.example.com
node node2.example.com
*****************************************************************
7.)配置資源管理文件/etc/ha.d/haresources:
vim /etc/ha.d/haresources
node1.example.com 192.168.0.251 httpd
cp /etc/init.d/httpd resource.d/
8.)配置數據加密文件/etc/ha.d/authkeys:
vim /etc/ha.d/authkeys
auth 1
1 md5 "Hello"
chmod 600 authkeysvim
配置Secondary Node:
1.)安裝heartbeat(切換到root目錄)
yum -y --nogpgcheck localinstall *.rpm
2.)安裝Apache:
yum install httpd
chkconfig --list httpd(查看httpd進程,保證開機時httpd進程不會自動啓動)
echo "<h1>Secondary Node</h1>" >> /var/www/html/index.html(爲httpd服務建立一個靜態網頁)
3.)修改/etc/sysconfig/network文件,修改主機FQDN
vim /etc/sysconfig/network
HOSTNAME=node1.example.com
hostname(查看當前主機FQDN)
hostname node1.example.com(修改當前主機FQDN)
uname -a(查看當前主機FQDN)
4.)從Primary Node拷貝文件到Secondary Node
scp 192.168.0.20:/etc/hosts /etc/
cd /etc/ha.d
scp 192.168.0.20:/etc/ha.d/authkeys ./
scp 192.168.0.20:/etc/ha.d/haresources ./
scp 192.168.0.20:/etc/ha.d/ha.cf ./
cp /etc/init.d/httpd resource.d/bash
測試:
1.)啓動Primary Node和Secondary Node的heartbeat服務`service heartbeat start`
2.)用測試機client測試輸入http://192.168.0.251會打開"Primary Node"的網頁
3.)轉到/usr/share/heartbeat目錄下`cd /usr/share/heartbeat`,輸入命令`./hb_standby`,是資源轉換到Secondary Node裏,而後用測試機client測試會打開"Secondary Node"的網頁
4.)再輸入命令`hb_takeover`,使Primary Node從新得到資源;在用測試機client測試會打開"Primary Node"的網頁網絡
搭建一個高可用的LVS負載均衡
對上述的高可用集羣進行修改:
1.)關掉heartbeat服務:killall -9 heartbeat(通常不採用這種方法)
2.)在主配置目錄/etc/ha.d/的resource.d/目錄下建立一個ipvsadm是SYSTEM V風格的腳本ipvsd
cd /etc/ha.d/resource.d/
vim ipvsd
*********************************************************************
#!/bin/bash
#
# LVS script for VS/DR
#
. /etc/rc.d/init.d/functions
#
VIP=192.168.0.251
RIP=192.168.0.25
RIP2=192.168.0.26
PORT=80ide
#
case "$1" in
start) 測試
/sbin/ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:1ui
# Since this is the Director we must be able to forward packets
echo 1 > /proc/sys/net/ipv4/ip_forwardthis
# Clear all iptables rules.
/sbin/iptables -F
# Reset iptables counters.
/sbin/iptables -Z
# Clear all ipvsadm rules/services.
/sbin/ipvsadm -C
# Add an IP virtual service for VIP 192.168.0.21 port 80
# In this recipe, we will use the round-robin scheduling method.
# In production, however, you should use a weighted, dynamic scheduling method.
/sbin/ipvsadm -A -t $VIP:80 -s wlc
# Now direct packets for this VIP to
# the real server IP (RIP) inside the cluster
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -g -w 1
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -g -w 2
/bin/touch /var/lock/subsys/ipvsadm &> /dev/null
;;
stop)
# Stop forwarding packets
echo 0 > /proc/sys/net/ipv4/ip_forward
# Reset ipvsadm
/sbin/ipvsadm -C
# Bring down the VIP interface
/sbin/ifconfig eth0:1 down
/sbin/route del $VIP
/bin/rm -f /var/lock/subsys/ipvsadm
echo "ipvs stopped..."
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ]; then
echo "ipvsadm stopped ..."
else
echo "ipvs is running ..."
ipvsadm -L -n
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
;;
esac
********************************************************************
3.)修改資源配置文件/etc/ha.d/haresources,把原先的httpd服務哪一行註釋或刪除,在添加一行:
vim /etc/ha.d/haresources
node1.example.com ipvsd
4.)把修改過的內容傳送給Secondary Node
scp /etc/ha.d/resource.d/ipvsd 192.168.0.21:/etc/ha.d/resource.d
scp /etc/ha.d/haresources 192.168.0.21:/etc/ha.d/
5.)開啓heartbeat服務`service heartbeat start`, 在Primary Node內使用`ipvsadm -Ln`測試會打印"httpd的服務規則;而在Secondary Node裏用`ipvsadm -Ln`測試不會打印"httpd的服務規則
6.)轉到/usr/share/heartbeat目錄下`cd /usr/share/heartbeat`,輸入命令`./hb_standby`,是資源轉換到Secondary Node裏,而後在Secondary Node裏用`ipvsadm -Ln`測試會打印"httpd的服務規則;而在Primary Node內使用`ipvsadm -Ln`不會打印httpd的服務規則
7.)再輸入命令`hb_takeover`,使Primary Node從新得到資源;在Primary Node使用`ipvsadm -Ln`測試會打印"httpd的服務規則;而在Secondary Node裏用`ipvsadm -Ln`測試不會打印"httpd的服務規則
高可用集羣相關知識:
HA的LVS集羣有兩臺Director,在啓動時,主節點佔有集羣負載均衡資源(VIP和LVS的轉發及高度規則),備用節點監聽主節點的「心跳」信息並在主節點出現異常時進行「故障轉移」而取得資源使用權,這包括以下步驟:
1.)添加VIP至其網絡接口
2.)廣播GARP信息,通知網絡內的其它主機目前本Director其佔有VIP
3.)建立IPVS表以實現入站請求鏈接的負載均衡
4.)Stonith
Heartbeat的控制信息:
1.)「心跳」信息: (也稱爲狀態信息)僅150 bytes大小的廣播、組播或多播數據包。可爲以每一個節點配置其向其它節點通報「心跳」信息的頻率,以及其它節點上的heartbeat進程爲了確認主節點出節點出現了運行等錯誤以前的等待時間。
2.)集羣變更事務(transition)信息:ip-request和ip-request-rest是相對較常見的兩種集羣變更信息,它們在節點間須要進行資源遷移時爲不一樣節點上heartbeat進程間會話傳遞信息。好比,當修復了主節點而且使其從新「上線」後,主節點會使用ip-request要求備用節點釋放其此前從因主節點故障而從主節點那裏接管的資源。此時,備用節點則關閉服務並使用ip-request-resp通知主節點其已經再也不佔用此前接管的資源。主接點收到ip-request-resp後就會從新啓動服務。
3.)重傳請求:在某集羣節點發現其從其它節點接收到的heartbeat控制信息「失序」(heartbeat進程使用序列號來確保數據包在傳輸過程當中沒有被丟棄或出現錯誤)時,會要求對方從新傳送此控制信息。Heartbeat通常每一秒發送一次重傳請求,以免洪泛。