共有コンポーネントをOpenStackの - メッセージキューのRabbitMQ

、MQはメッセージキュー、メッセージキュー(MQ)と呼ばれます

アプリケーションへのアプリケーションの通信方法アプリケーションは、メッセージを介して(アプリケーションプログラムのためのデータ)を通信するキューから読み出さそれらをリンクするための専用の接続を必要とせずに、。

送信されるデータメッセージのプログラムの間の通信を通過させるメッセージを指す互いに通信することはなく、直接呼び出しを介して、一般に、リモート・プロシージャ・コールとして、直接呼ばれる技術です。

これは、通信するためにキューによってアプリケーションキューを参照します同時に実行されるアプリケーション受信キューと送信要求を使用して除去しました。

二、AMQP即アドバンストメッセージキュープロトコル

高度なメッセージキュープロトコルは、メッセージ指向ミドルウェアの設計のためのオープンな標準のアプリケーション層のプロトコルです。コンポーネント間のデカップリングのために主にメッセージミドルウェア、ユーザのプレゼンス情報を知らなくても、メッセージの送信者、およびその逆。

AMQP主な機能は、キューのメッセージ、ルーティングされ(点を含むとパブリッシュ/サブスクライブ)、信頼性、安全性

三、RabbitMQのコンセプト:

       人気のあるオープンソースのシステムメッセージキューに属します。標準を達成するためにAMQP(アドバンスト・メッセージキュープロトコル)に属します。オープン標準のアプリケーション層プロトコルは、メッセージ指向ミドルウェアの設計がされています分散ストアアンドフォワードメッセージ用のシステムでは、使いやすさの観点から、スケーラビリティ、高可用性、およびとてもよくやって


       RabbitMQの特徴:
    使用Erlangで書かれた
    サポートの永続化
    サポートHAは、
    C#の、アーラン、ジャワ、perlの提供 、のpython、ルビーや他のクライアント側の開発を

第四に、カップリング、デカップリングは何ですか

カップリング
  1は、結合は、二つ以上のシステム間を意味する、または両方の形式の動きは現象によって一緒に互いに相互作用ならびに影響を及ぼす。

  図2は、ソフトウェア工学において、オブジェクト間のオブジェクトの依存関係との間の結合の程度ですオブジェクト間の高いカップリング、高い維持費、そのデザインは、オブジェクトクラスとメンバー間の結合を最小限に抑える必要があります。

  3、分類:ソフトウェア・モジュールとの間の結合、ならびにハードウェアとソフトウェアとの間の結合がありますカップリングは、様々なモジュール間の結合のプログラム構造の尺度ですこれは、各モジュール間のインターフェイス、呼び出しモジュールおよびインターフェイスを介してどのような情報の方法の複雑さに依存します。

第二に、デカップリング
  1を、デカップリングは、文字通りの関係を切り離すことを意味します。

  ソフトウェア工学2、結合度を低減するためには理解することができるデカップリング、すなわち、モジュールカップリングの間に依存関係が存在しなければならないように、カップリングはゼロ理論的に絶対に不可能であるが、結合の程度を低減するために、従来の方法によって同定することができます最小限に。

  3、核となるアイデアの設計:コードの結合を最小限に抑えるためには、コードが見つかっ結合されている場合、デカップリング技術を取ることが必要です。データモデル、ビジネスロジックと相互に接続された3つの下の表示の間で意見を聞かせて、関連性を最小限に依存しているため、全体としての状況には影響しません。コードの主な特徴は、二つの間の相互作用を必要に応じて、メッセージ、またはフレームワークのも導入により、インターフェースを介して、機能コードBに書き込まれたが、要するに、直接クロス書き込むことはないれていません。

五、RabbitMQの概念的

ブローカーは:単純にメッセージキューサーバエンティティ

為替:メッセージスイッチは、キューにルーティングされているどのようなルールに従ってメッセージを指定します

キュー:メッセージキューキャリア、各メッセージは、1つ以上のキューに入れられます。結合:結合、その役割は、規則に従ってルーティングおよびキューバインドを交換することです

?キールーティング:キーワードは、このキーワードに基づいて配信されるメッセージの交換をルーティングします

?バーチャルホスト:Webホスティング、別のユーザーの特権分離として、複数のバーチャルホストを設定することができブローカー

プロデューサー:ニュースのプロデューサーは、あるプログラムがメッセージを配信しました

消費者:消費者のニュースは、プログラムがメッセージを受け入れることです。

チャンネル:各クライアントの接続のメッセージチャネルは、複数のチャネル、作成することができ、会話タスクを表す各チャンネルを?。

六、RabbitMQの作業管理

MQ消費-典型的なプロデューサー、終了メッセージキューにメッセージを書き込むために継続すると、もう一方の端を表すモデルの読み取りまたはキュー内のメッセージをサブスクライブすることができます。MQは、具体的なフォローのAMQPプロトコルの実装や製品です。プロジェクトでは、いくつかの時間のかかる操作をせずに直ちに戻り、大きく、それによってシステムのスループットを増加させる、要求をサーバの応答時間を節約このように非同期処理と非同期処理を行い抽出しました。

