メッセージングミドルウェアのRabbitMQの使用

:説明メッセージングミドルウェア
1はじめに
メッセージング・ミドルウェアは、メッセージ・キューと呼ぶことができるが、効率的かつ信頼性のあるメッセージングのためのプラットフォームに依存しない機構とのデータ交換を参照して、データの通信は、分散システムの統合に基づいて行われます。メッセージングおよびメッセージ・キューイングモデルを提供することにより、通信処理は分散環境で拡張することができます。
現在主流のメッセージングミドルウェアはRabbitMQの、カフカ、ActiveMQの、RocketMQなどを持っています

2は、主な役割メッセージングミドルウェア
•冗長性(保存)
•スケーラビリティ
•リカバリの
•の順序保証
バッファ•
•非同期通信
•クリッピング:メッセージキューの一般的なシナリオは、一般的につかむまたは活性のスパイクに広く、十分に使用されています。通常ので、あまりにも多くのトラフィックを、アプリケーションシステムの構成は、このユニット瞬時流量を運ぶことができない、システムが直接ハングすることがあり、それは伝説の「ダウン」現象です。この問題を解決するために、膨大なトラフィックが、私たちは、すなわち直接MQの流入たちのインターフェイスに転送されず、上位システムのようなものを拒否します。

二つ。約1つのメッセージキューRabbiMQ
アーラン日⽣が⼀⻔言語を配布し、それ自体ではない⽀支援の負荷分散、高並行性のサポート、サポートされているため1、RabbiMQ使用Erangが開発されたが、クラスタはそれは、⽅便利になりますスケーラブルな。AJAX、使いやすさの点では、分散システムにおけるストアアンドフォワードメッセージの永続性、スケーラビリティ、高可用性、およびとてもよくやってをサポートしています。

2、RabbiMQが特長
•信頼性
•スケーラビリティ
•高可用性
•複数のプロトコル
のマルチ言語のクライアント•
管理インターフェイス•
•プラグイン機構

3.メッセージキューは何をされた
MQは、メッセージキュー、メッセージキューと呼ばれます。これは、アプリケーションに応じてアプリケーション通信方法です。メッセージ(アプリケーションプログラムのためのデータ)を介して通信するアプリケーションは、それらをリンクするための専用の接続を必要とせずに、キューから読み取ら。
これは、メッセージではなく、互いに通信する直接呼び出しにデータを送信することによって、プログラム間の通信をメッセージパッシングを指します。

4.RabbiMQモード
注:おおよそのRabbitMQモードは以下の三つに分けられる:
(1)単一モード⼀(ホスト配備のRabbitMQ)
(2)通常モード(デフォルトトランクモード)。
(3)ミラーモード(必要な画像キューキューからなるが、HA⽅RabbiMQケースに属する複数のノードの存在下で、⽐より多くのビジネスは、信頼性がより多くの機会を進めた場合に有用です)。ミラーモードを実現するには、⼀通常のクラスタモードを構築し、その後、ADVANCEDを使用することができます達成するために、このモデルに基づいて、ミラーモードを設定し、ポリシーデータは、他のクラスタノードに同期メインのRabbitMQすることができ、ミラーモードで提供する必要があります

+++++++++++ + RabbitMQのクラスタ配備ベース(ノーマルモード) ++++++++++++

A:クラスタホストでの基本的な展開は、操作を実装する必要があります

1、3台の3つのノードとしてのサーバー、およびが⽹リンクされている場合、ファイアウォールをオフにし、SELinuxの、編集DNSの/ etc / hosts(IPとホスト名が良いか、あるいは実験的に敏感に対応している必要があります)
[ルート@のRabbitMQの-1〜 ]#Vimの/ etc / hostsを
192.168.50.138のRabbitMQ。1-
192.168.50.139のRabbitMQ-2
192.168.50.140。3のRabbitMQ

2、3つのノードに配置されRabbitMQのインストールソフトウェアの
インストールが依存します:
[。ルート-RabbitMQの@〜1]#yumをインストールしGCC -Y-C ++のunixODBC unixODBCの-develの-のOpenSSLのncurses-develのdevelの
[。ルート-RabbitMQの@〜1]#wgetの-処分-コンテンツhttps://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-20.3-1.el7.centos.x86_64.rpm/download.rpm
[ルート-RabbitMQの@〜。1]#のRPM -ivhアーラン20.3-1.el7.centos.x86_64.rpm

テスト;
[。ルート-RabbitMQの@〜1]#のERL

安装RabbitMQの:
[ルート@ RabbitMQの-1〜]#wgetのhttps://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.5/rabbitmq-server-3.7.5-1.el7.noarch.rpm
[ルート@のRabbitMQの-1〜]#yumをインストールRabbitMQの-サーバ3.7.5-1.el7.noarch.rpm

