OpenStack は、サービス間での操作と状態をやり取りするのに、メッセージキューを使用します。メッセージキューのサービスには、RabbitMQ、Qpid、ZeroMQ などいくつかありますが、このセクションでは、RabbitMQ メッセージキューサービスの導入について紹介します。

openstack-rocky の yum リポジトリ(CentOS-Openstack-rocky.repo)を使って、 RabbitMQ のパッケージをインストールします。インストールは、コントローラーノードで実施します。

[root@controller ~]# yum --enablerepo=centos-openstack-rocky -y install rabbitmq-server
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * extras: ftp.nara.wide.ad.jp
 * updates: ftp.nara.wide.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ rabbitmq-server.noarch 0:3.6.5-1.el7 を インストール
--> 依存性の処理をしています: erlang-xmerl >= R12B-3 のパッケージ: rabbitmq-server-3.6.5-1.el7.noarch
--> 依存性の処理をしています: erlang-tools >= R12B-3 のパッケージ: rabbitmq-server-3.6.5-1.el7.noarch
--> 依存性の処理をしています: erlang-stdlib >= R12B-3 のパッケージ: rabbitmq-server-3.6.5-1.el7.noarch
--> 依存性の処理をしています: erlang-ssl >= R12B-3 のパッケージ: rabbitmq-server-3.6.5-1.el7.noarch
--> 依存性の処理をしています: erlang-sasl >= R12B-3 のパッケージ: rabbitmq-server-3.6.5-1.el7.noarch
--> 依存性の処理をしています: erlang-public_key >= R12B-3 のパッケージ: rabbitmq-server-3.6.5-1.el7.noarch
--> 依存性の処理をしています: erlang-os_mon >= R12B-3 のパッケージ: rabbitmq-server-3.6.5-1.el7.noarch
--> 依存性の処理をしています: erlang-mnesia >= R12B-3 のパッケージ: rabbitmq-server-3.6.5-1.el7.noarch
--> 依存性の処理をしています: erlang-kernel >= R12B-3 のパッケージ: rabbitmq-server-3.6.5-1.el7.noarch
--> 依存性の処理をしています: erlang-erts >= R12B-3 のパッケージ: rabbitmq-server-3.6.5-1.el7.noarch
--> 依存性の処理をしています: erlang-eldap >= R12B-3 のパッケージ: rabbitmq-server-3.6.5-1.el7.noarch
--> 依存性の処理をしています: erlang-sd_notify のパッケージ: rabbitmq-server-3.6.5-1.el7.noarch
--> トランザクションの確認を実行しています。
---> パッケージ erlang-eldap.x86_64 0:19.3.6.4-1.el7 を インストール
--> 依存性の処理をしています: erlang-asn1(x86-64) = 19.3.6.4-1.el7 のパッケージ: erlang-eldap-19.3.6.4-1.el7.x86_64
---> パッケージ erlang-erts.x86_64 0:19.3.6.4-1.el7 を インストール
--> 依存性の処理をしています: lksctp-tools のパッケージ: erlang-erts-19.3.6.4-1.el7.x86_64
---> パッケージ erlang-kernel.x86_64 0:19.3.6.4-1.el7 を インストール
---> パッケージ erlang-mnesia.x86_64 0:19.3.6.4-1.el7 を インストール
---> パッケージ erlang-os_mon.x86_64 0:19.3.6.4-1.el7 を インストール
--> 依存性の処理をしています: erlang-snmp(x86-64) = 19.3.6.4-1.el7 のパッケージ: erlang-os_mon-19.3.6.4-1.el7.x86_64
--> 依存性の処理をしています: erlang-otp_mibs(x86-64) = 19.3.6.4-1.el7 のパッケージ: erlang-os_mon-19.3.6.4-1.el7.x86_64
---> パッケージ erlang-public_key.x86_64 0:19.3.6.4-1.el7 を インストール
--> 依存性の処理をしています: erlang-crypto(x86-64) = 19.3.6.4-1.el7 のパッケージ: erlang-public_key-19.3.6.4-1.el7.x86_64
---> パッケージ erlang-sasl.x86_64 0:19.3.6.4-1.el7 を インストール
---> パッケージ erlang-sd_notify.x86_64 0:1.0-2.el7 を インストール
---> パッケージ erlang-ssl.x86_64 0:19.3.6.4-1.el7 を インストール
--> 依存性の処理をしています: erlang-inets(x86-64) = 19.3.6.4-1.el7 のパッケージ: erlang-ssl-19.3.6.4-1.el7.x86_64
---> パッケージ erlang-stdlib.x86_64 0:19.3.6.4-1.el7 を インストール
--> 依存性の処理をしています: erlang-compiler(x86-64) = 19.3.6.4-1.el7 のパッケージ: erlang-stdlib-19.3.6.4-1.el7.x86_64
---> パッケージ erlang-tools.x86_64 0:19.3.6.4-1.el7 を インストール
--> 依存性の処理をしています: erlang-runtime_tools(x86-64) = 19.3.6.4-1.el7 のパッケージ: erlang-tools-19.3.6.4-1.el7.x86_64
---> パッケージ erlang-xmerl.x86_64 0:19.3.6.4-1.el7 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ erlang-asn1.x86_64 0:19.3.6.4-1.el7 を インストール
---> パッケージ erlang-compiler.x86_64 0:19.3.6.4-1.el7 を インストール
--> 依存性の処理をしています: erlang-hipe(x86-64) = 19.3.6.4-1.el7 のパッケージ: erlang-compiler-19.3.6.4-1.el7.x86_64
---> パッケージ erlang-crypto.x86_64 0:19.3.6.4-1.el7 を インストール
---> パッケージ erlang-inets.x86_64 0:19.3.6.4-1.el7 を インストール
---> パッケージ erlang-otp_mibs.x86_64 0:19.3.6.4-1.el7 を インストール
---> パッケージ erlang-runtime_tools.x86_64 0:19.3.6.4-1.el7 を インストール
---> パッケージ erlang-snmp.x86_64 0:19.3.6.4-1.el7 を インストール
---> パッケージ lksctp-tools.x86_64 0:1.0.17-2.el7 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ erlang-hipe.x86_64 0:19.3.6.4-1.el7 を インストール
--> 依存性の処理をしています: erlang-syntax_tools(x86-64) = 19.3.6.4-1.el7 のパッケージ: erlang-hipe-19.3.6.4-1.el7.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ erlang-syntax_tools.x86_64 0:19.3.6.4-1.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 Package               アーキテクチャー
                               バージョン         リポジトリー             容量
