KingbaseES V8R3集群运维案例之---备库状态‘down’修复
案例说明:
Kingbase V8R3集群,集群启动正常,备库数据库服务正常,流复制状态正常。但是备库在show pool_nodes下查看是‘down’状态,通过pcp_attach_node重新注册节点后,仍然是‘down’,通过复制(cp)主库data方式重建备库后,仍然没有解决。
此文档,详细介绍了此问题的分析和解决过程。
适用版本:
KingbaseES V8R3
集群节点信息:

一、问题现象
1、节点状态信息
TEST=# show pool_nodes;
node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay
---------+---------------+-------+--------+-----------+---------+------------+-------------------+-------------------
0 | 192.168.1.101 | 54321 | up | 0.500000 | primary | 0 | true | 0
1 | 192.168.1.102 | 54321 | down | 0.500000 | standby | 0 | false | 0
(2 rows)
### 如上所示,备库节点状态‘down’。
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 | REPLAY_LOCATION | SYNC_PRIORITY | SYNC_STATE
-------+----------+---------+------------------+---------------+-----------------+-------------+-------------------------------+--------------+-----------+---------------+----------------+----------------+-----------------+---------------+------------
11393 | 10 | SYSTEM | node102 | 192.168.1.102 | | 28251 | 2022-09-21 16:25:46.638372+08 | | streaming | 2/41237A0 | 2/41237A0 | 2/41237A0 | 2/41237A0 | 2 | sync
(1 row)
二、问题分析和解决
Tips:
一般对于以上问题,可以通过pcp_attach_node方式注册节点,恢复到‘up’状态。
1、注册备库节点
[kingbase@node101 bin]$ ./pcp_attach_node -U kingbase 1
Password:
pcp_attach_node -- Command Successful
[kingbase@node101 bin]$ ./pcp_node_info -U kingbase 1
Password:
192.168.1.102 54321 1 0.500000 waiting
[kingbase@node101 bin]$ ./pcp_node_info -U kingbase 1
Password:
192.168.1.102 54321 2 0.500000 up
[kingbase@node101 bin]$ ./pcp_node_info -U kingbase 1
Password:
192.168.1.102 54321 3 0.500000 down
##如上所示,执行备库节点注册后仍然是‘down’状态。
2、查看备库recovery.log
......
primary node/Im node status is changed, primary ip[192.168.1.101], recovery.conf NEED_CHANGE [0] (0 is need ), I,m status is [1] (1 is down), I will be in recovery.
node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay
---------+---------------+-------+--------+-----------+---------+------------+-------------------+-------------------
0 | 192.168.1.101 | 54321 | up | 0.500000 | primary | 0 | true | 0
1 | 192.168.1.102 | 54321 | down | 0.500000 | standby | 0 | false | 0
(2 rows)
if recover node up, let it down , for rewind
waiting for server to shut down.... done
server stopped
2022-09-21 16:18:36 set /home/kingbase/cluster/R3HA/db/data down now... already down , check again
wait kb stop 5 sec .......
2022-09-21 16:18:37 sys_rewind...
sys_rewind --target-data=/home/kingbase/cluster/R3HA/db/data --source-server="host=192.168.1.101 port=54321 user=SUPERMANAGER_V8ADMIN dbname=TEST"
datadir_source = /home/kingbase/cluster/R3HA/db/data
rewinding from last common checkpoint at 2/125C2A0 on timeline 19
find last common checkpoint start time from 2022-09-21 16:18:37.147787 CST to 2022-09-21 16:18:37.178836 CST, in "0.031049" seconds.
reading source file list
reading target file list
reading WAL in target
Rewind datadir file from source
update the control file: minRecoveryPoint is '2/127FA40', minRecoveryPointTLI is '19', and database state is 'in archive recovery'
rewind start wal location 2/125C268 (file 000000130000000200000001), end wal location 2/127FA40 (file 000000130000000200000001). time from 2022-09-21 16:18:37.147787 CST to 2022-09-21 16:18:38.887227 CST, in "1.739440" seconds.
Done!
server started
ksql "port=54321 user=SUPERMANAGER_V8ADMIN dbname=TEST connect_timeout=10" -c "select 33333;"
SYS_CREATE_PHYSICAL_REPLICATION_SLOT
--------------------------------------
(slot_node101,)
(1 row)
2022-09-21 16:18:43 create the slot [slot_node101] success.
SYS_CREATE_PHYSICAL_REPLICATION_SLOT
--------------------------------------
(slot_node102,)
(1 row)
2022-09-21 16:18:43 create the slot [slot_node102] success.
2022-09-21 16:18:43 start up standby successful!
can not get the replication of myself
---日志显示,在执行pcp_attach_node后,执行sys_rewind做节点的recovery,
sys_rewind执行成功,备库仍然为‘down’状态。
3、查看备库recovery配置文件
1)recovery.conf 配置
[kingbase@node102 data]$ cat recovery.conf
standby_mode='on'
primary_conninfo='port=54321 host=192.168.1.101 user=SYSTEM password=MTIzNDU2 application_name=node101
primary_slot_name ='slot_node101'
2)备库etc/recovery.done
[kingbase@node102 data]$ cat etc/recovery.done
standby_mode='on'
primary_conninfo='port=54321 host=192.168.1.101 user=SYSTEM password=MTIzNDU2 application_name=node101
primary_slot_name ='slot_node101'
3)查看主库recovery.done
[kingbase@node101 bin]$ cat ../data/recovery.done
standby_mode='on'
primary_conninfo='port=54321 host=192.168.1.102 user=SYSTEM password=MTIzNDU2 application_name=node101'
recovery_target_timeline='latest'
primary_slot_name ='slot_node101'

