本章是根据上一章节“集群切换原理概述”中描述的原理以及相关时间计算公式,进行实际环境测试。测试不同配置、不同故障场景下的切换时间。
目录
3.1. 演练环境介绍 ¶
操作系统 | Linux 28-123-HA03 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 GNU/Linux |
CPU | 12 CPUs x Intel(R) Xeon(R) Bronze 3104 CPU @ 1.70GHz |
内存 | 239.47 GB |
磁盘 | SATA盘: Vendor: VMware Product: Virtual disk Revision: 2.0 Compliance: SPC-4 User Capacity: 107,374,182,400 bytes: [107 GB] Logical block size: 512 bytes LU is fully provisioned |
网卡 | Supported ports: [ TP ] Supported link modes: 1000baseT/Full 10000baseT/Full Speed: 10000Mb/s Duplex: Full Port: Twisted Pair PHYAD: 0 Transceiver: internal Auto-negotiation: off Supports Wake-on: uag Wake-on: d Link detected: yes |
操作系统参数配置: 详见《[高可用]KingbaseES集群使用手册(Linux版本)》内集群配置说明章节,系统参数检查下的系统参数配置表。
3.2. 进程故障 ¶
本节主要针对KingbaseES的服务进程故障的实际场景。通过Kill数据库服务进程,构造数据库进程故障来进行集群切主的实战演练。
3.2.1. 场景参数设置及预期 ¶
参数配置1(单位:秒) | 参数配置2(单位:秒) |
---|---|
monitor_interval_secs=1 | monitor_interval_secs=2 |
reconnect_attempts=2 | reconnect_attempts=6 |
reconnect_interval=3 | reconnect_interval=10 |
sibling_nodes_disconnect_timeout=30 | sibling_nodes_disconnect_timeout=60 |
connect_timeout=10 | connect_timeout=10 |
ConnectTimeout=10 | ConnectTimeout=10 |
recovery=automatic | recovery=automatic |
vip_timeout=30 | vip_timeout=60 |
wal_sender_timeout=60 | wal_sender_timeout=60 |
预期说明:
杀掉主节点数据库进程,构造进程故障,那么libpq判断主节点是否故障的连接一般都是瞬间返回错误结果,而不会等待超时。 所以,”连接上游节点连接失败,重试连接上游节点”的耗时是固定的,不是范围波动值。而新主节点加载VIP可以预期一次成功,所以预期时间为最小值。
根据上述流程介绍,预期时间如下:
例如:参数配置1 已配置vip 已配置1个信任网关
流程 | 耗时(单位:秒) |
---|---|
监控检测间隔(monitor_interval_secs) | 0~1 |
连接上游节点 连接失败,重试连接上游节点 | 3 |
检测是否所有备节点节点已杀掉wal_receiver进程 | 1~35 |
卸载原主节点vip,加载新主节点vip耗时 | 2 |
ping 信任网关 | 2~4 |
总计 | 6~45 |
例如:参数配置2 已配置vip 已配置1个信任网关
流程 | 耗时(单位:秒) |
---|---|
监控检测间隔(monitor_interval_secs) | 0~2 |
连接上游节点 连接失败,重试连接上游节点 | 50 |
检测是否所有备节点节点已杀掉掉wal_receiver进程 | 1~65 |
卸载原主节点vip,加载新主节点vip耗时 | 2 |
ping 信任网关 | 2~12 |
总计 | 53~126 |
3.2.2. 切机时间 ¶
参数配置 | 流复制配置 同步/异步 | 是否配置Vip | 配置信任网关 个数 | 杀掉 主节点db 业务恢复时间 (会发生切机) | 杀掉 备节点db 业务恢复时间 (不会发生切机, 业务仅等待同步 转异步时间后恢复) |
参数配置1 | 同步 | 否 | 1 | 7 | 1 |
参数配置1 | 异步 | 否 | 1 | 6 | |
参数配置2 | 同步 | 否 | 1 | 55 | 2 |
参数配置2 | 异步 | 否 | 1 | 53 | |
参数配置1 | 同步 | 是 | 1 | 10 | 1 |
参数配置1 | 异步 | 是 | 1 | 9 | |
参数配置2 | 同步 | 是 | 1 | 57 | 2 |
参数配置2 | 异步 | 是 | 1 | 56 |
3.2.3. 切机过程介绍 ¶
主节点数据库被杀掉时,备节点的repmrd启动监控检测,检测到上游节点连接错误,会重试reconnect_attempts次,重试间隔reconnect_interval秒, 因为是数据库进程故障,所以libpq判断主节点是否故障的连接一般都是瞬间返回错误结果,而不会等待超时,重试reconnect_attempts次后判断上游节点确定故障,然后判断上游节点是主节点, 备节点开始杀掉wal_receiver进程,所有备节点同时杀wal_receiver进程成功,则耗时1秒,开始升主,备节点选举时,本地节点选举成功,检测信任网关,一次就成功耗时2秒,如果已配置vip, 就执行卸载就集群主的vip,并在集群新主加载vip,这两个操作会ping两次vip,执行真正的升主语句,升主成功。
备节点数据库被杀掉时,流复制为异步的情况下,主节点不会卡住,流复制为同步的情况下,虽然未切换,但是因为同步流复制备节点故障, 主节点一直等到同步备节点的反馈,导致主节点的写语句卡住,恢复时间为(0~monitor_interval_secs)+reconnect_attempts*reconnect_interval秒。
3.3. 设备重启 ¶
本节主要针对KingbaseES的服务设备重启故障的实际场景。通过reboot命令重启操作系统,构造数据库设备重启故障来进行集群切主的实战演练。
3.3.1. 场景参数设置及预期 ¶
参数配置1(单位:秒) | 参数配置2(单位:秒) |
---|---|
monitor_interval_secs=1 | monitor_interval_secs=2 |
reconnect_attempts=2 | reconnect_attempts=6 |
reconnect_interval=3 | reconnect_interval=10 |
sibling_nodes_disconnect_timeout=30 | sibling_nodes_disconnect_timeout=60 |
connect_timeout=10 | connect_timeout=10 |
ConnectTimeout=10 | ConnectTimeout=10 |
recovery=automatic | recovery=automatic |
vip_timeout=30 | vip_timeout=60 |
wal_sender_timeout=60 | wal_sender_timeout=60 |
预期说明:
使用reboot命令重启主节点数据库所在操作系统,构造设备重启故障,libpq判断主节点是否故障时,操作系统还未重启成功前,会通过连接超时, 才能判断主节点故障。操作系统重启成功后,连接瞬间返回错误,而不需要等待超时,但操作系统何时成功启动是不可控的,所以判断主节点故障耗时在最短到最长之间。 在操作系统重启过程中,原主节点的vip可能会对新主节点加载vip造成干扰(可以ping通但无法卸载),所以,此步骤的时间也是范围值。
所以根据上述流程介绍,预期时间如下:
例如:参数配置1 已配置vip 已配置1个信任网关
流程 | 耗时(单位:秒) |
---|---|
监控检测间隔(monitor_interval_secs) | 0~1 |
连接上游节点 连接失败,重试连接上游节点 | 3~23 |
检测是否所有备节点节点已杀掉掉wal_receiver进程 | 1~35 |
卸载原主节点vip,加载新主节点vip耗时 | 2~42 |
ping 信任网关 | 2~4 |
总计 | 6~105 |
例如:参数配置2 已配置vip 已配置1个信任网关
流程 | 耗时(单位:秒) |
---|---|
监控检测间隔(monitor_interval_secs) | 0~2 |
连接上游节点 连接失败,重试连接上游节点 | 50~110 |
检测是否所有备节点节点已杀掉wal_receiver进程 | 1~65 |
卸载原主节点vip,加载新主节点vip耗时 | 2~72 |
ping 信任网关 | 2~12 |
总计 | 53~256 |
特别说明:在杀掉 wal_receiver进程时,会首先去检测是否存在wal_receiver进程,如果存在则会睡眠 5秒之后才执行真正的kill命令,当reconnect_attempts和reconnect_interval参数被配置成为2和3时,此时wal_receiver进程还存在,所以会睡眠5秒,但当参数配置成6和10时,wal_receiver进程已经不存在了,则不会睡眠5秒。
3.3.2. 切机时间 ¶
参数配置 | 流复制配置 同步/异步 | 是否配置Vip | 配置信任网关 个数 | reboot 主节点db所在OS 业务恢复时间 (会发生切机) | reboot 备节点db所在OS 业务恢复时间 (不会发生切机, 业务仅等待同步 转异步时间后恢复) |
参数配置1 | 同步 | 否 | 1 | 9 | 1 |
参数配置1 | 异步 | 否 | 1 | 8 | |
参数配置2 | 同步 | 否 | 1 | 16 | 2 |
参数配置2 | 异步 | 否 | 1 | 15 | |
参数配置1 | 同步 | 是 | 1 | 41 | 1 |
参数配置1 | 异步 | 是 | 1 | 40 | |
参数配置2 | 同步 | 是 | 1 | 78 | 2 |
参数配置2 | 异步 | 是 | 1 | 77 |
3.3.3. 切机过程介绍 ¶
使用reboot命令重启主节点数据库所在操作系统,备节点的repmrd启动监控检测,检测到上游节点连接错误,会重试reconnect_attempts次,重试间隔reconnect_interval秒, 因为重启主节点数据库所在操作系统故障,所以libpq判断主节点是否故障时,操作系统还未重启成功前,通过连接超时,才能判断主节点故障,操作系统重启成功后,连接瞬间返回错误, 而不需要等待超时,但操作系统何时成功启动是不可控的,所以判断主节点故障耗时在最短到最长之间,重试reconnect_attempts次后确认上游节点故障,然后判断上游节点是主节点,备节点开始杀掉 wal_receiver进程, 所有备节点同时杀wal_receiver进程成功,则耗时1秒,开始升主,备节点选举,本地节点选举成功,检测信任网关,一次就成功耗时2秒,检测信任网关,一次就成功耗时2秒,如果已配置vip,就执行卸载集群旧主的vip, 并在集群新主加载vip,这两个操作会ping两次vip,然后执行真正的升主语句,升主成功。
备节点数据库所在操作系统被重启,流复制为异步的情况下,主节点不会卡住,流复制为同步的情况下,虽然未切换,但是因为同步流复制备节点故障,主节点一直等到同步备节点的反馈,导致主节点的写语句卡住, 恢复时间为(0~ monitor_interval_secs) + reconnect_attempts * reconnect_interval ~((0 ~ monitor_interval_secs) + reconnect_attempts * (reconnect_interval+ connect_timeout))秒。
3.4. 电源故障 ¶
本节主要针对KingbaseES的服务设备电源故障的实际场景。通过shutdown命令关闭操作系统,构造数据库设备电源故障来进行集群切主的实战演练。
3.4.1. 场景参数设置及预期 ¶
参数配置1(单位:秒) | 参数配置2(单位:秒) |
---|---|
monitor_interval_secs=1 | monitor_interval_secs=2 |
reconnect_attempts=2 | reconnect_attempts=6 |
reconnect_interval=3 | reconnect_interval=10 |
sibling_nodes_disconnect_timeout=30 | sibling_nodes_disconnect_timeout=60 |
connect_timeout=10 | connect_timeout=10 |
ConnectTimeout=10 | ConnectTimeout=10 |
recovery=automatic | recovery=automatic |
vip_timeout=30 | vip_timeout=60 |
wal_sender_timeout=60 | wal_sender_timeout=60 |
预期说明:
使用shutdown命令,对主节点数据库所在操作系统进行关机,构造操作系统电源故障,libpq判断主节点是否故障时,通过连接超时,才能判断主节点故障,所以,“连接上游节点”计算的时间一般都会接近最大值, 才能判断主节点故障(根据网络设置以及OS shutdown速度的不同,可能会有差异,但此处不考虑,仅计算最大值)。在操作系统关机过程中, 原主节点的vip可能会对新主节点加载vip造成干扰(可以ping通但无法卸载),所以,此步骤的时间也是范围值。
根据上述流程介绍,预期时间为:
例如:参数配置1 已配置vip 已配置1个信任网关
流程 | 耗时(单位:秒) |
---|---|
监控检测间隔(monitor_interval_secs) | 0~1 |
连接上游节点 连接失败,重试连接上游节点 | 3~23 |
检测是否所有备节点节点已杀掉wal_receiver | 1~35 |
卸载原主节点vip,加载新主节点vip耗时 | 2~42 |
ping 信任网关 | 2~4 |
总计 | 6~105 |
例如:参数配置2 已配置vip 已配置1个信任网关
流程 | 耗时(单位:秒) |
---|---|
监控检测间隔(monitor_interval_secs) | 0~2 |
连接上游节点 连接失败,重试连接上游节点 | 110 |
检测是否所有备节点节点已杀掉wal_receiver进程 | 1~60 |
卸载原主节点vip,加载新主节点vip耗时 | 2~72 |
ping 信任网关 | 2~12 |
总计 | 113~256 |
3.4.2. 切机时间 ¶
参数配置 | 流复制配置 同步/异步 | 是否配置Vip | 配置信任网关 个数 | shutdown 主节点db所在OS 业务恢复时间 (会发生切机) | shutdown 备节点db所在OS 业务恢复时间 (不会发生切机, 业务仅等待同步 转异步时间后恢复) |
参数配置1 | 同步 | 否 | 1 | 8 | 1 |
参数配置1 | 异步 | 否 | 1 | 6 | |
参数配置2 | 同步 | 否 | 1 | 55 | 2 |
参数配置2 | 异步 | 否 | 1 | 53 | |
参数配置1 | 同步 | 是 | 1 | 44 | 1 |
参数配置1 | 异步 | 是 | 1 | 41 | |
参数配置2 | 同步 | 是 | 1 | 131 | 2 |
参数配置2 | 异步 | 是 | 1 | 134 |
3.4.3. 切机过程介绍 ¶
使用shutdown命令关闭主节点数据库所在操作系统时,备节点的repmrd启动监控检测,检测到上游节点连接错误,会重试reconnect_attempts次,重试间隔reconnect_interval秒, 因为关闭主节点数据库所在操作系统故障,所以libpq判断主节点是否故障时,通过连接超时,才能判断主节点故障,重试reconnect_attempts次后判断上游节点确定故障,然后判断上游节点是主节点, 备节点开始杀掉wal_receiver进程,所有备节点同时杀wal_receiver进程成功,则耗时1秒,开始升主,备节点选举时,本地节点选举成功,检测信任网关,一次就成功耗时2秒,如果已配置vip,就执行卸载集群旧主的vip, 并在集群新主加载vip,这两个操作会ping两次vip,然后执行真正的升主语句,升主成功。
关闭备节点数据库所在操作系统时,流复制为异步的情况下,主节点不会卡主,流复制为同步的情况下,虽然未切换,但是因为同步流复制备节点故障,主节点一直等到同步备节点的反馈, 导致主节点的写语句卡住,恢复时间为(0~monitor_interval_secs)+ reconnect_attempts * (reconnect_interval + connect_timeout)秒。
3.5. 网络故障 ¶
本节主要针对KingbaseES的服务设备网络故障的实际场景。通过断网工具,构造数据库设备网络故障来进行集群切主的实战演练。
3.5.1. 场景参数设置及预期 ¶
参数配置1(单位:秒) | 参数配置2(单位:秒) |
---|---|
monitor_interval_secs=1 | monitor_interval_secs=2 |
reconnect_attempts=2 | reconnect_attempts=6 |
reconnect_interval=3 | reconnect_interval=10 |
sibling_nodes_disconnect_timeout=30 | sibling_nodes_disconnect_timeout=60 |
connect_timeout=10 | connect_timeout=10 |
ConnectTimeout=10 | ConnectTimeout=10 |
recovery=automatic | recovery=automatic |
vip_timeout=30 | vip_timeout=60 |
wal_sender_timeout=60 | wal_sender_timeout=60 |
预期说明:
主节点数据库所在操作系统网络断开,libpq判断主节点是否故障时,通过连接超时,才能判断主节点故障,所以,“连接上游节点”计算的时间一般都会接近最大值, 才能判断主节点故障(根据网络设置可能会有差异,但此处不考虑,仅计算最大值)。同时,因为断网,原主节点上的vip无需卸载,新主节点可以直接加载成功,计算最小值。
根据上述流程介绍,预期时间为:
例如:参数配置1 已配置vip 已配置1个信任网关
流程 | 耗时(单位:秒) |
---|---|
监控检测间隔(monitor_interval_secs) | 0~1 |
连接上游节点 连接失败,重试连接上游节点 | 3~23 |
检测是否所有备节点节点已杀掉wal_receiver进程 | 1~35 |
卸载原主节点vip,加载新主节点vip耗时 | 2 |
ping 信任网关 | 2~4 |
总计 | 28~65 |
例如:参数配置2 已配置vip 已配置1个信任网关
流程 | 耗时(单位:秒) |
---|---|
监控检测间隔(monitor_interval_secs) | 0~2 |
连接上游节点 连接失败,重试连接上游节点 | 110 |
检测是否所有备节点节点已杀掉wal_receiver进程 | 1~60 |
卸载原主节点vip,加载新主节点vip耗时 | 2 |
ping 信任网关 | 2~12 |
总计 | 115~186 |
3.5.2. 切机时间 ¶
参数配置 | 流复制配置 同步/异步 | 是否配置Vip | 配置信任网关 个数 | 主节点db 所在OS网络断开 业务恢复时间 (会发生切机) | 备节点db 所在OS网络断开 业务恢复时间 (不会发生切机, 业务仅等待同步 转异步时间后恢复) |
参数配置1 | 同步 | 否 | 1 | 55 | 61 |
参数配置1 | 异步 | 否 | 1 | 53 | |
参数配置2 | 同步 | 否 | 1 | 94 | 62 |
参数配置2 | 异步 | 否 | 1 | 95 | |
参数配置1 | 同步 | 是 | 1 | 51 | 61 |
参数配置1 | 异步 | 是 | 1 | 49 | |
参数配置2 | 同步 | 是 | 1 | 96 | 62 |
参数配置2 | 异步 | 是 | 1 | 98 |
3.5.3. 切机过程介绍 ¶
主节点数据库所在操作系统网络断开时,备节点的repmrd启动监控检测,检测到上游节点连接错误,会重试reconnect_attempts次,重试间隔reconnect_interval秒,因为主节点数据库所在操作系统网络断开, 所以libpq判断主节点是否故障时,通过连接超时,才能判断主节点故障,重试reconnect_attempts次后判断上游节点确定故障,然后判断上游节点是主节点,备节点开始杀掉wal_receiver进程, 所有备节点同时杀wal_receiver进程成功,则耗时1秒,开始升主,备节点选举时,本地节点选举成功,检测信任网关,一次就成功耗时2秒,如果已配置vip,就执行卸载集群旧主的vip, 并在集群新主加载vip,这两个操作会ping两次vip,然后执行真正的升主语句,升主成功。
备节点数据库所在操作系统网络断开时,流复制为异步的情况下,主节点不会卡住,流复制为异步的情况下,主节点不会卡主,流复制为同步的情况下,虽然未切换,但是因为同步流复制备节点故障, 主节点一直等到同步备节点的反馈,导致主节点的写语句卡住,恢复时间为(0~monitor_interval_secs)+reconnect_attempts*(reconnect_interval+connect_timeout)秒。