天天看點

用Heartbeat實作web伺服器高可用

用Heartbeat實作web伺服器高可用

heartbeat概述:

端口号:694

1)heartbeat的工作原理:

heartbeat最核心的包括兩個。部分,心跳監測部分和資源接管部分,心跳監測可以通過網絡鍊路和序列槽進行,而且支援備援鍊路,它們之間互相發送封包來告訴對方自己目前的狀态,如果在指定的時間内未收到對方發送的封包,那就認為對方失效,這時需啟動資源接管子產品來接管運作在對方主機上的資源或者服務

2)高可用叢集

3)Heartbeat-3.X版本以後被分為了4個子產品:

1)ClusterLabs-resource-agents-v3.9.2-0-ge261943.tar.gz #叢集實驗資源代理

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 #可重複使用的群集元件

一:實驗拓撲

二:實驗目标

1:用heartbeat實作web伺服器高可用

三:實驗環境

Note1:WEB主 xuegod63.cn 192.168.1.63

Note2:WEB備 xuegod64.cn 192.168.1.64

NFS  xuegod62.cn 192

準備工作:保持兩台節點主機一緻  

1. 修改主機名,永久生效

# vim /etc/sysconfig/network

HOSTNAME=xuegod63.cn

2. 解析

# vim /etc/hosts

192.168.1.63 xuegod63.cn

192.168.1.64 xuegod64.cn

3:時間一緻

[root@xuegod63 ~]# date

2016年 10月 30日 星期日 15:18:47 CST

4. 關防火牆,關掉selinux

[root@xuegod63 ~]# service iptables stop

四:實驗代碼

--------------------------------------------------------------------------------------------------------------

1、配置xuegod62為NFS伺服器,提供存儲資源

1)安裝NFS服務

[root@xuegod62 ~]# rpm -ivh /mnt/Packages/nfs-utils-1.2.3-39.el6.x86_64.rpm

2)編寫測試網頁并共享

[root@xuegod62 ~]# mkdir /wwwdir

[root@xuegod62 ~]# echo "heartbeat http ha" > /wwwdir/index.html

[root@xuegod62 ~]#vim  /etc/exports  #編寫共享檔案及網段

/wwwdir 192.168.1.0/24(rw) :

3)添加共享目錄權限: 

[root@xuegod62 ~]# chmod 777 -R /wwwdir/

4)開啟nfs服務

[root@xuegod62 ~]# service nfs restart

[root@xuegod62 ~]# chkconfig nfs on

2、xuegod63測試nfs 存儲挂載并安裝httpd web伺服器: 

1)安裝阿帕奇服務并測試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)挂載檔案夾到本地網站根目錄

[root@xuegod63 ~]# mount -t nfs 192.168.1.62:/wwwdir /var/www/html/  

[root@xuegod63 ~]#df -h

[root@xuegod63 ~]# service httpd restart

3)測試: 

[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啟動

3、xuegod64測試nfs 存儲挂載并安裝httpd web伺服器: 

[root@xuegod64 ~]# yum install httpd -y

[root@xuegod64 ~]# showmount -e 192.168.1.62

[root@xuegod64 ~]# mount -t nfs 192.168.1.62:/wwwdir /var/www/html/

[root@xuegod64 ~]# service httpd restart

3)測試:

[root@xuegod64 ~]# yum install elinks -y

[root@xuegod64 ~]# elinks --dump 192.168.1.64

[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

#增加以下紅色内容

[rhel-ha]

name=Red ha

baseurl=file:///mnt/HighAvailability

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release 

[root@xuegod63 ~]# yum clean all

[root@xuegod63 ~]#yum list

#說明,如果不配置這個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: #錯誤提示。有那個檔案或目錄,但是會建立好目錄

[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包時,會報錯。

(1)開始生成RPM包

參數:rpmbuild參數 (-bb 隻編譯二進制rpm包 -bs 隻編譯源碼srpm包 -ba 同時編譯二進制和源碼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/ #主備節點間通信時所使用的驗證檔案,保證安全性

[root@xuegod63 ~]# cp /usr/share/doc/heartbeat-3.0.6/haresources /etc/ha.d/ #浮動資源的配置檔案

2)設定主備節點間通信時所使用的驗證檔案,保證安全性。主備節點配置要求一緻。

[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 #此檔案權限必須是600,否則啟動不成功

注:

/etc/ha.d/authkeys 檔案決定了認證密鑰。共有三種認證方式:crc,md5,和sha1。

三種認證方法的用途

   如果Heartbeat運作于安全網絡之上,如本例中的交叉線,可以使用crc,從資源的角度來看,這是代價最低的方法。如果網絡并不安全,但也希望降低CPU使用,則使用md5。最後,如果想得到最好的認證,而不考慮CPU使用情況,則使用sha1,它在三者之中最難破解。

3)修改浮動資源,注意添加的順序,::表示分隔符

[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填的是主伺服器的主機名。 xuegod64上不需要修改。這樣資源預設會加一這個主機上。當xuegod63壞了,xuegod64會再接管。

IPaddr::192.168.1.200/24/eth0 #指定VIP及綁定到哪個網卡上

Filesystem::192.168.1.62:/wwwdir::/var/www/html::nfs #指定要挂載的存儲

httpd #指定要啟動的服務。這個服務必須是/etc/init.d下,可以通過service去啟動或關閉

4)測試

(1)測試: 手動加載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)測試: 手動加載NFS存儲資源到/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

[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)測試: 手動啟動httpd服務

[root@xuegod63 ~]# /etc/init.d/httpd restart

[root@xuegod63 ~]# grep /etc/ha.d/ha.cf #預設隻開啟了以下兩行内容

logfacility local0

auto_failback on

注釋:

#auto_failback on #為on時,主結點恢複正常後,資源自動轉給主結點。 建議設為auto_failback off ,等主節點恢複正常後,在業務不繁忙時,切換回來。防止主節點恢複正常時,回切時,再次影起網絡中斷。

5)修改配置檔案