3.スタート
スタート方法:
[。ルート-RabbitMQの@〜1]#のsystemctlデーモン・リロード
[。ルート-RabbitMQの@〜1]#のsystemctl RabbitMQのスタート・サーバー
[。ルート-RabbitMQの@〜1]#のsystemctl RabbitMQの-サーバーを有効にする
[ルート@ RabbitMQの-1〜]#のsystemctlのステータスのRabbitMQサーバー
第二の方法を起動します。
[ルート@ RabbitMQの-1〜] #/ sbinに/ RabbitMQの-サービス-View Serverのステータスのステータス---
[ルート@ RabbitMQの-1〜] #/ sbinに/ サービスのRabbitMQサーバー開始---開始

RabbitMQのを開く4、ウェブアクセスインターフェース:
[ルートのRabbitMQ @〜1。]#のRabbitMQの-プラグインはrabbitmq_managementを有効にします


5.ユーザーを作成します。
注意:だけ追加することができ、ユーザを作成し、ホスト上で作成した管理者としてその
(1)ユーザーとパスワードを追加するために誰
[ルート@ RabbitMQの-1〜] #のrabbitmqctl SOHO 123 ADD_USER
ユーザー"SOHO"を作成するには...
... DONE。
(2)これは、管理者のためにある
[ルート-RabbitMQの@〜。1]#SOHOの管理者rabbitmqctlはset_user_tags
[管理者]のユーザー"SOHO"の設定タグを.. 。
... DONE。
(3)ユーザーを表示するには
、[ルート@のRabbitMQの-1〜]#のrabbitmqctlのlist_usersは、
ユーザーリスト...
ユーザーレビュー[管理者]
SOHO [管理者]
... DONE。
(4)権利
[ルート@のRabbitMQの-1 〜]#rabbitmqctl set_permissions -p "/" SOHO。 " "。 " "。 " "
"/ "バーチャルホストで" SOHOユーザーのアクセス許可を設定します" ...
...行って。
「あなたがここに権限を設定するときに注意してください。
confに権限を表す*」「あなたは3の間にスペースを持っている必要があります」、例えば、権限と書き込み権限をお読みくださいしないように
これらの3 SOHOの事前設定された権限なし権限のお問い合わせキューが存在しない、UIインターフェースを見ることができません


6、すべてのマシンが動作している:オープンユーザーがリモートでログインするために:
[ルート-RabbitMQの@〜1。]#のCDの/ etc / RabbitMQの/
#のCPの/usr/share/doc/rabbitmq-server-3.7 [ルート@ -RabbitMQ RabbitMQの1。]を。 。5 / rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
[ルートのRabbitMQ RabbitMQの@ 1]#個のLS
enabled_plugins rabbitmq.config
[ルートのRabbitMQ RabbitMQの@ 1]#Vimのrabbitmq.config
以下のように変更。

7. 3台のマシンがサービスのサービスを再起動し運用している:
[ルート@ RabbitMQの-1〜]#systemctl再起動のRabbitMQ・サーバーの
すべてのマシンが動作しているビューポート:リモートでログインするためのユーザーを開きます:
[ルート@ RabbitMQの-1〜]#のCDの/ etc / RabbitMQの/
[ルート@ -RabbitMQのRabbitMQ。1] /usr/share/doc/rabbitmq-server-3.7.5/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config CP番号
[ルートのRabbitMQ RabbitMQの@ 1] LS位
rabbitmq.configのenabled_plugins
#Vimのrabbitmq.config [ルートのRabbitMQ RabbitMQの@ 1]
以下のように変更。
メッセージングミドルウェアのRabbitMQの使用

8. 3台のマシンが再起動サービスを運用している:
[。ルートのRabbitMQを@〜1]の再起動-サーバーのRabbitMQ systemctl#
ビューポート
メッセージングミドルウェアのRabbitMQの使用
4369 -のerlangたポート
5672--プログラムポート
15672--管理インタフェースポートのUI
25672 -サーバーポート間の内部通信

図9は、クラウドサーバー場合は、ポートを解放するためにセキュリティグループを追加することを忘れないことに注意してください。
Webアクセス:192.168.50.138:15672
ここで注意する:
RabbitMQのデフォルトの管理者ユーザー:guestパスワード:ゲスト
新しく追加されたユーザーへ:SOHOパスワード:123

++++++++++++ RabbitMQのクラスタは、正式に(通常モード)に展開 +++++++++++++

クラスタの第二に、正式な展開

