故障排除¶
实例卡在 BUILD 状态¶
导致此问题的原因
消息队列服务(例如 RabbitMQ)与 Trove 客户实例之间的网络问题。在创建 Trove 实例时,trove-taskmanager 会向消息队列发送消息,该消息应由实例内运行的 trove-guestagent 服务接收并处理。处理完成后,trove-guestagent 服务应更新实例的运行状态。显然,如果 trove-guestagent 无法连接到 RabbitMQ,则实例状态将不会更新。
trove-guestagent 中的代码错误。您应该能够在 trove-guestagent 日志文件中看到一些错误日志(默认情况下,
/var/log/trove/trove-guestagent.log)。如果您使用的是开发模式镜像,那么 trove-guestagent 无法连接到 Trove 控制器主机以下载 trove-guestagent 服务代码也是有可能的,这可能是由于网络连接问题,或者 SSH 密钥丢失或不正确所致。
无论哪种情况,您都需要检查 trove guest agent 日志。根据 Trove 控制器和 Trove guest agent 之间的消息队列系统是否正常工作,有两种检查日志的方法。
如果需要帮助,请联系 Trove 团队,加入 #openstack-trove IRC 频道或发送电子邮件至 openstack-discuss@lists.openstack.org。
注意
Trove 实例创建时间在不同环境中有所不同,usage_timeout 选项的默认值(3600 秒)可能不适用于所有环境。云管理员应根据测试结果更改该值,以便实例创建能够在合理的时间内失败。
将日志发布到 Swift¶
如果 trove 任务管理器能够通过消息队列与 guest agent 通信,但 guest 实例内部出现问题,您可以轻松地通过运行 CLI 作为管理员用户 来检索 guest agent 日志。
首先,检查 guest 日志是否可用
$ openstack database log list $dbid
+------------+------+----------+-----------+---------+-----------+--------+
| Name | Type | Status | Published | Pending | Container | Prefix |
+------------+------+----------+-----------+---------+-----------+--------+
| general | USER | Disabled | 0 | 0 | None | None |
| slow_query | USER | Disabled | 0 | 0 | None | None |
| error | SYS | Enabled | 0 | 0 | None | None |
| guest | SYS | Ready | 0 | 25781 | None | None |
+------------+------+----------+-----------+---------+-----------+--------+
接下来,将 guest 日志发布到对象存储服务(Swift)
$ openstack database log set $dbid guest --publish
+-----------+-----------------------------------------------------------+
| Field | Value |
+-----------+-----------------------------------------------------------+
| container | database_logs |
| metafile | 1be17492-d163-4b5e-b1a3-ae0ab1d98d3a/mysql-guest_metafile |
| name | guest |
| pending | 0 |
| prefix | 1be17492-d163-4b5e-b1a3-ae0ab1d98d3a/mysql-guest/ |
| published | 25937 |
| status | Published |
| type | SYS |
+-----------+-----------------------------------------------------------+
您可以检查日志文件是否已上传到 Swift
$ openstack object list database_logs
+---------------------------------------------------------------------------------+
| Name |
+---------------------------------------------------------------------------------+
| 1be17492-d163-4b5e-b1a3-ae0ab1d98d3a/mysql-guest/log-2021-03-24T21:03:50.846243 |
| 1be17492-d163-4b5e-b1a3-ae0ab1d98d3a/mysql-guest_metafile |
+---------------------------------------------------------------------------------+
现在,您可以将文件下载到本地
$ openstack database log save $dbid guest --file guestagnet.log
Log "guest" written to guestagnet.log
SSH 进入实例¶
在某些情况下,当 trove 任务管理器无法通过消息队列与 guest agent 通信时,您必须 SSH 进入实例。
要 SSH 进入 Trove 实例,您需要确保
您拥有管理员凭据以获取 Trove 实例管理端口的 IP 地址。管理端口是从管理网络(由
management_networks配置选项定义)分配的 Neutron 端口。例如,您需要登录名为“test”的 Trove 实例,并且管理网络名称为“trove-mgmt”,您可以运行$ openstack server list | grep test | grep trove-mgmt | 810fc014-bd9f-4464-b506-1b78f37c495e | test | ACTIVE | private=10.1.0.57; trove-mgmt=192.168.254.229 | ubuntu-focal-mysql-5.7-dev | ds1G |
TCP 22 端口允许通过应用于管理端口的 Neutron 安全组(由
management_security_groups配置选项定义)。您拥有 SSH 私钥。Trove 实例应使用由
nova_keypair配置选项定义的 Nova keypair 创建。
登录到实例后,您可以按以下方式检查 trove-guestagent 日志
sudo journalctl -u guest-agent.service | less # or
sudo vi /var/log/trove/trove-guestagent.log