簡介
Heartbeat 項目是 Linux-HA 工程的一個組成部分,它實現了一個高可用集羣系統。心跳服務和集羣通訊是高可用集羣的兩個關鍵組件,在 Heartbeat 項目裏,由 heartbeat 模塊實現了這兩個功能。
LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目在1998年5月由章文嵩博士成立,是中國國內最先出現的自由軟件項目之一。目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR);
八種調度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,shr)。
在調度器的實現技術中,IP負載均衡技術是效率最高的。在已有的IP負載均衡技術中有經過網絡地址轉換(NetworkAddressTranslation)將一組服務器構成一個高性能的、高可用的虛擬服務器,咱們稱之爲VS/NAT技(VirtualServerviaNetworkAddressTranslation),大多數商品化的IP負載均衡調度器產品都是使用此方法,如Cisco的LocalDirector、F5的Big/IP和Alteon的ACEDirector。在分析VS/NAT的缺點和網絡服務的非對稱性的基礎上,咱們提出經過IP隧道實現虛擬服務器的方法VS/TUN(VirtualServerviaIPTunneling),和經過直接路由實現虛擬服務器的方法VS/DR(VirtualServerviaDirectRouting),它們能夠極大地提升系統的伸縮性。
1、前期準備工做
環境說明
VIP:192.168.0.100
主:192.168.011心跳IP:10.0.0.1hostname:node1
備:192.168.0.12心跳IP:10.0..0.2hostname:node2
realserver:192.168.0.13/14
1.一、修改主機名稱
[root@localhost ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node1
修改/etc/hosts 文件
[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.11node1
192.168.0.12node2
1.二、修改selinux
[root@localhost ~]# grep -v "^#" /etc/sysconfig/selinux
SELINUX=disabled
SELINUXTYPE=targeted
[root@localhost ~]# setenforce 0
1.三、配置IP地址
eth0192.168.0.11
eth110.0.0.1
最後重啓網卡
[root@localhost ~]# service network restart
1.四、安裝rpm依賴包
[root@node1 ~]# yum -y install autoconf automake libtool glib2-devel libxml2-devel bzip2-devel e2fsprogs-devel libxslt-devel docbook-dtds docbook-style-xsl ncurses-devel *Socket6* *libwww-perl* *URI* *MailTools* *HTML-Parser* perl-IO-Socket-*
[root@node1 Packages]# rpm -ivh libtool-ltdl-devel-2.2.6-15.5.el6.x86_64.rpm
1.五、建立安裝用戶
[root@localhost ~]# groupadd haclient
[root@localhost ~]# useradd -g haclient -M -s /sbin/nologin hacluster
2、安裝heartbeat實現熱備
2.一、安裝Reusable-Cluster-Components-glue--glue-1.0.9 (1).tar.bz2
[root@node1 Packages]# tar xvf Reusable-Cluster-Components-glue--glue-1.0.9\ \(1\).tar.bz2 -C /usr/local/src/
[root@node1 Packages]# cd /usr/local/src/Reusable-Cluster-Components-glue--glue-1.0.9/
[root@node1 Reusable-Cluster-Components-glue--glue-1.0.9]# ./autogen.sh
[root@node1 Reusable-Cluster-Components-glue--glue-1.0.9]# ./configure LIBS='/lib64/libuuid.so.1'
[root@node1 Reusable-Cluster-Components-glue--glue-1.0.9]# make
[root@node1 Reusable-Cluster-Components-glue--glue-1.0.9]# make install
2.二、安裝ClusterLabs-resource-agents-v3.9.2-0-ge261943.tar.gz
[root@node1 Packages]# tar xvf ClusterLabs-resource-agents-v3.9.2-0-ge261943.tar.gz -C /usr/local/src/
[root@node1 Packages]# cd /usr/local/src/ClusterLabs-resource-agents-b735277/
[root@node1ClusterLabs-resource-agents-b735277]# ./autogen.sh
[root@node1 ClusterLabs-resource-agents-b735277]# ./configure LIBS='/lib64/libuuid.so.1'
[root@node1 ClusterLabs-resource-agents-b735277]# make
[root@node1 ClusterLabs-resource-agents-b735277]# make install
2.三、安裝Heartbeat-3-0-7e3a82377fa8.tar.bz2
[root@node1 Packages]# tar xvf Heartbeat-3-0-7e3a82377fa8.tar.bz2 -C /usr/local/src/
[root@node1 Packages]# cd /usr/local/src/Heartbeat-3-0-7e3a82377fa8/
[root@node1 Heartbeat-3-0-7e3a82377fa8]# ./ConfigureMe configure LIBS='/lib64/libuuid.so.1'
[root@node1 Heartbeat-3-0-7e3a82377fa8]# make
[root@node1 Heartbeat-3-0-7e3a82377fa8]# make install
[root@node1 ~]# cp -a /usr/etc/ha.d/ /etc/
[root@node1 ~]# rm -rf /usr/etc/ha.d/
[root@node1 ~]# ln -s /etc/ha.d/ /usr/etc/
[root@node1 ~]# chkconfig --add heartbeat
[root@node1 ~]# chkconfig heartbeat on
[root@node1 ~]# cp /usr/share/doc/heartbeat/haresources /etc/ha.d/
[root@node1 ~]# cp /usr/share/doc/heartbeat/authkeys /etc/ha.d/
[root@node1 ~]# cp /usr/share/doc/heartbeat/ha.cf /etc/ha.d/
[root@node1 ~]# cp /usr/local/src/ClusterLabs-resource-agents-b735277/ldirectord/ldirectord.cf /etc/ha.d/
[root@node1 ~]# chmod 600 /etc/ha.d/authkeys
2.四、修改authkeys
[root@node1 ~]# cd /etc/ha.d/
[root@node1 ha.d]# grep -v "^#" authkeys
auth 1
1 crc
[root@node1 ha.d]#
authkeys文件用於設定heartbeat的認證方式,共有三種可用的認證方式:crc、md5和sha1,三種認證方式的安全性依次提升,可是佔用的系統資源也依次增長。若是heartbeat集羣運行在安全的網絡上,可使用crc方式,若是HA每一個節點的硬件配置很高,建議使用sha1,這種認證方式安全級別最高,若是是處於網絡安全和系統資源之間,可使用md5認證方式。
(注:auth 後面默認爲1 改成1 兩個數值必須相同, 不然啓動時會報錯)
2.五、修改ha.cf
[root@node1 ~]# cd /etc/ha.d/
[root@node1 ha.d]# grep -v "^#" ha.cf
debugfile /var/log/ha-debug用戶記錄heartbeat的調試信息
logfile/var/log/ha-logheartheat的日誌文件
logfacilitylocal0設置日誌級別
keepalive 2心跳(檢測)間隔時間,默認爲秒
deadtime 30超出30秒未收到節點的心跳,則認爲對方死亡
warntime 10警告時間,一般設置爲daetime時間的一半
initdead 120網絡啓動時間,至少爲deadtime的兩倍
udpport694設置廣播通訊使用的端口,694爲默認使用的端口
baud19200波特率,串口通訊的速度
bcasteth1發送heartbeat心跳的網卡
auto_failback on用來定義當主節點恢復後,是否將服務自動切回,heartbeat的兩臺主機分別爲主節點和備份節點。主節點在正常狀況下佔用資源並運行全部的服務,遇到故障時把資源交給備份節點並由備份節點運行服務。在該選項設爲on的狀況下,一旦主節點恢復運行,則自動獲取資源並取代備份節點,若是該選項設置爲off,那麼當主節點恢復後,將變爲備份節點,而原來的備份節點成爲主節點
nodenode1兩個節點的名稱 uname -a查看必須相同
nodenode2
ping 192.168.0.253集羣之外的節點,測試網絡連通性
respawn hacluster /usr/lib64/heartbeat/ipfail該選項爲可選配置,列出與heartbeat一塊兒啓動和關閉的進程,該進程通常是和heartbeat集成的插件,這些進程遇到故障能夠自動從新啓動。
[root@node1 ha.d]#
2.六、修改haresources
[root@node1 ~]# cd /etc/ha.d/
[root@node1 ha.d]# grep -v "^#" haresources
node1 IPaddr::192.168.0.100/24/eth0 ldirectord lvsdr
[root@node1 ~]#
(注:中間以空格分割,lvsdr要在ldirectord後面,不然lvsdr沒法啓動起來)
這些服務能夠由heartbeat來啓動和關閉,若是要託管這些服務,必須將服務寫成能夠經過start/stop來啓動和關閉的腳步,而後放到/etc/init.d/或者/etc/ha.d/resource.d/目錄下,heartbeat會根據腳本的名稱自動去/etc/init.d或者/etc/ha.d/resource.d/目錄下找到相應腳步進行啓動或關閉操做。
3、安裝LVS
3.一、安裝ipvsadm-1.26.tar.gz
[root@node1 ~]# yum -y install kernel-devel make gcc openssl-devel libnl* popt*
[root@node1 ~]# rpm -ivh popt-static-1.13-7.el6.x86_64.rpm
[root@node1 ~]# ln -s /usr/src/kernels/2.6.32-71.el6.x86_64/ /usr/src/linux
[root@node1 ~]# tar xvf ipvsadm-1.26.tar.gz -C /usr/local/src/
[root@node1 ~]# cd /usr/local/src/ipvsadm-1.26/
[root@node1 ipvsadm-1.26]# make
[root@node1 ipvsadm-1.26]# make install
3.二、配置lvsdr數據分發腳本
lvsdr負責分發數據。啓動後日志中會看到檢測到的後臺realserver
[root@node1 ~]# vim /etc/init.d/lvsdr
#!/bin/bash
# description: start LVS of Directorserver
VIP=192.168.0.100
RIP1=192.168.0.13
RIP2=192.168.0.14
SERVICE=80
#http is used in this case
. /etc/rc.d/init.d/functions
case $1 in
start)
echo "start lvsdr of Directorserver"
echo "0" >/proc/sys/net/ipv4/ip_forward
echo "1" >/proc/sys/net/ipv4/conf/all/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/default/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/eth0/send_redirects
#Clear IPVS table
/sbin/ipvsadm -C
#set LVS
/sbin/ipvsadm -A -t $VIP:$SERVICE -s rr
/sbin/ipvsadm -a -t $VIP:$SERVICE -r $RIP1:$SERVICE -g -w 1
/sbin/ipvsadm -a -t $VIP:$SERVICE -r $RIP2:$SERVICE -g -w 1
/sbin/ipvsadm --set 30 120 300
#Run LVS
/sbin/ipvsadm
#end
;;
stop)
echo "close LVS of Directorserver"
/sbin/ipvsadm -C
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
[root@node1 ~]# chmod u+x /etc/init.d/lvsdr
3.三、配置ldirectord.cf狀態檢測文件
ldirectord負責realserver的健康檢查,能夠自動將realserver中宕機的機器移除,再也不分配請求。
[root@node1 ha.d]# grep -v ^# ldirectord.cf | sed '/^$/d'
checktimeout=3判斷realserver出錯的的時間間隔
checkinterval=1指定ldirectord兩次檢查之間的間隔時間
fallback=127.0.0.1:80當全部的realserver節點不能正常工做時,web服務重定向地址
autoreload=yes是否自動加載配置文件,yes時配置文件變化時自動加載配置信息
logfile="/var/log/ldirectord.log"日誌輸出文件
quiescent=no選擇no時若是一個節點在checktiimeout時設置的時間週期沒有反映,ldirectord將會從LVS路由表中直接刪除realserver,此時將中斷現有的客戶端鏈接,而且LVS丟掉全部的鏈接跟蹤記錄和保持鏈接模版;yes時,當某個realserver失效時,ldirectord將失效節點的權值設置爲0,新的鏈接布恩那個達到,但不會從LVS路由表中刪除此節點,同時鏈接跟蹤記錄和程序鏈接模版仍保留在directord上
virtual=192.168.0.100:80VIP地址和端口號
real=192.168.0.13:80 gate指定realserver的IP地址和端口號,同時設定LVS工做模式,用gate表示DR模式,ipip表示TUNL模式,masq表示NAT模式。
real=192.168.0.14:80 gate
fallback=127.0.0.1:80 gate
service=http指定服務的類型,這裏表示對htp服務進行負載均衡。
scheduler=rr指定調度算法,rr表示輪叫
protocol=tcp指定協議的類型,LVS支持tcp和udp
checktype=negotiate指定ldirectord的檢測類型,默認negotiate,經過頁面交互來判斷服務節點是否正常
checkport=80指定監控的端口
request="index.html"ldirectord請求頁面,用來判斷節點是否正常
receive="Test Page"指定請求和答應字符串,也就是index.html的內容
virtualhost=www.x.y.z虛擬服務器的名稱,能夠任意指定。
3.四、Realserver腳本配置
[root@localhost ~]# cat /etc/init.d/lvsrs
#!/bin/bash
VIP=192.168.0.100
. /etc/rc.d/init.d/functions
case "$1" in
start)
echo "Start LVS of 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 >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
# route del $VIP >/dev/null 2>&1
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
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
[root@localhost ~]#
4、服務啓動
默認狀況下,node1主提供服務node2檢測node1的狀態但不提供服務。 當node1出現故障時node2備自動切換爲主的,node1恢復時會自動搶佔爲主的提供服務node2變爲備。
[root@node1 ~]# service heartbeat start
[root@node2 ~]# service heartbeat start
啓動heartbeat時會自動啓動,ldirectord和lvsdr(根據haresources定義)
啓動時可查看日誌,是否有報錯
啓動realserverl腳本
[root@web1~]# /etc/init.d/lvsrs start
[root@web2 ~]# /etc/init.d/lvsrs start
5、禁止apache多餘信息
正常狀況下,每對健康檢查頁面訪問一次,Apache就記錄一條日誌,這樣會很快致使你的access_log和磁盤驅動器填滿無用的信息,爲了不出現這個狀況,修改httpd.conf配置文件 再也不記錄node1和node2的訪問信息:
SetEnvIf Remote_Addr "192.168.0.11" dontlog
SetEnvIf Remote_Addr "192.168.0.12" dontlog
引用dontlog變量
CustomLog logs/access_log combined env=!dontlog
而後從新啓動Apache。
6、結果測試
6.一、lvs請求分發測試(調度算法rr)
web一、web2都啓動時
web1啓動,web2關閉
說明ldirectord和lvsdr沒問題。
6.二、Heartbeat主背切換測試
測試node1 和node2是否能夠正常自動切換
node1啓動,node2關閉
node二、web一、web2都啓動,node1關閉
說明heartbeat沒問題。