巨杉数据库 SequoiaDB 的选举操作是基于 raft 协议算法进行实现。 不过巨杉数据的数据组在基于 raft 算法的基础上又进行了扩充完善,在保证副本组内数据均一致一情况下,巨杉的数据组选举可以通过命令reelect()操作进行重新选举。
这一功能的出现是为了解决这样的一种场景: 当用户未对数据库的节点进行权重(weight)配置时,如果集群内的主数据节点均在一台物理服务器上的时候,此台物理服务器会有比较大的压力,而且很容易造成集群的性能瓶颈点。当此情况出现时,我们可以通过releect()命令让数据组进行重新选举, 将主节点选走。
而数据组重新选举的操作步骤如下:
进到sdbadmin用户
su - sdbadmin
进入 sdb shell
sdb
连接 sdb 的 coord节点
db = new Sdb()
获取分区组 group1 的句柄
rg = db.getRG("group1")
检查当前主节点
rg.getMaster()
重新选举
rg.reelect()
检查选举结果,主节点是否切换。如果执行此步骤时发现主节点未切换走,此时需要返回6步骤,再次执行
rg.getMaster()
注意:
主节点切换,只能够发起重新选举,而不能够指定主节点的方式。 它需要依照: 节点选举机制