サーバ構築 ミドルウェア

RabbitMQクラスタ構築

更新日:

RabbitMQインストール

公式参考(https://www.rabbitmq.com/install-rpm.html)

Erlangインストール

前提

  1. RabbitMQはErlangで動いてるので、前提としてErlangインストールが必要
  2. RabbitMQが対応してるバージョン確認しておく

Erlangインストール

rabbitmq-erlangのリポジトリを設定する。

# rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1

インストールする

# yum install erlang
# yum info erlang
Installed Packages
Name        : erlang
Arch        : x86_64
Version     : 20.2.3
Release     : 1.el7.centos
Size        : 31 M
Repo        : installed
From repo   : rabbitmq-erlang
Summary     : General-purpose programming language and runtime environment
URL         : http://www.erlang.org
License     : ERPL
Description : This is a minimal packaging of Erlang produced by Pivotal to support
            : running RabbitMQ. Compared to the community Erlang packaging it is
            : monolithic, has fewer dependencies, and has lower disk and memory
            : overhead. Many applications from Erlang Open Telecom Platform (OTP)
            : have been removed. The following applications remain: asn1, compiler,
            : crypto, erl_interface, erts, hipe, inets, kernel, mnesia, os_mon,
            : otp_mibs, public_key, reltool, runtime_tools, sasl, snmp, ssl, stdlib,
            : syntax_tools and xmerl.

epelリポジトリからインストールする場合(epelは古い場合があるので注意する)

# yum install epel-release
# yum install erlang
# yum info erlang
Installed Packages
Name        : erlang
Arch        : x86_64
Version     : R16B
Release     : 03.18.el7
Size        : 32 k
Repo        : installed
From repo   : epel
Summary     : General-purpose programming language and runtime environment
URL         : http://www.erlang.org
License     : ERPL
Description : Erlang is a general-purpose programming language and runtime
            : environment. Erlang has built-in support for concurrency, distribution
            : and fault tolerance. Erlang is used in several large telecommunication
            : systems from Ericsson.

RabbitMQインストール

# rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
# yum install https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.4/rabbitmq-server-3.7.4-1.el7.noarch.rpm

初期設定

ulimits変更

[Service]
LimitNOFILE=300000

RabbitMQのPluginインストール

# rabbitmq-plugins enable rabbitmq_management

Cluster設定

名前解決の確認

host名で各ノードへ接続にいくようなので、事前にDNSやhostsなどで各ノードのホスト名を名前解決できることを確認しておく。

192.168.1.11 rabbitmq1
192.168.1.12 rabbitmq2
192.168.1.13 rabbitmq3

erlang.cookieの設定

クラスタ内の全ノードで同じcookie値を設定しておく必要がある。
1台目のノードのerlnag.cookieの値を確認し他のノードにも同じ値を設定する。

1台目のノードのerlnag.cookieの値を確認

# cat /var/lib/rabbitmq/.erlang.cookie

2台目以降のノードに1台目のノードと同じ値を設定する

# echo 'xxxxxxxx' | tr -d '\n' > /var/lib/rabbitmq/.erlang.cookie
# chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
# chmod 0400 /var/lib/rabbitmq/.erlang.cookie

クラスタ参加

全台のRabbitMQを起動する

# systemctl start rabbitmq-server

全台でクラスタ状態を確認すると、それぞれ単一ノードで動いてる。

# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq1 ...
[{nodes,[{disc,[rabbit@rabbitmq1]}]},
 {running_nodes,[rabbit@rabbitmq1]},
 {cluster_name,<<"rabbit@rabbitmq1.local">>},
 {partitions,[]},
 {alarms,[{rabbit@rabbitmq1,[]}]}]

2台目と3台目のノードを1台目のクラスタに参加させる

# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@rabbitmq2 ...

# rabbitmqctl join_cluster rabbit@rabbitmq1
Clustering node rabbit@rabbitmq2 with rabbit@rabbitmq1

# rabbitmqctl start_app
Starting node rabbit@rabbitmq2 ...
 completed with 3 plugins.

全ノードがrunningになってること

# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq1 ...
[{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]}]},
 {running_nodes,[rabbit@rabbitmq3,rabbit@rabbitmq2,rabbit@rabbitmq1]},
 {cluster_name,<<"rabbit@rabbitmq1.local">>},
 {partitions,[]},
 {alarms,[{rabbit@rabbitmq3,[]},{rabbit@rabbitmq2,[]},{rabbit@rabbitmq1,[]}]}]

アカウント作成

デフォルトではguestアカウントで管理画面にアクセスできるが、ローカルホストからの接続のみになっていて、リモートからの接続できない。
そのため、管理者用アカウントを作成する。(1台で設定したら他のノードにも反映される)

# rabbitmqctl add_user admin password

作成したユーザに管理者権限のタグ(administrator)を設定する

# rabbitmqctl set_user_tags admin administrator

作成したユーザにvhostへの権限を付与(vhost(/)に対して設定変更可能、書き込み可能、読み込み可能)

# rabbitmqctl set_permissions admin '.*' '.*' '.*'

管理画面へアクセスして確認

http://xxx.xxx.xxx.xxx:15672 にアクセスして確認

vagrant/ansibleのレシピ

github

-サーバ構築, ミドルウェア
-

Copyright© 明日から頑張ります。 , 2025 All Rights Reserved Powered by STINGER.