fixpoint / ke2-docker

0 stars 0 forks source link

swarm 構成で再起動または再構成した rabbitmq コンテナがクラスタに再加入できるようにする #34

Open tichi73 opened 4 months ago

tichi73 commented 4 months ago

現在 rabbitmq の /var/lib/rabbitmq は名前無しボリュームで bind しているが、swarm 構成ではノードを再起動したときにコンテナとともにボリュームが再構成されて動作中のクラスタに参加できない問題が生じる。 https://fixpoint.slack.com/archives/C05M1B75QJ0/p1722222537022709

/var/lib/rabbitmq を名前付きボリュームにすることで、再起動時も mnesia が保持されてクラスタに参加できるようになる。

この場合でも以下について注意または検討する必要がある。

tichi73 commented 4 months ago

https://fixpoint.slack.com/archives/CUUS40EBF/p1722307429438229 rabbitmq コンテナ(rabbit@mq-ke2dev-swarm3)が再起動して、mnesia がクリアされたために、クラスタ参加できなかった場合の復帰手順

# rabbitmqctl stop_app
# rabbitmqctl -n rabbit@mq-ke2dev-swarm1 forget_cluster_node rabbit@mq-ke2dev-swarm3
# rabbitmqctl join_cluster rabbit@mq-ke2dev-swarm1
# rabbitmqctl start_app
tichi73 commented 4 months ago

https://fixpoint.slack.com/archives/CUUS40EBF/p1722338105215349?thread_ts=1722329934.675419&cid=CUUS40EBF

diff --git a/scripts/bootstrap-rabbitmq.sh b/scripts/bootstrap-rabbitmq.sh
index d4958ed..61debfb 100644
--- a/scripts/bootstrap-rabbitmq.sh
+++ b/scripts/bootstrap-rabbitmq.sh
@@ -8,5 +8,14 @@ chown -R rabbitmq:rabbitmq /etc/rabbitmq/ssl
 # SSL 認証プラグインを有効化
 rabbitmq-plugins enable rabbitmq_auth_mechanism_ssl

+# Swarm 構成時の初期化処理
+for cluster_node in $(grep '^cluster_formation.classic_config.nodes' /etc/rabbitmq/conf.d/*.conf | cut -d'=' -f2); do
+    if [[ rabbit@$(hostname) != ${cluster_node} ]]; then
+        if rabbitmqctl -n ${cluster_node} forget_cluster_node rabbit@$(hostname) 2> /dev/null; then
+            break
+        fi
+    fi
+done
+
 # rabbitmq-server を起動
 exec rabbitmq-server "$*"
tichi73 commented 4 months ago

再起動時のクラスタ再加入対策としては #37 で暫定的に対応しました。 再構築時のクラスタ再加入には別途対策を継続することとして、この Issue はオープンのままとします。