集群问题排查
集群状况确认
执行命令:
grctl cluster
Used/Total Use of
CPU 30/48 63%
Memory 133056/193288 68%
DistributedDisk 1461Gb/10485760Gb 0.01%
+-------------------------+-----------------------+-----------------------------------------------+
| Service | HealthyQuantity/Total | Message |
+-------------------------+-----------------------+-----------------------------------------------+
| ClusterStatus | available | |
| rbd-monitor | 1/1 | |
| rbd-repo | 1/1 | |
| rbd-webcli | 1/1 | |
| calico | 4/4 | |
| rbd-app-ui | 1/1 | |
| Ready | 4/4 | |
| rbd-dns | 4/4 | |
| storage | 4/4 | |
| kubelet | 3/3 | |
| rbd-eventlog | 1/1 | |
| rbd-hub | 1/1 | |
| rbd-java-buildpack | 1/1 | |
| etcd | 1/1 | |
| etcd-proxy | 3/3 | |
| rbd-mq | 1/1 | |
| r6d-dingding | 1/1 | |
| rbd-grafana | 1/1 | |
| kube-apiserver | 1/1 | |
| rbd-api | 1/1 | |
| rbd-db | 1/1 | |
| rbd-gateway | 1/1 | |
| NodeUp | 4/4 | |
| docker | 4/4 | |
| r6d-alertmanager | 1/1 | |
| rbd-chaos | 1/1 | |
| rbd-worker | 1/1 | |
| KubeNodeReady | 3/3 | |
| local-dns | 4/4 | |
| kube-controller-manager | 1/1 | |
| kube-scheduler | 1/1 | |
+-------------------------+-----------------------+-----------------------------------------------+
+--------------------------------------+-------------+-----------+---------------+----------------+
| Uid | IP | HostName | NodeRole | Status |
+--------------------------------------+-------------+-----------+---------------+----------------+
| 959eba4b-6bbe-4ad5-ba0f-ecfad17d378d | 10.10.10.10 | manage01 | manage,gateway| running |
+--------------------------------------+-------------+-----------+---------------+----------------+
| b4e3a2dd-ccef-410b-93a8-95d19a18b282 | 10.10.20.10 | compute01 | compute | running |
| 4756d361-afbc-4283-b60e-1bfdcd8e4b5e | 10.10.20.11 | compute02 | compute | running |
| e96f51b7-5c12-4b48-a126-8a91e9df5165 | 10.10.20.12 | compute03 | compute | running |
+--------------------------------------+-------------+-----------+---------------+----------------+
集群正常的表现: 所有服务的Message框为空; 所有节点的Status为绿色的 running; 集群中至少同时存在 manage、gateway、compute角色各一个。
执行 grctl cluster
没有正常反馈上述集群状态信息,请参见 grctl cluster反馈异常
节点状态问题排查
异常状态及处理
节点状态只有在体现为绿色的 running
时为正常,出现其他状态时,参见下表:
节点状态 | 原因 | 处理方式 |
---|---|---|
running(unhealth) | 节点有服务处于异常 | grctl node get <该节点UID> |
running(unschedulable) | 节点正常,但处于不可调度状态 | grctl node uncordon <该节点UID> |
running(unschedulable,unhealth) | 节点有服务处于异常,并处于不可调度状态 | grctl node get <该节点UID> 处理问题 grctl node uncordon <该节点UID> |
offline | 节点未上线,或者node服务异常 | grctl node up <该节点UID> 检查节点 node 服务状态 |
unknown | 节点状态未知 | 检查该节点与管理节点时间同步 检查节点 node 服务状态 |
install_failed(unschedulable,unhealth) | 节点安装失败 | 参见安装问题排查 |
not_installed | 节点未安装 | grctl node install <该节点UID> |
服务异常处理
问题定位
Rainbond为集群中每一个节点上运行的每一个与集群相关的服务,都配置了健康检查。其结果会在 grctl cluster
命令的返回中有显示。
如果Rainbond检测到某个节点上有服务处于异常状态,会在异常服务所对应的 Message 列表中显示详细信息,格式为 HostName:详细错误信息
;同时,对应的节点 Status 中出现 unhealth 字样。
| rbd-api | 0/1 | manage01:Get http://127.0.0.1:8443: dial tcp 127.0.0.1:8443: connect: connection refused/ |
+--------------------------------------+-------------+-----------+----------+-------------------+
| Uid | IP | HostName | NodeRole | Status |
+--------------------------------------+-------------+-----------+----------+-------------------+
| 959eba4b-6bbe-4ad5-ba0f-ecfad17d378d | 10.10.10.10 | manage01 | manage | running(unhealth) |
+--------------------------------------+-------------+-----------+----------+-------------------+
上述信息表明:manage01节点上,名为 rbd-api
的服务处于异常状态。详细信息说明manage01节点连接本地 8443 端口失败,而 8443 端口正是 rbd-api
服务监听端口。
需要注意的是,这里连接失败的端口号,未必一定是报错服务的端口号,也可能是该服务所依赖的其他服务
查询该服务运行状态
systemctl status rbd-api
返回
● rbd-api.service - rbd-api
Loaded: loaded (/etc/systemd/system/rbd-api.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Tue 2019-08-06 17:17:02 CST; 13s ago
Process: 24249 ExecStop=/bin/bash -c docker stop rbd-api (code=exited, status=0/SUCCESS)
Main PID: 8491 (code=killed, signal=TERM)
发现该服务处于 inactive (dead)
状态。至此,问题定位完成。
Rainbond所有服务监听端口参见 服务组件端口说明,通过报错端口,可以快速定位异常发生位置
基于服务日志排查问题
Rainbond 自带的 node 服务会自动维护所有服务失败重启。如果问题持续存在,说明服务遇到了无法通过重启能够解决的问题。
Rainbond组件日志全部托管于 journal
,日志查询方式: journalctl -fu <服务名称>
比如:
journalctl -fu rbd-api
查询日志后,引起错误的原因将会有所提示,下面是一些日志中可能出现的关键字:
Unable to find image
Error response from daemon: No such container: rbd-api
Started rbd-grafana.
Unable to find image 'goodrain.me/rbd-api:v5.1.5-release' locally
docker: Error response from daemon: manifest for goodrain.me/rbd-api:v5.1.5-release not found.
该报错表征本地不存在指定的镜像。
- 解决方案:
- 检查配置文件,是否写错了镜像地址
- 确认其他节点(多数情况下是首个管理节点)是否存在该镜像,如果有,执行
docker push goodrain.me/rbd-api:v5.1.5-release
- 获取Rainbond指定版本镜像包来抽取对应镜像。v5.1.5版本对应镜像离线包
error: dial tcp xx.xx.xx.xx:3306: connect: connection refused
Started rbd-api.
error: dial tcp 192.168.195.1:3306: connect: connection refused
main process exited, code=exited, status=1/FAILURE
该报错显示 rbd-db
服务,或者用户对接的外部数据库连接失败。
- 解决方案:
systemctl status rbd-db
检查数据库服务是否正常/检查自定义对接的外部数据库运行是否正常- 检查当前服务配置文件,连接mysql的地址、用户名、密码
- 检查到当前数据库的网络是否有限制
Rainbond 中的服务存在相互依赖的关系。这导致有的服务启动失败,其根本原因是其他组件没有正常提供服务。参见组件间相互依赖关系
The contailer name "XXXX" is already in use by container " ···· "
/usr/bin/docker: Error response from daemon: Conflict. The container name "/etcd-proxy" is already use by container "d2cb3ce793ef764ae0525ccc". You have to remove (or rename) that container to be able to reuse that name.
See '/usr/bin/docker run --help'
etcd-proxy.service: main process exited, code=exited, status=125/n/a
该报错意为已存在同名容器,并且这个容器没有被自动清理。这一般体现出docker服务没有能够正常的工作。
- 解决方案:
- 尝试手动清理同名容器
docker rm -f etcd-proxy
- 手动清理失败,考虑重启docker服务。docker服务重启策略
- 尝试手动清理同名容器
其他报错排查
grctl cluster反馈异常
在执行 grctl cluster
后,返回以下信息:
The current cluster api server is not working properly.
You can query the service log for troubleshooting.
Exec Command: journalctl -fu rbd-api
或者
The current cluster node manager is not working properly.
You can query the service log for troubleshooting.
Exec Command: journalctl -fu node
grctl cluster 命令的执行,依赖于 node 、 rbd-api 两个服务。无论哪个出了问题,都无法正常返回。
- 解决方案:
- 根据返回的提示,确定问题由上述二服务重的哪一个引起的
- 根据提示查询日志,
journalctl -fu node/rbd-api
- 根据日志提示,先解决
node/rbd-api
的问题。参见 基于服务日志排查问题
storage服务报错
storage服务如有报错,一般情况是文件挂载出了问题,应按照如下步骤操作:
- 报错节点执行
mount | grep grdata
观察是否返回正确的挂载路径(挂载路径参考/etc/fstab
) - 如果发现没有挂载,则手动挂载
mount -a
- 挂载依然失败,根据报错检查系统环境
- 挂载成功,则重启所有对存储有依赖的服务 rbd-app-ui rbd-hub rbd-api rbd-gateway rbd-worker
我的集群服务器需要重启怎么办
参见 集群服务器重启策略
集群节点状态为Unknow怎么办
节点状态为“unknow”说明是此节点超过1分钟未上报状态的主节点,造成此问题的原因可能有:
- 此节点node服务运行故障已退出或此节点已关机。
- 此节点的时间与管理节点不一致,集群节点间的时间相差不应该大于30秒,最好设置时间同步服务。
我的问题没有被涵盖
如果你在阅读了这篇文档后,对于如何让你的集群正常工作依然一筹莫展,你可以: