Open tichi73 opened 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
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 "$*"
再起動時のクラスタ再加入対策としては #37 で暫定的に対応しました。 再構築時のクラスタ再加入には別途対策を継続することとして、この Issue はオープンのままとします。
現在 rabbitmq の /var/lib/rabbitmq は名前無しボリュームで bind しているが、swarm 構成ではノードを再起動したときにコンテナとともにボリュームが再構成されて動作中のクラスタに参加できない問題が生じる。 https://fixpoint.slack.com/archives/C05M1B75QJ0/p1722222537022709
/var/lib/rabbitmq を名前付きボリュームにすることで、再起動時も mnesia が保持されてクラスタに参加できるようになる。
この場合でも以下について注意または検討する必要がある。