部署复制组
用户可以通过 sdb shell 或者其他驱动创建管理复制组,添加删除复制组节点,以及查看复制组状态。
创建复制组
推荐创建三个副本的复制组,三个副本提供足够的冗余,足以承受系统故障。副本集推荐奇数个成员,以确保选举的顺利进行。
复制组的节点可以以多种角色运行,其中数据节点包含用户数据,编目节点包含系统数据。编目复制组一般在集群部署时创建完成,本章以创建数据复制组为例。
Note:
创建节点的主机上需要先安装 SequoiaDB 巨杉数据库
- 连接协调节点
> var db = new Sdb( 'sdbserver1', 11810 )
- 创建数据复制组:group1
> var rg = db.createRG( "group1" )
- 创建三个复制组节点
> rg.createNode( "sdbserver1", 11820, "/opt/sequoiadb/database/data/11820" )
> rg.createNode( "sdbserver2", 11820, "/opt/sequoiadb/database/data/11820" )
> rg.createNode( "sdbserver3", 11820, "/opt/sequoiadb/database/data/11820" )
- 启动复制组
> rg.start()
创建 / 删除节点
在复制组运行过程中,用户可以添加或者删除节点。
- 连接数据复制组:group1
> var rg = db.getRG( "group1" )
- 创建新节点
> var node = rg.createNode( "sdbserver4", 11820, "/opt/sequoiadb/database/data/11820" )
- 启动节点
> node.start()
- 删除节点
> rg.removeNode( "sdbserver4", 11820 )
创建节点时,可以指定 weight 参数设置节点选举权重,权重高的节点将会优先成为复制组的主节点。
- 连接数据复制组:group1
> var rg = db.getRG( "group1" )
- 创建新节点时设置选举权重
> var node = rg.createNode( "sdbserver4", 11820, "/opt/sequoiadb/database/data/11820", { weight: 20 } )
分离 / 添加节点
当节点出现故障时,如出现磁盘损坏等情况,为避免影响复制组的正常运行,可以先将故障节点分离出复制组。
- 连接数据复制组:group1
> var rg = db.getRG( "group1" )
- 从复制组中分离 sdbserver3:11820 节点
> rg.detachNode( "sdbserver3", 11820 )
待节点恢复后,可将该节点重新添加回复制组。
- 连接数据复制组:group1
> var rg = db.getRG( "group1" )
- 把 sdbserver3:11820 节点加入到复制组
> rg.attachNode( "sdbserver3", 11820 )
查看复制组状态
- 连接数据复制组:group1
> var rg = db.getRG( "group1" )
- 查看该复制组主节点
> rg.getMaster()
sdbserver1:11820
- 查看该复制组信息
> rg.getDetail()
{
"Group": [
{
"HostName": "sdbserver1",
"Status": 1,
"dbpath": "/opt/sequoiadb/database/data/11820/",
"Service": [
{
"Type": 0,
"Name": "11820"
},
{
"Type": 1,
"Name": "11821"
},
{
"Type": 2,
"Name": "11822"
}
],
"NodeID": 1000
},
{
"HostName": "sdbserver2",
"Status": 1,
"dbpath": "/opt/sequoiadb/database/data/11820/",
"Service": [
{
"Type": 0,
"Name": "11820"
},
{
"Type": 1,
"Name": "11821"
},
{
"Type": 2,
"Name": "11822"
}
],
"NodeID": 1001
},
{
"HostName": "sdbserver3",
"Status": 1,
"dbpath": "/opt/sequoiadb/database/data/11820/",
"Service": [
{
"Type": 0,
"Name": "11820"
},
{
"Type": 1,
"Name": "11821"
},
{
"Type": 2,
"Name": "11822"
}
],
"NodeID": 1002
}
],
"GroupID": 1000,
"GroupName": "group1",
"PrimaryNode": 1000,
"Role": 0,
"SecretID": 1843393377,
"Status": 1,
"Version": 7,
"_id": {
"$oid": "580043577e70618777a2cf39"
}
}