CentOS7インストールrabbitmqクラスター(バイナリ)

1. RabbiMQの概要

RabbiMQはErangで開発されました。Erlangは本質的に分散言語であるため、クラスタリングは非常に便利ですが、[Load Balancing](https://cloud.tencent.com/product/clb?from=10680)をサポートしていません。

RabbiMQモード

RabbitMQモードは、大きく次の3つのタイプに分けられます。
(1) シングルモード。
(2) 通常モード(デフォルトのクラスターモード)。
(3) ミラーモード(複数のノードに存在し、RabbiMQのHAスキームに属し、高いビジネス信頼性が必要な場合に適したミラーキューに必要なキューを作成します)。
ミラーリングモードを実現するには、最初に共通クラスターモードを構築してから、このモードに基づいてミラーリングモードを構成し、高可用性を実現する必要があります。

RabbiMQの機能

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

2、erlangをインストールします

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

3、rabbitmqのインストール

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

第4に、rabbitmqを構成します

構成ファイルを変更する

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をインストールします。

5、ミラーキューに基づくクラスター

最初のホストにログインして、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つのノード情報があることを確認してください

6つのフロントエンドnginxリバースプロキシ

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

CentOS7インストールrabbitmqクラスター(バイナリ)
centOsはrabbitMQをインストールします
Centos6.9ビルドrabbitmq3.6.8クラスター
CentOS6インストールcouchdb2クラスター
CentOS7にRabbitMQをインストールします
セントスにRabbitMQをインストールする
CentOS7にRabbitMQをインストールします
CentOS7にRabbitMQをインストールします
Centos7.2 /7.3クラスターインストールKubernetes1.8.4 +ダッシュボード
Centos7インストールk8sクラスター1.15.0バージョン
1.5Centos7をインストールする
Centos6.9でのRabbitMQクラスター展開レコード
Centos6はPython2.7.13をインストールします
Centos7.3はnginxをインストールします
CentOS7.2はMysql5.7.13をインストールします
Centos7はPython3.6をインストールします。
CentOS7はMySQLをインストールします
Centos7インストールprotobuf
CentOS7はDockerをインストールします
CentOS7はGlusterFSをインストールします
CentOS7.4はZabbix3.4をインストールします
CentOS7はDockerをインストールします
Centos6.5はTomcatをインストールします
CentOSはPython3.6をインストールします
VmwareはCentOS6をインストールします
centos7 install docker-ce 18.01.0
CentOS7.2はMariaDBをインストールします
CentOS7はHadoop3.0.0をインストールします
Centos7はPython2.7をインストールします
Centos7.6はseleniuをインストールします
CentOS7.3はZabbix3をインストールします
Centos7はLAMP + PHPmyadminをインストールします
CentOSインストールmysql
CentOSはopenjdk1.8をインストールします
CENTOS6.5インストールCDH5.12.1(1)
CentOSはPHPをインストールします
CentOS6はmist.ioをインストールします
Centos7はDockerをインストールします
CentOS7インストールmysql
CentOS7はMySQL5.6をインストールします
Centos7はNginxをインストールします
CentOS6.5はCDH5.13をインストールします
Centos7インストールdocker18
CentosはPython3をインストールします
centos7インストールドッカー
CentOSインストールjdk
centos7インストールnginx-rtmp
CentOS8はMySQL8.0をインストールします
Centos6.3はKVMをインストールします
CentOSはPostgreSQL9.1をインストールします
CentOS7はmysql8をインストールします
CentOS7はJava1.8をインストールします
CentOS8はfastdfs6.06をインストールします
CentOS7はGitlabをインストールします
Centos7はPostgreSQLをインストールします
CentOS7はMySQL8をインストールします
CentOS7はJava1.8をインストールします
CentOS6はDockerをインストールします
centos6.5インストールzabbix4.4
Centos8はDockerをインストールします
CentOS6.8はpython2.7をインストールします