事象について

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 サービスリスト確認Raw Code(S)Raw Code(T)
# 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 アドレスです。

コントローラノード : nova ログ確認Raw Code(S)Raw Code(T)
-------- コントローラノード --------
# 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 に以下を設定し、サービスを再起動します。

コンフィグ最後の「.」まで入れてください

コントローラノード : RabbitMQ Guest ID 接続許可Raw Code(S)Raw Code(T)
# 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 になっているか確認しましょう。

コントローラノード : admin クレデンシャルによる nova サービスリスト確認Raw Code(S)Raw Code(T)
$ 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 : AMQP server closed the connection エラー対策 でした。