高可用是指通过缩短因日常维护操作和突发的系统崩溃所导致的停机时间,以提高和应用的可用性。SequoiaDB 巨杉数据库采用的是复制组内多副本机制的集群架构,从而保证数据库的高可用性。
复制组内会有主节点和从节点两种角色,主节点的权限最高,能够执行任何的增删查改操作,而从节点的数据与主节点保持同步,通常只为系统提供读服务,起到一定的负载均衡作用。
在主节点上修改数据的操作会通过日志复制到从节点上,这个日志叫做同步日志。同步日志中包含了主节点的全部数据操作,这些数据操作将会在从节点上重做。如果一个从节点停机时间比同步日志保存的时间还要长,那么从节点必须要通过全量同步从主节点获取数据。
复制组中每个节点都可能成为主节点,也可能降级为从节点。每一个复制组最多存在一个主节点,当其出现故障时从节点会自动发起选举。选举成功后,如果原来的主节点重新联机,则会自动降级为从节点。
在 SequoiaDB 的选举中,有几个重要的准则:
数据组内如果已经存在了主节点,则其他从节点无法要求组内发起新一轮选举。
数据组内要进行选举,必须满足存活节点>=(组内总节点数/2+1)的要求,才能够发起选举。
在数据组内,节点竞争当选主节点,有几点需要优先考虑,优先级从高到低排列如下:节点 LSN > 节点选举权重 > 节点 NodeID。
数据组内进行选举,遵循二段提交原则,保证选举的正确性。