ベース環境とリポジトリの準備
CentOS 8 系(および RHEL 互換ディストリビューション)で RabbitMQ を動作させるには、Erlang 実行環境の整備が必須となります。公式が提供するパッケージリポジトリを登録し、依存パッケージの自動解決を有効化します。
# Erlang リポジトリの登録
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/erlang/rpm/gpg.key | sudo rpm --import -
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/erlang/rpm.repo | sudo tee /etc/yum.repos.d/rabbitmq-erlang.repo
# RabbitMQ サーバーリポジトリの登録
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/gpg.key | sudo rpm --import -
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm.repo | sudo tee /etc/yum.repos.d/rabbitmq-server.repo
RabbitMQ サーバーのインストールとサービス管理
リポジトリ設定が完了したらパッケージマネージャーで本体を配置します。インストール直後はサービス単位で管理されるため、手動で起動と自動開始設定を適用します。
sudo yum install rabbitmq-server -y
sudo systemctl enable rabbitmq-server
sudo systemctl start rabbitmq-server
sudo systemctl status rabbitmq-server
デフォルト状態では AMQP 通信用の 5672 ポートのみが待受しています。Web 管理コンソールを使用する場合は、管理プラグインの有効化が必要です。
sudo rabbitmq-plugins enable rabbitmq_management
管理画面は 15672 ポートで公開されます。ファイアウォール設定を変更する際は、これらのポートの許可を忘れないでください。
拡張機能の導入方法
遅延メッセージ処理やカスタム交換機などの機能が必要な場合、rabbitmq_delayed_message_exchange などのプラグインを適用します。GitHub のリリースページから .ez 形式のファイルをダウンロードし、プラグインディレクトリへ配置します。
wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/v3.10.1/rabbitmq_delayed_message_exchange-3.10.1.ez
sudo mv rabbitmq_delayed_message_exchange-3.10.1.ez /usr/lib/rabbitmq/plugins/
sudo rabbitmq-plugins enable rabbitmq_delayed_message_exchange
適用状況は rabbitmq-plugins list コマンドで確認できます。サードパーティ製のプラグインも同様の手順で統合可能です。
ユーザー認証と権限体系
RabbitMQ のアクセス制御はユーザー役割によって厳格に分割されています。
- none: 管理コンソール利用不可。AMQP 経由のメッセージ送受信のみ許可。
- management: 管理コンソールログイン可。自身の仮想ホスト内にあるキュー、交換機、バインディングの閲覧・操作が可能。
- policymaker: management の権限に加え、ポリシーやパラメータの作成・編集・削除が可能。
- monitoring: management の権限に加え、全仮想ホストの接続状況、ノードメモリ使用率、プロセス統計の監視が可能。
- administrator: 管理者権限。仮想ホストの作成・削除、ユーザー管理、権限付与、強制切断など、すべての操作を許可。
スーパー管理者の作成と権限付与の実行例は以下の通りです。
# 管理者ユーザーの作成
sudo rabbitmqctl add_user sys_admin StrongP@ssw0rd
# 管理者ロールの割り当て
sudo rabbitmqctl set_user_tags sys_admin administrator
# 仮想ホスト「/」に対する完全な権限付与(構成・書き込み・読み取り)
sudo rabbitmqctl set_permissions -p / sys_admin ".*" ".*" ".*"
既存ユーザーの一覧表示は list_users、権限確認は list_user_permissions、パスワード変更は change_password、削除は delete_user で対応できます。
Supervisor によるプロセス監視環境
バックグラウンドで動作するタスクやキュー処理プロセスの生存監視と自動再起動を担保するために Supervisor を導入します。
sudo yum install supervisor -y
sudo systemctl enable supervisord
sudo systemctl start supervisord
プロジェクト固有の設定ファイルは /etc/supervisord.d/ 配下に配置します。以下は常驻プロセスを管理する設定例です。
[program:worker_service]
command=/usr/bin/php /opt/app/releases/current/artisan queue:work --queue=default --daemon
directory=/opt/app/releases/current
autostart=true
autorestart=true
user=www-data
numprocs=1
startsecs=5
redirect_stderr=true
stdout_logfile=/var/log/supervisor/worker_stdout.log
stderr_logfile=/var/log/supervisor/worker_stderr.log
設定ファイルを編集・保存した後は、Supervisor に変更を認識させ、対象プロセスのライフサイクルを制御します。
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl status worker_service
sudo supervisorctl restart worker_service
Apache Kafka と ZooKeeper の構築
Kafka は JVM 環境に依存するため、事前に Java Runtime Environment (Java 8 以上) のインストールが必須です。また、メタデータ管理とクラスタ協調には ZooKeeper が不可欠であるため、両者を systemd 経由で独立して管理するように構成します。
# Kafka 配布アーカイブの取得と配置
wget https://downloads.apache.org/kafka/3.4.0/kafka_2.13-3.4.0.tgz
tar -xzf kafka_2.13-3.4.0.tgz
sudo mv kafka_2.13-3.4.0 /opt/kafka
ZooKeeper の systemd ユニット設定
[Unit]
Description=Apache ZooKeeper Service
After=network.target
[Service]
Type=simple
ExecStart=/opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties
ExecStop=/opt/kafka/bin/zookeeper-server-stop.sh
Restart=on-failure
User=root
[Install]
WantedBy=multi-user.target
Kafka Broker の systemd ユニット設定
[Unit]
Description=Apache Kafka Broker
Requires=zookeeper.service
After=zookeeper.service network.target
[Service]
Type=simple
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-failure
User=root
[Install]
WantedBy=multi-user.target
上記設定ファイルを /etc/systemd/system/ ディレクトリへ配置後、systemctl daemon-reload を実行し、両サービスを有効化・起動してください。
Kafka の基本操作と構成パラメータ
両サービスが正常に稼働した段階で、トピックの作成とデータ送受信の検証を行います。
# トピックの作成(レプリケーション数 1、パーティション数 1)
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic demo_events
# 既存トピックの一覧表示
/opt/kafka/bin/kafka-topics.sh --list --zookeeper localhost:2181
# コンソールプロデューサー(メッセージ送信端末)
/opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic demo_events
# コンソールコンシューマー(メッセージ受信端末)
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic demo_events --from-beginning
本番環境へ展開する際は、server.properties と zookeeper.properties の主要パラメータをネットワーク構成に合わせて調整します。
broker.id: ブローカーノードを識別する一意の整数値listeners: 外部クライアントからの接続を許可する場合はPLAINTEXT://0.0.0.0:9092に変更log.dirs: メッセージコミットログの格納パス(例:/var/lib/kafka/data)zookeeper.connect: ZooKeeper クライアント接続先アドレスdelete.topic.enable=true: トピック削除機能の許可
ZooKeeper 設定側では maxClientCnxns=0 を指定することで IP 単位の接続制限を緩和し、admin.enableServer=true および admin.serverPort=8888 を追記することで管理用 HTTP エンドポイントを開放できます。プロセスの稼働状態は jps コマンドで QuorumPeerMain および Kafka の PID が表示されていることを確認してください。