本文主要针对启云云数据库发数据库服务过程中出现的实例起不来、实例状态不可用的排查过程。
首先确认实例是否已经创建
kubectl -n dmcp-instance get dm | grep dm***
若显示dmcp-instance命名空间下没有该实例,则需要排查cdb-portal以及dm-operater组件日志
kubectl -n dmcp-system get pod | grep cdb-portal
kubectl -n dmcp-system logs -f cdb-portal-***
kubectl -n cdb get pod | grep cdb-controller-manager
kubectl -n cdb logs -f cdb-controller-manager***
可能的原因包括:
1、启云license过期导致实例创建不了,需要更换启云license
2、因cdb-portal代码逻辑出现错误导致创建不了,需要排查代码问题
实例创建了,但是不是Running状态,排查步骤如下:
1、查看实例状态,如果是单机实例则应该有一个pod,若是主备实例(一主一备一监控),则应该有3个pod,正常运行的pod状态为Running,其他都需要排查原因
kubectl -n dmcp-instance get pod | grep dm***
2、查看pod详情,很多时候查看详情就可以知道为什么起不来
kubectl -n dmcp-instance describe pod dm***-0
3、若pod详情中没有问题,则进容器内部进行排查
kubectl -n dmcp-instance exec -it dm***-0 bash
#查看日志
cd /opt/dmdbms/data/log
vi dmdb.log
vi dm_GRP1_RT_1**.log
#查看服务状态
supervisord status
#手动调试
cd \~ #进入工作目录
pause #暂停容器,防止容器退出
cd /opt/dmdbms/data #进入数据库工作目录
/opt/dmdbms/bin/dmserver /opt/dmdbms/data/DAMENG/dm.ini -noconsole #单机
/opt/dmdbms/bin/dmserver /opt/dmdbms/data/DAMENG/dm.ini mount #主备
实例起不来可能问题总结:
1、因数据库license问题起不来(license过期或license版本不对应)
(1)查询dm-operator日志
kubectl -n cdb get pod | grep cdb-controller-manager
kubectl -n cdb logs -f cdb-controller-manager***
(2)进容器查看实例启动日志
kubectl -n dmcp-instance get pod | grep dm****
kubectl -n dmcp-instance exec -it dm**** bash
> cd /opt/dmdbms/data/log
> tail -f dmdb.log
2、因pvc创建失败或者挂载不了问题起不来
kubectl -n dmcp-instance get pod | grep dm****
kubectl -n dmcp-instance describe pod dm***-0
kubectl -n dmcp-instance get pvc | grep dm***
kubectl -n dmcp-instance describe pvc | grep dm****
3、因网络问题,启动探针不通过
(1)describe实例pod
kubectl -n dmcp-instance get pod | grep dm****
kubectl -n dmcp-instance describe pod dm***-0
(2)在主机ping实例pod的ip
ping ip
或
telnet ip port
4、因网络原因主备之间连接不上或者监控与主、备库连不上,监控1/2
#describe监控的pod
kubectl -n dmcp-instance describe pod dm***
#进监控pod连接主库、备库
kubectl -n dmcp-instance exec -it dm*** bash
> ncat -zv dm******-0.dm****** 52141
#分别进两个pod查看服务状态
kubectl -n dmcp-instance exec -it dm***-0 bash
#查看端口
> ss -nltp
#查看服务
> supervisorctl status
#查看数据库状态
> curl http://localhost:9100/metrics
5、因ini参数不合理 core dump
#查看数据库启动日志
kubectl -n dmcp-instance get pod | grep dm****
kubectl -n dmcp-instance exec -it dm**** bash
> cd /opt/dmdbms/data/log
> tail -f dmdb.log
#查看实例中内存使用是否超过实例规格
> top
#查看database的日志
kubectl -n dmcp-instance logs -f dm****-0 -c database
6、因初始化超时导致,超过15分钟数据库初始化没成功,块存储写入慢
kubectl -n dmcp-instance get pod | grep dm****
kubectl -n dmcp-instance exec -it dm**** bash
> cd /opt/dmdbms/data/log
#查看数据库实例启动日志,是否一直重启
> tail -f dmdb.log
#查看磁盘io
> fio -filename=fio.img -direct=1 -iodepth=32 -thread -rw=randrw -rwmixread=70 -ioengine=libaio -bs=4k -size=5g -numjobs=8 -runtime=60 -group_reporting -name=mytest
查看实例状态,pod是否running,pod是否2/2
1、查看监控是否为 up 1
kubectl -n dmcp-instance get pod | grep dm****
kubectl -n dmcp-instance exec -it dm**** bash
> curl http://localhost:9100/metrics
2、若监控 up 0,查看export的日志
kubectl -n dmcp-instance logs -f dm**** -c export
3、若监控 up 1,查看元数据库实例表状态
SELECT ID, STATUS FROM CDB_PORTAL.CDB_INSTANCE_INFO WHERE ID IN ('dm82814028578837');
4、若监控 up 1,且元数据库实例状态都是“运行中”,查询prometheus的实例up值
curl 'http://[fd11:1111:1112:15::28db]:9090/api/v1/query' --data-urlencode 'query=up{ kubernetes_pod_name=~"dm82814028578837.*"}'
5、若prometheus组件查询实例up值为空,查看prometheus组件pod的日志
kubectl -n dmcp-system logs -f prometheus-cdb-stack-prometheus-0
6、查看cdb-monitor中的日志,查看cdb-monitor是否能正常连接cdb-portal获取secret中配置的prometheus地址,查看cdb-portal中的日志,查看连接k8s集群是否报错
kubectl -n dmcp-system get pod | grep cdb-monitor
kubectl -n dmcp-system logs -f cdb-monitor****
kubectl -n dmcp-system get pod | grep cdb-portal
kubectl -n dmcp-system logs -f cdb-portal****
可能情况:
1、会话超过设置的最大会话数,修改MAX_SESSIONS然后重启;(up 0,export中显示会话数超出设置最大值,这种解决版本为修改MAX_SESSIONS的值)
2、prometheus组件问题
2.1、pometheus没有正常启动,查看prometheus组件的状态
kubectl -n dmcp-system get pod -o wide | grep prometheus***
2.2、prometheus组件没有空间,需要扩容
#进容器内查看prometheus存储是否满了
kubectl -n dmcp-system exec -it prometheus-cdb-stack-prometheus-0 -- sh
> df -h
#查看prometheus组件日志是否显示 no space left
kubectl -n dmcp-system logs -f prometheus-cdb-stack-prometheus-0
#prometheus组件扩容
kubectl -n dmcp-system edit pvc **
修改spec.resources.requests.storage,修改后要等pvc容量慢慢变为修改后的值
3、k8s集群连接访问不上
#查看元数据库CDB_PORTAL.CDB_CLUSTER_INFO中配置的集群信息与实际是否一致
##查询CDB_PORTAL.CDB_CLUSTER_INFO表信息
select * from CDB_PORTAL.CDB_CLUSTER_INFO
##查询k8s集群的地址以及认证信息
ping apiserver.cluster.local
cat ~/.kube/config
若不一致就进行修改,没有VIP的集群环境下base_url配置的集群第一个节点的IP,要测试IP地址是否连得同
telnet IP 6443
文章
阅读量
获赞