================================================================================
インストール中:
 rabbitmq-server       noarch  3.6.5-1.el7        centos-openstack-rocky  5.1 M
依存性関連でのインストールをします:
 erlang-asn1           x86_64  19.3.6.4-1.el7     centos-openstack-rocky  737 k
 erlang-compiler       x86_64  19.3.6.4-1.el7     centos-openstack-rocky  1.1 M
 erlang-crypto         x86_64  19.3.6.4-1.el7     centos-openstack-rocky  122 k
 erlang-eldap          x86_64  19.3.6.4-1.el7     centos-openstack-rocky  120 k
 erlang-erts           x86_64  19.3.6.4-1.el7     centos-openstack-rocky  3.0 M
 erlang-hipe           x86_64  19.3.6.4-1.el7     centos-openstack-rocky  2.6 M
 erlang-inets          x86_64  19.3.6.4-1.el7     centos-openstack-rocky  766 k
 erlang-kernel         x86_64  19.3.6.4-1.el7     centos-openstack-rocky  1.1 M
 erlang-mnesia         x86_64  19.3.6.4-1.el7     centos-openstack-rocky  769 k
 erlang-os_mon         x86_64  19.3.6.4-1.el7     centos-openstack-rocky  118 k
 erlang-otp_mibs       x86_64  19.3.6.4-1.el7     centos-openstack-rocky   37 k
 erlang-public_key     x86_64  19.3.6.4-1.el7     centos-openstack-rocky  585 k
 erlang-runtime_tools  x86_64  19.3.6.4-1.el7     centos-openstack-rocky  214 k
 erlang-sasl           x86_64  19.3.6.4-1.el7     centos-openstack-rocky  293 k
 erlang-sd_notify      x86_64  1.0-2.el7          centos-openstack-rocky  9.9 k
 erlang-snmp           x86_64  19.3.6.4-1.el7     centos-openstack-rocky  1.6 M
 erlang-ssl            x86_64  19.3.6.4-1.el7     centos-openstack-rocky  788 k
 erlang-stdlib         x86_64  19.3.6.4-1.el7     centos-openstack-rocky  2.4 M
 erlang-syntax_tools   x86_64  19.3.6.4-1.el7     centos-openstack-rocky  408 k
 erlang-tools          x86_64  19.3.6.4-1.el7     centos-openstack-rocky  567 k
 erlang-xmerl          x86_64  19.3.6.4-1.el7     centos-openstack-rocky  1.0 M
 lksctp-tools          x86_64  1.0.17-2.el7       base                     88 k

