热备节点是一种逻辑节点,存储在热备组中,用于替换故障的数据节点。热备节点在加入其他数据复制组前,不存储任何数据;在加入指定复制组后,将自动同步该复制组的所有数据。
一般来说,热备节点的处理流程如下:
同一集群内只可以存在一个热备组,且统一命名为“SYSSpare”。
> db.createSpareRG()
Note:
createSpareRG() 用于创建热备组,该操作不会创建任何数据节点。
热备组内节点间不进行心跳检测,因此该组内不存在主节点。
获取热备组
var spareRG = db.getRG("SYSSpare")
创建一个新的热备节点
var node1 = spareRG.createNode("sdbserver",11860,"/opt/sequoiadb/database/data/11860")
启动新增的热备节点
> node1.start()
在 SDB Shell 中查看热备组中节点的列表
db.getRG("SYSSpare").getDetailObj()
当复制组中的数据节点发生无法自动修复的故障(如磁盘损坏)时,建议使用热备节点替换该故障节点,保证复制组的可用性。
下述以数据复制组 group1 中 11820 节点故障为例,使用热备节点 11860 进行替换操作。
获取热备组
var spareRG = db.getRG("SYSSpare")
将热备节点从热备组中分离
spareRG.detachNode("sdbserver",11860,{KeepData:false})
Note:
将热备节点从热备组中分离可参考 detachNode()。
将分离后的 11860 节点加入复制组 group1 中
db.getRG("group1").attachNode("sdbserver",11860,{KeepData:false})
Note:
将已分离的节点加入其他复制组可参考 attachNode()。
通过节点健康快照检查 11860 节点的 CompleteLSN 字段值是否与同组的主节点一致,如果一致则表示数据同步完成
> db.snapshot(SDB_SNAP_HEALTH,{},{"NodeName":"","CompleteLSN":""})
将故障节点 11820 从复制组中剔除
> db.getRG("group1").detachNode("sdbserver",11820,{KeepData:false})