在GBase 8c中,控制“主备间事务同步提交规则”是由高可用组件自动进行维护的,在实际使用当中,非特殊应急场景(如所有备机宕掉或挂起)用户无需调整 synchronous_commit、synchronous_standby_names 参数。
在当前版本中,GBase 8c高可用组件管理“主备间事务同步提交”,按以下规则进行管理:
- 对于CN节点
CN没有备机,都是服务对等的节点,所以需要设置为 synchronous_commit=off,--不要进行修改,异常情况下可能引发节点无法正常启动问题。
- 对于DN节点
- 备机2台或以上,高可用管理机制会自动 synchronous_commit 设置为 ON,确保备机能同步到数据,保证数据同步提交。而当前的同步列表,即 synchronous_standby_names 配置为 ANY <半数备机>,以保证数据安全与性能之间的均衡。同时,在近期版本,将调整为 FIRST <半数备机> 的配置,即以优先级的策略保证节点的同步。
- 备机只有1台,即一主一备的场景下,synchronous_commit默认取值为off,synchronous_standby_names 默认取值为"*"。
环境部署的为一主一备,在当前版本(B48)发生备机发生异常时,如果synchronous_commit配置成on,则主节点有可能会发生类似的等待事件,影响服务,因此高可用会自动设置为off,非特殊情况不要进行修改。并且生产环境建议部署为1主2备或以上的模式。
针对此问题,GBase 8c 的高可用管理机制也在不断进行优化,未来版本会增加同步提交“降级”机制(版本待确定),最大限度保证服务的连续性。
三、读写分离
问题:高可用同步管理机制下,读写分离场景如何保证数据一致性?
解答:读写分离机制,可以通过修改配置文件的方式将CN节点配置为只读节点,由该 CN 节点将请求发送至已进行同步的备DN节点上,无备选DN可用时则使用主DN节点,以保证读写事务的一致性。
(注意:未来 synchronous_standby_names 调整为 FIRST <半数备机> 后,只读CN节点也可以按此优先级机制选取高优先级的同步备DN节点)