[root@xuegod63 ~]# vim /etc/ha.d/ha.cf #将配置檔案中,以下内容前面的#号去掉

24 debugfile /var/log/ha-debug

29 logfile /var/log/ha-log

48 keepalive 2 #設定heartbeat之間的時間間隔為2秒。

56 deadtime 30 #在30秒後宣布節點死亡。

61 warntime 10 #在日志中發出“late heartbeat“警告之前等待的時間,機關為秒。

71 initdead 120 #在某些系統上,系統啟動或重新開機之後需要經過一段時間網絡才能正常工作,該選項用于解決這種情況産生的時間間隔。取值至少為deadtime的兩倍。

76 udpport 694 #使用端口694進行bcast和ucast通信。這是預設的,并且在IANA官方注冊的端口号。

121 ucast eth0 192.168.1.64 #表示從本機的eth0接口發心跳消息給對方節點,寫另一端的IP位址 。 這是單點傳播位址。 xuegod64上改為192.168.1.63 。心跳網卡 ,如果你有兩個網卡,可以寫成eth1

注:配置檔案中 91 #bcast eth0 #表示在eth0接口上使用廣播heartbeat(将eth1替換為eth0,eth2,或者您使用的仸何接口)。

157 auto_failback on #當auto_failback設定為on時,一旦主節點重新恢複聯機,将從從節點取回所有資源。若該選項設定為off,主節點便不能重新獲得資源。

211 node xuegod63.cn #該選項是必須配置的。叢集中機器的主機名,與“uname –n”的輸出相同。

212 node xuegod64.cn

修改以下内容

改:223 #ping 10.10.10.254

為:223 ping 192.168.1.1 #通過ping指令來實作仲裁

改: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

到此修改結束,儲存,退出。

7、xuegod64上配置heartbeat 

1)複制配置檔案到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啟動不成功

#修改單點傳播位址

[root@xuegod64 ~]# vim /etc/ha.d/ha.cf

改: ucast eth0 192.168.1.64

為: ucast eth0 192.168.1.63

2)兩機器啟動heartbeat服務:

[root@xuegod63 ~]# /etc/init.d/heartbeat restart

[root@xuegod64 ~]# /etc/init.d/heartbeat restart

#等待資源接管完成。 takeover接管。 當啟動停留在這個界面時,xuegod64會接管所有浮動資源。等下面啟動成功時,xuegod64會釋放資源,浮雲資源,再次加載。

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

httpd is stopped

8、測試:

兩台主機都開啟時,所有請求到轉到了xuegod63上。通路:http://192.168.1.200/ 正常 。當掉xuegod63,關閉網卡,等30秒鐘,所有請求都轉到xuegod64上了

1)主挂掉,驗證備

[root@xuegod63 ha.d]# ifdown eth0

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 ~]# service httpd status

httpd (pid 6375) is running...

2)主再次複活,驗證搶占功能---xuegod63上把eth0網卡再次開啟:

[root@xuegod63 ~]# ifup eth0

等30秒後,檢視:

192.168.1.62:/wwwdir 9.7G 3.4G 5.8G 37% /var/www/html #已經加載了httpd資源

[root@xuegod63 ~]# service httpd status

httpd (pid 27097) is running...

資源已經回切過來。

3)在xuegod64上檢視釋放資料:

[root@xuegod64 ~]# ifconfig #檢視不到eth0:0 192.168.1.200 這個IP位址

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

本文轉自 于學康 51CTO部落格,原文連結:http://blog.51cto.com/blxueyuan/1927500,如需轉載請自行聯系原作者

繼續閱讀