トランザクションの要約
================================================================================
インストール  1 パッケージ (+22 個の依存関係のパッケージ)

総ダウンロード容量: 23 M
インストール容量: 40 M
Downloading packages:
(1/23): erlang-asn1-19.3.6.4-1.el7.x86_64.rpm              | 737 kB   00:02     
(2/23): erlang-crypto-19.3.6.4-1.el7.x86_64.rpm            | 122 kB   00:00     
(3/23): erlang-compiler-19.3.6.4-1.el7.x86_64.rpm          | 1.1 MB   00:03     
(4/23): erlang-eldap-19.3.6.4-1.el7.x86_64.rpm             | 120 kB   00:00     
(5/23): erlang-erts-19.3.6.4-1.el7.x86_64.rpm              | 3.0 MB   00:03     
(6/23): erlang-hipe-19.3.6.4-1.el7.x86_64.rpm              | 2.6 MB   00:03     
(7/23): erlang-kernel-19.3.6.4-1.el7.x86_64.rpm            | 1.1 MB   00:02     
(8/23): erlang-mnesia-19.3.6.4-1.el7.x86_64.rpm            | 769 kB   00:03     
(9/23): erlang-inets-19.3.6.4-1.el7.x86_64.rpm             | 766 kB   00:06     
(10/23): erlang-os_mon-19.3.6.4-1.el7.x86_64.rpm           | 118 kB   00:00     
(11/23): erlang-otp_mibs-19.3.6.4-1.el7.x86_64.rpm         |  37 kB   00:00     
(12/23): erlang-public_key-19.3.6.4-1.el7.x86_64.rpm       | 585 kB   00:01     
(13/23): erlang-sasl-19.3.6.4-1.el7.x86_64.rpm             | 293 kB   00:00     
(14/23): erlang-runtime_tools-19.3.6.4-1.el7.x86_64.rpm    | 214 kB   00:00     
(15/23): erlang-sd_notify-1.0-2.el7.x86_64.rpm             | 9.9 kB   00:00     
(16/23): erlang-snmp-19.3.6.4-1.el7.x86_64.rpm             | 1.6 MB   00:01     
(17/23): erlang-ssl-19.3.6.4-1.el7.x86_64.rpm              | 788 kB   00:01     
(18/23): erlang-syntax_tools-19.3.6.4-1.el7.x86_64.rpm     | 408 kB   00:00     
(19/23): erlang-tools-19.3.6.4-1.el7.x86_64.rpm            | 567 kB   00:00     
(20/23): erlang-stdlib-19.3.6.4-1.el7.x86_64.rpm           | 2.4 MB   00:01     
(21/23): lksctp-tools-1.0.17-2.el7.x86_64.rpm              |  88 kB   00:00     
(22/23): erlang-xmerl-19.3.6.4-1.el7.x86_64.rpm            | 1.0 MB   00:01     
(23/23): rabbitmq-server-3.6.5-1.el7.noarch.rpm            | 5.1 MB   00:04     
--------------------------------------------------------------------------------
合計                                               1.0 MB/s |  23 MB  00:22     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : lksctp-tools-1.0.17-2.el7.x86_64               1/23 
  インストール中          : erlang-syntax_tools-19.3.6.4-1.el7.x86_64      2/23 
  インストール中          : erlang-hipe-19.3.6.4-1.el7.x86_64              3/23 
  インストール中          : erlang-compiler-19.3.6.4-1.el7.x86_64          4/23 
  インストール中          : erlang-crypto-19.3.6.4-1.el7.x86_64            5/23 
  インストール中          : erlang-stdlib-19.3.6.4-1.el7.x86_64            6/23 
  インストール中          : erlang-erts-19.3.6.4-1.el7.x86_64              7/23 
  インストール中          : erlang-kernel-19.3.6.4-1.el7.x86_64            8/23 
  インストール中          : erlang-mnesia-19.3.6.4-1.el7.x86_64            9/23 
  インストール中          : erlang-runtime_tools-19.3.6.4-1.el7.x86_64    10/23 
  インストール中          : erlang-snmp-19.3.6.4-1.el7.x86_64             11/23 
  インストール中          : erlang-asn1-19.3.6.4-1.el7.x86_64             12/23 
  インストール中          : erlang-public_key-19.3.6.4-1.el7.x86_64       13/23 
  インストール中          : erlang-inets-19.3.6.4-1.el7.x86_64            14/23 
  インストール中          : erlang-ssl-19.3.6.4-1.el7.x86_64              15/23 
  インストール中          : erlang-tools-19.3.6.4-1.el7.x86_64            16/23 
  インストール中          : erlang-sasl-19.3.6.4-1.el7.x86_64             17/23 
  インストール中          : erlang-eldap-19.3.6.4-1.el7.x86_64            18/23 
  インストール中          : erlang-otp_mibs-19.3.6.4-1.el7.x86_64         19/23 
  インストール中          : erlang-os_mon-19.3.6.4-1.el7.x86_64           20/23 
  インストール中          : erlang-xmerl-19.3.6.4-1.el7.x86_64            21/23 
  インストール中          : erlang-sd_notify-1.0-2.el7.x86_64             22/23 
  インストール中          : rabbitmq-server-3.6.5-1.el7.noarch            23/23 
  検証中                  : erlang-snmp-19.3.6.4-1.el7.x86_64              1/23 
  検証中                  : erlang-kernel-19.3.6.4-1.el7.x86_64            2/23 
  検証中                  : erlang-otp_mibs-19.3.6.4-1.el7.x86_64          3/23 
  検証中                  : erlang-xmerl-19.3.6.4-1.el7.x86_64             4/23 
  検証中                  : erlang-mnesia-19.3.6.4-1.el7.x86_64            5/23 
  検証中                  : erlang-runtime_tools-19.3.6.4-1.el7.x86_64     6/23 
  検証中                  : rabbitmq-server-3.6.5-1.el7.noarch             7/23 
  検証中                  : erlang-syntax_tools-19.3.6.4-1.el7.x86_64      8/23 
  検証中                  : erlang-asn1-19.3.6.4-1.el7.x86_64              9/23 
  検証中                  : erlang-tools-19.3.6.4-1.el7.x86_64            10/23 
  検証中                  : erlang-eldap-19.3.6.4-1.el7.x86_64            11/23 
  検証中                  : lksctp-tools-1.0.17-2.el7.x86_64              12/23 
  検証中                  : erlang-os_mon-19.3.6.4-1.el7.x86_64           13/23 
  検証中                  : erlang-sd_notify-1.0-2.el7.x86_64             14/23 
  検証中                  : erlang-public_key-19.3.6.4-1.el7.x86_64       15/23 
  検証中                  : erlang-inets-19.3.6.4-1.el7.x86_64            16/23 
  検証中                  : erlang-hipe-19.3.6.4-1.el7.x86_64             17/23 
  検証中                  : erlang-compiler-19.3.6.4-1.el7.x86_64         18/23 
  検証中                  : erlang-crypto-19.3.6.4-1.el7.x86_64           19/23 
  検証中                  : erlang-stdlib-19.3.6.4-1.el7.x86_64           20/23 
  検証中                  : erlang-erts-19.3.6.4-1.el7.x86_64             21/23 
  検証中                  : erlang-sasl-19.3.6.4-1.el7.x86_64             22/23 
  検証中                  : erlang-ssl-19.3.6.4-1.el7.x86_64              23/23 

