本記事では、CentOS 7環境にメッセージブローカーであるRabbitMQを導入し、基本的な設定とWeb管理インターフェースを通じたユーザー管理手順について解説します。RabbitMQはErlang言語で開発されているため、まずErlang実行環境の準備が必要です。
1. ErlangおよびRabbitMQパッケージの入手
RabbitMQのインストールには、対応するバージョンのErlangが必要です。ErlangとRabbitMQのバージョン互換性については、以下の公式ドキュメントで確認できます。
- RabbitMQ Erlangバージョン互換性: https://www.rabbitmq.com/which-erlang.html
各パッケージのRPMファイルは、GitHubのリリースページからダウンロードできます。
- Erlang RPM: https://github.com/rabbitmq/erlang-rpm/releases
- RabbitMQ Server RPM: https://github.com/rabbitmq/rabbitmq-server/releases
CentOS 7にインストールするため、ファイル名に.el7が含まれるバージョンを選択します。例えば、RabbitMQ 3.9.13にはErlang 23.2以上が推奨されており、以下のバージョンをダウンロードします。
rabbitmq-server-3.9.13-1.el7.noarch.rpm
erlang-23.3.4.11-1.el7.x86_64.rpm
ダウンロードしたRPMファイルは、SSHなどを利用してサーバーにアップロードしておきます。
2. Erlangのインストール
アップロードしたErlangのRPMパッケージをインストールします。
sudo rpm -ivh erlang-23.3.4.11-1.el7.x86_64.rpm
インストール中に依存関係のエラーが発生することがあります。特にlibcrypto.so.10のようなOpenSSL関連のライブラリ不足が報告される場合は、該当する依存パッケージを別途インストールする必要があります。
例えば、libcrypto.so.10(OPENSSL_1.0.2)(64bit)が不足していると表示された場合、https://pkgs.org/ などのサイトで必要なopenssl-libsパッケージを検索し、CentOS 7向けのRPMファイルをダウンロードしてインストールします。強制インストールが必要な場合もあります。
sudo rpm -ivh openssl-libs-1.0.2k-19.el7.x86_64.rpm --force
依存関係を解決した後、再度Erlangのインストールコマンドを実行します。インストールが完了したら、以下のコマンドでErlangのバージョンを確認できます。
erl -version
3. RabbitMQのインストール
Erlangのインストールが完了したら、次にRabbitMQサーバーのRPMパッケージをインストールします。
sudo rpm -ivh rabbitmq-server-3.9.13-1.el7.noarch.rpm
インストールが成功したかを確認するには、以下のコマンドでrabbitmqctlコマンドの存在を確認できます(サーバーが起動していなくてもコマンド自体は利用可能です)。
rabbitmqctl version
4. RabbitMQサーバーの起動と管理
4.1 サーバーの操作
システムサービスとしてRabbitMQを管理します。
サービス自動起動の設定
サーバー起動時にRabbitMQサービスが自動的に開始されるように設定します。sudo systemctl enable rabbitmq-serverRabbitMQサービスの起動
sudo systemctl start rabbitmq-serverサービスのステータス確認
サービスが正常に動作しているかを確認します。sudo systemctl status rabbitmq-serverサービスの停止
sudo systemctl stop rabbitmq-server
4.2 Web管理プラグインの有効化
RabbitMQには、ブラウザを通じてメッセージキューや接続などを管理できるWeb UIが標準で提供されています。これを有効にするには、以下のコマンドを実行します。サービスが起動中の場合は、事前に停止してください。
sudo rabbitmq-plugins enable rabbitmq_management
プラグインを有効にした後、RabbitMQサービスを再起動します。
sudo systemctl restart rabbitmq-server
Webブラウザでhttp://<サーバーIPアドレス>:15672にアクセスすると、管理画面が表示されます。デフォルトのguestアカウント(パスワードもguest)は、セキュリティ上の理由からリモートからのログインが制限されています。そのため、新しいユーザーを作成する必要があります。
5. ユーザー設定(コマンドライン)
Web管理画面にログインするための新しいユーザーをコマンドラインで作成し、権限を設定します。
新しいユーザーの作成
ユーザー名admin、パスワード123456のユーザーを作成する例です。sudo rabbitmqctl add_user admin 123456ユーザーに管理者ロールを設定
作成したユーザーにWeb管理画面へのアクセス権限を持つadministratorロールを付与します。sudo rabbitmqctl set_user_tags admin administratorユーザー権限の設定
RabbitMQでは、Virtual Host(仮想ホスト)ごとにユーザーのアクセス権限を管理します。以下のコマンドは、ユーザーadminにデフォルトの/仮想ホスト内のすべてのリソースに対する設定、書き込み、読み取り権限を付与します。sudo rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"ユーザーとロールの確認
現在登録されているユーザーとそのロール一覧を確認します。sudo rabbitmqctl list_usersこれで、作成したユーザー
admin(パスワード123456)を使用して、Web管理画面にログインできるようになります。デフォルトユーザーの削除(任意)
セキュリティ向上のため、デフォルトのguestユーザーを削除することを推奨します。sudo rabbitmqctl delete_user guest
6. Web管理画面からのユーザーおよび仮想ホスト管理
Web管理画面にログインすることで、グラフィカルインターフェースを通じてユーザーや仮想ホストを管理することも可能です。
ユーザーロール
RabbitMQには以下の主なユーザーロールがあります。
- administrator(スーパー管理者): 管理コンソールにログインでき、すべての情報閲覧に加え、ユーザーやポリシー(policy)の操作が可能です。
- monitoring(監視者): 管理コンソールにログインでき、RabbitMQノードの関連情報(プロセス数、メモリ使用量、ディスク使用量など)を閲覧できます。
- policymaker(ポリシー設定者): 管理コンソールにログインでき、ポリシーの管理が可能ですが、ノードの関連情報は閲覧できません。
- management(一般管理者): 管理コンソールにログインできますが、ノード情報やポリシーの管理はできません。
- その他(なし): 管理コンソールにログインできません。通常は通常のプロデューサーおよびコンシューマーとして機能します。
Virtual Hosts(仮想ホスト)の構成
MySQLがデータベースという概念を持ち、ユーザーが各データベースやテーブルにアクセス権限を持つように、RabbitMQにも同様の権限管理があります。RabbitMQではVirtual Host(仮想ホスト)を作成でき、それぞれの仮想ホストは独立したRabbitMQサーバーのように機能します。各仮想ホスト間は完全に隔離されており、Exchange、Queue、Messageは相互に通信できません。これはMySQLのデータベースに相当する概念です。仮想ホスト名は通常/で始まります。
Virtual Hostsの作成
Web管理画面の「Admin」タブから「Virtual hosts」セクションに移動し、「Add a new virtual host」で新しい仮想ホスト名を入力して作成できます。
Virtual Hostsの権限設定
仮想ホストが作成されたら、Web管理画面の「Users」タブから既存ユーザーを選択するか、新規ユーザーを作成し、そのユーザーに対して特定の仮想ホストへのアクセス権限(Configure, Write, Read)を付与することができます。