天天看點

在 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/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

HWADDR=00:0C:29:54:80:3A

IPADDR=192.168.0.249

ONBOOT=yes

TYPE=Ethernet

[root @cluser1 root] # vi /etc/init.d/lvsrs

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

  echo "Closeing Real Server....."

ifconfig lo:0 down

echo "Usage: $0 {start|stop}

将 /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 輸出

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 指令檢視,顯示為空白。

繼續閱讀