Heartbeatでクラスターを組む

セカンダリノードの設定


前回、プライマリーノードの設定を行いましたが、セカンダリノー ドの設定も、ホスト名とIPアドレスの設定以外はプライマリノードと同じです。
プライマリーノードのイメージをコピーして使うこともできます。


ホスト名を設定する

ホスト名は以下の様にしました。
プライマリノード:orange-node1
セカンダリノード:orange-node2

以下のコマンドでセカンダリノードのホスト名を設定します。
$ sudo hostnamectl set-hostname orange-node2


IPアドレスを固定にする

IPアドレスは以下の様にしました。
プライマリノード:192.168.10.51
セカンダリノード:192.168.10.52

こちら
の手順でStaticなIPアドレスに変更します。


/etc/hsostを設定する

/etc/hostsにプライマリとセカンダリの両方のホスト名を登録します。
$ cat /etc/hosts
127.0.0.1   localhost orangepizero
::1         localhost orangepizero ip6-localhost ip6-loopback
fe00::0     ip6-localnet
ff00::0     ip6-mcastprefix
ff02::1     ip6-allnodes
ff02::2     ip6-allrouters
orange-node1 192.168.10.51
orange-node2 192.168.10.52


パッケージをインストールする

$ sudo aptitude install heartbeat cluster-glue
$ sudo aptitude install pacemaker


設定ファイルを作成する

プライマリ側と全く同じ内容で、以下の3つのファイルを作成します。

/etc/ha.d/ha.cf
$ cat /etc/ha.d/ha.cf
logfile /var/log/ha-log
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
bcast eth0
auto_failback on
node orange-node1 orange-node2
uuidfrom nodename

/etc/ha.d/haresources
$ cat /etc/ha.d/haresources
orange-node1 192.168.10.50/24

/etc/ha.d/authkeys
このファイルだけはパーミッションを600に変更しておく必要が有ります。
$ sudo cat /etc/ha.d/authkeys
auth 1
1 crc

$ sudo chmod 600 /etc/ha.d/authkeys


サービス定義ファイルを一部変更する

heartbeatはサービスとして起動しますが、orangepiの場合、Ethernetの初期化に時間がかかるので、少し変更が必要でし た。
$ sudo vi /lib/systemd/system/heartbeat.service
[Unit]
Description=Heartbeat High Availability Cluster Communication and Membership
# partially copied and adapted from the pacemaker.service file

#After=basic.target → コメントアウト
#After=network.target → コメントアウト

#Requires=basic.target → コメントアウト
#Requires=network.target → コメントアウト

Wants=network-online.target → 追加
After=network-online.target → 追加

(後略)


サービスの起動

$ sudo systemctl disable heartbeat
Synchronizing state of heartbeat.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable heartbeat

$ sudo systemctl list-unit-files --type=service | grep heartbeat
heartbeat.service                          disabled

$ sudo systemctl enable heartbeat
Synchronizing state of heartbeat.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable heartbeat

$ sudo systemctl start heartbeat

$ sudo systemctl status heartbeat
● heartbeat.service - Heartbeat High Availability Cluster Communication and Membership
   Loaded: loaded (/lib/systemd/system/heartbeat.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-02-19 22:44:46 JST; 12min ago
 Main PID: 1168 (heartbeat)
    Tasks: 4 (limit: 4915)
   CGroup: /system.slice/heartbeat.service
           tq1168 heartbeat: master control process
           tq1181 heartbeat: FIFO reader
           tq1184 heartbeat: write: bcast eth0
           mq1185 heartbeat: read: bcast eth0

Feb 19 22:44:46 orange-node1 systemd[1]: Started Heartbeat High Availability Cluster Communication and Membership.
Feb 19 22:44:47 orange-node1 heartbeat[1168]: heartbeat: udpport setting must precede media statementsFeb 19 22:44:47 orange-node1 heartbeat: [1168]: WARN: Cor
Feb 19 22:44:47 orange-node1 heartbeat[1168]: Feb 19 22:44:47 orange-node1 heartbeat: [1168]: WARN: Consider setting non-default value in /proc/sys/kernel/core
Feb 19 22:44:47 orange-node1 heartbeat[1168]: Feb 19 22:44:47 orange-node1 heartbeat: [1168]: WARN: Consider setting /proc/sys/kernel/core_uses_pid (or equival
Feb 19 22:44:47 orange-node1 heartbeat[1168]: Feb 19 22:44:47 orange-node1 heartbeat: [1168]: info: Pacemaker support: false
Feb 19 22:44:47 orange-node1 heartbeat[1168]: Feb 19 22:44:47 orange-node1 heartbeat: [1168]: WARN: Logging daemon is disabled --enabling logging daemon is rec
Feb 19 22:44:47 orange-node1 heartbeat[1168]: Feb 19 22:44:47 orange-node1 heartbeat: [1168]: info: **************************
Feb 19 22:44:47 orange-node1 heartbeat[1168]: Feb 19 22:44:47 orange-node1 heartbeat: [1168]: info: Configuration validated. Starting heartbeat 3.0.6

起動が失敗するときは、ログファイル(/var/log/ha-log)を見れば原因が分かります。

続く....