事象について
OpenStack 構築時にホストとクラウドコンピューティングを管理する Compute (Nova) を導入した後、動作確認を行うために、コントローラーノードで nova サービス状態を確認するコマンドを実行してみたら State が XXX になっていました。
さらに nova ログを確認してみると ERROR oslo.messaging._drivers.impl_rabbit AMQP server aaa.bbb.ccc.ddd:5672 closed the connection のようなエラーメッセージを吐いていました。
まずは、コントローラノードで nova サービスリストを確認するコマンドを実行し、State 状態を確認します。
State が XXX になっていてうまく動いてない状態になっていることが分かります。
# nova-manage service list Binary Host Zone Status State Updated_At nova-cert openstack-controller01 internal enabled XXX None nova-consoleauth openstack-controller01 internal enabled XXX None nova-scheduler openstack-controller01 internal enabled XXX None nova-conductor openstack-controller01 internal enabled XXX None
次に、コントローラノードとコンピュータノード上でログを出してエラーメッセージを確認します。
※ aaa.bbb.ccc.ddd は、コントローラノードの管理 IP アドレスです。
-------- コントローラノード --------
# tail -f /var/log/nova/nova-*.log
・・・
2015-02-05 12:53:31.809 16302 ERROR oslo.messaging._drivers.impl_rabbit [req-44f0fae9-6797-4baa-99aa-242d0113b4de ] AMQP server aaa.bbb.ccc.ddd:5672 closed the connection. Check login credentials: Socket closed
-------- コンピュータノード --------
# tail -f /var/log/nova/nova-*.log
・・・
2015-02-05 12:55:43.733 8592 ERROR oslo.messaging._drivers.impl_rabbit [req-fa6aa955-efeb-41ab-adc3-d8d788f47228 ] AMQP server on aaa.bbb.ccc.ddd:5672 is unreachable: [Errno 111] ECONNREFUSED. Trying again in 30 seconds.
原因と対策
エラーメッセージを見る限り、どうも RabbitMQ との疎通がうまく行ってないように見えます。
RabbitMQ とは?
OpenStack がサービス間の操作と状態を調整するために使用するメッセージブローカーのことです。
OpenStack がサポートしているメッセージブローカーには、RabbitMQ、Qpid、ZeroMQ など様々ですが、多くの OpenStack 構築マニュアルでは、主に RabbitMQ を使っており、実際に RabbitMQ を導入しているケースが多いかと思います。
メッセージブローカーサービスは、一般的にコントローラーノードで動作します。
早速ですが、原因は、OpenStack 構築マニュアル上で使っている RabbitMQ の デフォルト ID にあります。
OpenStack 構築マニュアルでは、RabbitMQ のデフォルト ID と パスワードとして guest / guest を採用しているのですが、guest ID 接続は、ローカルホストに限定されているため、外からの接続は、ブロックされてしまいます。
この問題を回避するためには、rabbitmq.config に以下を設定し、サービスを再起動します。
コンフィグ最後の「.」まで入れてください。
# vi /etc/rabbitmq/rabbitmq.config [ {rabbit, [{loopback_users, []}]} ]. # service rabbitmq-server restart # nova-manage service list Binary Host Zone Status State Updated_At nova-cert openstack-controller01 internal enabled :-) 2015-02-05 05:16:18 nova-consoleauth openstack-controller01 internal enabled :-) 2015-02-05 05:16:18 nova-scheduler openstack-controller01 internal enabled :-) 2015-02-05 05:16:19 nova-conductor openstack-controller01 internal enabled :-) 2015-02-05 05:16:19 nova-compute openstack-compute01 nova enabled :-) 2015-02-05 05:16:20
State にスマイルマーク :-) が表示されていれば OK です。
今度は、root ユーザではなく、admin クレデンシャルを読み込み、管理者専用 CLI コマンドへのアクセス権を取得してからサービスコンポネントリストを出力して、State がすべて up になっているか確認しましょう。
$ cat ~/admin-openrc.sh
export OS_TENANT_NAME=admin
export OS_USERNAME=adminID
export OS_PASSWORD=adminPW
export OS_AUTH_URL=http://openstack-controller01:35357/v2.0
$ source ~/admin-openrc.sh
$ nova service-list
+----+------------------+------------------------+----------+---------+-------+----------------------------+-----------------+
| Id | Binary | Host | Zone | Status | State | Updated_at | Disabled Reason |
+----+------------------+------------------------+----------+---------+-------+----------------------------+-----------------+
| 1 | nova-cert | openstack-controller01 | internal | enabled | up | 2015-02-05T05:42:07.000000 | - |
| 2 | nova-consoleauth | openstack-controller01 | internal | enabled | up | 2015-02-05T05:42:07.000000 | - |
| 3 | nova-scheduler | openstack-controller01 | internal | enabled | up | 2015-02-05T05:42:07.000000 | - |
| 4 | nova-conductor | openstack-controller01 | internal | enabled | up | 2015-02-05T05:42:07.000000 | - |
| 5 | nova-compute | openstack-compute01 | nova | enabled | up | 2015-02-05T05:42:12.000000 | - |
+----+------------------+------------------------+----------+---------+-------+----------------------------+-----------------+
終わりに
最近、OpenStack 採用を検討している企業が増えているような気がします。
とは言え、Cloud・OpenStack を使いこなすためには、専門知識も必要ですし、技術者は少ない気がして、トラブルが起きたときに解決策がすぐ見つかるといいですけど、メンテナンス関係で色々と手こずってしまうのはしょうがないですね。
商用として使うためには、しっかり長期間検証する必要があるのと運用ノーハウを蓄積することが大事だなと思いました。
以下、参考 URL です。
- OpenStack Juno using RDO fails installation: AMQP server closed the connection
- RabbitMQ : "guest" user can only connect via localhost
以上、OpenStack : AMQP server closed the connection エラー対策 でした。