一、heartbeat介紹 heartbeat是HA高可用集群的一個重要組件,heartbeat實現了資源轉移和心跳信息傳遞。它的常用組合方式為heartbeat v1,heartbeat v2+crm,heartbeat v3 + pacemaker,目前版本為v3版本。 二、編譯前準備 hear ...
一、heartbeat介紹
heartbeat是HA高可用集群的一個重要組件,heartbeat實現了資源轉移和心跳信息傳遞。它的常用組合方式為heartbeat v1,heartbeat v2+crm,heartbeat v3 + pacemaker,目前版本為v3版本。
二、編譯前準備
heartbeat官方站點http://hg.linux-ha.org/
Cluster Glue官方站點https://github.com/ClusterLabs/cluster-glue
Resource Agents官方站點 https://github.com/ClusterLabs/resource-agents
node1:192.168.0.15
node2:192.168.0.16
配置集群前提:
(1)各節點時間一致,便於心跳信息傳遞,使用ntp實現
(2)節點間需要通過主機名互相通信,必須解析主機至IP地址
(a)建議名稱解析功能使用hosts文件來實現
(b)通信中使用的名字與節點名字必須保持一致 “uname -n” 或hostname展示出的名字保持一致
(3)考慮仲裁設備是否會用到
(4)建立各節點之間的root用戶能夠給予密鑰認證
(5)定義為集群中的資源,不能開機啟動
#使用ntpdate命令同步時間,並建立周期性任務 #可使用任意節點伺服器作為ntp時間伺服器,如各節點可上公網,可直接指定公網ntp伺服器 1、安裝ntp [root@node2 ~]# yum install -y ntp [root@node2 ~]# vim /etc/ntp.conf #修改配置文件允許本網段客戶端獲取地址 將下麵的語句 restrict default kod nomodify notrap nopeer noquery 修改為 restrict default nomodify restrict 192.168.0.0 mask 255.255.255.0 nomodify [root@node2 ~]# service ntpd start Starting ntpd: [ OK ] 查看同步過程 [root@node2 ~]# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *202.118.1.81 202.118.1.47 2 u 30 64 1 92.249 8.602 0.714 202.112.31.197 .INIT. 16 u - 64 0 0.000 0.000 0.000 2、客戶端創建周期任務,每3秒同步時間 [root@node1 ~]# crontab -e */3 * * * * /usr/sbin/ntpdate 192.168.0.16 &> /dev/null [root@node1 ~]# service crond start #手動同步成功,因ntp一般為自動,手動前kill掉所有ntp進程即可 [root@node1 ~]# ntpdate 192.168.0.16 14 Nov 20:26:09 ntpdate[3786]: adjust time server 192.168.0.16 offset -0.004440 sec 3、時間同步 [root@node2 ~]# date; ssh 192.168.0.15 'date' Mon Nov 14 20:36:17 CST 2016 root@192.168.0.15's password: Mon Nov 14 20:36:20 CST 2016 [root@node2 ~]# vim /etc/hosts 192.168.0.15 node1 192.168.0.16 node2 1、生成密鑰對 [root@node1 ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: a8:ad:2c:23:83:60:ff:36:73:9d:09:24:37:ae:da:c9 root@centfils The key's randomart image is: +--[ RSA 2048]----+ | | | | | | | . = | | * S | |.. o o | |+ . . o o o | |+ ooo*.. + | | o +*E+ | +-----------------+ 2、把公鑰傳輸至遠程伺服器對應用戶的家目錄 [root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.16 The authenticity of host '192.168.0.16 (192.168.0.16)' can't be established. RSA key fingerprint is e5:84:6c:f7:c0:60:3d:0b:39:b6:1e:12:0d:48:8b:07. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.0.16' (RSA) to the list of known hosts. root@192.168.0.16's password: Now try logging into the machine, with "ssh '[email protected]'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. 3、測試 [root@node2 ~]# date; ssh root@192.168.0.15 'date' Mon Nov 14 21:02:30 CST 2016 Mon Nov 14 21:02:30 CST 2016準備工作
三、編譯安裝
1、安裝依賴包(node1和node2同步安裝)
[root@node2 ~]# yum -y install autoconf automake gcc-c++ asciidoc libxslt-devel libtool libtool-ltdl-devel libxml2 libxml2-devel bzip2-devel glib2-devel mercurial *openssl* net-snmp OpenIPMI flex bison e2fsprogs-devel
2、源碼編譯安裝
下載地址http://linux-ha.org/wiki/Download #下載heartbeat [root@node2 ~]# wget http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/958e11be8686.tar.bz2 #下載cluster glue [root@node2 ~]# wget http://hg.linux-ha.org/glue/archive/0a7add1d9996.tar.bz2 #下載cluster resource agents 註意:需要FQ [root@node1 ~]# wget https://github.com/ClusterLabs/resource-agents/archive/v3.9.6.tar.gz
3、創建用戶與組
[root@node1 ~]# groupadd haclient
[root@node1 ~]# useradd -g haclient hacluster -M -s /sbin/nologin
4、編譯
cluster glue [root@node1 ~]# tar xf 0a7add1d9996.tar.bz2 [root@node1 ~]# cd Reusable-Cluster-Components-glue--0a7add1d9996/ [root@node1 Reusable-Cluster-Components-glue--0a7add1d9996]# ./autogen.sh ]# ./configure --prefix=/usr/local/heartbeat --sysconfdir=/etc/heartbeat libdir=/usr/local/heartbeat/lib64 LIBS='/lib64/libuuid.so.1' --with-daemon-user=hacluster --with-daemon-group=haclient #LIBS如果是32位系統自行更改 ]# make && make install resource agents [root@node1 ~]# tar xf resource-agents-3.9.6.tar.gz [root@node1 ~]# cd resource-agents-3.9.6 [root@node1 resource-agents-3.9.6]# ./autogen.sh [root@node1 resource-agents-3.9.6]# ./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' --with-daemon-user=hacluster --with-daemon-group=haclient [root@node1 resource-agents-3.9.6]# make && make install heartbeat [root@node1 ~]# tar xf 958e11be8686.tar.bz2 [root@node1 ~]# cd Heartbeat-3-0-958e11be8686/ [root@node1 Heartbeat-3-0-958e11be8686]# ./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' --with-daemon-user=hacluster --with-daemon-group=haclient #編譯報錯,路徑重覆,google後得出刪除 glue_config.h 中配置文件路徑即可 [root@node1 Heartbeat-3-0-958e11be8686]# make && make install ../include/config.h:390:1: error: this is the location of the previous definition gmake[1]: *** [strlcpy.lo] Error 1 gmake[1]: Leaving directory `/root/Heartbeat-3-0-958e11be8686/replace' make: *** [all-recursive] Error 1 [root@node1 Heartbeat-3-0-958e11be8686]# vim /usr/local/heartbeat/include/heartbeat/glue_config.h define HA_HBCONF_DIR "/usr/local/heartbeat/etc/ha.d/" #刪除最後一行即上行內容
5、複製配置文件至/etc//heartbeat/ha.d中
[root@node1 Heartbeat-3-0-958e11be8686]# cp doc/ha.cf /etc/heartbeat/ha.d/ [root@node1 Heartbeat-3-0-958e11be8686]# cp doc/haresources /etc/heartbeat/ha.d/ [root@node1 Heartbeat-3-0-958e11be8686]# cp doc/authkeys /etc/heartbeat/ha.d/
6、將heartbeat加入系統服務,並開機啟動
[root@node1 ~]# chkconfig --add heartbeat #之後可以用service來進行start|stop操作了 [root@node1 ~]# chkconfig heartbeat on
7、修改認證文件許可權為600,不然heartbeat無法工作
[root@node1 ~]# chmod 600 /etc/heartbeat/ha.d/authkeys
8、為resource-agents建立腳本軟連接
[root@node1 ~]# ln -s /usr/local/heartbeat/usr/lib/ocf /usr/lib/ocf
四、配置文件
1、配置authkeys文件,指明啟用何種演算法,使用何種密鑰,本文件須更改許可權為400 auth 2 #1 crc 2 sha1 2SIEok+gXAvB6G4seA8mhw #3 md5 Hello! 生成隨機字元串作為密鑰 [root@node2 ~]# openssl rand -base64 16 2SIEok+gXAvB6G4seA8mhw== 2、配置ha.cf文件,定義高可用集群的基本工作方式 定義日誌文件位置(二選一) logfacility為將日誌交由syslog管理 logfile /var/log/ha-log #logfacility local0 多長時間發送一次心跳信息,預設為2秒 #keepalive 2 多長時間宣佈某節點死亡,預設30秒 #deadtime 30 多長時間警告對方心跳信息延遲了,預設10秒 #warntime 10 第一次死去時間,避免因網路問題導致宣佈死亡 #initdead 120 使用udp694埠傳遞心跳,並選擇哪種方式傳遞心跳 #udpport 694 串列線纜傳遞心跳 #serial /dev/ttyS0 # Linux #serial /dev/cuaa0 # FreeBSD #serial /dev/cuad0 # FreeBSD 6.x #serial /dev/cua/a # Solaris 串列線纜的工作頻率 #baud 19200 廣播傳遞心跳 #bcast eth0 # Linux #bcast eth1 eth2 # Linux #bcast le0 # Solaris #bcast le1 le2 # Solaris 多播傳遞心跳,網卡必須支持多播,ifconfig | grep MULTICAST mcast eth0 225.0.0.1 694 1 0 #埠694,TTL為1,不允許回傳為0 #啟用網卡支持多播 [root@node1 ha.d]# ip link set eth0 multicast on 單薄傳遞心跳 #ucast eth0 192.168.1.2 自動故障轉回 auto_failback on 指明節點 #node ken3 #node kathy node node1 node node2 指明網關為ping node設備(仲裁設備) #ping 10.10.10.254 ping 192.168.0.1 指明一個組為ping node設備(仲裁設備) #ping_group group1 10.10.10.254 10.10.10.253 指明節點間傳送的壓縮演算法 compression bz2 指明節點間傳送數據壓縮的最小數據為2KB compression_threshold 2 3、配置haresources文件,定義集群資源 直接加入資源 node1 192.168.0.17/24/eth0/192.168.0.255 httpd 4、將httpd設置為開機不啟動 [root@node1 ha.d]# chkconfig httpd off 5、啟動服務 [root@node1 ~]# service heartbeat start
以上所有配置均所有節點一致