(1)メッセージキュークライアントは、チャネルを開くために、サーバーに接続します。

(2)宣言クライアント交換、および関連するプロパティを提供します。

(3)クライアントは、キューを宣言し、関連するプロパティを設定します。

(4)クライアントは、ルーティングキーを使用して、交換と結合キューの間の良好な関係を確立します。

?(5)クライアントの交換にメッセージを投稿。

(6)Exchangeはメッセージに従って、メッセージを受信し、キー結合した後に、設定された?OKメッセージルーティング、メッセージの一つ以上のキューに配信します

七、メタデータのRabbitMQの(メタデータ)

  メタデータはRAMディスクにまたは永続することができ RabbitMQのは、クラスタ内の2つのノードに分割することができ、この角度から。:RAMおよびノードのディスクノード。

       RAMに保存されているRAMのみのノードのメタデータ

       ディスクノードのメタデータがディスクに永続化されます。 

  シングルノードシステムは、ディスクノードをできるように、任意の選択ではない、またはデータの冗長性がないため、一度すべての設定情報が失われます再起動しますが、RAMのノードであるノードを選択することができ、クラスタ環境インチ、クラスタ内の宣言(宣言します) :すべてのノードが返されます作成が完了するまで、交換キュー結合、このような操作を作成し 
       、それはメモリノードのメモリデータを変更する必要がある場合、 
       それはディスクのディスクノードへの書き込みを待つ必要がある場合は、ここではノード過度の速度が大幅になりますスローダウン。

    いくつかのシーンexchangキューがほぼ一定、非常に少ない、および使用RabbitMQのは、RPCを行う場合は、すべてのディスクノードは、効果がない場合でも、それを変更(RPC:リモートプロシージャCall-リモートプロシージャコール)。、RPCまたはRPCのようなシーン、この深刻な問題頻繁に破壊が一時キューを作成し、ディスクの読み書きのスキルはすぐにパフォーマンスのボトルネックになります。そのため、ほとんどのケースでは、我々はRAMノードのノードを作成してみてください。ここで問題があり、メタデータクラスタを再起動するために、クラスタのメタデータを復元する必要があるかもしれません、それはRabbitMQのクラスタを計画する必要があり、ディスクに永続化RAMノードとディスクのノード。

    ノードは、他のものはRAMノードクラスタノードが参加したり、特定のから撤退することができることができる一つのディスク限りクラスタ:限りがあるので、ノードディスクノードがディスクのRabbitMQ実際、このような要求に書き込まれたクラスタ・メタデータのための条件を提供することができるであろう少なくともクラスタ内のディスクノードに通知します。

クラスタディスクノードなど、ユーザーの追加、ユーザーのアクセス権を変更するクラスタ。免責事項交換キューのメタデータを変更しない、離れてぐずぐずしている場合、これらの変更は、ノードの再起動後に回復することはできません。

    状況は、すべてのディスクノードの追加、オンラインを操作したり、最新のクラスタメタデータをダウンロードするには事前に定義されたディスクノードに接続されたときに.RAMノードが開始されるノードを除去するためにケースのようにする必要があります。あなたは、2枚のディスクを持っている場合ノード(D1 D2の)RAMノードを追加するとき、RAMのノードは、あなただけのD1を伝え、およびD1が起動しないだけで、このRAMのノードの再起動、再起動が失敗します参加したとき。そう、すべてのディスクのノード情報を伝えるためにそれは、ノードのディスクノード情報は、あなたが欲しいものを見つけることができ、その後の起動用ディスクに永続化されるRAMます。

 

 

八、RabbitMQのクラスタの展開

 

まず、準備
 
(1)条件:良いソース構成を確保するために、3つのLinuxシステムを準備し、そしてEPEL源
 
(2)3台のマシンはまだお互いを解決することができます
192.168253.135 BB    
 192.168253.171 AA
 192.168253.153 CC
(3)設定することができるキーレス着陸
 SSH-keygenは
 SSH-コピー-ID
 
第二に、インストールプロセス:
 
(1)すべてのノードのインストールrabbtimqとパッケージのerlang:
yumをインストール-yアーランrabbitmq- server.noarch 
systemctlのRabbitMQを有効にする - server.service 
のRabbitMQを開始systemctl - server.service 
systemctl状態RabbitMQの -server.service
 
リスニングポートを確認します。
netstatの-lantp | grepの 5672
プロファイル:
vimの/etc/rabbitmq/rabbitmq.config
 
(2)ノード1:ゲストのパスワードを変更するには、管理者(:ゲストパスワード:ゲストデフォルトのユーザー)であります
rabbitmqctlのCHANGE_PASSWORDゲストの管理#は、パスワードadminを変更し、ユーザー名は、数字で始めることはできません
 
(3)ノード1:ママのユーザーを追加し、パスワードはadminです。そして、権限を設定し、管理者になります
三*平均は以下のとおりです。
すべては、すべての仮想ホストのすべてのキューを切り替えます
 