1.まず、ストレージディレクトリデータを作成し、ストレージディレクトリをログに記録し
ます。[root-RabbitMQの@〜。1]#ます。mkdir -p /データ/ RabbitMQの/データの
[ルートのRabbitMQ @。1〜]#1は、mkdir -p /データ/ RabbitMQの/ログ
[ルート〜1-のRabbitMQ @] -R&LT#chmodの777 /データ/ RabbitMQの
[ルートのRabbitMQ @〜1]#個のchownのrabbitmq.rabbitmq /データ/ -R&LT

2、設定ファイルを作成:
[。ルート-RabbitMQの@〜1]#Vimの/etc/rabbitmq/rabbitmq-env.conf(以下を追加します)
RABBITMQ_MNESIA_BASE = /データ/ RabbitMQの/データ
RABBITMQ_LOG_BASE = /データ/ RabbitMQの/ログを

[ルート@のRabbitMQの-1〜]#猫/etc/rabbitmq/rabbitmq-env.conf

サービスを再起動する3
[ルート@のRabbitMQの-1〜] #systemctl再起動のRabbitMQサーバー

4.コピー⻉erlang.cookieの
理由:達成クッキー⼀介してクラスタ内のノードを、それがすべてのノードクッキーが⼀活性化、あるいはノード間の位置の通信方式に⽆(クッキーが格納されていることを確認する必要がある:解凍がマウントRabbitMQの展開インストールパッケージは、他の方法で保存されているインストールの/ var / libに/ RabbitMQのを/home/.erlang.cookie.rpm)

[ルート〜@-1のRabbitMQ]#猫の/var/lib/rabbitmq/.erlang.cookie
HOUCUGJDZYTFZDSWXTHJ
使用SCPは.erlang.cookieの場所のインデックス値のRabbitMQ-1つのノードの他のノードにコピーします。
[ルート-RabbitMQの@〜1。]#のSCPの/var/lib/rabbitmq/.erlang.cookieの[email protected]:は/ var / libに/ RabbitMQの/
[。ルート-RabbitMQの@〜1]#のSCPの/ var / libに/ RabbitMQの/.erlang.cookieの[email protected]:は/ var / libに/ RabbitMQの/

3. MQ-2は、ディスクノードMQ-3とノードクラスタノードMQ-1 .mq-1のメモリの充填として、RabbitMQのクラスタでは、少し⼀ディスクノード、またはプロセス・キュー・メタデータである必要があり⽆ディスクが離れてぐずぐずするとき、クラスタノードへの書き込みをされ、新しいキューのメタデータ情報を書き込みますクラスタが有効でない起動します。
MQ-2では、MQ-3は、次のコマンドを実行します。
[2-RabbitMQのルート@〜]は##のrabbitmqctl stop_app停止ノード、飢えていない覚えている
[ルート@ RabbitMQの-2〜] #のrabbitmqctlリセット# データをリセットする必要がある場合必要なし
[ルート@ RabbitMQの-2〜] #rabbitmqctl join_cluster --ramウサギの@ RabbitMQの-1#は、 ディスクノードに追加
クラスタリングノードのウサギ@ RabbitMQの-2 'と'@ウサギ-のRabbitMQ。1' ...
[ルート@ RabbitMQの-2〜]#のrabbitmqctlの start_app#はノード起動
開始ノードを'ウサギ@ RabbitMQの-2 ' ...

解決ここでは3.1.0ノード問題:
(1)あなたは、このコマンドrabbitmqctlのstop_appエラー実行する場合:実行する必要がある
ファイルのパーミッションは400です400 .erlang.cookieを#chmodを
#chownのrabbitmq.rabbitmqの.erlang.cookie
(2)のために限り、コマンドのようなものを示唆し、RabbitMQの誤差であるとして、hostnameファイル、各rabbitmqctl停止またはrabbitmqctlのcluster_statusを変更する
ノードのクラスタ状態うさぎの@ WEB2 ...
ノードにウサギの@ WEB2を接続することができません:エラーnodedownを
... ...........
この最初のPS補助で| grepをのMQ、その後、すべてのMQが殺す-9プロセスを、そして解決することができる-detachedのRabbitMQサーバ。(すなわち、第一の強いキルと再起動、である)
(3)また、再度追加する必要があり、ウェブホスティングなどcoresystem損失を元のユーザーの管理者を追加し、RabbitMQのサーバ-detached再起動後、rabbitmqctlストップを使用しています。
(4)rabbitmqctl join_cluster --ramウサギ@ RabbitMQの-1 DNSエラーがチェックするとき
(5)コマンド-detachedのRabbitMQサーバーの使用に関するその他のご質問は、RabbitMQのを開始するには、次のプロンプトが警告表示されます書かれていないPIDファイルを、-detachedをして合格し、 この時間を使用
rabbitmqctlステータス、アラートサービスが開始された、我々は解決していないこの問題を見ることができます。
3.1.1ノードが追加されました:
(1)デフォルトのブートディスクをこのクラスタコマンドでRabbitMQのノードの後、MQ-2およびMQ-3は、記憶ノードであり、
MQ-1は、ディスクノードです。
(2)あなたは、MQ-2を使用する場合は、MQ-3ディスクノードは--ramパラメータを削除しています。
あなたはノードの種類を変更したい場合は(3)、コマンドrabbitmqctlのchange_cluster_node_typeディスク(RAM)を使用することができ、ウサギはそれを適用するために停止しなければならないものとする
注意:
#あなたが使用する必要がある場合、ディスクノードがクラスタに参加
[ルート@のRabbitMQの-2〜] #のrabbitmqctlをウサギ@のRabbitMQ。1-join_cluster
[ルートのRabbitMQ。3 @〜] rabbitmqctl join_clusterラビット#@。1-のRabbitMQ

