内容

概要

前提条件

要件

使用するコンポーネント

問題

RabbitMQがクラスタ外であるかどうかを確認する

解決方法

概要

このドキュメントでは、クラスタに障害が発生した場合にRabbitMQを手動でクラスタに追加する方法について説明します。

前提条件

要件

このドキュメントに特有の要件はありません。

使用するコンポーネント

このドキュメントの情報は、次のソフトウェアとハードウェアのバージョンに基づいています。

- 2台以上のRabbitMQサーバ

- ロードバランサX 1

問題

この記事では、RabbitMQクラスタを確認し、手動でそれらのインスタンスをクラスタに追加する方法について説明します。CloudCenterには、RabbitMQのハイアベイラビリティ(HA)を設定するためのウィザードが用意されていますが、RabbitMQクラスタが正しく形成されていない場合は、かなり少数のインスタンスでHAが正常に設定されています。

RabbitMQがクラスタ外であるかどうかを確認する

ステップ1:CLIコンソールを使用してすべてのRabbitMQサーバにログインします。

ステップ2:RabbitMQサーバがすべてのインスタンスで実行されているかどうかを確認します。

#ps -ef | grep rabbit

Output:

rabbitmq  1677     1  0 14:47 ?        00:00:00 /usr/lib/erlang/erts-6.4/bin/epmd -daemon

root      1973     1  0 14:47 ?        00:00:00 /bin/sh /etc/rc.d/init.d/rabbitmq-server start

root      2000  1973  0 14:47 ?        00:00:00 /bin/bash -c ulimit -S -c 0 >/dev/null 2>&1 ; /usr/sbin/rabbitmq-server

root      2003  2000  0 14:47 ?        00:00:00 su rabbitmq -s /bin/sh -c /usr/lib/rabbitmq/bin/rabbitmq-server

rabbitmq  2026  2003  0 14:47 ?        00:00:05 /usr/lib/erlang/erts-6.4/bin/beam -W w -K true -A30 -P 1048576 -- -root /usr/lib/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa /usr/lib/rabbitmq/lib/rabbitmq_server-3.5.1/sbin/../ebin -noshell -noinput -s rabbit boot -sname rabbit@ip-172-31-32-101 -boot start_sasl -config /etc/rabbitmq/rabbitmq -kernel inet_default_connect_options [{nodelay,true}] -sasl errlog_type error -sasl sasl_error_logger false -rabbit error_logger {file,"/var/log/rabbitmq/rabbit@ip-172-31-32-101.log"} -rabbit sasl_error_logger {file,"/var/log/rabbitmq/rabbit@ip-172-31-32-101-sasl.log"} -rabbit enabled_plugins_file "/etc/rabbitmq/enabled_plugins" -rabbit plugins_dir "/usr/lib/rabbitmq/lib/rabbitmq_server-3.5.1/sbin/../plugins" -rabbit plugins_expand_dir "/var/lib/rabbitmq/mnesia/rabbit@ip-172-31-32-101-plugins-expand" -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/var/lib/rabbitmq/mnesia/rabbit@ip-172-31-32-101" -kernel inet_dist_listen_min 25672 -kernel inet_dist_listen_max 25672

rabbitmq  2242  2026  0 14:47 ?        00:00:00 inet_gethost 4

rabbitmq  2243  2242  0 14:47 ?        00:00:00 inet_gethost 4

root      2602  2588  0 15:04 pts/0    00:00:00 grep --color=auto rabbit

OR

#/sbin/service rabbitmq-server status

Status of node 'rabbit@ip-172-31-32-101' ...

[{pid,2026},

{running_applications,

[{rabbitmq_management,"RabbitMQ Management Console","3.5.1"},

{rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.5.1"},

{webmachine,"webmachine","1.10.3-rmq3.5.1-gite9359c7"},

{mochiweb,"MochiMedia Web Server","2.7.0-rmq3.5.1-git680dba8"},

{rabbitmq_management_agent,"RabbitMQ Management Agent","3.5.1"},

{rabbit,"RabbitMQ","3.5.1"},

----- Text omitted for brevity

ステップ3：次のコマンドを使用して、すべてのインスタンスのクラスタステータスを確認します。

[root@ip-172-31-32-101 ~]# rabbitmqctl cluster_status

Cluster status of node 'rabbit@ip-172-31-32-101' ...

[{nodes,[{disc,['rabbit@ip-172-31-32-101']}]},

{running_nodes,['rabbit@ip-172-31-32-101']},

{cluster_name,<<"rabbit@ip-172-31-32-101.us-east-2.compute.internal">>},

{partitions,[]}]

この出力では、クラスタ内で実行されているノードが1つのみであることを確認できます。

解決方法

このシナリオでは、クラスタrabbit@ip-172-31-45-110.us-east-2.compute.internalにrabbit@ip-172-31-32-101を追加します

ステップ1:2番目のRabbitMQサーバをリンクするには、アプリケーションが停止し、クラスタに参加していることを確認する必要があります。

ステップ2:RabbitMQ2サーバに切り替え、アプリケーションを停止します。

[root@ip-172-31-32-101 ~]# rabbitmqctl stop_app

Stopping node 'rabbit@ip-172-31-32-101' ...

[root@ip-172-31-32-101 ~]#

ステップ3:RabbitMQ2サーバにRabbitMQ1クラスタに参加します。

[root@ip-172-31-32-101 ~]# rabbitmqctl join_cluster rabbit@ip-172-31-45-110

Clustering node 'rabbit@ip-172-31-32-101' with 'rabbit@ip-172-31-45-110' ...

ステップ4:rabbitmq2アプリケーションを起動します。

[root@ip-172-31-32-101 ~]# rabbitmqctl start_app

Starting node 'rabbit@ip-172-31-32-101' ...

いずれかのノードでcluster_statusコマンドを実行すると、2つのノードが1つのクラスタに結合されていることがわかります。

Server1 : Output

[root@ip-172-31-45-110 ~]# rabbitmqctl cluster_status

Cluster status of node 'rabbit@ip-172-31-45-110' ...

[{nodes,[{disc,['rabbit@ip-172-31-32-101','rabbit@ip-172-31-45-110']}]},

{running_nodes,['rabbit@ip-172-31-32-101','rabbit@ip-172-31-45-110']},

{cluster_name,<<"rabbit@ip-172-31-45-110.us-east-2.compute.internal">>},

{partitions,[]}]

Server2 : Output

[root@ip-172-31-32-101 ~]# rabbitmqctl cluster_status

Cluster status of node 'rabbit@ip-172-31-32-101' ...

[{nodes,[{disc,['rabbit@ip-172-31-32-101','rabbit@ip-172-31-45-110']}]},

{running_nodes,['rabbit@ip-172-31-45-110','rabbit@ip-172-31-32-101']},

{cluster_name,<<"rabbit@ip-172-31-45-110.us-east-2.compute.internal">>},

{partitions,[]}]