复制组熔断机制

SequoiaDB 巨杉数据库复制组是指同一份数据的多个拷贝,其中每一份数据拷贝又被称为数据副本。在系统架构层面上,每个数据副本作为一个独立进程存在,也被称为节点。通常情况下,一个复制组的每份数据副本存放在不同的物理服务器上,数据在同属一个复制组的多台物理服务器之间进行复制同步。

SequoiaDB 复制组的优势有:

  • 横向扩展,读写分离
    在复制组中,所有写入和更新都在主节点上进行,但是读取可能落在一个或多个备节点上,从而提高写入性能(主节点专用于写入更新),并随着备节点数上升同时提高读取效率。

  • 数据高可用性
    在单个物理设备故障后,该复制组中其他节点依然能够提供数据服务,从而能够有效避免单点故障问题,满足数据库的高可用性。

本文档主要介绍复制组间的同步熔断机制,以加深用户对 SequoiaDB 的可靠性原理的了解。

数据同步控制策略

在一个复制组中,节点间通过日志文件进行数据同步,所有的备节点会定期将其他数据节点日志文件打包下载到本节点,然后进行日志回放,同步主节点的数据操作。但日志文件同步源并不会局限于主节点,SequoiaDB 期望所有节点的数据版本差距尽可能在一个很小的窗口内,当处于这个窗口内时,所有备节点向主节点请求同步数据,但如果某些节点的数据版本与主节点差距过大,则会选择向其他备机点进行同步。当发生数据版本冲突,则以当前主节点数据版本为准。

SequoiaDB 的日志文件是有大小和个数限制的,分别通过配置参数 logfilesz (默认64MB)和 logfilenum (默认20个)进行调整。

Note:

用户修改日志文件大小和个数配置项时,需要离线删除全部日志文件,修改配置文件并启动 SequoiaDB 生效,通常会触发备节点全量同步

主节点写日志文件是循环写机制,为了避免循环写机制覆盖备节点尚未同步的日志内容,SequoiaDB 支持对数据副本间数据同步策略进行控制(配置参数 syncstrategy),在主节点即将覆盖日志文件时,不同的控制策略会产生不同的控制行为,例如在取值为 keepnormalkeepall 下会对业务进行限流限速控制等,从而保证同步日志不会被覆盖,日志被覆盖时,备机点需要进行全量同步

取值描述
none不开启同步控制策略,若主节点处理数据能力远超备节点数据同步能力,则在写操作繁忙场景下,备节点易发生全量同步
keepnormal主动降低主节点相对于正常节点的处理速度(可能造成性能影响),但会避免备机点全量同步
keepall主动降低主节点相对于索引节点的处理速度(可能造成性能影响),但能避免备机点全量同步

Note:

  • keepnormalkeepall 的区别在于,当有节点异常时keepall会降低主节点的处理速度,而 keepnormal 不受异常节点的影响
  • syncstrategy 的默认行为为 keepnormal

备节点剔除机制

备节点通过向主节点请求同步日志以同步主节点数据时,如果请求的同步日志在对应主节点未能找到时,备节点会自动剔除出复制组以保证集群正常工作。

节点心跳机制

在同一个复制组中,所有节点两两之间互为心跳节点组。一个节点组中任一节点发送心跳报文到对端节点失败,则会认为对端节点异常,继而将对端节点剔除出复制组。如果异常节点是主节点,则根据实际情况决定是否触发重选选举。

小结

SequoiaDB 在复制组层面上的一系列控制机制,有效地保证了复制组数据安全可靠,能够满足于对数据安全可靠性有一定要求的场景。