RabbitMQの戦闘クラスターと負荷の構築(3)
1. 概要
実際の運用では、単一のサービスプロバイダーは十分に強く安定していないため、今日では、RabbitMQクラスターの構築を完了し、例を通してロードします。
2.仮想マシンを構成する
3台のマシンまたは仮想マシンを準備し、1台をNginxサーバーとして、残りの2台をRabbitMQクラスターを構築するために準備します。
3台のマシン:
サーバー名| IPアドレス
Nginx 192.168.153.131
RMQ-1 192.168.153.134
RMQ-2 192.168.153.132
上記の操作は、2台のマシン[192.168.153.134]と[192.168.153.132]で実行されます。注意してください。 。
- ホスト名
vim / etc /ホスト名サーバー名をRMQ-1 RMQ-2に変更します
- hostsファイルを変更する
vim / etc / hosts
192.168.153.134 RMQ-1
192.168.153.132 RMQ-2
- 開発ポート
4369、5672、15672、25672の4つのポートが開かれます。
4369は:アーラン検出ポート提供
25672を:提供アーラン基礎となる通信ポート
5672は:アプリケーションが接続する開いているポートを提供し
、開いているポートが可視化サービスを提供:15672
編集するためのビジュアルインターフェイスに行くことができますまた、コマンドを実行することができ
、次のようにコマンド開いているポートを:
#を手放します4369ポート
ファイアウォール-CMD = --zone 4369 / TCPは--permanent =公共--add-ポート
#5672のリリースポート
ファイアウォール-CMD = --zone公共--add-ポート= 5672 / TCP --permanent
#リリース15672ポート
ファイアウォール-CMD = --zone公共--add-ポート= 15672 / tcpの--permanent
#25672ポートオープン
ファイアウォール-CMD = --zone公共--add-ポート= 25672 / tcpの--permanent
#リフレッシュファイアウォールサービス
firewall-cmd --reload - RabbitMQの
インストールインストールプロセスについては、「RabbitMQ Combat-Discussion and Installation(1)」を参照してください。繰り返しは行いません。 - サーバーの再起動
上記の操作では、2台のサーバーの内容は同じですが、操作が正常に完了したら、両方のマシンを再起動してください。
3.クラスターを構築する
3.1 erlang.cookieを同期する
.erlang.cookieは、erlang分散システムのトークンファイルです。通信するために同じトークンを保持できるのは、クラスター内のサーバーのみです。
コマンドfind / -name * .cookie searchを実行します。
オープン/var/lib/rabbitmq/.erlang.cookieトークンの値を取得できます
他のサーバーのコンテンツの一貫性を確保するために、コマンドを使用してこのファイルを他のマシンにコピーします
(1)scp / var / lib / rabbitmq / .erlang.cookie 192.168.153.132:/ var / lib / rabbitmq /
(2)yesと入力するかどうかを確認
(3)192.168.153.132のrootパスワードを入力
(4)完全なコピー
(5)2台のマシンコマンドをそれぞれchmod 400 /var/lib/rabbitmq/.erlang.cookieを実行してファイルを承認します
(6)2つのサーバーを再起動します。
3.2クラスターに参加する
RMQ-2をRMQ-1クラスターに追加するので、最初
にrabbit @ RMQ-1の後のクラスター名に示されているRMQ-1クラスター名を見つける必要があります。RMQ-2で操作します。
#RMQ-2のrabbitMqアプリケーションを
停止し
ます
rabbitmqctl stop_app#クラスターに参加しますrabbitmqctl join_cluster rabbit @ RMQ-1 #
サービス
rabbitmqctl start_appを起動し
てクラスターが正常に構築されたことを確認し、これら2つのマシンのいずれかを開き、ブラウザーにhttpと入力します。 // localhost:15672の場合、ノード部分が2つのノードとして表示され、クラスターが正常に構築されていることがわかります。
4.負荷を構築する
上記の操作により、すでにクラスターが作成されています。2台のマシンのRabbitMQはリアルタイムで同期されます。1台のマシンがメッセージを受信し、もう1台のマシンも同時にメッセージを受信できます。次に、アプリケーションが1つのマシンのRabbitMQとのみ対話する場合、他のマシンは必然的にアイドル状態になります。同じように、このマシンのRabbitMQがクラッシュすると、アプリケーションは別のマシンのRabbitMQにアクセスできなくなり、プロジェクトサービスが中断されています。この問題をどのように解決すればよいですか?次に、Nginxプロキシサービスを使用してRabbitMQロードを構築します。
HAProxyをロードバランサーとして使用する同様のチュートリアルがネットワーク上に多数ありますが、本日は、Nginxを介してRabbitMQロードバランシングを構築する方法について説明します。RabbitMQのロードはTCP / IPモードであるため、Nginxを選択するときはそのバージョンに注意する必要があります。このバージョン1.9では、Nginxが対応するTCP / IPの転送をサポートし始めました。
Nginxのインストール手順については、「nginxのTengineに最適化されたバージョンのインストール」を参照してください。
- RabbitMQユーザーを作成します。RabbitMQ
の元のユーザーはゲストであることに注意してください。このユーザーはこのマシンへのアクセスのみを許可されているため、ユーザーを追加して、インターネットにアクセスできるようにする必要があります。図に示すように、パスワード123456を作成するユーザーを作成します。このユーザーを使用して、将来、外部ネットワークにアクセスします。
- ポート
を開くnginxサーバーのポートを開く必要がありますメモリの便宜上、ポートは5672として定義されています。#
ポートを
開くfirewall-cmd --zone = public --add-port = 5672 / tcp --permanent#
ファイアウォールサービスの更新
firewall-cmd --reload - nginx構成ファイルの
変更nginxサーバー上のnginx構成ファイル[nginx.conf]を変更します。
#構成ファイルは次のコンテンツを追加します
サーバー{
listen 5672; #=====================》监听5672端口
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
default_type application/octet-stream;
# default_type 'text/html';
charset utf-8;
location /{
root /root;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
client_max_body_size 30m; #允许客户端请求的最大单文件字节数
proxy_connect_timeout 60s;
proxy_read_timeout 5400s;
proxy_send_timeout 5400s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://server-5672; #=====================》配置的节点
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#=====================》配置节点
upstream server-5672 {
#RMQ-1
server 192.168.153.134:5672 max_fails=1 fail_timeout=20s;
#RMQ-2
server 192.168.153.132:5672 max_fails=1 fail_timeout=20s;
}
コマンド./nginx -s reloadを実行して、構成ファイルを有効にします。
nginx構成ファイルの変更により、ポート5672での監視が追加されました。ポート5672へのアクセスが監視されると、それはRMQ-1およびRMQ-2に配信されてロードバランシングを実現します。アプリケーションはnginxサーバーにのみアクセスする必要があります[ IP:5672]負荷にアクセスできます。
上記は、RabbitMQの実際の戦闘シリーズの内容全体です。将来的にいくつかの実用的なヒントを追加する必要があります。機会があれば追加します。このメモがお役に立てば幸いです。みなさん、幸せな研究をしてください。