ノード1:
rabbitmqctlのADD_USERママADMINの
rabbitmqctl set_permissionsママ"* " "* " " *。"   
rabbitmqctl set_user_tagsママの管理者の             管理者がログインすることができます設定してください#

 

(4)ノード1:編集rabbittmq変数ファイル
Vimの/etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_NODE_PORT = 5672 
のulimit -S -n 4096 
RABBITMQ_SERVER_ERL_ARGS = " + K真+ A30 + P 1048576 -kernel inet_default_connect_options [{NODELAY、真}、{生、6,18、<< 5000:64 /ネイティブ>>}] -kernel inet_default_listen_options [{生、6,18、<< 5000:64 /ネイティブ>>}] 
RABBITMQ_NODE_IP_ADDRESS = 192.168.253.135
 
(5)ノード1:ファイルは他の二つの変数ノードにコピーされrabbittmq、およびIP後に対応するノードを変更
SCPの/etc/rabbitmq/rabbitmq-env.confのAA:の/ etc / RabbitMQの/ 
SCP /etc/rabbitmq/rabbitmq-env.conf CC:の/ etc / RabbitMQの/
 
表示RabbitMQのプラグイン(機能を追加)
/ usr / libに/ RabbitMQの/ binに/ RabbitMQの-プラグイン一覧
 
RabbitMQのの(6)すべてのノードのオープンWeb管理ページ
192.168.253.135: 15672
  RabbitMQの-server.serviceを再起動しsystemctl
  systemctlステータスRabbitMQの-server.service
RabbitMQの-プラグインはrabbitmq_managementを有効にします
 
 
(7)クラスタ構成内の他のノードに送信されたノード1のerlang.cookie **(クラスタ・キー)
 
SCP / VARの /lib/rabbitmq/.erlang.cookieのAA:/ VAR / libに/ RabbitMQの/ .erlang.cookie 
SCP / VARの /lib/rabbitmq/.erlang.cookieのCC:/ VARの /lib/rabbitmq/.erlang.cookie
 
(8)CCは、アプリケーションを停止し、方法RAMに適用した後BBのノードの再起動を追加しました
同様にAAは、ここでCCを持つ唯一の実験ですん
注:削除動作の修正および他のクラスタ・ノード・アプリケーションは、最初のシャットダウンする必要があります
 
systemctl再起動rabbitmq- server.service 
rabbitmqctl stop_app 
rabbitmqctl join_cluster - ラム BB @ウサギ 
rabbitmqctlのstart_app
 

 

(9)ノード1クラスタの状態を確認します
R abbitmqctl cluster_status
 
 
(10)ログイン認証: http://192.168.253.135:15672 /         
    ゲスト/管理者
 
 
 
その他のコマンド:
 
(2)ノードタイプ(メモリまたはディスクタイプのタイプ)を変更
rabbitmqctl stop_app 
rabbitmqctlのchange_cluster_node_typeの ディスク(RAM)

  ノードのRAMを回す... INTOウサギの@ CC
  エラー:. Mnesiaはまだノードにウサギ@ CCを実行している上にある
  。アプリケーションを停止する必要性を見ることができる最初の#rabbitmqctlのstop_appでノードを停止してください

  再度、実行を停止した後、

   [ルート@ CCはRabbitMQの]#1 rabbitmqctlのchange_cluster_node_typeラム
   ラムノードにウサギ@ CCを回します...

rabbitmqctlのstart_app
 次に、Webインターフェイス上で見ることができます
 
 
(3)クラスタノード(ノードまたはリセット)RESETを残し
stop_appのrabbitmqctlの
rabbitmqctl RESET 

----「ノードウサギ@ CCをリセット...
[ルート@ CCはRabbitMQの]#の
rabbitmqctlのcluster_status#が発見CCのステータスは、クラスタノードのまま表示 ウサギ@ CCを...ノードのクラスタの状態を [、[{ノードディスク{ [ウサギの@ CC]}]}、          クラスタノードから逸脱#が自動的にディスクの方法は、以下の理由になります。1 {running_nodes、[ウサギの@ CC]}、{CLUSTER_NAME、<< "ウサギの@ CC" >>}、#および他のノード名は、クラスタ内で記載されていない {パーティション、[]}、 {アラーム、[{ウサギ@ CCを、[]}]}]
 
(4)ノードからクラスタ内の他のノードの除去を
rabbitmqctlのforget_cluster_nodeウサギの@ノード3の
rabbitmqctlリセット
rabbitmqctl start_app 
rabbitmqctl cluster_status
 
1. クラスタがデータの損失を防ぐために、ディスクノードの少なくとも1種を持っていることを確認してください あなたは特に注意を払ってのノードの種類を変更する場合、。
2. 若整个集群被停掉了,应保证最后一个 down 掉的节点被最先启动,若不能则要使用 forget_cluster_node 命令将其移出集群
3. 若集群中节点几乎同时以不可控的方式 down 了 此时在其中一个节点使用 force_boot 命令重启节点

 

 

おすすめ

転載: www.cnblogs.com/zzzynx/p/10955838.html