Heartbeat實現集羣高可用熱備

公司最近須要針對服務器實現熱可用熱備,這幾天也一直在琢磨這個方面的東西,今天作了一些Heartbeat方面的工做,在此記錄下來,給須要的人以參考。 html

Heartbeat 項目是 Linux-HA 工程的一個組成部分,它實現了一個高可用集羣系統。經過Heartbeat咱們能夠實現雙機熱備,以實現服務的持續性。 node

heartbeat (Linux-HA)的工做原理:heartbeat最核心的包括兩個部分,心跳監測部分和資源接管部分,心跳監測能夠經過網絡鏈路和串口進行,並且支持冗 餘鏈路,它們之間相互發送報文來告訴對方本身當前的狀態,若是在指定的時間內未受到對方發送的報文,那麼就認爲對方失效,這時需啓動資源接管模塊來接管運 行在對方主機上的資源或者服務。 mysql

在 CentOS 中包含了該組件,能夠直接Yum 進行安裝,這裏就不在贅述,本文意提供的是用編譯安裝方式安裝heartbeat的步驟和配置項,以供參考。 linux

安裝Heartbeat對硬件沒什麼特別要求,主機間通訊方式能夠選擇網絡或者串口方式實現,若是選擇經過網絡鏈路來通訊的就須要每一個主機裝有兩張網卡。 c++

本文選擇安裝的heartbeat版本爲Heartbeat 3,Heartbeat 3與 2.x的最大差異在於,3 按模塊把的原來2.x 拆分爲多個子項目,而且提供了一個cluster-glue的組件,專用於Local ResourceManager 的管理。即heartbeat + cluster-glue + resouce-agent 三部分。 git

一、安裝依賴包

Heartbeat 所需的依賴包包括了:gcc gcc-c++ autoconf automake libnet libtool glib2-devel libxml2-devel bzip2-devel e2fsprogs-devel libxslt-devel libtool-ltdl-devel make wget docbook-dtds docbook-style-xsl github

在centos下能夠經過yum快速安裝 sql

yum install -y gcc gcc-c++ autoconf automake libnet libtool glib2-devel libxml2-devel bzip2-devel e2fsprogs-devel libxslt-devel libtool-ltdl-devel make wget docbook-dtds docbook-style-xsl

2. 添加組和用戶

groupadd haclient
useradd -g haclient hacluster -M -s /sbin/nologin

3. 安裝Cluster-Glue

Cluster-Glue是一個heartbeat的組件,至關於一箇中間層,能夠將heartbeat和crm(pacemaker)聯繫起來,它主要包含2個部分,LRM和STONITH; shell

安裝地址:http://hg.linux-ha.org/glue/archive/glue-1.0.9.tar.bz2 bootstrap

//下載解壓後
./autogen.sh
./configure --prefix=/usr/local/heartbeat --sysconfdir=/etc/heartbeat libdir=/usr/local/heartbeat/lib64 LIBS='/lib64/libuuid.so.1'
make && make install
  • 32位環境須要將配置參數中的lib64 更改成 lib
  • 安裝過程當中會從 sourceforge 下載一些文件,確保sourceforge能夠正常訪問

4. 安裝Resource Agents

就是各類的資源的ocf腳本,這些腳本將被LRM調用從而實現各類資源啓動、中止、監控等等

安裝地址:https://github.com/ClusterLabs/resource-agents/tarball/v3.9.2

