用Heartbeat實(shí)現(xiàn)web服務(wù)器高可用
在武山等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、成都做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需求定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,全網(wǎng)整合營(yíng)銷推廣,外貿(mào)營(yíng)銷網(wǎng)站建設(shè),武山網(wǎng)站建設(shè)費(fèi)用合理。
heartbeat概述:
Heartbeat 項(xiàng)目是Linux-HA工程的一個(gè)組成部分,它實(shí)現(xiàn)了一個(gè)高可用集群系統(tǒng)。心跳服務(wù)和集群通信是高可用集群的兩個(gè)關(guān)鍵組件,在 Heartbeat 項(xiàng)目里,由heartbeat模塊實(shí)現(xiàn)了這兩個(gè)功能。
端口號(hào):694
1)heartbeat的工作原理:
heartbeat最核心的包括兩個(gè)。部分,心跳監(jiān)測(cè)部分和資源接管部分,心跳監(jiān)測(cè)可以通過網(wǎng)絡(luò)鏈路和串口進(jìn)行,而且支持冗余鏈路,它們之間相互發(fā)送報(bào)文來告訴對(duì)方自己當(dāng)前的狀態(tài),如果在指定的時(shí)間內(nèi)未收到對(duì)方發(fā)送的報(bào)文,那就認(rèn)為對(duì)方失效,這時(shí)需啟動(dòng)資源接管模塊來接管運(yùn)行在對(duì)方主機(jī)上的資源或者服務(wù)
2)高可用集群
高可用集群是指一組通過硬件和軟件連接起來的獨(dú)立計(jì)算機(jī),它們?cè)谟脩裘媲氨憩F(xiàn)為一個(gè)單一系統(tǒng),在這樣的一組計(jì)算機(jī)系統(tǒng)內(nèi)部的一個(gè)或者多個(gè)節(jié)點(diǎn)停止工作,服務(wù)會(huì)從故障節(jié)點(diǎn)切換到正常工作的節(jié)點(diǎn)上運(yùn)行,不會(huì)引起服務(wù)中斷。從這個(gè)定義可以看出,集群必須檢測(cè)節(jié)點(diǎn)和服務(wù)何時(shí)失效,何時(shí)恢復(fù)為可用。這個(gè)任務(wù)通常由一組被稱為“心跳”的代碼完成。在Linux-HA里這個(gè)功能由一個(gè)叫做heartbeat的程序完成
3)Heartbeat-3.X版本以后被分為了4個(gè)模塊:
1)ClusterLabs-resource-agents-v3.9.2-0-ge261943.tar.gz #集群實(shí)驗(yàn)資源代理
2)Heartbeat-3-0-7e3a82377fa8.tar.bz2 # 心跳主程序包
3)pacemaker-1.1.9-1512.el6.src.rpm # 起搏器
4)Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2 #可重復(fù)使用的群集組件
一:實(shí)驗(yàn)拓?fù)?/strong>
二:實(shí)驗(yàn)?zāi)繕?biāo)
1:用heartbeat實(shí)現(xiàn)web服務(wù)器高可用
三:實(shí)驗(yàn)環(huán)境
Note1:WEB主xuegod63.cn 192.168.1.63
Note2:WEB備xuegod64.cn 192.168.1.64
NFS xuegod62.cn 192
準(zhǔn)備工作:保持兩臺(tái)節(jié)點(diǎn)主機(jī)一致
1. 修改主機(jī)名,永久生效
# vim /etc/sysconfig/network
HOSTNAME=xuegod63.cn
2. 解析
# vim /etc/hosts
192.168.1.63 xuegod63.cn
192.168.1.64 xuegod64.cn
3:時(shí)間一致
[root@xuegod63 ~]# date
2016年10月30日 星期日15:18:47 CST
4. 關(guān)防火墻,關(guān)掉selinux
[root@xuegod63 ~]# service iptables stop
四:實(shí)驗(yàn)代碼
--------------------------------------------------------------------------------------------------------------
1、配置xuegod62為NFS服務(wù)器,提供存儲(chǔ)資源
1)安裝NFS服務(wù)
[root@xuegod62 ~]# rpm -ivh /mnt/Packages/nfs-utils-1.2.3-39.el6.x86_64.rpm
2)編寫測(cè)試網(wǎng)頁并共享
[root@xuegod62 ~]# mkdir /wwwdir
[root@xuegod62 ~]# echo "heartbeat http ha" > /wwwdir/index.html
[root@xuegod62 ~]#vim /etc/exports #編寫共享文件及網(wǎng)段
/wwwdir 192.168.1.0/24(rw):
3)添加共享目錄權(quán)限:
[root@xuegod62 ~]# chmod 777 -R /wwwdir/
4)開啟nfs服務(wù)
[root@xuegod62 ~]# service nfs restart
[root@xuegod62 ~]# chkconfig nfs on
2、xuegod63測(cè)試nfs存儲(chǔ)掛載并安裝httpd web服務(wù)器:
1)安裝阿帕奇服務(wù)并測(cè)試NFS文件有沒有共享成功
[root@xuegod63 ~]# yum install httpd -y
[root@xuegod63 ~]# showmount -e 192.168.1.62 #查看NFS共享文件
Export list for 192.168.1.62:
/wwwdir 192.168.1.0/24
2)掛載文件夾到本地網(wǎng)站根目錄
[root@xuegod63 ~]# mount -t nfs 192.168.1.62:/wwwdir /var/www/html/
[root@xuegod63 ~]#df -h
[root@xuegod63 ~]# service httpd restart
3)測(cè)試:
[root@xuegod63 ~]# yum install elinks -y
[root@xuegod63 ~]# elinks --dump 192.168.1.63
heartdeat http ha
httpd//:192.168.1.63
4)卸載資源:后期這些資源通過heartbeat直接加載
[root@xuegod63 ~]# umount /var/www/html/
[root@xuegod63 ~]# service httpd stop
[root@xuegod63 ~]# chkconfig httpd off#后期依靠hartbeat啟動(dòng)
3、xuegod64測(cè)試nfs存儲(chǔ)掛載并安裝httpd web服務(wù)器:
1)安裝阿帕奇服務(wù)并測(cè)試NFS文件有沒有共享成功
[root@xuegod64 ~]# yum install httpd -y
[root@xuegod64 ~]# showmount -e 192.168.1.62
Export list for 192.168.1.62:
/wwwdir 192.168.1.0/24
2)掛載文件夾到本地網(wǎng)站根目錄
[root@xuegod64 ~]# mount -t nfs 192.168.1.62:/wwwdir /var/www/html/
[root@xuegod64 ~]# service httpd restart
3)測(cè)試:
[root@xuegod64 ~]# yum install elinks -y
[root@xuegod64 ~]# elinks --dump 192.168.1.64
heartdeat http ha
4)卸載資源:后期這些資源通過heartbeat直接加載
[root@xuegod64 ~]# umount /var/www/html/
[root@xuegod64 ~]# service httpd stop
[root@xuegod64 ~]# chkconfig httpd off
4、xuegod63安裝heartbeat
1)配置好yum源:
[root@xuegod63 ~]# cat /etc/yum.repos.d/rhel-source.repo
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=file:///mnt/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
#增加以下紅色內(nèi)容
[rhel-ha]
name=Red ha
baseurl=file:///mnt/HighAvailability
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[root@xuegod63 ~]#yum clean all
[root@xuegod63 ~]#yum list
#說明,如果不配置這個(gè)baseurl=file:///mnt/HighAvailabilit ,則無法使用yum安裝cluster-glue和resource-agents。
centos 6.2或5的源里 cluster-glue、resource-agents、pacemaker 都有,就是沒有heartbeat。 幸好heartbeat的source里提供了.spec 可以用rpmbuild來生成rpm包。
2)安裝heartbeat
[root@xuegod63~]# tar -jxvf /root/Heartbeat-3-0-958e11be8686.tar.bz2
[root@xuegod63 ~]# cd Heartbeat-3-0-958e11be8686
[root@xuegod63 Heartbeat-3-0-958e11be8686]# rpmbuild -ba heartbeat-fedora.spec
error: File /root/rpmbuild/SOURCES/heartbeat.tar.bz2:#錯(cuò)誤提示。有那個(gè)文件或目錄,但是會(huì)創(chuàng)建好目錄
[root@xuegod63~]# tar -jxvf /root/Heartbeat-3-0-958e11be8686.tar.bz2 -C /root/rpmbuild/SOURCES/
[root@xuegod63~]# cd /root/rpmbuild/SOURCES/
[root@xuegod63 SOURCES]# mv Heartbeat-3-0-958e11be8686 heartbeat #修改名稱
[root@xuegod63 SOURCES]# tar -jcvf heartbeat.tar.bz2 heartbeat # 打包,生成的heartbeat.tar.bz2軟件包,如果直接使用源碼包,生成rpm包時(shí),會(huì)報(bào)錯(cuò)。
(1)開始生成RPM包
參數(shù):rpmbuild參數(shù) (-bb 只編譯二進(jìn)制rpm包 -bs 只編譯源碼srpm包 -ba 同時(shí)編譯二進(jìn)制和源碼srpm包)
[root@xuegod64 ~]# yum install ncurses-devel openssl-devel gettext bison flex mailx cluster-glue-libs-devel docbook-dtds docbook-style-xsl libtool-ltdl-devel -y
[root@xuegod63 SOURCES]# cd heartbeat
[root@xuegod63 heartbeat]# rpmbuild -ba heartbeat-fedora.spec
3):安裝軟件包
[root@xuegod63 ~]# cd /root/rpmbuild/RPMS/x86_64/
[root@xuegod63 x86_64]# yum install -y cluster-glue resource-agents
[root@xuegod63 x86_64]# rpm -ivh heartbeat-libs-3.0.6-1.el6.x86_64.rpm
[root@xuegod63 x86_64]# rpm -ivh heartbeat-3.0.6-1.el6.x86_64.rpm
5、在xuegod64上安裝:heartbeat
1)把軟件包和yum配置文件拷貝到xuegod64上:
[root@xuegod63 ~]#cd /root/rpmbuild/RPMS/x86_64/
[root@xuegod63 x86_64]# scp -r ./* 192.168.1.64:/root/
[root@xuegod63 x86_64]#scp /etc/yum.repos.d/rhel-source.repo 192.168.1.64:/etc/yum.repos.d/
[root@xuegod64 ~]#cd /root/rpmbuild/RPMS/x86_64/
[root@xuegod64 x86_64]#yum install ncurses-devel openssl-devel gettext bison flex mailx cluster-glue-libs-devel docbook-dtds docbook-style-xsl -y
[root@xuegod64 x86_64]# rpm -ivh heartbeat-libs-3.0.5-1.el6.x86_64.rpm
[root@xuegod64 x86_64]# yum install -y cluster-glue resource-agents
[root@xuegod64 x86_64]# rpm -ivh heartbeat-3.0.6-1.el6.x86_64.rpm
2)查看生成的用戶和組:
[root@xuegod64 ~]# grep haclient /etc/group
haclient:x:489:
[root@xuegod64 ~]# id hacluster
uid=495(hacluster) gid=489(haclient) groups=489(haclient)
6、配置heartbeat :xuegod63和xuegod64
xuegod63上生成heartbeat配置文件(將xuegod63配置好的文件拷貝的xuegod64上)
1)拷貝配置文件
[root@xuegod63~]# cp /usr/share/doc/heartbeat-3.0.6/ha.cf /etc/ha.d/ #主配置文件
[root@xuegod63 ~]# cp /usr/share/doc/heartbeat-3.0.6/authkeys /etc/ha.d/ #主備節(jié)點(diǎn)間通信時(shí)所使用的驗(yàn)證文件,保證安全性
[root@xuegod63 ~]# cp /usr/share/doc/heartbeat-3.0.6/haresources /etc/ha.d/ #浮動(dòng)資源的配置文件
2)設(shè)置主備節(jié)點(diǎn)間通信時(shí)所使用的驗(yàn)證文件,保證安全性。主備節(jié)點(diǎn)配置要求一致。
[root@xuegod63 ~]# vim /etc/ha.d/authkeys
改:
為:
auth 3
#1 crc
#2 sha1 HI!
3 md5 mkkey
[root@xuegod63 ~]# chmod 600 /etc/ha.d/authkeys #此文件權(quán)限必須是600,否則啟動(dòng)不成功
注:
/etc/ha.d/authkeys 文件決定了認(rèn)證密鑰。共有三種認(rèn)證方式:crc,md5,和sha1。
三種認(rèn)證方法的用途
如果Heartbeat運(yùn)行于安全網(wǎng)絡(luò)之上,如本例中的交叉線,可以使用crc,從資源的角度來看,這是代價(jià)最低的方法。如果網(wǎng)絡(luò)并不安全,但也希望降低CPU使用,則使用md5。最后,如果想得到最好的認(rèn)證,而不考慮CPU使用情況,則使用sha1,它在三者之中最難破解。
3)修改浮動(dòng)資源,注意添加的順序,::表示分隔符
[root@xuegod63 ~]#vim /etc/ha.d/haresources
改: 44 #node-name resource1 resource2 ... resourceN
為:
xuegod63.cn IPaddr::192.168.1.200/24/eth0 Filesystem::192.168.1.62:/wwwdir::/var/www/html::nfs httpd
注:
node-name填的是主服務(wù)器的主機(jī)名。 xuegod64上不需要修改。這樣資源默認(rèn)會(huì)加一這個(gè)主機(jī)上。當(dāng)xuegod63壞了,xuegod64會(huì)再接管。
IPaddr::192.168.1.200/24/eth0 #指定VIP及綁定到哪個(gè)網(wǎng)卡上
Filesystem::192.168.1.62:/wwwdir::/var/www/html::nfs #指定要掛載的存儲(chǔ)
httpd #指定要啟動(dòng)的服務(wù)。這個(gè)服務(wù)必須是/etc/init.d下,可以通過service去啟動(dòng)或關(guān)閉
4)測(cè)試
(1)測(cè)試: 手動(dòng)加載VIP 192.168.1.200到eth0上
[root@xuegod63 ~]# ll /etc/ha.d/resource.d/IPaddr
-rwxr-xr-x 1 root root 2273 Jul 29 20:49 /etc/ha.d/resource.d/IPaddr
[root@xuegod63 ~]# /etc/ha.d/resource.d/IPaddr 192.168.1.200/24/eth0 start
IPaddr[7116]: INFO: Success
INFO: Success
查看 VIP:
[root@xuegod63 x86_64]#ip addr #可以看到 eth0:0 的IP為:192.168.1.200
注:在Linux rhel6.2版本中可以使用ifconfig查看,但是在rhel6.5上只能用ip addr 命令來查看到
(2)測(cè)試: 手動(dòng)加載NFS存儲(chǔ)資源到/var/www/html
[root@xuegod63 ~]# /etc/ha.d/resource.d/Filesystem 192.168.1.62:/wwwdir /var/www/html/ nfs start
Filesystem[23575]: INFO: Running start for 192.168.1.62:/wwwdir on /var/www/html
Filesystem[23567]: INFO: Success
INFO: Success
[root@xuegod63 ~]# mount
192.168.1.62:/wwwdir on /var/www/html type nfs (rw,vers=4,addr=192.168.1.62,clientaddr=192.168.1.63)
(3)測(cè)試: 手動(dòng)啟動(dòng)httpd服務(wù)
[root@xuegod63 ~]# /etc/init.d/httpd restart
[root@xuegod63 ~]# grep /etc/ha.d/ha.cf #默認(rèn)只開啟了以下兩行內(nèi)容
logfacility local0
auto_failback on
注釋:
#auto_failback on #為on時(shí),主結(jié)點(diǎn)恢復(fù)正常后,資源自動(dòng)轉(zhuǎn)給主結(jié)點(diǎn)。 建議設(shè)為auto_failback off ,等主節(jié)點(diǎn)恢復(fù)正常后,在業(yè)務(wù)不繁忙時(shí),切換回來。防止主節(jié)點(diǎn)恢復(fù)正常時(shí),回切時(shí),再次影起網(wǎng)絡(luò)中斷。
5)修改配置文件
[root@xuegod63 ~]# vim /etc/ha.d/ha.cf #將配置文件中,以下內(nèi)容前面的#號(hào)去掉
24 debugfile /var/log/ha-debug
29 logfile /var/log/ha-log
48 keepalive 2 #設(shè)定heartbeat之間的時(shí)間間隔為2秒。
56 deadtime 30 #在30秒后宣布節(jié)點(diǎn)死亡。
61 warntime 10 #在日志中發(fā)出“l(fā)ate heartbeat“警告之前等待的時(shí)間,單位為秒。
71 initdead 120 #在某些系統(tǒng)上,系統(tǒng)啟動(dòng)或重啟之后需要經(jīng)過一段時(shí)間網(wǎng)絡(luò)才能正常工作,該選項(xiàng)用于解決這種情況產(chǎn)生的時(shí)間間隔。取值至少為deadtime的兩倍。
76 udpport 694 #使用端口694進(jìn)行bcast和ucast通信。這是默認(rèn)的,并且在IANA官方注冊(cè)的端口號(hào)。
121 ucast eth0 192.168.1.64 #表示從本機(jī)的eth0接口發(fā)心跳消息給對(duì)方節(jié)點(diǎn),寫另一端的IP地址 。 這是單播地址。 xuegod64上改為192.168.1.63 。心跳網(wǎng)卡 ,如果你有兩個(gè)網(wǎng)卡,可以寫成eth2
注:配置文件中 91 #bcast eth0 #表示在eth0接口上使用廣播heartbeat(將eth2替換為eth0,eth3,或者您使用的仸何接口)。
157 auto_failback on #當(dāng)auto_failback設(shè)置為on時(shí),一旦主節(jié)點(diǎn)重新恢復(fù)聯(lián)機(jī),將從從節(jié)點(diǎn)取回所有資源。若該選項(xiàng)設(shè)置為off,主節(jié)點(diǎn)便不能重新獲得資源。
211 node xuegod63.cn #該選項(xiàng)是必須配置的。集群中機(jī)器的主機(jī)名,與“uname –n”的輸出相同。
212 node xuegod64.cn
修改以下內(nèi)容
改:223 #ping 10.10.10.254
為:223 ping 192.168.1.1 #通過ping命令來實(shí)現(xiàn)仲裁
改:256 #respawn hacluster /usr/lib/heartbeat/ipfail
為:256 respawn hacluster /usr/libexec/heartbeat/ipfail
改:262 #apiauth ipfail gid=haclient uid=hacluster
為: apiauth ipfail gid=haclient uid=hacluster
到此修改結(jié)束,保存,退出。
7、xuegod64上配置heartbeat
1)復(fù)制配置文件到xuegod64上:
root@xuegod63 ~]# cd /etc/ha.d/
[root@xuegod63 ha.d]# scp ha.cf haresources authkeys 192.168.1.64:/etc/ha.d/
[root@xuegod64 ~]# chmod 600 /etc/ha.d/authkeys #此文件必須是600否則heartbeat啟動(dòng)不成功
#修改單播地址
[root@xuegod64 ~]# vim /etc/ha.d/ha.cf
改: ucast eth0 192.168.1.64
為: ucast eth0 192.168.1.63
2)兩機(jī)器啟動(dòng)heartbeat服務(wù):
[root@xuegod63 ~]# /etc/init.d/heartbeat restart
[root@xuegod64 ~]# /etc/init.d/heartbeat restart
#等待資源接管完成。 takeover接管。 當(dāng)啟動(dòng)停留在這個(gè)界面時(shí),xuegod64會(huì)接管所有浮動(dòng)資源。等下面啟動(dòng)成功時(shí),xuegod64會(huì)釋放資源,浮云資源,再次加載。
3)在xuegod63查看集群資源:
[root@xuegod63 ~]# ifconfig
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:12:EC:1E
inet addr:192.168.1.200 Bcast:192.168.1.255 Mask:255.255.255.0
[root@xuegod63 ~]# df -h
/dev/sr0 3.4G 3.4G 0 100% /mnt
192.168.1.62:/wwwdir 9.7G 3.4G 5.8G 37% /var/www/html
[root@xuegod63 ~]# /etc/init.d/httpd status
httpd (pid 23641) is running...
4)xuegod64上查看,沒有任何浮云資源:
[root@xuegod64 ~]# ifconfig
[root@xuegod64 ~]# df -h
[root@xuegod63 ~]# /etc/init.d/httpd status
httpd is stopped
8、測(cè)試:
兩臺(tái)主機(jī)都開啟時(shí),所有請(qǐng)求到轉(zhuǎn)到了xuegod63上。訪問:http://192.168.1.200/ 正常。當(dāng)?shù)魓uegod63,關(guān)閉網(wǎng)卡,等30秒鐘,所有請(qǐng)求都轉(zhuǎn)到xuegod64上了
1)主掛掉,驗(yàn)證備
[root@xuegod63 ha.d]# ifdown eth0
[root@xuegod64 ~]# ifconfig
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:48:80:95
inet addr:192.168.1.200 Bcast:192.168.1.255 Mask:255.255.255.0
[root@xuegod64 ~]# df -h
192.168.1.62:/wwwdir 9.7G 3.4G 5.8G 37% /var/www/html
[root@xuegod64 ~]# service httpd status
httpd (pid 6375) is running...
2)主再次復(fù)活,驗(yàn)證搶占功能---xuegod63上把eth0網(wǎng)卡再次開啟:
[root@xuegod63 ~]# ifup eth0
等30秒后,查看:
[root@xuegod63 ~]# df -h
192.168.1.62:/wwwdir 9.7G 3.4G 5.8G 37% /var/www/html #已經(jīng)加載了httpd資源
[root@xuegod63 ~]# service httpd status
httpd (pid 27097) is running...
[root@xuegod63 ~]# ifconfig
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:12:EC:1E
inet addr:192.168.1.200 Bcast:192.168.1.255 Mask:255.255.255.0
資源已經(jīng)回切過來。
3)在xuegod64上查看釋放資料:
[root@xuegod64 ~]# ifconfig #查看不到eth0:0 192.168.1.200 這個(gè)IP地址
[root@xuegod64 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.7G 3.7G 5.5G 41% /
tmpfs 569M 0 569M 0% /dev/shm
/dev/sda1 194M 28M 157M 15% /boot
/dev/sr0 3.4G 3.4G 0 100% /mnt
[root@xuegod64 ~]# service httpd status
httpd is stopped