図4は、成功したかどうかを確認するために、クラスタ構成内の任意のノードでrabbitmqctlのcluster_statusを実行して、クラスタの状態を表示します。
[ルートは、@のRabbitMQ-1〜] cluster_status#のrabbitmqctl
メッセージングミドルウェアのRabbitMQの使用
各マシンは、それが正常に追加されたことを言った、3つのノードを示しています!

5.ログのRabbitMQのWeb管理コンソールは、新しいキューを作成して
、ブラウザが起動失う開くようにhttp://192.168.50.138:15672を
ゲスト:デフォルトのユーザー名にクリック失わ
失うSTARTデフォルトのパスワード:ゲスト
メッセージングミドルウェアのRabbitMQの使用

記事⼀コミュニティ⾯のヒントに従ってキューを作成します
メッセージングミドルウェアのRabbitMQの使用

++++++由以上RABBITMQ普通模式+镜像模式+++++++++++++

三,添加镜像模式的原因:

     上面已经完成RabbitMQ默认集群模式,但并不保证队列的高可用性,队列内容不会复制。如果队列节点宕机直接导致该队列无法应用,只能等待重启,所以要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,必须要创建镜像队列。    镜像队列是基于普通的集群模式的。

1,创建镜像集群:三台机器相同操作
rabbitmq set_policy :设置策略
[root@rabbitmq-1 ~]#rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...

2,再次查看队列已经同步到其他两台节点:
メッセージングミドルウェアのRabbitMQの使用

3,此时镜像队列设置成功。已经部署完成,将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态保持一致。``

++++++++rabbitmq默认的集群模式+镜像模式+HA+负载均衡++++++++++++
RabbitMQ 高可用集群搭建完成,最后一个步骤就是搭建均衡器。
メッセージングミドルウェアのRabbitMQの使用

简单安装并配置负载均衡器HA

注意:如果使用阿里云,可以使用阿里云的内网slb来实现负载均衡,不用自己搭建HA。
安装并配置负载均衡器HA
1、在192.168.50.138安装HAProxy
yum -y install haproxy
2、修改 /etc/haproxy/haproxy.cfg
[root@rabbitmq-1 ~]# cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
[root@rabbitmq-1 ~]# vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2

chroot      /var/lib/haproxy
pidfile     /var/run/haproxy.pid
maxconn     4000
user        haproxy
group       haproxy
nbproc      4
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
defaults
mode http
log global
retries 3
timeout connect 10s
timeout client 1m
timeout server 1m
timeout check 10s
maxconn 2048
#---------------------------------------------------------------------
##监控查看本地状态#####
listen admin_stats
bind :80
mode http
option httplog
option httpclose
log 127.0.0.1 local0 err
stats uri /haproxy
stats auth xingdian:123 (用户+密码)
stats refresh 30s
####################################
###反代监控
frontend server
bind
:5670
グローバルログ
モードのTCP
forwardfor #option
default_backendののRabbitMQ
MAXCONN 3
バックエンドのRabbitMQ
モードのTCP
ロググローバル
バランスラウンドロビン
2つの秋3上昇サーバrabbitmq1 192.168.50.138:5672チェック間の2000年代を
サーバーrabbitmq2 192.168.50.139:5672チェック間2000年代の2秋3上昇
サーバrabbitmq3の192.168 .50.140:5672チェック間2000年代には2秋3上昇します

[ルート@ RabbitMQの-1〜]#systemctl再起動haproxy

RabbitMQの状態を表示するhttp://192.168.50.138/haproxyブラウザを入力します。

おすすめ

転載: blog.51cto.com/14535577/2443782