2021/06/07

如何在 CentOS 7 安裝 Heartbeat

Heartbeat 3.x 版拆分為 heartbeat, cluster-glue, resource-agent 三個部分,必須要分開安裝。

  • 確認 hostname

    #vim /etc/hosts,增加兩行 (Server A 和 Server B 上都要各設定兩行)
    192.168.1.35 kokome1
    192.168.1.36 kokome2
  • 安裝編譯需要的套件,以及 kernel-devel-$(uname -r) kernel-headers-$(uname -r)

yum install -y bzip2 autoconf automake libtool glib2-devel libxml2-devel bzip2-devel libtool-ltdl-devel asciidoc libuuid-devel psmisc
  • 安裝 cluster-glue
wget http://hg.linux-ha.org/glue/archive/0a7add1d9996.tar.bz2

tar jxvf 0a7add1d9996.tar.bz2
cd Reusable-Cluster-Components-glue--0a7add1d9996/
groupadd haclient
useradd -g haclient hacluster
./autogen.sh
./configure --prefix=/usr/local/heartbeat/
make
make install

cd ..
  • 安裝 Resource Agents
wget https://github.com/ClusterLabs/resource-agents/archive/v3.9.6.tar.gz
tar zxvf v3.9.6.tar.gz
cd resource-agents-3.9.6/
./autogen.sh
export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
./configure --prefix=/usr/local/heartbeat/

echo "/usr/local/heartbeat/lib" > /etc/ld.so.conf.d/heartbeat.conf
ldconfig

make
make install

cd ..
  • 安裝 heartbeat
wget http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/958e11be8686.tar.bz2
tar jxvf 958e11be8686.tar.bz2
cd Heartbeat-3-0-958e11be8686
./bootstrap
export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
./configure --prefix=/usr/local/heartbeat/

vi /usr/local/heartbeat/include/heartbeat/glue_config.h
/*define HA_HBCONF_DIR “/usr/local/heartbeat/etc/ha.d/”*/   (這行用/**/註釋掉)

make
make install

cd ..
  • 複製設定
ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/* /usr/local/heartbeat/lib/heartbeat/plugins/RAExec/
ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/

cp /usr/local/heartbeat/share/doc/heartbeat/ha.cf  /usr/local/heartbeat/etc/ha.d
cp /usr/local/heartbeat/share/doc/heartbeat/authkeys /usr/local/heartbeat/etc/ha.d
cp /usr/local/heartbeat/share/doc/heartbeat/haresources /usr/local/heartbeat/etc/ha.d
  • 修改 authkeys

vim /usr/local/heartbeat/etc/ha.d/authkeys #在最後加上

auth 1
1 crc
chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys
  • 設定 ha.cf

因為這個檔案說明太多,尋找和修改不方便,執行下面把原來的換個名稱,把 ha.cf.old 檔案過濾掉註解,剩下的輸出到 ha.cf 檔案中再修改

mv /usr/local/heartbeat/etc/ha.d/ha.cf /usr/local/heartbeat/etc/ha.d/ha.cf.old
sed -e '/^#/d' -e '/^$/d' /usr/local/heartbeat/etc/ha.d/ha.cf.old > /usr/local/heartbeat/etc/ha.d/ha.cf

然後再去修改 /usr/local/heartbeat/etc/ha.d/ha.cf 內容 (參數說明去看剛剛備份的 /etc/ha.d/ha.cf.old)

vi /usr/local/heartbeat/etc/ha.d/ha.cf

logfile /var/log/ha.log
logfacility local0
keepalive 2
deadtime 30
initdead 120
bcast eth0
udpport 694
auto_failback on
node kokome1
node kokome2
ping 192.168.1.1
respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster

node 值必須和兩台主機的 uname -n 執行結果相符合 可以用 ping gateway ip 來偵測 logfile 是設定 heartbeat 執行情況的 log

  • 設定 haresources

vim /usr/local/heartbeat/etc/ha.d/haresources,最後加入一行

kokome1 IPaddr::192.168.1.13/24/eth0 tomcat httpd

第1個參數是 HA 的主要電腦的 hostname
第2個參數是虛擬介面 IP
第3個參數服務名稱
  • 把 heartbeat 設定全部複製到 Server B 上
scp -r /usr/local/heartbeat/etc/ha.d/ root@192.168.1.12:/usr/local/heartbeat/etc/ha.d/
  • 啟動 heartbeat

    service heartbeat restart
    
    chkconfig heartbeat on
    chkconfig --add heartbeat
    chkconfig --level 2345 heartbeat on
    chkconfig --list heartbeat
    
  • 如果 ifconfig 沒有看到 Virtual IP 的資訊 就改用以下指令

    ip -o -f inet addr show
  • ssh 免密碼

    yum -y install openssh-clients
    
    kokome1:
    mkdir -p /root/.ssh
    cd /root/.ssh
    ssh-keygen -t dsa
    按enter直到完成
    
    (id_kokome1.pub為自己辨識用的名稱)
    scp id_dsa.pub 192.168.1.12:/root/.ssh/id_kokome1.pub
    
    ssh 192.168.1.12
    cd /root/.ssh/
    cat id_kokome1.pub >> authorized_keys
    完成ssh免密碼
    
    kokome2:
    cd /root/.ssh
    ssh-keygen -t dsa
    按enter直到完成
    
    (id_kokome2.pub為自己辨識用的名稱)
    scp id_dsa.pub 192.168.1.11:/root/.ssh/id_kokome2.pub
    
    ssh 192.168.1.11
    cd /root/.ssh/
    cat id_kokome2.pub >> authorized_keys
    完成ssh免密碼
  • 測試

1) Server A 正常時 用瀏覽器連上 http://192.168.1.11,應該會出現 "I am kokome 1" 用瀏覽器連上 http://192.168.1.12,應該會出現 "連線失敗" 一類訊息 用瀏覽器連上 http://192.168.1.13,應該會出現 "I am kokome 1"

(2) Server A 當掉時 假設 Server A 當了,心跳 (heartbeat) 停了,請執行

service heartbeat stop

或把 Server A 關機

(工作接管可能需要 1,2分鐘)

用瀏覽器連上 http://192.168.1.11,應該會出現 "連線失敗" 一類訊息 用瀏覽器連上 http://192.168.1.12,應該會出現 "I am kokome 2" 用瀏覽器連上 http://192.168.1.13,應該會出現 "I am kokome 2"

(3) Server A 又復原

假設 Server A 復原,心跳 (heartbeat) 復原,請執行

service heartbeat start

(工作接管可能需要 1,2分鐘)

用瀏覽器連上 http://192.168.1.11,應該會出現 "I am kokome 1" 用瀏覽器連上 http://192.168.1.12,應該會出現 "連線失敗" 一類訊息 用瀏覽器連上 http://192.168.1.13,應該會出現 "I am kokome 1"

這樣表示測試成功

  • 發生 error

ERROR: Cannot locate resource script httpd

解決方法

cp /usr/sbin/apachectl /usr/local/heartbeat/etc/ha.d/resource.d/httpd

References

Current Linux-HA Release Downloads

centos7.5部署heartbeat+DRBD+mysql高可用方案

CentOS7數據庫架構之NFS+heartbeat+DRBD(親測,詳解)

Heartbeat 3.0.3 介绍及rpm