CentOS 7におけるRabbitMQのセットアップと管理

本記事では、CentOS 7環境にメッセージブローカーであるRabbitMQを導入し、基本的な設定とWeb管理インターフェースを通じたユーザー管理手順について解説します。RabbitMQはErlang言語で開発されているため、まずErlang実行環境の準備が必要です。

1. ErlangおよびRabbitMQパッケージの入手

RabbitMQのインストールには、対応するバージョンのErlangが必要です。ErlangとRabbitMQのバージョン互換性については、以下の公式ドキュメントで確認できます。

各パッケージのRPMファイルは、GitHubのリリースページからダウンロードできます。

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-server
        
  • RabbitMQサービスの起動

    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)を付与することができます。

タグ: RabbitMQ Erlang CentOS messaging Message Broker

9月17日 05:24 投稿