Jquery中文網 www.uhadif.co
Jquery中文網 >  服務器技術  >  集群與高可用  >  正文 Linux下的heartbeat 雙機熱備

Linux下的heartbeat 雙機熱備

發布時間:2014-08-15   編輯:www.uhadif.co
HeartBeat用于搭建雙機熱備環境,可以通過專門的心跳線來連接雙機,也可以通過普通的網線來連接。

1、簡介
HeartBeat用于搭建雙機熱備環境,可以通過專門的心跳線來連接雙機,也可以通過普通的網線來連接。
官方網站:http://www.linux-ha.org。
當然在linux 下面除了heartbeat還有很多,比如redhat的cluster軟件等等。下面將簡單介紹heartbeat的安裝和配置。

2.安裝
2.1. 準備
本試驗環境共有2個主機,其IP分別為:
主機名                   IP地址
alssme_probe3 172.18.158.23
alssme_probe4 172.18.158.24
如果/etc/hosts中沒有配置的話, 則需要先配置/etc/hosts文件

2.2 創建用戶和用戶組
heartbeat需要haclient用戶組和hacluster用戶。
兩個節點做同樣的操作,并保證haclient和hacluster的ID一樣。
[[email protected]_probe3 log]# groupadd haclient
[[email protected]_probe3 log]# useradd -g haclient hacluster

2.3. 安裝
可以直接下載rpm包,或者自己下載源碼包進行編譯,在這里,我采用自己編譯源碼的方式。安裝heartbeat前,需要先安裝libnet包。
[[email protected]_probe3 tmp]# tar zxvf heartbeat-2.1.3.tar.gz
[[email protected]_probe3 tmp]# rpm -ivh libnet-1.1.2.1-2.2.el4.rf.x86_64.rpm
[[email protected]_probe3 tmp]# cd heartbeat-2.1.3
[[email protected]_probe3 tmp]#./configure
[[email protected]_probe3 tmp]# make
[[email protected]_probe3 tmp]# make install
同樣地,在另一個主機上也是這么安裝。
libnet包可以在http://rpmfind.net/linux/rpm2html/search.php這里搜索到。

3. 配置
heartbeat有三個配置文件:
ha.cf
authkyes
haresources
這些文件在每臺機器都要保持一致。下面將一一介紹。
cp /usr/local/share/doc/heartbeat-2.1.3/ha.cf /usr/local/etc/ha.d
cp /usr/local/share/doc/heartbeat-2.1.3/haresources /usr/local/etc/ha.d
cp /usr/local/share/doc/heartbeat-2.1.3/authkeys /usr/local/etc/ha.d

3.1 編輯hertbeat主配置文件ha.cf,2個主機上的內容一樣。
以下是需要打開的配置,ha.cf里面有詳細說明。
[[email protected]_probe3 tmp]# vi /usr/local/etc/ha.d/ha.cf
## ha的日志文件記錄位置。如沒有該目錄,則需要手動添加
logfile /var/log/ha-log #File to write other messages to
logfacility local0 #這個是設置heartbeat的日志,這里是用的系統日志
##設定心跳(監測)時間時間為2秒
keepalive 2 #多長時間檢測一次
warntime 5 #連續多長時間聯系不上后開始警告提示
deadtime 20 #連續多長時間聯系不上后認為對方掛掉了(單位是妙)
initdead 120 #這里主要是給重啟后預留的一段忽略時間段(比如:重啟后啟動網絡等,如果在網絡還沒有通,keepalive檢測肯定通不過,但這時候并不能切換)
#采用bond0的udp廣播用來發送心跳信息
#bcast bond0
#采用網卡bond0的udp單播來通知心跳,ip應為對方IP,建議采用單播。當一個網段有多臺這樣cluster話,則一定要采用單播,否則每組cluster都會看到對方的節點,從而報錯。
ucast bond0 172.18.57.154

##使用udp端口694 進行心跳監測
udpport 694
auto_failback off #恢復正常后是否需要再自動切換回來,一般都設為off。

##節點1,必須要與 uname -n 指令得到的結果一致。
node alsme_probe3
##節點2
node alssme_probe4
##通過ping 網關來監測心跳是否正常
ping 172.18.158.254
hopfudge 1
deadping 5
#指定和heartbeat一起啟動、關閉的進程#respawn hacluster /usr/local/lib64/heartbeat/ipfail#apiauth ipfail gid=haclient uid=hacluster
#是否采用v2 style模式,在三節點以上時一定要打開
#crm on
從heartbeat的官方文檔來看,目前的ping節點還沒什么實際用途,只是用于檢測節點的連通性,并不作為節點切換的真正依據。在將來的新版本中也許會這么做。

3.2 編輯雙機互聯驗證文件:authkeys
[[email protected]_probe3 heartbeat-2.1.3]# vi /usr/local/etc/ha.d/authkeys
auth 1
1 crc
[[email protected]_probe3 heartbeat-2.1.3]# chmod 600 /usr/local/etc/ha.d/authkeys
注意authkeys的權限一定要是600.

