RabbitMQ : クラスターを構成する2024/09/17 |
RabbitMQ クラスターを構成し、ノード間でキューを共有し、耐障害性を高めます。 |
|
[1] | |
[2] | いずれかのノードからクラスター参加の設定をします。 |
# 事前にファイルの内容を他ノードと揃えておく root@node02:~ # service rabbitmq stop Stopping rabbitmq. root@node02:~ # ssh node01.srv.world 'cat /var/db/rabbitmq/.erlang.cookie' > /var/db/rabbitmq/.erlang.cookie root@node02:~ # service rabbitmq start Starting rabbitmq. # アプリケーションを停止してリセット root@node02:~ # rabbitmqctl stop_app Stopping rabbit application on node rabbit@node02 ... root@node02:~ # rabbitmqctl reset Resetting node rabbit@node02 ... # クラスター参加 # FQDN 指定ではなくホスト名のみを指定 root@node02:~ # rabbitmqctl join_cluster rabbit@node01 Clustering node rabbit@node02 with rabbit@node01 # アプリケーション開始 root@node02:~ # rabbitmqctl start_app Starting node rabbit@node02 ... # ステータス確認 root@node02:~ # rabbitmqctl cluster_status Cluster status of node rabbit@node02 ... Basics Cluster name: rabbit@node02.srv.world Total CPU cores available cluster-wide: 4 Disk Nodes rabbit@node01 rabbit@node02 Running Nodes rabbit@node01 rabbit@node02 Versions rabbit@node02: RabbitMQ 3.13.7 on Erlang 26.2.5.1 rabbit@node01: RabbitMQ 3.13.7 on Erlang 26.2.5.1 CPU Cores Node: rabbit@node02, available CPU cores: 2 Node: rabbit@node01, available CPU cores: 2 Maintenance status Node: rabbit@node02, status: not under maintenance Node: rabbit@node01, status: not under maintenance Alarms (none) Network Partitions (none) Listeners Node: rabbit@node02, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication Node: rabbit@node02, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0 Node: rabbit@node02, interface: 0.0.0.0, port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0 Node: rabbit@node01, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication Node: rabbit@node01, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0 Node: rabbit@node01, interface: 0.0.0.0, port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0 Feature flags Flag: classic_mirrored_queue_version, state: enabled Flag: classic_queue_type_delivery_support, state: enabled Flag: direct_exchange_routing_v2, state: enabled Flag: feature_flags_v2, state: enabled Flag: implicit_default_bindings, state: enabled Flag: khepri_db, state: disabled Flag: listener_records_in_ets, state: enabled Flag: maintenance_mode_status, state: enabled Flag: message_containers, state: enabled Flag: message_containers_deaths_v2, state: enabled Flag: quorum_queue, state: enabled Flag: quorum_queue_non_voters, state: enabled Flag: restart_streams, state: enabled Flag: stream_filtering, state: enabled Flag: stream_queue, state: enabled Flag: stream_sac_coordinator_unblock_group, state: enabled Flag: stream_single_active_consumer, state: enabled Flag: stream_update_config_command, state: enabled Flag: tracking_records_in_ets, state: enabled Flag: user_limits, state: enabled Flag: virtual_host_metadata, state: enabled |
[3] | キューの同期設定を実施します。 [rabbitmqadmin] コマンドが存在しない場合はこちらを参照ください。 当例ではクラスター構成ノード全てでキューを同期するよう設定しますが、ノードの数を指定したり特定のノードを指定しての同期設定も可能です。 詳細は RabbitMQ 公式ドキュメントを参照ください。 ⇒ https://www.rabbitmq.com/ha.html |
# 同期させるキューを作成 root@node01:~ # rabbitmqadmin declare queue name=shared_queue queue declared # ポリシーを設定 # rabbitmqctl set_policy [ポリシー名(任意の名称)] [キュー] [モード] root@node01:~ # 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" for vhost "/" ... # ステータス確認 root@node01:~ # rabbitmqadmin list queues name node policy slave_nodes state synchronised_slave_nodes +--------------+---------------+-----------+---------------+---------+--------------------------+ | name | node | policy | slave_nodes | state | synchronised_slave_nodes | +--------------+---------------+-----------+---------------+---------+--------------------------+ | shared_queue | rabbit@node01 | ha-policy | rabbit@node02 | running | rabbit@node02 | +--------------+---------------+-----------+---------------+---------+--------------------------+ |
[4] | 全ノードでリンク先の通り管理用のプラグインを有効にすると、以下のように Web 管理画面で各ノードのステータスが確認可能となります。 |
Sponsored Link |