RabbiMQはErangで開発されました。Erlangは本質的に分散言語であるため、クラスタリングは非常に便利ですが、[Load Balancing](https://cloud.tencent.com/product/clb?from=10680)をサポートしていません。
RabbitMQモードは、大きく次の3つのタイプに分けられます。
(1) シングルモード。
(2) 通常モード(デフォルトのクラスターモード)。
(3) ミラーモード(複数のノードに存在し、RabbiMQのHAスキームに属し、高いビジネス信頼性が必要な場合に適したミラーキューに必要なキューを作成します)。
ミラーリングモードを実現するには、最初に共通クラスターモードを構築してから、このモードに基づいてミラーリングモードを構成し、高可用性を実現する必要があります。
RabbitMQのクラスターノードには、メモリノードとディスクノードが含まれます。 RabbitMQはメッセージの永続性をサポートします
つまり、データはディスクに書き込まれます。最も適切な解決策は、メモリノードとディスクノードの両方を用意することです。
3つのサーバーを使用して、rabbitmqミラーリングモードを使用してビルドします
オペレーティングシステム | ホスト名 | ipアドレス | 目的 |
---|---|---|---|
centos7.4 | centos7_01 | 192.168.31.149 | rabbitmq001(ディスクノード) |
centos7.4 | centos7_02 | 192.168.31.186 | rabbitmq002(メモリノード) |
centos7.4 | centos7_02 | 192.168.31.238 | rabbitmq003(メモリノード) |
ここでの3つのサーバーはすべてインターネットに接続されていることに注意してください。さらに、RabbitMQクラスターノードは同じネットワークセグメントに存在する必要があります。WANを介している場合、影響はさらに悪化します。
ホスト名が正しい場合は、この手順を無視してください
hostnamectl set-hostname centos7_01
hostnamectl set-hostname centos7_02
hostnamectl set-hostname centos7_03
ホストを追加する
vi /etc/hosts
内容は以下の通りです。
192.168.31.149 centos7_01
192.168.31.186 centos7_02
192.168.31.238 centos7_03
mkdir -p /data/software
yum install -y wget epel-release
cd /data/software
wget http://download.51yuki.cn/esl-erlang_21.3.6-1_centos_7_amd64.rpm
yum -y install esl-erlang_21.3.6-1_centos_7_amd64.rpm
yum clean all
erlangチェック
# erl -version
Erlang(SMP,ASYNC_THREADS,HIPE)(BEAM) emulator version 10.3.4
cd /data/software
wget http://download.51yuki.cn/rabbitmq-server-generic-unix-3.7.15.tar.xz
tar xvf rabbitmq-server-generic-unix-3.7.15.tar.xz -C /data/
mv /data/rabbitmq_server-3.7.15/data/rabbitmq
echo 'export PATH=/data/rabbitmq/sbin:$PATH'>>/etc/profile
source /etc/profile
which rabbitmqctl
構成ファイルを変更する
vi /data/rabbitmq/etc/rabbitmq/rabbitmq-env.conf
内容は以下の通りです。
RABBITMQ_NODENAME=rabbitmq001@centos7_01
RABBITMQ_NODE_IP_ADDRESS=192.168.31.149
RABBITMQ_NODE_PORT=5672
RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
RABBITMQ_LOG_BASE=/data/rabbitmq/logs
説明:
属性 | 説明 | デフォルト |
---|---|---|
RABBITMQ_NODENAME | rabbitmqノード名。ノード名はクラスター内で一意であることに注意してください | linuxデフォルトのノード名はrabbit @ $ hostname |
RABBITMQ_NODE_IP_ADDRESS | ネットワークインターフェイスのバインド | デフォルトは、マシンのすべてのネットワークインターフェイスをバインドするための空の文字列です |
RABBITMQ_NODE_PORT | ポート | デフォルトは5672 |
RABBITMQ_MNESIA_BASE | mnesiaが配置されているパス | $ RABBITMQ_HOME / var / lib / rabitmq / mnesia |
RABBITMQ_LOG_BASE | ログが配置されているパス | $ RABBITMQ_HOME / var / log / rabitmq |
その他の属性については、公式Webサイトのリンクを参照してください。
http://www.rabbitmq.com/man/rabbitmq-env.conf.5.html
構成ファイルの編集
mkdir -p /data/rabbitmq/data
mkdir -p /data/rabbitmq/logs
vi /data/rabbitmq/etc/rabbitmq/rabbitmq.config
内容は以下の通りです。
[{ rabbit,[{tcp_listeners,[5672]},{dump_log_write_threshold,[1000]},{vm_memory_high_watermark,0.5},{disk_free_limit,"200MB"},{hipe_compile,true}]}].
注:[]。後にドットがあります
説明:
Key | Documentation |
---|---|
tcp_listeners | AMQP接続のリッスンに使用されるポートのリスト(SSLなし)。整数(つまり、「すべてのインターフェイスをリッスン」)または{"127.0.0.1"、5672}などのタプルを含めて1つ以上のインターフェイスをリッスンできます。 [5672] |
dump_log_write_threshold | mnesiaのダンプログ書き込みしきい値の変更デフォルト:[100] |
vm_memory_high_watermark | プロセス制御によってトリガーされるメモリしきい値。メモリベースのフロー制御ドキュメントを参照してください。デフォルト:0.4 |
disk_free_limit | RabbitMQストレージデータパーティションの使用可能なディスクスペースの制限。空き領域の値がしきい値よりも低い場合、プロセス制御がトリガーされます。この値は、RAMの合計サイズを基準にして設定できます(例:{mem_relative、1.0})。この値は、整数(バイト単位)または数値単位(例:「50MB」)を使用します。デフォルトでは、使用可能なディスク容量は50MBを超える必要があります。ディスクアラームのドキュメントを参照してください。デフォルト:50000000 |
hipe_compile | このオプションをtrueに設定すると、RabbitMQのHiPEプリコンパイル済み部分であるErlangジャストインタイムコンパイラが使用されます。これにより、サーバースループットが向上しますが、サーバーの起動時間が長くなります。 |
詳細については、次のリンクを参照してください。
https://blog.csdn.net/Super_RD/article/details/70327712
useradd -u 1020-s /sbin/nologin rabbitmq
chown -R rabbitmq:rabbitmq -R /data/rabbitmq
他の2つのサーバーについては、上記のようにrabbitmqとerlangをインストールします。
最初のホストにログインして、rabbitmqサービスを開始します
注:通常のユーザーに切り替える必要があります
su -s /bin/bash - rabbitmq
nohup /data/rabbitmq/sbin/rabbitmq-server start &
出力情報を表示する
tail -f nohup.out
出力は次のとおりです。
HiPE compiling:|---------------------------------------------------------||#########################################################|
Compiled 57 modules in 302s
## ##
## ## RabbitMQ 3.7.15.Copyright(C)2007-2019 Pivotal Software, Inc.
########## Licensed under the MPL. See https://www.rabbitmq.com/ ###### ##
########## Logs:/data/rabbitmq/logs/centos7_01.log /data/rabbitmq/logs/centos7_01_upgrade.log
Starting broker...
completed with0 plugins.
注:完了が表示され、正常に起動したことを示します
cookieファイルが存在するかどうかを確認します
注:このファイルは存在する必要があります
ls .erlang.cookie
ポートが存在するかどうかを確認します
ss -tunlp|grep 5672
最初のサーバーrabbitmqのホームディレクトリにある .erlang.cookie
ファイルを他の2つのサーバーrabbitmqのホームディレクトリにコピーします
scp -P 22/home/rabbitmq/.erlang.cookie [email protected]:/home/rabbitmq/
scp -P 22/home/rabbitmq/.erlang.cookie [email protected]:/home/rabbitmq/
他の2つのサーバーにログインし、所有者とグループを変更します
chown -R rabbitmq.rabbitmq /home/rabbitmq/.erlang.cookie
chmod 600/home/rabbitmq/.erlang.cookie
別の2つのrabbitmqサーバーを起動します
su -s /bin/bash - rabbitmq
nohup /data/rabbitmq/sbin/rabbitmq-server start &
数分待って、nohup.outの出力をチェックし、正常に起動することを確認します。
ポートを表示
# ss -tunlp|grep 5672
tcp LISTEN 0128*:25672*:* users:(("beam.smp",pid=11461,fd=66))
3 それをインストールします
rabbitmq-plugins enable rabbitmq_management
実行する最初のサーバーにログインします
rabbitmqctl add_user mqadmin "Nwvh3#vu@kqLP&FdHt"
rabbitmqctl set_permissions -p / mqadmin ...
rabbitmqctl set_user_tags mqadmin administrator
最初のサーバーにログインして、クラスターのステータスを表示します
# rabbitmqctl cluster_status
Cluster status of node centos7_01@centos7_01 ...[{nodes,[{disc,[centos7_01@centos7_01]}]},{running_nodes,[centos7_01@centos7_01]},{cluster_name,<<"centos7_01@centos7_01">>},{partitions,[]},{alarms,[{centos7_01@centos7_01,[]}]}]
rabbitmq002
と rabbitmq003
にログインしてクラスターに参加します
アプリを最初に閉じる必要があります
rabbitmqctl stop_app
もう一度参加する
rabbitmqctl join_cluster --ram rabbitmq001@centos7_01
最後にアプリを起動します
rabbitmqctl start_app
クラスターステータスの表示
任意のノードにログインしてクエリを実行します
rabbitmqctl cluster_status
出力は次のとおりです。
Cluster status of node rabbitmq001@centos7_01 ...[{nodes,[{disc,[rabbitmq001@centos7_01]},{ram,[rabbitmq003@centos7_03,rabbitmq002@centos7_02]}]},{running_nodes,[rabbitmq002@centos7_02,rabbitmq003@centos7_03,
rabbitmq001@centos7_01]},{cluster_name,<<"rabbitmq001@centos7_01">>},{partitions,[]},{alarms,[{rabbitmq002@centos7_02,[]},{rabbitmq003@centos7_03,[]},{rabbitmq001@centos7_01,[]}]}]
注:ノード、running_nodes、alarmsに3つのノード情報があることを確認してください
yum install -y nginx
vi /etc/nginx/nginx.conf
行を追加します
include /etc/nginx/conf.d/vhosts/*.conf;
ディレクトリを作成する
mkdir /etc/nginx/conf.d/vhosts/
mkdir -p /data/log/nginx/
構成ファイルの編集
vi /etc/nginx/conf.d/vhosts/rabbitmq.xx.com.conf
内容は以下の通りです。
upstream rabbitmq {
server 192.168.31.149:15672 max_fails=2 fail_timeout=1;
server 192.168.31.186:15672 max_fails=2 fail_timeout=1;
server 192.168.31.238:15672 max_fails=2 fail_timeout=1;}
server {
listen 80;
server_name rabbitmq.xx.com;
charset utf-8;
access_log /data/log/nginx/rabbitmq.xx.com.access.log main;
error_log /data/log/nginx/rabbitmq.xx.com.error.log;
location /{
root html;
index index.html index.htm;
proxy_pass http://rabbitmq;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;}
error_page 404/404.html;
location =/40x.html {}
error_page 500502503504/50x.html;
location =/50x.html {
root html;}}
nginxを開始します
nginx -t
nginx
http://rabbitmq.xx.com
ユーザー名:mqadmin
パスワード:Nwvh3#vu@kqLP&FdHt
効果は次のとおりです。
この記事の参照リンク:
https://www.cnblogs.com/shihaiming/p/11014257.html
Recommended Posts