CentOS 7
Sponsored Link

RabbitMQ : クラスターを構成する
2016/09/03
 
RabbitMQ クラスターを構成し、ノード間でキューを共有し、耐障害性を高めます。
ここでは例として RabbitMQ サーバー2台を使用してクラスターを構成します。
[1]
こちらを参考に、クラスター構成ノード全てに RabbitMQ をインストールして起動しておきます。
(Firewalld を有効にしている場合は、リンク先の通りポートの許可も必要です)
[2] Firewalld を有効にしている場合は、追加で以下のポートの許可が必要です。
[root@dlp ~]#
firewall-cmd --add-port={4369/tcp,25672/tcp} --permanent

success
[root@dlp ~]#
firewall-cmd --reload

success
[3] いずれかのノードからクラスター参加の設定をします。
# 事前にファイルの内容を他ノードと揃えておく

[root@node01 ~]#
ssh dlp.srv.world 'cat /var/lib/rabbitmq/.erlang.cookie' > /var/lib/rabbitmq/.erlang.cookie

[root@node01 ~]#
systemctl restart rabbitmq-server
# アプリケーションを停止してリセット

[root@node01 ~]#
rabbitmqctl stop_app

Stopping node rabbit@node01 ...
...done.
[root@node01 ~]#
rabbitmqctl reset

Resetting node rabbit@node01 ...
...done.
# クラスター参加 (FQDN指定ではなくホスト名のみを指定)

[root@node01 ~]#
rabbitmqctl join_cluster rabbit@dlp

Clustering node rabbit@node01 with rabbit@dlp ...
...done.
# アプリケーション開始

[root@node01 ~]#
rabbitmqctl start_app

Starting node rabbit@node01 ...
...done.
# ステータス確認

[root@node01 ~]#
rabbitmqctl cluster_status

Cluster status of node rabbit@node01 ...
[{nodes,[{disc,[rabbit@dlp,rabbit@node01]}]},
 {running_nodes,[rabbit@dlp,rabbit@node01]},
 {cluster_name,<<"rabbit@dlp.srv.world">>},
 {partitions,[]}]
...done.
[4] キューの同期設定を実施します。
当例ではクラスター構成ノード全てでキューを同期するよう設定しますが、ノードの数を指定したり特定のノードを指定しての同期設定も可能です。 詳細は RabbitMQ 公式ドキュメントを参照ください。
  ⇒ http://www.rabbitmq.com/ha.html
# 同期させるキューを作成

[root@dlp ~]#
rabbitmqadmin declare queue name=shared_queue

queue declared
# ポリシーを設定

# rabbitmqctl set_policy [ポリシー名(任意の名称)] [キュー] [モード]

[root@dlp ~]#
rabbitmqctl set_policy ha-policy "shared_queue" '{"ha-mode":"all"}'

Setting policy "ha-policy" for pattern "shared_queue" to "{\"ha-mode\":\"all\"}" with priority "0" ...
...done.
# ステータス確認

[root@dlp ~]#
rabbitmqadmin list queues name node policy slave_nodes state synchronised_slave_nodes

+--------------+------------+-----------+---------------+---------+--------------------------+
|     name     |    node    |  policy   |  slave_nodes  |  state  | synchronised_slave_nodes |
+--------------+------------+-----------+---------------+---------+--------------------------+
| shared_queue | rabbit@dlp | ha-policy | rabbit@node01 | running | rabbit@node01            |
+--------------+------------+-----------+---------------+---------+--------------------------+
[5] 全ノードでリンク先の通り管理用のプラグインを有効にすると、以下のように Web 管理画面で各ノードのステータスが確認可能となります。
 
Tweet