//下載解壓後
./autogen.sh
./configure --prefix=/usr/local/heartbeat --sysconfdir=/etc/heartbeat libdir=/usr/local/heartbeat/lib64 CFLAGS=-I/usr/local/heartbeat/include LDFLAGS=-L/usr/local/heartbeat/lib64 LIBS='/lib64/libuuid.so.1'
ln -s /usr/local/heartbeat/lib64/* /lib64/
//創建一個軟鏈接,避免編譯時找不到所須要的包
make && make install
  • 32位環境須要將配置參數中的lib64 更改成 lib

5.安裝Heartbeat

安裝地址:http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/7e3a82377fa8.tar.bz2

//下載解壓後
./bootstrap
./configure --prefix=/usr/local/heartbeat --sysconfdir=/etc/heartbeat CFLAGS=-I/usr/local/heartbeat/include LDFLAGS=-L/usr/local/heartbeat/lib64 LIBS='/lib64/libuuid.so.1'
vi /usr/local/heartbeat/include/heartbeat/glue_config.h
// 刪除 glue_config.h 最後一行定義的配置文件路徑,避免編譯時產生的路徑重複定義錯誤,Shift+g 跳到末行,dd刪除
// define HA_HBCONF_DIR "/usr/local/heartbeat/etc/ha.d/" :wq保存完成.
make && make install
將配置文件複製到 /etc/heartbeat/ 下,並使用sed 修改路徑

cp doc/ha.cf /etc/heartbeat/ha.d/
cp doc/haresources /etc/heartbeat/ha.d/
cp doc/authkeys /etc/heartbeat/ha.d/
chkconfig --add heartbeat
chkconfig heartbeat on
chmod 600 /etc/heartbeat/ha.d/authkeys

sed -i 's#/usr/lib/ocf#/usr/local/heartbeat/usr/lib/ocf#g' /etc/heartbeat/ha.d/shellfuncs
sed -i 's#/usr/lib/ocf#/usr/local/heartbeat/usr/lib/ocf#g' /etc/heartbeat/ha.d/resource.d/hto-mapfuncs
sed -i 's#/usr/lib/ocf#/usr/local/heartbeat/usr/lib/ocf#g' /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/ocf-shellfuncs
創建Resource-Agent 的腳本軟鏈接,避免Heartbeat 找不到路徑而沒法工做
ln -s /usr/local/heartbeat/usr/lib/ocf /usr/lib/ocf

系統服務能夠經過 service heartbeat start/stop 來啓動中止,但啓動以前先要進行一些配置

6. 進行配置(只簡單說明下提供參考)

  1. 主機名:能夠經過uname -n命令查看當前主機名 假設如今兩個主機分別爲node1和node2

  2. 設置主機ip:

    • node1:

      • eth0:192.168.1.101(對外ip)
      • eth1:10.10.10.1(心跳ip)
    • node2

      • eth0:192.168.1.102(對外ip)
      • eth1:10.10.10.2(心跳ip)
    • 虛擬ip:192.168.103

  3. 編輯Heartbeat 檢測參數配置文件,如下文件做爲參考
vi /etc/heartbeat/ha.d/ha.cf

下面是針對node1的配置,node2相似配置便可

# ====配置文件內容開始====
 debugfile /var/log/ha-debug
 # 用於記錄heartbeat的調試信息

logfile /var/log/ha-log
 # 用於記錄heartbeat的日誌信息

logfacility local0
 #用於log記錄的記錄

keepalive 2
 # 設置心跳間隔

deadtime 30
 # 在30秒後宣佈節點死亡

warntime 10
 # 在日誌中發出「late heartbeat「警告以前等待的時間,單位爲秒

initdead 120
 # 網絡啓動時間

udpport 694
 # 廣播/單播通信使用的udp端口

#baud 19200
 #serial /dev/ttyS0
 # 使用串口heartbeat

bcast eth1
 # 使用網卡eth1廣播發送心跳檢測,也能夠以多播(mcast)和單薄方式(ucast)發送心跳檢查

auto_failback on
 # 當主節點從故障中恢復時,將自動切換到主節點

watchdog /dev/watchdog
 # 該指令是用於設置看門狗定時器,若是節點一分鐘內都沒有心跳,那麼節點將從新啓動

node node1
node node2
 # 集羣中機器的主機名,與「uname –n」的輸出相同。

ping 10.10.10.2
 # ping 網關或路由器來檢測鏈路正常,這裏設置node2的心跳檢測地址

respawn hacluster /usr/local/heartbeat/lib64/heartbeat/ipfail
 # respawn調用 ipfail 來主動進行切換

apiauth ipfail gid=haclient uid=hacluster
 # 設置啓動ipfail的用戶和組
 # ====文件配置內容結束======
  1. 編輯資源文件
vi /etc/heartbeat/ha.d/haresources
HA-01 192.168.0.1 mysqld
 #機器名 虛擬服務器IP  系統服務
*在啓動的時候,節點node1啓用192.168.1.101 的虛擬IP地址,對外提供服務,同時也啓動 mysqld 服務,當關閉的時候, heartbeat中止mysqld 服務,而後取消ip地址. 這裏的主機用是用命令 uname -n 獲取到的一致,資源文件支持不少種配置方法,請參考其它說明文
  1. 配置驗證密鑰
vi /etc/heartbeat/ha.d/authkeys
auth 1  //認證序號1
1 crc   //序號1 crc
*規則說明 auth 後面填寫序號,可任意填寫,但第二行開頭必須爲序號名,而後爲驗證方式,支持三種( crc md5 sha1 )方式驗證,最後面是自定義密鑰
chmod 600 /etc/heartbeat/ha.d/authkeys
//文件權限更改成600
以一樣方式配置了node2以後,就能夠啓動heartbeat進入工做了

正常工做時,使用 ifconfig 查看網絡鏈接信息,可看到Heartbeat 在 eth0 接口上新添加了一個虛擬IP地址

[root@node1 opt]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:EB:E3:5E
          inet addr:192.168.1.101  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feeb:e35e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:21944 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8325 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2564223 (2.4 MiB)  TX bytes:1670947 (1.5 MiB)

eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:EB:E3:5E
          inet addr:192.168.1.103  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
eth1      Link encap:Ethernet  HWaddr B8:AC:6F:38:13:E5
          inet addr:10.10.10.1  Bcast:10.10.10.255  Mask:255.255.255.0
          inet6 addr: fe80::baac:6fff:fe38:13e5/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:60926 errors:0 dropped:0 overruns:0 frame:0
          TX packets:92730 errors:2 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:8333807 (7.9 MiB)  TX bytes:15275228 (14.5 MiB)
          Interrupt:16

當節點出現故障時,本機會嘗試關閉服務和虛擬IP, 同時另外一臺機器檢測到故障會添加相同的虛擬IP地址,來對外提供服務,實現業務的不中斷,

參考資源:

  • http://www.oschina.net/p/heartbeat
  • http://www.linux-ha.org/wiki/Heartbeat

http://thinkjet.me/heartbeat-linux-centos.html

相關文章
相關標籤/搜索