インストール:
  rabbitmq-server.noarch 0:3.6.5-1.el7                                          

依存性関連をインストールしました:
  erlang-asn1.x86_64 0:19.3.6.4-1.el7                                           
  erlang-compiler.x86_64 0:19.3.6.4-1.el7                                       
  erlang-crypto.x86_64 0:19.3.6.4-1.el7                                         
  erlang-eldap.x86_64 0:19.3.6.4-1.el7                                          
  erlang-erts.x86_64 0:19.3.6.4-1.el7                                           
  erlang-hipe.x86_64 0:19.3.6.4-1.el7                                           
  erlang-inets.x86_64 0:19.3.6.4-1.el7                                          
  erlang-kernel.x86_64 0:19.3.6.4-1.el7                                         
  erlang-mnesia.x86_64 0:19.3.6.4-1.el7                                         
  erlang-os_mon.x86_64 0:19.3.6.4-1.el7                                         
  erlang-otp_mibs.x86_64 0:19.3.6.4-1.el7                                       
  erlang-public_key.x86_64 0:19.3.6.4-1.el7                                     
  erlang-runtime_tools.x86_64 0:19.3.6.4-1.el7                                  
  erlang-sasl.x86_64 0:19.3.6.4-1.el7                                           
  erlang-sd_notify.x86_64 0:1.0-2.el7                                           
  erlang-snmp.x86_64 0:19.3.6.4-1.el7                                           
  erlang-ssl.x86_64 0:19.3.6.4-1.el7                                            
  erlang-stdlib.x86_64 0:19.3.6.4-1.el7                                         
  erlang-syntax_tools.x86_64 0:19.3.6.4-1.el7                                   
  erlang-tools.x86_64 0:19.3.6.4-1.el7                                          
  erlang-xmerl.x86_64 0:19.3.6.4-1.el7                                          
  lksctp-tools.x86_64 0:1.0.17-2.el7                                            

