通常のクラスター: 複数のノードで構成される通常のクラスター。メッセージは、いずれかのノードのキューにランダムに送信されます。他のノードはメタデータのみを保持します。各ノードには、キュー構造、スイッチ構造、vhost など、同じメタデータのみが含まれます。コンシューマーがメッセージを消費する場合、さまざまなノードからメッセージをプルします。メッセージを格納するノードに障害が発生すると、メッセージは消費できません。メッセージが永続化されている場合、消費する前にノードが回復するまで待つ必要があります。永続化されていない場合、メッセージは失われます。 ミラー クラスター: 通常モードに基づいて、必要なキューがミラー キューに作成され、複数のノードに存在して高可用性 (HA) を実現します。このモードは上記の問題を解決します。ブローカーはミラーノード間でメッセージエンティティをアクティブに同期し、コンシューマーがデータを取得するときに一時的にデータをプルする必要がなくなります。このモードの副作用も明らかです。システムパフォーマンスが低下するだけでなく、ミラーキューが多すぎて大量のメッセージが入ると、クラスター内のネットワーク帯域幅が大量に消費されます。一般的に、信頼性要件が高いシナリオではミラーリング モードが推奨されます。 1. RabbitMqの動作環境を構築する私のコンピューターはwindow10で、docker経由で2つのrabbitmqノードを構築しました。 1.検索を通じてrabbitmqイメージを照会する
2. pullでrabbitmqの最新の公式イメージを取得するタグ管理のあるバージョンをここに持ってくるのがベストです。そうしないと、最新バージョンをプルしたときに、Web管理ページでバージョン全体を表示できず、概要: 管理のみモードが表示されます。
3. コンテナを作成する
--name: コンテナ名 -p: エンドポイントマッピング --hostname: rabbitmq ノード名 -e RABBITMQ_DEFAULT_VHOST: 仮想ホスト名 -e RABBITMQ_DEFAULT_USER: ログインアカウント -e RABBITMQ_DEFAULT_PASS: ログインパスワード a4eb038c2ecb はイメージ ID です。状況に応じて置き換えてください。 4. 管理ページを起動するこのイメージでは、Web 管理ページがデフォルトで有効になっていないため、exec コマンドを使用してコンテナーに入り、起動します。このイメージの環境は Ubuntu です。
ブラウザで http://localhost:15672/ にアクセスして開きます。他の rabbitmq でも同じ操作を行います。違いは、ポートが 5673 や 15673 などに変更され、コンテナを作成するときに最初の rabbitmq ノードに接続するために --link が使用されることです (ブリッジ ネットワーク接続を作成することもできます)。
5. Erlangクッキーを設定する元々、コンテナの実行時にパラメータ -e RABBITMQ_ERLANG_COOKIE を設定することで erlang クッキーを設定できましたが、現在は非推奨となっています。 まず、docker logsコマンドを使用してコンテナの実行ログを表示し、次のようにホームディレクトリパラメータを見つけます。 PS D:\> docker ログ rabbitmq1 //.....ここでは開始ブローカーは省略されています...2021-11-17 02:19:55.859245+00:00 [情報] <0.222.0> 2021-11-17 02:19:55.859245+00:00 [情報] <0.222.0> ノード: rabbit@myRabbit1 2021-11-17 02:19:55.859245+00:00 [情報] <0.222.0> ホームディレクトリ: /var/lib/rabbitmq 2021-11-17 02:19:55.859245+00:00 [情報] <0.222.0> 設定ファイル: /etc/rabbitmq/conf.d/10-default-guest-user.conf 2021-11-17 02:19:55.859245+00:00 [情報] <0.222.0> : /etc/rabbitmq/conf.d/management_agent.disable_metrics_collector.conf 2021-11-17 02:19:55.859245+00:00 [情報] <0.222.0> クッキーハッシュ: Aed9pjd9vYWw3hng7Gjmkg== 2021-11-17 02:19:55.859245+00:00 [情報] <0.222.0> ログ: /var/log/rabbitmq/rabbit@myRabbit1_upgrade.log 2021-11-17 02:19:55.859245+00:00 [情報] <0.222.0> : <標準出力> 2021-11-17 02:19:55.859245+00:00 [情報] <0.222.0> データベースディレクトリ: /var/lib/rabbitmq/mnesia/rabbit@myRabbit1 .erlang.cookieファイルはこのパスにあり、コンテナに入るとこのファイルを見ることができます。
次に、Erlang クッキーの権限を設定し、コンテナ内で次のコードを実行します。権限が不十分な場合、後続の操作でエラーが報告されます。
次に、docker cp コマンドを使用して、rabbitmq1 の .erlang.cookie ファイルを物理マシンにコピーし、それを rabbitmq2 コンテナーにコピーします。物理マシンとコンテナー間のコピー コマンドは次のとおりです。
具体的なコードは次のとおりです。
コピー後、rabbitmq2 コンテナを再起動する必要があります。そうしないと、rabbitmqctl コマンドの実行時に次のエラーが報告されます。
2. 通常モード再起動後、コンテナに入り、rabbitmq1 に rabbitmq2 ノードを追加して通常のクラスターを作成します。それぞれ次のコードを実行します。 rabbitmqctl stop_app rabbitmqctl リセット rabbitmqctl join_cluster --ram rabbit@myRabbit1 //myRabbitmq1 は rabbitmq1 コンテナ内の rabbitmq のホスト名です rabbitmqctl スタートアプリ その後、Web 管理ページに 2 つのノードが表示されます。 いずれかのノードにキューを作成すると、他のノードにも同じキューが生成されます。また、rabbitmq2 の vhost が my_vhost2 から my_vhost1 に変更されていることがわかります。これは rabbitmq と同じです。 3. ミラーモードミラー モードは、通常モードに基づいて rabbitmq1 コンテナーに入り、次のコマンドを入力します。
具体的なフォーマットは rabbitmqctl set_policy [-p Vhost] 名前 パターン 定義 [優先度] -p Vhost: 指定された vhost の下のキューに設定されるオプションのパラメータ 名前: ポリシー名 パターン: キューの一致パターン (正規表現) 定義: イメージ定義。3 つの部分 (ha-mode、ha-params、ha-sync-mode) を含む ha-mode: ミラーキューモードを指定します。有効な値は all/exactly/nodes です。 all: クラスター内のすべてのノードでミラーリングすることを示します。exactly: 指定された数のノードでミラーリングすることを示します。ノードの数は ha-params で指定します。nodes: 指定されたノードでミラーリングすることを示します。ノード名は ha-params で指定します。ha-params: パラメーターとして、ha-mode の補足となります。ha-sync-mode: キュー内のメッセージの同期モード。有効な値は自動と手動です。 優先度: オプションパラメータ、ポリシー優先度 rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}' --apply-to all または、rabbitmq管理ページにログイン -> 管理 -> ポリシー -> ポリシーの追加/更新 名前: ポリシー名 パターン: ^ 一致文字。^ が 1 つだけの場合はすべてが一致することを意味します。 ^message は「message」で始まるキュー名を指します 定義: ha-mode=all はマッチングタイプであり、3 つのモードに分かれています: all (すべてのキューを示します) 優先度: まず、 オペレータ ポリシーとユーザー ポリシーの違いを簡単に説明します。
オペレータ ポリシーとユーザー ポリシーが結合され、キューに適用されます。オペレータ ポリシーが 参考学習: https://www.cnblogs.com/knowledgesea/p/6535766.html https://blog.csdn.net/belonghuang157405/article/details/83540148 これで、Docker で RabbitMq の通常クラスタとミラークラスタを構築する方法についての記事は終了です。Docker で RabbitMq クラスタを構築する方法についての詳細は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: 高性能な HTML アプリケーションを作成するためのヒント
>>: MySQL 実践演習 シンプルなライブラリ管理システム
tomcat7 のデフォルトのプログラム公開パスは tomcat/webapps/ROOT/ です。...
Q: xml と html の違いがわかりません。違いは何ですか? A: XMLと HTML の違い...
1. はじめにこの記事では、Docker Swarm を使用して Nebula Graph クラスタ...
目次LAMPアーキテクチャ1.ランプの紹介2. WebサービスワークフローWebサーバーのリソースは...
1. Dockerネットワークカードを作成する [root@i ~]# brctl addbr d...
目次最初のステップのインストールステップ2: MySQLデータを準備する3 番目のステップは、bin...
以前、写真が与えられ、その写真スタイルに基づいてフォームを作成するという課題に遭遇しました。しかし、...
table1 に 5 つのレコードを挿入する場合、次のコードは誤りです。 テーブル1に(id,na...
1. インストールヒント: 現在、VUE3.0 の公式翻訳ドキュメントはありません。しかし、すでに誰...
Docker はコンテナを起動するときにアクセス ポートを指定します。複数の -p オプションを使用...
休憩中に、眠気を完全に吹き飛ばす電話がかかってきました。「開発者が更新 SQL を書くときに whe...
目次データ列を分離するプレフィックスインデックスとインデックスの選択性データ列を分離するMySQL ...
私は同時通訳音声認識機能を使用して、WeChatアプレットのホームページの音声検索機能を実現しました...
目次1. データソース2. データの総合順位1) 総合ランキング2) 同順位3) 同順位3. データ...
mysqlはブール型を返します最初のケースでは、直接戻ります select id='22a...