3.3 編輯集群資源文件:haresources
[[email protected]_probe3 heartbeat-2.1.3]# vi /usr/local/etc/ha.d/haresources
alssme_probe3 IPaddr::172.18.158.111/24/bond0 mysql
如何配置,可以參見haresources,里面也有詳細的說明。
注意事項:
1).資源組的第一列是我們在ha.cf配置文件中的node之一,而且應該是當前準備作為primary節點的那一個node。
2).每一行代表一個資源組,如果一行寫不下可以用" "換行
3).資源組啟動順序是從左往右,關閉的順序是從右往左
4).腳本的參數通過::來分隔和傳遞
5).一個資源組里面不同資源之間以空格分隔
6).不同的資源組之間沒有必然關系
7).每個資源都是一個角本,可以是在/etc/init.d目錄下面的,也可以是/usr/local/etc/ha.d/resource.d目錄下面的角本。這些角本必須要支持xxx start;xxx stop;模式。
8).關于service IP的資源設置格式詳見haresources文件。
9).如果mysql是編譯安裝的話, 則需要修改/etc/init.d/mysql文件中的basedir和datadir兩個參數

3.4 資源角本例子---drbd
下面是drbd的資源管理角本的例子:
[[email protected]_probe3 heartbeat-2.1.3]# vi /usr/local/etc/ha.d/resource.d/drbd
#!/bin/sh
case "$1" in
start)
#聲明為drbd的primary節點
drbdadm primary db
#掛載文件系統
mount /dev/drbd0 /data
#啟動相關服務
service mysql start
;;
stop)
#上面操作的反向
service mysql stop
umount /dev/drbd0 /data
drbdadm secondary db
;;esac
exit 0
我們測試的mysql是安裝mysql時自帶的,在/etc/init.d目錄下面,它可以實現mysql的啟動和關閉。
如果我們采用的是heartbeat+雙master模式的話, 則不需要加上mysql資源組。
如果我們采用的是heartbeat+master/slave模式的話,則需要重新mysql角本,在start時將slave變成master。在stop時將master變成slave。
建議還是采用heartbeat+雙master模式,這樣將數據丟失降到最低。

4. 測試
測試切換不外乎以下幾種:
1).手工調用heartbeat的節點切換腳本
2).拔掉網線,測試在primary節點的網絡斷開后的切換情況,通過測試,在拔掉網線后,當主節點發現無法和standby節點無法通信后,會在log中記錄warn信息,如果延續時間達到在ha.cf中設定的時長后,會開始釋放資源,standby節點發現無法和主節點通信一段時間(ha.cf設定)后,開始嘗試啟動資源并將自己active成primary節點。切換過程除ha.cf中設定的時長之外的時間段同樣非常短。這里容易出現custer腦分裂的問題。如果采用雙master的話,就不存在這個問題。
3). shutdown primary主機,測試是否能夠正常切換。
4). 主節點機器掉電,是否能夠正常切換。
第一種和第三種測試方法一定要測一下。

5.管理
啟動和關閉heartbeat的方法:
/etc/init.d/hearbeat start或service heartbeat start

/etc/init.d/hearbeat stop或service heartbeat stop
手工切換:
[[email protected]_probe3 rc.d]# /usr/local/share/heartbeat/hb_standby
2008/07/19_20:01:21 Going standby [all].
[[email protected]_probe3 rc.d]# service heartbeat status
heartbeat OK [pid 13763 et al] is running on alsme_probe3 [alsme_probe3]...
手工接管
[[email protected]_probe3 rc.d]# /usr/local/share/heartbeat/hb_takeover
查看heartbeat狀態
[[email protected]_probe3 rc.d]# service heartbeat status
heartbeat OK [pid 13763 et al] is running on alsme_probe3 [alsme_probe3]...

6.其他
實際測試結果表明:如果采用myisam存儲引擎,則在primary節點當掉的時候,總會丟失數據;而采用innodb存儲引擎時,如果 primary節點本身沒有程序往本機寫數據的話,那么基本上不會發生數據丟失;而如果primary節點本身有程序在寫數據,則在當機瞬間,本機上的程序可能還會寫入部分數據,而如果是其他主機程序連接過來的話,基本上不會發生丟數據的情況。
建議:在drbd+hb的環境中,最好是采用innodb存儲引擎,并且設置innodb_flush_log_at_trx_commit = 1,這使得幾乎每個提交的事務都能記錄在 ib_logfile* 中,在 secondary 節點上能得到恢復,減小損失。
heartbeat有兩種模式,默認的模式只支持兩個節點。如果cluster里面有2個以上節點的話,則需要采用cib模式,即v2 style:
1).把三個節點都加到ha.cf里,然后在ha.cf里加上"crm 1"
2).然后用/usr/local/lib64/heartbeat/haresources2cib.py 把原來的/usr/local/etc/ha.d/haresources 轉換成 /usr/local/var/lib/heartbeat/crm/cib.xml.
"/usr/local/lib64/heartbeat/haresources2cib.py haresources /usr/local/var/lib/heartbeat/crm/cib.xml"
3).把haresources清空
另外如果只起一個節點的話,則service IP地址需要2分鐘才能生效。這個時間不知道是如何控制的。

您可能感興趣的文章:
Linux下的heartbeat 雙機熱備
haproxy+keepalived負載均衡之主備切換(centos)
Linux下備份與還原整個MySQL數據庫
網站備份與數據庫備份shell腳本
vps自動備份shell腳本代碼
電腦從待機狀態恢復時出現藍屏死機的處理方法
linux啟動過程詳解
Nginx負載均衡和LVS負載均衡的比較分析
Linux和Windows雙系統引導問題及解決辦法
備份數據庫的shell腳本

[關閉]
北京pk赛车历史 股票融资余额增加 25选7 finnciti游戏理财平台 证券公司佣金排名 河北20选5 江苏神通股票 理财平台排行榜前40名 棒球比分直播网球 北京快3 新疆35选7 股票行情大盘 广东好彩1 五大保本理财最好 腾讯股票行情 翻翻配资 上海天天彩