案例说明:

KingbaseES V8R3集群正常运行期间,现场发现cluster.log日志无任何信息输出,针对这一问题做了复现及提出解决方案。后现场检查发现,cluster.log文件曾被删除:

适用版本:

KingbaseES V8R3

一、查看集群的服务状态

1、集群节点状态

TEST=# show pool_nodes;
node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | repli
cation_delay
---------+---------------+-------+--------+-----------+---------+------------+-------------------+------
-------------
0 | 192.168.1.101 | 54321 | up | 0.500000 | primary | 0 | false | 0
1 | 192.168.1.102 | 54321 | up | 0.500000 | standby | 0 | true | 0
(2 rows)

2、流复制状态

TEST=# select * from sys_stat_replication;
PID | USESYSID | USENAME | APPLICATION_NAME | CLIENT_ADDR | CLIENT_HOSTNAME | CLIENT_PORT |
BACKEND_START | BACKEND_XMIN | STATE | SENT_LOCATION | WRITE_LOCATION | FLUSH_LOCATION | REP
LAY_LOCATION | SYNC_PRIORITY | SYNC_STATE
------+----------+---------+------------------+---------------+-----------------+-------------+---------
----------------------+--------------+-----------+---------------+----------------+----------------+----
-------------+---------------+------------
1366 | 10 | SYSTEM | node2 | 192.168.1.102 | | 38968 | 2023-04-
12 14:29:09.881587+08 | | streaming | 1/2E0001B0 | 1/2E0001B0 | 1/2E0001B0 | 1/2
E0001B0 | 0 | async
(1 row)

二、通过lsof查看进程访问的文件

1、查看kingbasecluster进程访问的日志文件

[root@node101 ~]# cd /home/kingbase/cluster/HAR3/db/bin

[root@node101 bin]# lsof -c kingbasecluster |grep cluster.log
kingbasec 1689 root 1w REG 253,2 29453500 34403567 /home/kingbase/cluster/HAR3/log/cluster.log
kingbasec 1689 root 2w REG 253,2 29453500 34403567 /home/kingbase/cluster/HAR3/log/cluster.log
kingbasec 1724 root 1w REG 253,2 29453500 34403567 /home/kingbase/cluster/HAR3/log/cluster.log ---如上所示,kingbasecluster服务启动后会访问cluster.log日志文件。

2、检查cluster.log对应的进程

[root@node101 bin]# lsof /home/kingbase/cluster/HAR3/log/cluster.log
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
kingbasec 1689 root 1w REG 253,2 29455673 34403567 /home/kingbase/cluster/HAR3/log/cluster.log
kingbasec 1689 root 2w REG 253,2 29455673 34403567 /home/kingbase/cluster/HAR3/log/cluster.log
kingbasec 1724 root 1w REG 253,2 29455673 34403567 /home/kingbase/cluster/HAR3/log/cluster.log # 查看对应的进程
[root@node101 bin]# ps -ef |grep 1689
root 1689 1 0 14:29 ? 00:00:00 ./kingbasecluster -n
root 1724 1689 0 14:29 ? 00:00:00 kingbasecluster: watchdog
root 1788 1689 0 14:29 ? 00:00:00 kingbasecluster: lifecheck
root 1794 1689 0 14:29 ? 00:00:00 kingbasecluster: wait for connection request
root 1795 1689 0 14:29 ? 00:00:00 kingbasecluster: wait for connection request
root 1796 1689 0 14:29 ? 00:00:00 kingbasecluster: wait for connection request ---如上所示,cluster.log日志文件会被kingbasecluster访问。

三、模拟cluster.log文件被删除

1、将cluster.log文件改名

[root@node101 log]# ls -lh cluster*

-rw-r--r-- 1 root root 2.4M Apr 12 14:33 cluster_restart.log
-rw-r--r-- 1 root root 110 Apr 12 14:09 clusterstop [root@node101 log]# mv cluster.log cluster.log.bk [root@node101 log]# ls -lh cluster*
-rw-r--r-- 1 root root 29M Apr 12 14:33 cluster.log.bk
-rw-r--r-- 1 root root 2.4M Apr 12 14:33 cluster_restart.log
-rw-r--r-- 1 root root 110 Apr 12 14:09 clusterstop

2、通过lsof查看kingbasecluster进程访问的日志文件

