1、HA集羣介紹
HA即(high available)高可用,又被叫做雙機熱備,用於關鍵性業務。可以這樣理解,有兩臺機器A和B,正常情況下,A提供服務,B待命閒置,當A宕機或服務宕掉,會切換至B機繼續提供該服務。常用實現高可用的開源軟件有heartbeat和keepalived,其中keepalived有負載均衡的功能。
如圖所示爲一個HA架構,一個交換機下面有兩臺機器Web1和Web2,其中Web1爲主節點,正常使它提供服務,而Web2備用節點是閒置的。Web1和Web2中間有一根心跳線,檢查對方的存活狀態。流動IP,也叫vip是對外提供服務的ip,正常情況下配置在Web1上,當Web1宕機後,Web2會自動配置該vip,對外提供服務。
2、前期準備
準備兩臺機器,一個使用了centos6.5,另一個centos6.3,系統版本不同不影響實驗
網卡eth0 ip如下
master 192.168.1.165
slave 192.168.1.163
下面操作在兩個機器上都要操作:
(1)設置hostname,分別爲主master和從slave
主上設置:
# hostname master
# vim /etc/sysconfig/network
HOSTNAME=localhost.localdomain
修改爲
HOSTNAME=master
從上設置
# hostname slave
# vim /etc/sysconfig/network
HOSTNAME=localhost.localdomain
修改爲
HOSTNAME=slave
(2)關閉防火牆,主從都操作
# iptables -F
# service iptables save
# getenforce 0
# vim /etc/selinux/config
SELINUX=enforcing
修改爲
SELINUX=disabled
(3)配置host,主從操作一樣
# vim /etc/host
192.168.1.165 master
192.168.1.163 slave
3、heartbeat安裝
主機和從機都需要安裝heartbeat,同時需要libnet,主機從機執行同樣的命令
# yum install -y heartbeat
# yum install -y libnet
如果沒有包,則需要安裝一個擴展yum源,heartbeat在epel源中。
# yum install -y epel-release
4、主節點配置
需要先將3個相關的配置文件放置在heartbeat的配置目錄下
# cd /usr/share/doc/heartbeat-3.0.4/
# cp authkeys ha.cf haresources /etc/ha.d/
之後便可以開始修改配置文件了,先修改驗證文件
# cd /etc/ha.d/
# vim authkeys # 用來驗證,主從通過通信驗證對方是否存活,需要加密
auth 3 # 此處打開,數字表示選擇哪種加密方式
#1 crc # 最簡單
#2 sha1 HI! # 最複雜
3 md5 Hello! # 處於中間等級的加密方式
# chmod 600 /etc/ha.d/authkeys
# 如果不修改權限,heartbeat啓動不了
第二個配置haresources文件,只需要編輯一行。因爲當前在ha.d目錄下,直接vim。如果不是,用絕對路徑或者cd
# vim haresources
#node1 10.0.0.170 Filesystem::/dev/sda1::/data1::ext2
#找到上面一行,改成下面,需要去掉#
master 192.168.1.186/24/eth0:0 nginx
# master是主的主機名;192.168.1.186是vip,/24指定網段,網卡eth0:0(這裏採用了虛擬網卡);nginx提供服務,如果主宕掉,從啓動。
最後一個配置ha.cf,裏邊基本全是註釋,這裏選擇刪掉重新寫入,當前依舊在/etc/ha.d目錄下
# > ha.cf
# vim ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
ucast eth0 192.168.1.163
auto_failback on
node master
node slave
ping 192.168.1.1
respawn hacluster /usr/lib/heartbeat/ipfail
配置說明:
debugfile /var/log/ha-debug:該文件保存heartbeat的調試信息
logfile /var/log/ha-log:heartbeat的日誌文件
logfacility local0 :日誌級別
keepalive 2:心跳的時間間隔,默認單位秒
deadtime 30:超出該時間未收到對方節點的心跳,則認爲對方死亡
warntime 10:超出該時間未收到對方節點的心跳,則發出警告並記錄到日誌
initdead 60:在某些系統上,系統啓動或重啓之後需要經過一段時間網絡才能正常工作,該選項用於解決這種情況產生的時間間隔。最少爲deadtime的兩倍
udpport 694:設置廣播通信使用的端口,694爲默認端口號
ucast eth0 192.168.1.163:ucast指定對方ip,bcast形式尋找;eth0心跳檢測自己的網卡,ip對方的ip
auto_failback on:heartbeat的兩臺主機分別爲主節點和從節點。主節點正常情況下佔用資源運行所有服務,遇到故障把資源交給從節點由從節點運行服務。選項爲on情況下,一旦主節點恢復運行,則自動獲取資源並取代從節點運行服務。
node master:指定主
node slave:指定從
ping 192.168.1.1
respawn hacluster /usr/lib/heartbeat/ipfail:指定與heartbeat一同啓動和關閉的進程,該進程被自動監視,遇到故障則重新啓動。最常用的進程是ipfail,該進程用於檢測和處理網絡故障,需要配合ping語句指定的pingnode來檢測網絡連接。如果系統是64位,將地址中的lib改爲lib64
然後安裝一個nginx,用於後邊測試
# yum install -y nginx
5、從節點配置
把主上的三個配置拷貝到從上,使用scp命令;並且只需要在從上修改ha.cf文件一個地方即可
# scp authkeys ha.cf haresources slave:/etc/ha.d/
# vim /etc/ha.d/ha.cf
ucast eth0 192.168.1.163改爲ucast eth0 192.168.1.165
也安裝一個nginx,用於後邊測試
# yum install -y nginx
6、heartbeat測試
啓動heartbeat,順序很重要,先主後從
# service heartbeat start
檢查測試(主),第一次會需要等待一段時間,耐心
# ifconfig
看是否有eth0:0
# ps aux | grep nginx
看是否有nginx進程
測試(1)
因爲主從指間的心跳實質是通過ping來連通,so主故意禁掉ping,死掉
# iptables -D INPUT -p icmp -j DROP
如果失敗,查看日誌發現卡在這裏不動
Dec 08 18:56:53 master heartbeat: [9590]: WARN: node 192.168.1.1: is dead
Dec 08 18:56:53 master heartbeat: [9590]: info: Link 192.168.1.1:192.168.1.1 dead.
Dec 08 18:56:53 master ipfail: [9619]: info: Status update: Node 192.168.1.1 now has status dead
harc(default)[10097]: 2016/12/08_18:56:53 info: Running /etc/ha.d//rc.d/status status
Dec 08 18:56:54 master ipfail: [9619]: info: NS: We are dead. :<
Dec 08 18:56:54 master ipfail: [9619]: info: Link Status update: Link 192.168.1.1/192.168.1.1 now has status dead
Dec 08 18:56:55 master ipfail: [9619]: info: We are dead. :<
Dec 08 18:56:55 master ipfail: [9619]: info: Asking other side for ping node count.
嘗試解決方法
將從上的ha.cf配置文件中的ucast修改如下
bcast eth0
然後重新測試