在 RedHat EL 4.0 中實現高可用WEB負載均衡羣集

  一、Director配置
1、設置網絡接口地址
[root @director root] # vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.0.255
HWADDR=00:0C:29:A2:BD:B5
IPADDR=192.168.0.160
NETMASK=255.255.255.0
NETWORK=192.168.0.0
ONBOOT=yes        
2、編輯 lvs 腳本
[root @director root] # vi /etc/init.d/lvsdr
#!/bin/bash
VIP=192.168.0.222
RIP1=192.168.0.249
RIP2=192.168.0.251
/etc/rc.d/init.d/funcions
case "$1" in
start)
echo "start LVS of DirectorServer"
#Set the Virtual ip address
/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:0
# Clear ipvs Table
/sbin/ipvsadm -C
# set lvs
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
#Run Lvs
/sbin/ipvsadm
;;
stop)
echo "close LVS Directorsever"
/sbin/ipvsadm -C
/sbin/ifconfig eth0:0 down
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
# 保存並退出,將該文件設置爲可執行文件
[root @director root] # chmod 755 /etc/init.d/lvsdr
3、安裝 ipvsadm
[root @ Director root] # modprobe –l | grep ipvs
/lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs.ko
/lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_ftp.ko
/lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_lblc.ko
/lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_wlc.ko
/lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_sed.ko
/lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_rr.ko
/lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_wrr.ko
/lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_nq.ko
/lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_sh.ko
/lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_dh.ko
/lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko
/lib/modules/2.6.9-11.EL/kernel/net/ipv4/ipvs/ip_vs_lc.ko
[root @director root] # ln –s /usr/src/kernels/2.6.9-11.EL-i686 /usr/src/linux
[root @ director root] #  tar xzvf ipvsadm-1.24.tar.gz
[root @ director ipvsadm-1.24] # cd ipvsadm-1.24
[root @ director ipvsadm-1.24] # make
[root @ director ipvsadm-1.24] # make install
由於在這裏我搭建的是 WEB 的負載均衡羣集,而我在安裝 Redhat EL 4.0 時並沒有選擇安裝 WEB 服務器組件,所以這裏需要另外安裝,如果已安裝的朋友可以略過這裏(注:可以用 rpm –qa |grep http 查看是否已經安裝)
[root @ director root]  #  tar xzvf httpd-2.2.4.tar.gz
[root @ director root]  # cd httpd-2.2.4
[root @ director httpd-2.2.4] # ./configure –prefix=/usr/local/apache –enable-so –enable-rewrite
[root @ director httpd-2.2.4] # make
[root @ director httpd-2.2.4] # make install
[root @ director httpd-2.2.4] # echo “/usr/local/apache/bin/apachectl” >> /etc/rc.local
4、安裝 heartbeat
在安裝 heartbeat 前先要安裝 libnet,下載地址:http://www.packetfactory.net/libnet/
[root @ director root] # tar xzvf libnet.tar.gz
[root @ director root] # cd libnet
[root @ director libnet] # ./configure
[root @ director libnet] # make
[root @ director libnet] # make install
[root @ director libnet] # cd
在安裝 heartbeat 之前還需要創建屬於 heartbeat 的組和用戶
[root @ director root] # groupadd –g 694 haclient
[root @ director root] # useradd –g 694 –u 694 hacluster
[root @ director root] # tar xzvf heartbeat-2.1.2.tar.gz
[root @ director root] # cd heartbeat-2.1.2
[root @ director heartbeat-2.1.2] # ./ConfigureMe configure
[root @ director heartbeat-2.1.2] # make
[root @ director heartbeat-2.1.2] # make install
在安裝完 heartbeat 後,會有一個 /etc/ha.d 目錄,這是 heartbeat 的配置文件存放的目錄,heartbeat 的配置文件都放在這裏。但默認在安裝完 heartbeat 後,heartbeat 最重要的三個配置文件 ha.cf、haresources、authkeys卻沒有放在這裏,需要我們手工 copy 過來才行。
[root @ director heartbeat-2.1.2] # cp doc/ha.cf doc/haresources doc/authkeys /etc/ha.d
將 ldirector 的配置文件也 copy 過來
[root @ director heartbeat-2.1.2] # cp ldirectord/ldirectord.cf /etc/ha.d
6、編輯 heartbeat 的配置文件
[root @ director heartbeat-2.1.2] # vi /etc/ha.d/ha.cf
# hearbeat 的查錯文件存放點
debugfile /var/log/ha-debug
# heartbeat  的日誌文件存放點
logfile        /var/log/ha-log
#設定heartbeat(心跳)之間的時間間隔爲2秒。
keepalive 2
#在60秒後宣佈節點死亡。
deadtime 60
#在日誌中發出“late heartbeat“警告之前等待的時間,單位爲秒。
warntime 10
在某些配置下,重啓後網絡需要一些時間才能正常工作。這個單獨的”deadtime”選項可以處理這種情況。它的取值至少應該爲通常deadtime的兩倍。 
initdead 120
#使用端口694進行bcast和ucast通信。這是默認的,並且在IANA官方註冊的端口號。 
udpport        694
#表示在eth0接口上使用廣播heartbeat(將eth0替換爲eth1,eth2,或者您使用的任何接口)。 
bcast        eth0                # Linux
#必須的。集羣中機器的主機名,與“uname –n”的輸出相同。
node         director
node         bkdirector
# 必須的,當auto_failback設置爲on時,一旦主節點重新恢復聯機,將從從節點取回所有資源。若該選項設置爲off,主節點便不能重新獲得資源。該選項與廢棄的nice_failback選項類似。
auto_failback on
# 默認heartbeat並不檢測除本身之外的其他任何服務,也不檢測網絡狀況。 
# 所以當網絡中斷時,並不會進行Load Balancer和Backup之間的切換。 
# 可以通過ipfail插件,設置'ping nodes'來解決這一問題。詳細說明參考hearbeat文檔。
ping_group group1 192.168.0.160 192.168.0.225
respawn root /usr/lib/heartbeat/ipfail
apiauth ipfail gid=root uid=root
hopfudge 1
use_logd yes
#保存並退出
編輯 haresources 文件,haresources 文件通知 heartbeat 程序哪臺機器擁有資源,資源名稱實際是 /etc/init.d 或 /etc/ha.d/resource.d 目錄下的腳本,Heartbeat 使用 haresources 配置文件確定它第一次啓動時應該做的工作。該文件列出集羣所提供的服務以及服務的默認所有者。 注意:兩個集羣節點上的該文件必須相同,否則BadThingsWillHappen。 
[root @ director heartbeat-2.1.2] # vi /etc/ha.d/haresources
director lvsdr
#設置 director 爲主節點,提供的羣集服務爲 lvsdr, 主節點的名稱要與 “uname -n” 的輸出相同
#保存並退出
編輯 authkeys 文件,需要配置的第三個文件authkeys決定了您的認證密鑰。共有三種認證方式:crc,md5,和sha1。您可能會問:“我應該用哪個方法呢?”簡而言之: 
如果您的Heartbeat運行於安全網絡之上,如本例中的交叉線,可以使用crc,從資源的角度來看,這是代價最低的方法。如果網絡並不安全,但您也希望降低CPU使用,則使用md5。最後,如果您想得到最好的認證,而不考慮CPU使用情況,則使用sha1,它在三者之中最難破解。 
[root @ director heartbeat-2.1.2] # vi /etc/ha.d/authkeys
auth 1
1 crc
# 保存並退出
確保 authkeys 文件僅能由 root 用戶讀取
[root @ director heartbeat-2.1.2] # chmod 600 /etc/ha.d/authkeys
編輯 /etc/hosts 文件,添加兩臺機器的名字,做好名字到IP的對應
[root @ director heartbeat-2.1.2] # vi /etc/hosts
192.168.0.160        director
192.168.0.225                bkdirector
注:在備用 director 上也做相同的設置
二、Real Server 配置
1、編輯網絡接口
[root @cluser1 root] #vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.0.255
HWADDR=00:0C:29:54:80:3A
IPADDR=192.168.0.249
NETMASK=255.255.255.0
NETWORK=192.168.0.0
ONBOOT=yes
TYPE=Ethernet
2、編輯 lvs 腳本
[root @cluser1 root] # vi /etc/init.d/lvsrs
#!/bin/bash
VIP=192.168.0.222
case "$1" in
start)
echo "Start Real Server"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
;;
stop)
  echo "Closeing Real Server....."