# 如下所示,kingbasecluster输出日志文件为cluster.log.bk
[root@node101 log]# lsof -c kingbasecluster |grep cluster.log
kingbasec 1689 root 1w REG 253,2 29464573 34403567 /home/kingbase/cluster/HAR3/log/cluster.log.bk
kingbasec 1689 root 2w REG 253,2 29464573 34403567 /home/kingbase/cluster/HAR3/log/cluster.log.bk
kingbasec 1724 root 1w REG 253,2 29464573 34403567 /home/kingbase/cluster/HAR3/log/cluster.log.bk # 删除cluster.log.bk文件
[root@node101 log]# rm cluster.log.bk [root@node101 log]# lsof -c kingbasecluster |grep cluster.log
kingbasec 1689 root 1w REG 253,2 29467057 34403567 /home/kingbase/cluster/HAR3/log/cluster.log.bk (deleted)
kingbasec 1689 root 2w REG 253,2 29467057 34403567 /home/kingbase/cluster/HAR3/log/cluster.log.bk (deleted)
kingbasec 1724 root 1w REG 253,2 29467057 34403567 /home/kingbase/cluster/HAR3/log/cluster.log.bk (deleted) # 手工创建cluster.log文件
[root@node101 log]# touch cluster.log
[root@node101 log]# lsof /home/kingbase/cluster/HAR3/log/cluster.log ---如上所示,手工创建cluster.log文件后,也没有被kingbasecluster进程访问。

如下图所示,删除cluster.log后,lsof标识文件被‘delete’:

四、测试failover切换

1、切换前集群节点状态

TEST=# show pool_nodes;
node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | repli
cation_delay
---------+---------------+-------+--------+-----------+---------+------------+-------------------+------
-------------
0 | 192.168.1.101 | 54321 | up | 0.500000 | primary | 0 | false | 0
1 | 192.168.1.102 | 54321 | up | 0.500000 | standby | 0 | true | 0
(2 rows)

2、模拟主库数据库服务down

[kingbase@node101 bin]$ ./sys_ctl stop -D ../data
waiting for server to shut down.... done
server stopped

3、查看切换后的新主库

TEST=# select sys_is_in_recovery();
SYS_IS_IN_RECOVERY
--------------------
f
(1 row)

4、切换后集群节点状态

TEST=# show pool_nodes;
node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | repli
cation_delay
---------+---------------+-------+--------+-----------+---------+------------+-------------------+------
-------------
0 | 192.168.1.101 | 54321 | up | 0.500000 | standby | 0 | false | 0
1 | 192.168.1.102 | 54321 | up | 0.500000 | primary | 0 | true | 0
(2 rows) ---如上所示,对于cluster.log文件被误删除,不会影响到集群的切换。

五、恢复cluster.log日志输出

Tips:

如果需要kingbasecluster重新输出日志到cluster.log文件,需要重启kingbasecluster服务,可以通过root用户执行restartcluster.sh;但是必须先kill原来的kingbasecluster进程,然后再执行此脚本。这样可以在不影响数据库服务的情况下,重启集群服务。

1、查看kingbasecluster进程

[root@node101 ~]# ps -ef |grep kingbasecluster
root 1689 1 0 14:29 ? 00:00:00 ./kingbasecluster -n
.......

2、kill进程(注意:不用kill -9)

[root@node101 ~]# kill -2 1689
[root@node101 ~]# ps -ef |grep kingbasecluster

3、执行restartcluster.sh

[root@node101 ~]# /home/kingbase/cluster/HAR3/kingbasecluster/bin/restartcluster.sh
# 进程重启pid发生变化
[root@node101 ~]# ps -ef |grep kingbasecluster
root 14943 1 0 14:50 pts/0 00:00:00 ./kingbasecluster -n
.......

4、查看cluster.log日志输出

[root@node101 ~]# tail -f  /home/kingbase/cluster/HAR3/log/cluster.log
2023-04-12 14:50:46: pid 14943: LOG: Setting up socket for :::9999
2023-04-12 14:50:46: pid 14943: LOG: kingbasecluster successfully started. version 3.6.7 (release)
2023-04-12 14:50:47: pid 14966: LOG: creating socket for sending heartbeat
2023-04-12 14:50:47: pid 14966: DETAIL: bind send socket to device: enp0s3
.......

六、总结

对于集群及数据库服务的日志文件,不要轻易通过手工方式删除文件,如果文件日益增大占用磁盘空间,可以通过Linux系统的logrotate工具切割日志文件并自动删除陈旧日志文件。

通过restartcluster.sh重启集群kingbasecluster服务,不影响集群的正常访问,但是会导致cluster vip漂移,对于生产环境,应该在业务访问低峰期间执行。

