集群高可用
默认情况下,KWDB 多副本集群支持高可用,能够实现故障转移和数据强一致性。集群中的各节点通过定期的心跳机制来维护连接和状态,以便及时发现故障并采取相应措施。
KWDB 单机版支持基于 DRBD 块设备复制的开源软件方案,实现主备节点间的数据复制,更多相关信息,参见单机高可用性方案。
单副本集群不支持高可用性。
说明
- KWDB 2.0.3.2 版本使用导入导出方式升级到 2.0.4 版本后,集群的高可用性可能会受到影响。
- 可通过重试机制解决因
update tag
失败导致不同节点查询普通标签时的不一致问题。 - 可通过重启来释放内存解决长时间执行大量建表和删表操作导致的内存占用持续增长或 OOM 问题。
- 集群节点多次发生故障后重新加入,可能会导致数据写入缓慢。
- 集群节点故障或故障节点恢复后的 leaseholder 迁移可能导致读写短暂不可用或卡顿。
默认情况下,如果一个节点在集群中离线时间超过 30 分钟,系统会将其标记为不可用,并将该节点上的数据副本重新分配到其他节点,以确保数据的可用性和一致性。用户也可以通过以下 SQL 命令设置节点死亡时间,设置时间建议不小于 75s。另外,延长节点死亡判定时间,可以减少节点故障对集群性能的长时间影响。注意:延长节点死亡时间可能会影响集群的高可用性功能和 DDL 相关操作。
set cluster setting server.time_until_store_dead = <value>
高可用机制:
KWDB 多副本集群采用 3 副本机制。为了确保系统在节点发生故障后仍能够提供服务,集群通过多数投票机制保证数据一致性和可用性,因此至少需要 2 个副本保持可用状态。
以下以 5 节点集群为例,说明 KWDB 多副本集群如何实现高可用性。
KWDB 集群启动后,副本和 leaseholder 均匀分布在所有节点上,确保数据的高可用性和平衡性。
如果单个节点因网络断开、延迟、操作系统故障、磁盘故障等原因导致节点状态变为异常(
is_available
和is_live
均为false
),系统会开始迁移该节点的 leaseholder,迁移期间数据查询和 DML 操作可能受影响,DDL 操作可能会报错,生命周期会顺延至下一执行周期执行。待节点恢复为可用状态后恢复正常。节点离线时间达到设定值后,系统会将该节点标记为不可用。如果剩余节点数量仍大于副本数,系统自动补足缺失的副本,确保数据的高可用性、副本补足期间,数据查询不受影响,DML 操作不受影响,DDL 操作可能会报错,副本补足后,DDL 操作恢复正常。
不可用节点恢复后,系统会将副本和 leaseholder 回迁到该节点。迁移期间数据查询和 DML 操作可能受影响,DDL 操作可能会报错,生命周期会顺延至下一执行周期执行。待节点恢复为可用状态后恢复正常。
如果两个或更多节点出现故障,由于剩余节点数小于或等于副本数,系统无法补足缺失的副本,可能导致部分数据无法访问,甚至出现集群无法使用的情况。