通常のクラスター: 複数のノードで構成される通常のクラスター。メッセージは、いずれかのノードのキューにランダムに送信されます。他のノードはメタデータのみを保持します。各ノードには、キュー構造、スイッチ構造、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 実践演習 シンプルなライブラリ管理システム
フロントエンドは、技術が急速に進化するだけでなく、知っておくべき事柄が多すぎるという理由で大変な仕事...
目次1. podmanの紹介2. Dockerと比較した利点3. 互換性4. バックグラウンド サー...
HTML5 と jQuery はアップロード前にローカル画像のプレビューを実装しており、その効果は...
3G の普及により、携帯電話を使ってインターネットにアクセスする人が増えています。モバイル デバイ...
1 はじめに優れたコーディング習慣は優れたプログラマーが備えるべき資質ですが、コードの品質を保証する...
この実験では、空のデータベース、オフライン、オンラインの 3 つのモードで、1 つのマスターと 2 ...
1. Docker コンテナのホスト マシンに入り、指定されたイメージを実行しているコンテナ ID ...
最も一般的に使用されるレイアウト要素として、DIV は Web 開発において重要な役割を果たします。...
前書き: MySQL でテーブルを設計する場合、MySQL では UUID や非連続かつ非繰り返しの...
過去 15 日間のデータをバックアップするシンプルな MySQL 完全バックアップ スクリプト。バッ...
Element UIは、複数のテーブルを同時に水平および垂直にスクロールすることを実装します。 コー...
この記事では、参考までに、JSでスネークゲームを書くための具体的なコードを紹介します。具体的な内容は...
0. リモート開発が必要な理由組み込み Linux を開発する場合、便宜上、通常は Windows ...
1. flex-grow、flex-shrink、flex-basis プロパティflex-grow...
相対幅と絶対幅が競合する場合のdivソリューション概要: 一般的に、絶対幅を使用する場合は px を...