4、查看备库复制槽信息
TEST=# select * from sys_replication_slots;
SLOT_NAME | PLUGIN | SLOT_TYPE | DATOID | DATABASE | ACTIVE | ACTIVE_PID | XMIN | CATALOG_XMIN | RESTART_LSN | CONFIRMED_FL
USH_LSN
--------------+--------+-----------+--------+----------+--------+------------+--------+--------------+-------------+-------------
--------
slot_node101 | | physical | | | t | 6937 | 114712 | | 2/12A1468 |
slot_node102 | | physical | | | f | | 113518 | | 1/FD000878 |
(2 rows)
###由于备库recovery.conf配置问题,导致流复制备库应用了错误的复制槽。

四、问题解决
1、修改备库recovery.conf
[kingbase@node102 data]$ cat recovery.conf
standby_mode='on'
primary_conninfo='port=54321 host=192.168.1.101 user=SYSTEM password=MTIzNDU2 application_name=node102
primary_slot_name ='slot_node102'
2、 备库etc/recovery.done
[kingbase@node102 data]$ cat etc/recovery.done
standby_mode='on'
primary_conninfo='port=54321 host=192.168.1.101 user=SYSTEM password=MTIzNDU2 application_name=node102
primary_slot_name ='slot_node102'

3、关闭备库数据库服务
[kingbase@node102 bin]$ ./sys_ctl stop -D ../data
waiting for server to shut down.... done
server stopped
4、删除复制槽
TEST=# select sys_drop_replication_slot('slot_node101');
SYS_DROP_REPLICATION_SLOT
---------------------------
(1 row)
5、重启集群
[kingbase@node101 bin]$ ./kingbase_monitor.sh restart
6、查看节点状态
TEST=# show pool_nodes;
node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay
---------+---------------+-------+--------+-----------+---------+------------+-------------------+-------------------
0 | 192.168.1.101 | 54321 | up | 0.500000 | primary | 0 | true | 0
1 | 192.168.1.102 | 54321 | up | 0.500000 | standby | 0 | false | 0
(2 rows)
[kingbase@node101 bin]$ ./pcp_node_info -U kingbase 1
Password:
192.168.1.102 54321 2 0.500000 up
[kingbase@node101 bin]$ ./pcp_node_info -U kingbase 0
Password:
192.168.1.101 54321 2 0.500000 up
###如上所示,备库节点已经正常。
7、查看备库recovery.log
.......
2022-09-21 16:37:02 check if the network is ok
ping trust ip 192.168.1.1 success ping times :[3], success times:[2]
determine if i am master or standby
node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_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)
i am standby in cluster,determine if recovery is needed
2022-09-21 16:37:04 now will del vip [192.168.1.200/24]
but no 192.168.1.200/24 on my DEV, nothing to do with del
cluster is sync cluster.
now,there is a synchronous standby.
2022-09-21 16:37:07 ALL NODES ARE UP STATUS!
2022-09-21 16:37:07 ALL NODES ARE UP STATUS!
###如上所示,recovery.log中备库状态信息已经正常。
五、总结
1、 对于集群出现的问题,要从多个方面进行分析、判断,找到问题发生的根本原因。
2、对于备库的clone,尽量不要使用静态copy方式,此种方式备库需修改的文件较多,难免有遗漏,出现集群故障问题。
3、建议使用sys_basebackup执行备库clone,clone后注意检查备库集群配置文件。
KingbaseES V8R3集群运维案例之---备库状态‘down’修复的更多相关文章
- KingbaseES V8R3集群运维案例之---主库系统down failover切换过程分析
案例说明: KingbaseES V8R3集群failover时两个cluster都会触发,但只有一个cluster会调用脚本去执行真正的切换流程,另一个有对应的打印,但不会调用脚本,只是走相关的 ...
- KingbaseES V8R3集群运维案例之---kingbase_monitor.sh启动”two master“案例
案例说明: KingbaseES V8R3集群,执行kingbase_monitor.sh启动集群,出现"two master"节点的故障,启动集群失败:通过手工sys_ctl启动 ...
- KingbaseES V8R3集群运维案例之---cluster.log ERROR: md5 authentication failed
案例说明: 在KingbaseES V8R3集群的cluster.log日志中,经常会出现"ERROR: md5 authentication failed:DETAIL: password ...
- KingbaseES V8R3集群运维案例之---用户自定义表空间管理
案例说明: KingbaseES 数据库支持用户自定义表空间的创建,并建议表空间的文件存储路径配置到数据库的data目录之外.本案例复现了,当用户自定义表空间存储路径配置到data下时,出现的故障问 ...
- KingbaseES V8R6集群运维案例之---repmgr standby promote应用案例
案例说明: 在容灾环境中,跨区域部署的异地备节点不会自主提升为主节点,在主节点发生故障或者人为需要切换时需要手动执行切换操作.若主节点已经失效,希望将异地备机提升为主节点. $bin/repmgr s ...
- kingbaseES V8R6集群备份恢复案例之---备库作为repo主机执行物理备份
案例说明: 此案例是在KingbaseES V8R6集群环境下,当主库磁盘空间不足时,执行sys_rman备份,将集群的备库节点作为repo主机,执行备份,并将备份存储在备库的磁盘空间. 集群架构 ...
- KingbaseES V8R3集群管理维护案例之---集群迁移单实例架构
案例说明: 在生产中,需要将KingbaseES V8R3集群转换为单实例架构,可以采用以下方式快速完成集群架构的迁移. 适用版本: KingbaseES V8R3 当前数据库版本: TEST=# s ...
- KingbaseES集群管理维护案例之---备库checkpoint分析
数据库异常关闭时,数据库关闭时来不及或者没机会做checkpoint,则需要从上一个一致性检查的开始恢复.KingbaseES备机checkpoint是不能产生checkpoint WAL日志条目 ...
- KingbaseES V8R3集群维护案例之---pcp_node_refresh应用
案例说明: 在一次KingbaseES V8R3集群切换分析中,运维人员执行了pcp_node_refresh,导致集群发生了failover的切换.此文档对pcp_node_refresh工具做了应 ...
- KingbaseES V8R3集群管理和维护案例之---failover切换wal日志变化分析
案例说明: 本案例通过对KingbaseES V8R3集群failover切换过程进行观察,分析了主备库切换后wal日志的变化,对应用者了解KingbaseES V8R3(R6) failover ...
随机推荐
- Swoole从入门到入土(8)——协程初探
这一章节"协程"话题的讨论是为了让我们对之后协程风格服务端有更全面的了解.所以我们需要先一起了解一下什么是协程?协程有什么作用? 当大家第一次看到"协程"这个词 ...
- Java中的包装类(wrapper class)
1.介绍 顾名思义,包装类是封装Java原始类型的对象.每个Java原始类型都有一个对应的包装类: 基本类型 包装类 boolean Boolean byte Byte short Short cha ...
- Java集合框架学习(九) TreeMap详解
TreeMap介绍 TreeMap 类实现了Map接口,和HashMap类类似. TreeMap是一个基于Red-Black tree的可导航map的实现. 它基于key的自然顺序排序. TreeMa ...
- 如何在Windows上使用Git创建一个可执行脚本?
长话短说,今天介绍如何在windows上使用Git上创建一个可执行的shell脚本. 首先我们要知道windows上Git新添加的文件权限是:-rw-r--r--(对应权限值是644),而通常创建的s ...
- Detours 的使用
Detours 是一个用于在 ARM, ARM64, X86, X64 和 IA64 机器上拦截二进制函数的库. Detours 最常用来拦截应用程序中的 win32 api 调用,比如添加调试工具. ...
- r0capture 原理分析
r0capture 是比较好用的抓包工具 仅限安卓平台,测试安卓7.8.9.10.11.12 可用 : 无视所有证书校验或绑定,不用考虑任何证书的事情: 通杀TCP/IP四层模型中的应用层中的全部协议 ...
- Flutter——安装依赖包时,出现Waiting for another flutter command to release the startup lock
问题描述 运行 flutter packages get 时 出现 Waiting for another flutter command to release the startup lock 解决 ...
- ZYNQ 裸机模式下修改默认uart端口
## 背景 调试ZYNQ 裸机code, 调用 printf()后在UART端口无法看到打印信息输出,查看原理图后发现,板子用的UART 1作为默认串口调试接口,UART 0分配给了RS485使用,因 ...
- Bind DNS Server的基础配置
1.访问https://192.168.3.254:10000 由于SSL证书是不安全的,我用的Firefox浏览器会阻止打开网页: 看到上述界面,先选择"高级", 然后再选择&q ...
- 【Azure 应用服务】如果发现当前使用的订阅无法在China North 3 区中创建App Service服务,如何来解决这个问题呢?
问题描述 在创建App Service服务时,突然发现无法选择China North 3区域,如何来解决这个问题呢? 问题解答 根据Azure中服务都需要在订阅中注册的原理,因为China North ...