Skip to content

Instantly share code, notes, and snippets.

@inokappa
Last active February 22, 2019 07:55
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save inokappa/f9254c341826664bbf6c to your computer and use it in GitHub Desktop.
Save inokappa/f9254c341826664bbf6c to your computer and use it in GitHub Desktop.
RabbitMQ のクラスタリング、HA メモ

クラスタリングのうんちく

ひとまずうんちく。

disc or ram

  • node タイプは 2 種類
  • disc はデータを Disk 上に保存、ram はメモリ上の保存
  • デフォルトは disc ノード
  • ram ノードはパフォーマンス向上を望めるが耐障害性が低い
  • 反面 disc ノードは耐障害性は担保されるがパフォーマンスが劣化する

クラスタ構成におけるノードタイプのプラクティス

  • クラスタ内に少なくとも1 台は disc ノードを設けた方が良い

クラスタ内のノード間の監視

  • heartbeat60
  • tcp ポートの 5672 にて監視


操作して覚えるクラスタリング

基本的には Erlang のプロセスは残しつつ、RabbitMQ のプロセスを落として色々と操作するようです。

例:ノードタイプを ram に...

  • Erlang のプロセスを残したまま RabbitMQ を停止する
rabbitmqctl stop_app
  • 設定変更する
rabbitmqctl change_cluster_node_type ram
  • RabbitMQ のプロセスを再開
rabbitmqctl start_app
  • 以下のようになりまっせ
...done.
-bash-4.1$ rabbitmqctl cluster_status
Cluster status of node 'rabbit@ip-xxx-xxx-0-162' ...
[{nodes,[{disc,['rabbit@ip-xxx-xxx-0-162','rabbit@ip-xxx-xxx-0-163']},
        {ram,['rabbit@ip-xxx-xxx-0-43']}]},
{running_nodes,['rabbit@ip-xxx-xxx-0-43','rabbit@ip-xxx-xxx-0-163',
                'rabbit@ip-xxx-xxx-0-162']},
{partitions,[]}]
...done.
-bash-4.1$

例:クラスタにジョインする

  • 追加するノードで Erlang のプロセスを残したまま RabbitMQ を停止する
rabbitmqctl stop_app
  • reset する
rabbitmqctl reset
  • join する
rabbitmqctl join_cluster rabbit@ip-192-168-0-162

以下のようなメッセージ。

-bash-4.1$
-bash-4.1$ rabbitmqctl join_cluster rabbit@ip-192-168-0-162
Clustering node 'rabbit@ip-xxx-xxx-0-43' with 'rabbit@ip-xxx-xxx-0-162' ...
...done.
-bash-4.1$ rabbitmqctl start_app
Starting node 'rabbit@ip-xxx-xxx-0-43' ...
...done.
-bash-4.1$
  • 確認
-bash-4.1$
-bash-4.1$ rabbitmqctl cluster_status
Cluster status of node 'rabbit@ip-xxx-xxx-0-162' ...
[{nodes,[{disc,['rabbit@ip-xxx-xxx-0-162','rabbit@ip-xxx-xxx-0-163',
               'rabbit@ip-xxx-xxx-0-43']}]},
{running_nodes,['rabbit@ip-xxx-xxx-0-43','rabbit@ip-xxx-xxx-0-163',
                'rabbit@ip-xxx-xxx-0-162']},
{partitions,[]}]
...done.
-bash-4.1$

例:クラスタから切り離す

  • Erlang のプロセスを残したまま RabbitMQ を停止する
rabbitmqctl stop_app

この状態だとまだ完全に切り離されいない。

-bash-4.1$
-bash-4.1$ rabbitmqctl cluster_status
Cluster status of node 'rabbit@ip-xxx-xxx-0-162' ...
[{nodes,[{disc,['rabbit@ip-xxx-xxx-0-162','rabbit@ip-xxx-xxx-0-163']},
        {ram,['rabbit@ip-xxx-xxx-0-43']}]},
{running_nodes,['rabbit@ip-xxx-xxx-0-163','rabbit@ip-xxx-xxx-0-162']},
{partitions,[]}]
...done.
-bash-4.1$
  • reset する
rabbitmqctl reset

この状態で始めて切り離される。

-bash-4.1$ rabbitmqctl cluster_status
Cluster status of node 'rabbit@ip-xxx-xxx-0-162' ...
[{nodes,[{disc,['rabbit@ip-xxx-xxx-0-162','rabbit@ip-xxx-xxx-0-163']}]},
{running_nodes,['rabbit@ip-xxx-xxx-0-163','rabbit@ip-xxx-xxx-0-162']},
{partitions,[]}]
...done.
-bash-4.1$
  • RabbitMQ のプロセスを再開
rabbitmqctl start_app


HA 構成のうんちく

Slave から Master への昇格する場合の選定基準

A slave is promoted to become the new master. The slave chosen for promotion is the eldest slave.

eldest slave とあるので一番、稼働時間が長いスレーブがマスターに昇格することになる。



参考

クラスタリング関連

RabbitMQ / AMQP 全般

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment