私はSwarm ModeサービスでRabbitMQを実行する3つの複製コンテナを持っています。各コンテナはRabbitMQノードとして動作し、RabbitMQクラスタを作成します。これは、次のようなdocker service create
は次のとおりです。私は成功し、その後、スレーブノードのそれぞれにrabbitmqctl <hostname> join_cluster
を使用してRabbitMQのクラスタを作成することができるよRabbitMQクラスタはDockerのコンテナの再起動をどのように認識できますか?
docker service create -e RABBITMQ_ERLANG_COOKIE='mysecretcookie' --replicas 4 --network rnet -p 15672:15672 -p 5672:5672 rabbitmq
。
私の問題は、スワンノードがダウンすると、Dockerは別のノードで新しいコンテナを開始しますが、コンテナのホスト名は違うことです。
RabbitMQはRabbitMQクラスタノードを識別するためにホスト名を使用するため、新しいコンテナの新しいホスト名を認識しないため、元のノードが無期限にダウンしているとみなされます。
Docker 1.13の新しいテンプレート機能を使用して、--hostname="{{.Node.ID}}-{{.Service.Name}}"
をdocker service create
に指定して静的ホスト名を作成できるようにしました。ただし、このカスタムホスト名に基づいてコンテナを現在検出することはできないため、この方法でRabbitMQクラスタを作成することはできません。
Dockerが新しいコンテナの実行を開始した後、RabbitMQがクラスタノードに自動的に再結合するようにしたいと考えています。これは可能ですか?
はい、そうです。謝罪、それは明らかではない。基本的には、Docker swarm replicaとRabbitMQクラスタノードをホスト/ swarmノードの障害の間で同期させたいのですが、失敗したRabbitMQノードはRabbitMQによって「Node not running」と表示されているので、これらをDockerがノードの障害を発見した場合に新しいコンテナを起動する機能と併用してバックアップする – AmazingBergkamp
おそらく、これを行うドッカーコンテナ管理ソフトウェアがあるか、またはスクリプトを作成して再起動することができます。自動的に開始するには、あらかじめ定義されたクラスタに参加する独自のイメージを作成することができます。 – cantSleepNow