第一,系統規劃 Heartbeat +LVS+Ldirectord
1 需要的源碼包
ipvsadm-1.24 需要linux 核心為2.6.18 ,同時也需要編譯核心。
2.規劃網絡
VIP 192.168.10.100
HA1 192.168.10.10
192.168.20.10
HA2 192.168.10.20
192.168.20.20
RealServer1 192.168.10.1
RealServer2 192.168.10.2
3 在heartbeat節點上修改主機名
#vim /etc/sysconfig/network
HOSTNAME= ha1 并儲存,隻有重新開機或者登出時時才生效
#hostname ha1 #立即生效
# vim /etcsysconfig/network
HOSTNAME=ha2
# hostname ha2
4 在heartbeat 節點上hosts 檔案中添加如下
192.168.10.10 ha1
192.168.10.20 ha2
192.168.20.10 ha010
192.168.20.20 ha020
第二, 編譯核心并讓 linux-2.6.18.tar.gz
1 解壓核心linux-2.6.18.tar.gz
# tar xvf linux-2.6.18.tar.gz
#mv linux-2.6.18 /usr/src/
2 因為linux系統默下是在尋找linux 目錄是以建立連接配接
#ln -sv linux-2.6.18 linux
3,拷貝/boot/config-2.6.18-164.el5 到linux 目錄下面
#cp /boot/config-2.6.18-164.el5 /usr/src/linux/.config
4 編譯核心
如果以前編譯過核心,并且想删除編譯過的核心
# make mrproper
5 編譯核心的命為
#make menuconfig 或者make xconfig
6 選擇核心支援IPvsadm
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
Networking options --->
[*] Network packet filtering (replaces ipchains)
[ ] Network packet filtering debugging
...
IP: Netfilter Configuration --->
IP: Virtual Server Configuration --->
<M> virtual server support (EXPERIMENTAL)
[*] IP virtual server debugging
(12) IPVS connection table size (the Nth power of 2)
--- IPVS scheduler
<M> round-robin scheduling
<M> weighted round-robin scheduling
<M> least-connection scheduling scheduling
<M> weighted least-connection scheduling
<M> locality-based least-connection scheduling
<M> locality-based least-connection with replication scheduling
<M> destination hashing scheduling
<M> source hashing scheduling
--- IPVS application helper
<M> FTP protocol helper
7 安裝核心
make bzImage;make modules ;make modules_install : make install
8 編譯完成後重新開機伺服器,并選擇啟動編譯後的核心,并檢視編譯後的核心是不是支援ipvsadm
#grep ip_vs_init /boot/System.map
第三.安裝ipvsadm 和heartbeat
1 安裝ipvsadm
# tar -vfx ipvsadm-1.24.tar.gz
#cd ipvsadm-1.24
#./configure && make &&make install
2 安裝libnet
#tar xvf libnet-1.1.2.1.tar.gz
#cd libnet
#./configure && make && make install
3 安裝heartbeat
#tar –xvf heartbeat-2.0.7.tar.gz
#cd heartbeat-2.0.7.
#./configure && make && make install
# cd doc/
#cp authkeys haresources ha.cf /etc/ha.d/
#cd ../ldirectord/
#cp ldirectord.cf /etc/ha.d
4 修改 authkeys ,并修改權限
#vim authkeys
auth 1
1 crc
#chmod 0600 authkeys
5 配置heartbeat主配置檔案
#vim ha.cf
debugfile /var/log/ha-debug # heartbeat的調試資訊
logfile /var/log/ha-log #hearbeat 的日志資訊
logfacility local7
keepalive 2 #指明心态時間為2秒,即是每個兩秒在eth1 放松一下廣播
deadtime 30 #指定在三十秒内沒有心跳資訊,就立即切換服務
warntime 10 # 指明心跳延遲的時間為十秒,當十秒鐘内備份機聯系不上,即目前活動的伺服器無心跳信号,就會在日志中寫一個警告日志,但不會切換服務
nitdead 120 #網絡啟動的時間
udpport 694 #廣播/單波通訊使用的udp端口
baud 19200 #使用序列槽的波特率,和serial以前使用
#mcast eth1 192.168.20.10 如果采用多點傳播通訊,該處設定多點傳播通訊所使用的接口
ucast eth1 10.90.20.10 #master lvs ip 如果采用的是單波,該處設定其網絡接口叢集使用的IP位址 注意在該處的IP 位址為 Master 主配置檔案中為Back eth1 的IP位址 ,Back 在該處的位址為Master eth1 的位址
auto_failback on # 在主節點回複正常情況下,主動接管資源
node ha10 #master lvs hostname 主節點 該處的節點名必須和uname –n 相比對
node ha20 #slave lvs hostname 輔助接點
respawn root /usr/lib/heartbeat/ipfail #have to give a permission
apiauth ipfail gid=root uid=root
6 配置heartbeat的資源檔案
#vim haresources 在其尾端添加
Ha10 IPaddr:: 192.168.10.100 lvs ldirectord
對應的分别是: 主節點 IPaddr:: 192.168.10.100 是虛拟Ip位址 lvs 是用來啟動lvs 的腳本,ldirecord 是監聽主節點和這是伺服器的資源配置檔案
7 配置ldirectord.cf
checktimeout=20 #ldirectord 等待健康檢查執行完畢的等待時間,如果在設定時間内沒有完成檢查,ldirectord 則會從ipvs 表中删除真實伺服器
checkinterval=60 #ldirectord 在兩個檢查之間的時間間隔
fallback=127.0.0.1:80 #當所有的真實伺服器當機時,所有的通路都放松的本主機上的apache服務上
autoreload=yes #自動讀取配置檔案
logfile="/var/log/ldirectord.log" #ldirectord 的日志檔案
logfile="local0"
quiescent=no #當一個節點在checktimeout設定的時間周期内沒有響應是它是“靜止的”(它的權重為0),當你設定了這個選項後,ldirectord将會從IPVS表中移除真實伺服器而不是“停止”它,從IPVS表移除節點将中斷現有的用戶端連接配接,并使LVS丢掉所有的連接配接跟蹤記錄和持續連接配接模闆,如果你不将這個選項設定為no,當某個節點崩潰時,對某些用戶端計算機而言可能會顯示為叢集關閉了,因為在這個節點崩潰前這些用戶端計算機被配置設定給它了,而連接配接跟蹤記錄和程式連接配接模闆仍然保留在Director上。
# A sample virual with a fallback that will override the gobal setting
virtual=192.168.10.100:80 #虛拟Ip 即使對外提供服務的ip位址
real=192.168.10.1.:80 gate #真實伺服器 當然gate 後面還可以指明權重
real=192.168.10.2:80 gate
# real=192.168.6.6:80 gate
fallback=127.0.0.1:80 gate
service=http #服務類型
request=".ldirectord.html " #must be created on real server too 這是ldirectord 檢測真實伺服器是的伺服器是否存活的檔案
receive="OK" #this is .ldirectord.html content #監測的檔案中必須包含OK 這樣的字元,ldirectord 才能識别該服務正常,否則為所失敗
# virtualhost=some.domain.com.au
scheduler=wrr # 此處要和配置的lvs 的排程算法一緻
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate # ldirectord 使用什麼的方法檢測這不是伺服器,如果真實服務在設定的時間内沒有傳回,自己指定的資訊,則該節點就被認為已經死掉了
8 配置友好頁面傳回資訊,即使當所有的RealServer 出現問題的時,并能為使用者提供一些友好的服務資訊的頁面
# cd /etc/ha.d/resource.d
ln -vs /etc/init.d/httpd ./
9 lvs 的啟動腳本 ,并把該腳本拷貝到/etc/init.d/lvs ,且修改權限
注: 該腳本是在排程器上執行的,即是heartbeat節點上執行的
#vim lvs
!/bin/bash
#chkconfig: 354 20 80
#description: start lvs
VIP=192.168.10.100
RIP1=192.168.10.1
RIP2=192.168.10.2
/etc/rc.d/init.d/functions
case "$1" in
start)
echo "start lvs"
#set VIP
/sbin/ifconfig eth0:0 $VIP netmask 255.255.255.255
/sbin/route add -host $VIP dev eth0:0
#clean 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
#end
;;
stop)
echo "stop lvs"
*)
echo "Usage:$0 {start|stop}"
;;
exit 1
esac
#chmod 755 /etc/init.d/lvs
第四, 配置RealServer ,即使真實伺服器,并把下面的腳本拷貝到/etc/init.d/RealServer ,并修改權限
注:該腳本是在真實伺服器上啟動的
#vim RealServer
VIP=192.168.2.173
host=`/bin/hostname`
#start lvs
/sbin/ifconfig lo down
/sbin/ifconfig lo up
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 > /dev/null 2>&1
/sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
#stop lvs
/sbin/ifconfig lo:0 down
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
status)
#status of lvs
islothere=`/sbin/ifconfig lo:0 |grep $VIP`
isrothere=`/netstat -rn |grep "lo" |grep "$VIP"`
if [ ! "islothere" -o ! "isrothere" ];then
echo "the realserver is stopped"
else
echo "realserver is running"
fi
echo "Usage:$0{start|stop|status}"
;;
# chmod 755 /etc/init.d/RealServer
并啟動該腳本
#/etc/init.d/lvs start
第五,
1.在各個真實伺服器上的apache的家目錄中建立檔案
#vim .ldirectord.html
OK
并啟動apache
2 .啟動真實伺服器上的RealServer 腳本
#/etc/init.d/RealServer start
3 啟動heartbeat
#/etc/init.d/lvs start
#service heartbeat start
本文轉自 freehat08 51CTO部落格,原文連結:http://blog.51cto.com/freehat/410299,如需轉載請自行聯系原作者