Heartbeatでクラスターを組む

mosquittoのインストール


プライマリノード、セカンダリノードの両方にmosquittoをインストールします。
mosquittoはインストールするとすぐに使える状態となります。
これでActive-Activeのクラスターが完成します。
$ sudo apt install mosquitto

$ sudo systemctl status mosquitto
● mosquitto.service - LSB: mosquitto MQTT v3.1 message broker
   Loaded: loaded (/etc/init.d/mosquitto; generated; vendor preset: enabled)
   Active: active (running) since Tue 2019-02-19 23:22:14 JST; 53s ago
     Docs: man:systemd-sysv-generator(8)
   CGroup: /system.slice/mosquitto.service
           mq5001 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

Feb 19 23:22:14 orange-node1 systemd[1]: Starting LSB: mosquitto MQTT v3.1 message broker...
Feb 19 23:22:14 orange-node1 mosquitto[4996]: Starting network daemon:: mosquitto.
Feb 19 23:22:14 orange-node1 systemd[1]: Started LSB: mosquitto MQTT v3.1 message broker.

別のマシンでsubscriberを実行します。
$ mosquitto_sub -h 192.168.10.50 -p 1883 -t "nopnop2002"

mosquittoのV1.7以降では、allow_anonymousはデフォルトで false に設定されていて、以下のエラーになります。
この場合は、mosquitto.confを一部修正して再起動します。
$ mosquitto_sub -h 192.168.10.50 -p 1883 -t "nopnop2002"

Error: Connection refused

$ sudo vi /etc/mosquitto/mosquitto.conf
allow_anonymous true
listener 1883 0.0.0.0

$ sudo systemctl restart mosquitto

別のマシンで以下のシェルを実行します。
#!/bin/bash
set -x
while :
do
payload=`date`
mosquitto_pub -h 192.168.10.50  -p 1883 -t "nopnop2002" -m "$payload"
sleep 5
done

subscriberの端末には以下が表示されます。
$ mosquitto_sub -h 192.168.10.50 -p 1883 -t "nopnop2002"
2019年  2月 19日 火曜日 23:40:29 JST
2019年  2月 19日 火曜日 23:40:34 JST
2019年  2月 19日 火曜日 23:40:39 JST
2019年  2月 19日 火曜日 23:40:44 JST
2019年  2月 19日 火曜日 23:40:49 JST
2019年  2月 19日 火曜日 23:40:54 JST
2019年  2月 19日 火曜日 23:40:59 JST
2019年  2月 19日 火曜日 23:41:04 JST
2019年  2月 19日 火曜日 23:41:09 JST
2019年  2月 19日 火曜日 23:41:14 JST

プライマリノードを再起動しても、subscriberの表示が止まることはありません。



OrangePiの様なSDカードをストレージとして使うマシンをサーバーとして使った場合、ログファイルの肥大とSDカードの破損が心配です。
このようにActive-Activeのクラスターにしておけば、適当なタイミングで再起動ができるので、
ログファイルの肥大にも対応することができます。
SDカードが壊れた時も、片側のサーバーで継続して運用することができます。
Intelサーバーを2台置くと、場所も電気代も掛かりますが、SBCなら場所も電気代も節約することができます。

2019年2月にこの環境を構築してから5年が経過しますが、非常に安定して動いています。
それまではCore-i3マシンにmosquittoをインストールして使っていましたが、今ではOrangePi Zeroが我が家のMQTTブローカーになっています。

WEBサーバーやMUSICサーバーをクラスターで運用する場合は、WEBコンテンツや音源ファイルなどのリソースを、
rsyncやDRBDで同期するか、NASに置く必要があります。