KingbaseES V8R3 集群运维案例 -- cluster.log无日志输出问题诊断的更多相关文章

  1. KingbaseES V8R3集群运维案例之---cluster.log ERROR: md5 authentication failed

    案例说明: 在KingbaseES V8R3集群的cluster.log日志中,经常会出现"ERROR: md5 authentication failed:DETAIL: password ...

  2. KingbaseES V8R3集群运维案例之---主库系统down failover切换过程分析

    ​ 案例说明: KingbaseES V8R3集群failover时两个cluster都会触发,但只有一个cluster会调用脚本去执行真正的切换流程,另一个有对应的打印,但不会调用脚本,只是走相关的 ...

  3. KingbaseES V8R3集群运维案例之---kingbase_monitor.sh启动”two master“案例

    案例说明: KingbaseES V8R3集群,执行kingbase_monitor.sh启动集群,出现"two master"节点的故障,启动集群失败:通过手工sys_ctl启动 ...

  4. KingbaseES V8R3集群运维案例之---用户自定义表空间管理

    ​案例说明: KingbaseES 数据库支持用户自定义表空间的创建,并建议表空间的文件存储路径配置到数据库的data目录之外.本案例复现了,当用户自定义表空间存储路径配置到data下时,出现的故障问 ...

  5. KingbaseES V8R6集群运维案例之---repmgr standby promote应用案例

    案例说明: 在容灾环境中,跨区域部署的异地备节点不会自主提升为主节点,在主节点发生故障或者人为需要切换时需要手动执行切换操作.若主节点已经失效,希望将异地备机提升为主节点. $bin/repmgr s ...

  6. KingbaseES V8R3集群管理维护案例之---集群迁移单实例架构

    案例说明: 在生产中,需要将KingbaseES V8R3集群转换为单实例架构,可以采用以下方式快速完成集群架构的迁移. 适用版本: KingbaseES V8R3 当前数据库版本: TEST=# s ...

  7. KingbaseES V8R3集群维护案例之---pcp_node_refresh应用

    案例说明: 在一次KingbaseES V8R3集群切换分析中,运维人员执行了pcp_node_refresh,导致集群发生了failover的切换.此文档对pcp_node_refresh工具做了应 ...

  8. KingbaseES V8R3集群管理和维护案例之---failover切换wal日志变化分析

    ​ 案例说明: 本案例通过对KingbaseES V8R3集群failover切换过程进行观察,分析了主备库切换后wal日志的变化,对应用者了解KingbaseES V8R3(R6) failover ...

  9. KingbaseES V8R3集群维护案例之---在线添加备库管理节点

    案例说明: 在KingbaseES V8R3主备流复制的集群中 ,一般有两个节点是集群的管理节点,分为master和standby:如对于一主二备的架构,其中有两个节点是管理节点,三个数据节点:管理节 ...

  10. PB 级大规模 Elasticsearch 集群运维与调优实践

    PB 级大规模 Elasticsearch 集群运维与调优实践 https://mp.weixin.qq.com/s/PDyHT9IuRij20JBgbPTjFA | 导语 腾讯云 Elasticse ...

随机推荐

  1. .gitignore 无法工作

    在开发一个新项目时,发现每次编译时都会产生一些 .obj 无用的文件,这些文件并不需要 push 到 github 上 故使用 .gitignore 忽略这些文件 首先,我们可以设置这些文件的输出目录 ...

  2. 深入理解Go语言(04):scheduler调度器-GMP里结构体源码分析

    在前面一节中简单介绍了golang的调度模型-GPM模型,介绍了他们各自的作用.这篇文章就来看看他们的源码结构. Go版本:go1.13.9 M结构体 M结构体是OS线程的一个抽象,主要负责结合P运行 ...

  3. React Native如何每次唤醒APP都执行一段代码

    最近想要做一个类似于淘宝每次打开会根据用户剪贴板内容弹出对应商品的功能.要完成这个功能需要每次唤醒APP都读取一次剪贴板. 1.监听 && 销毁 1 async componentDi ...

  4. Android 全面屏体验

    一.概述 Android 应用中经常会有一些要求全屏显隐状态栏导航栏的需求.通过全屏沉浸式的处理可以让应用达到更好的显示效果.在 Android 4.1 之前,只能隐藏状态栏, 在 Android4. ...

  5. AFNetworking整体框架简单整理

    一.AFNetworking整体框架是怎样的 1.UIKit集成模块 UIKit 2.请求序列化 Serialization 3.响应序列化 Serialization 4.会话 NSURLSessi ...

  6. 【Azure Function App】Java Function在运行中遇见内存不足的错误

    问题描述 在Function的Code+Test界面进行函数触发可以成功.因为Function为Blob Trigger,当在Blob容器下上传文件后,Function可以被正常触发但是报 outof ...

  7. 【Azure 云服务】云服务(经典) 迁移至云服务(外延支持) 的相关疑问

    问题描述 根据微软官方文档说明,云服务(经典)已弃用.所以关于它有以下的一些疑问: 一:迁移时候的停机时间问题? 二:云服务(经典) 与 云服务(外延支持) 的区别是什么? 三:注意事项有那些呢?如 ...

  8. nginx 基本功能

    1.nginx简介 官方文档 Nginx是一个高性能WEB服务器,除它之外Apache.Tomcat.Jetty.IIS,它们都是Web服务器,或者叫做WWW(World Wide Web)服务器,相 ...

  9. 字典嵌套列表 与 列表嵌套字典 导出为csv 的方法

    字典嵌套列表 导出csv {'rank': ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '1 ...

  10. 微信小程序开发:页面分享卡片、风格选择、通道启用等可配置

    上文说到,我们部署了定时任务,但是有个地方忘记在上文写了,这里补上,就是定时任务的超时时间问题,超时时间有7200秒: 我们改成7100秒: 再把云函数调用的云对象的超时时间也改下: 超时时间多一点, ...