ifconfig lo:0 down
;;
*)
echo "Usage: $0 {start|stop}
exit 1
esac
# 保存並退出
將 /etc/init.d/lvsrs 放到 /etc/rc.local 文件中,這樣可以在開機時自啓動
[root @cluser1 root] # echo “/etc/init.d/lvsrs” >> /etc/rc.local
在另外一臺 Real Server 上做相同的設置
確保 Real Server 上的 http 服務已處於監聽狀態,可以用 netstat –tlunp 命令查看
[root @ cluster1 root] # netstat –tlunp
如果沒有啓用啓用 http 服務,請啓用。
[root @ cluster1 root] # /usr/local/apache/bin/apachectl start

三、啓動web 羣集負載平衡與測試
1、啓動 heartbeat
[root @ director root] # /etc/init.d/heartbeat start
在備用 director 上啓動 heartbeat
2、測試
此時在客戶端的瀏覽器中輸入羣集服務器的IP 地址:http://192.168.0.222
就會顯示相應的頁面,最好是在兩臺 Real Server 上設置不同的WEB 頁面,這樣在客戶端刷頁面就會看到不同的頁面,這樣也可以證明客戶端的請求是在兩臺不同的服務器進行輪詢。
也可以在主備份服務器上使用 ipvsadm –lc 命令查看
[root @director root] # ipvsadm -lc
PVS connection entries
pro expire state       source             virtual            destination
TCP 01:55  FIN_WAIT    192.168.0.114:2849 192.168.0.222:http cluster1:http
TCP 14:56  ESTABLISHED 192.168.0.114:2850 192.168.0.222:http cluster2:http
測試1:主 director 崩潰後,從 director 是否可以接管主 director 的工作
爲了測試主 director 崩潰後,從 director 是否可以接管主 director 的工作,將主 director 關機或拔掉網線.然後在從 director 進行如下操作以證明從 director 是否已經接管了主 director 的工作:
1、        用 ifconfig 命令查看是否有 eth0:0 接口,主 director 正常工作的時候,在從 director 是不會出現 eth0:0 接口的,主 director 崩潰後 eth0:0 即刻就會出現
2、        可以用 tail –f /var/log/messages 命令查看 heartbeat 的日誌
3、        用 ipvsadm  命令查看是否已經啓用 ipvsadm, 主 director 正常工作的時候,從 director 是不會啓用 ipvsadm 的,主 director 正常工作時,在從 director 用 ipvsadm 查看的顯示:
[root @bkdirector root] # ipvsadm
IP Virtual Server version 1.2.0 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
主 director 崩潰後,從 director 上的 ipvsadm 輸出
[root @bkdirector root] # ipvsadm
IP Virtual Server version 1.2.0 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.222:http rr
-> redhat:http                  Route   1      0          0         
  -> redhatAS4.0:http             Route   1      0          0  
測試2:主 director 恢復正常後,從 director 上的服務是否會回到主 director 上
1、        重新啓動主 director,在主 director 啓動,進入系統後,此時在從 director 上用 ifconfig 命令查看,發現 eth0:0 不見了,在主 director 上用 ifconfig 查看可以看到 eth0:0 ,據此可證明 VIP 已經由從 director 轉移到了主 director 上。
2、        在客戶端瀏覽器中輸入羣集服務器的IP 地址:http://192.168.0.222  可以正常瀏覽,在主 director 上用 ipvsadm –lc 命令可以查看到客戶端瀏覽羣集服務器的WEB頁面,而在從 director 上用 ipvsdm –lc 命令查看,顯示爲空白。

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