完了しました!
[root@controller ~]# 

RabbitMQ で必要となる TCP 5672 通信を firewalld で許可します。

[root@controller ~]# firewall-cmd --add-port=5672/tcp --zone=public --permanent
success
[root@controller ~]# 

firewalld をリロードし、設定を反映します。

[root@controller ~]# firewall-cmd --reload
success
[root@controller ~]# 

RabbitMQ の自動起動を有効化します。

■ 自動起動の有効化
[root@controller ~]# systemctl enable rabbitmq-server.service
Created symlink from /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service to /usr/lib/systemd/system/rabbitmq-server.service.
[root@controller ~]# 

■ 自動起動の状態確認
[root@controller ~]# systemctl is-enabled rabbitmq-server.service
enabled
[root@controller ~]# 

RabbitMQ を再起動します。

■ 再起動
[root@controller ~]# systemctl restart rabbitmq-server.service
[root@controller ~]# 

■ 起動状態の確認
[root@controller ~]# systemctl status rabbitmq-server.service
● rabbitmq-server.service - RabbitMQ broker
   Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2018-10-21 02:49:55 JST; 9s ago
 Main PID: 9400 (beam.smp)
   Status: "Initialized"
   CGroup: /system.slice/rabbitmq-server.service
           ├─9400 /usr/lib64/erlang/erts-8.3.5.3/bin/beam.smp -W w -A 64 -P 1...
           ├─9590 erl_child_setup 1024
           ├─9600 inet_gethost 4
           └─9601 inet_gethost 4

10月 21 02:49:54 controller systemd[1]: Starting RabbitMQ broker...
10月 21 02:49:54 controller rabbitmq-server[9400]: RabbitMQ 3.6.5. Copyright...
10月 21 02:49:54 controller rabbitmq-server[9400]: ##  ##      Licensed unde...
10月 21 02:49:54 controller rabbitmq-server[9400]: ##  ##
10月 21 02:49:54 controller rabbitmq-server[9400]: ##########  Logs: /var/lo...
10月 21 02:49:54 controller rabbitmq-server[9400]: ######  ##        /var/lo...
10月 21 02:49:54 controller rabbitmq-server[9400]: ##########
10月 21 02:49:54 controller rabbitmq-server[9400]: Starting broker...
10月 21 02:49:55 controller systemd[1]: Started RabbitMQ broker.
10月 21 02:49:55 controller rabbitmq-server[9400]: completed with 0 plugins.
Hint: Some lines were ellipsized, use -l to show in full.
[root@controller ~]# 

RabbiMQ に Openstack ユーザーを追加します。ここでは、Openstack のユーザー名は openstack 、ユーザーのパスワードは RABBIT_PASS としているので、実際のユーザーとパスワードに置き換えてください。

※ RABBIT_PASS は、作成する OpenStack ユーザーのパスワードを指定
[root@controller ~]# rabbitmqctl add_user openstack RABBIT_PASS
Creating user "openstack" ...
[root@controller ~]# 

作成した OpenStack ユーザーに対して、設定、書き込み、読み出しの権限を付与します。

[root@controller ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/" ...
[root@controller ~]#