部署复制组

用户可以通过 sdb shell 或者其他驱动创建管理复制组,添加删除复制组节点,以及查看复制组状态。

创建复制组

推荐创建三个副本的复制组,三个副本提供足够的冗余,足以承受系统故障。副本集推荐奇数个成员,以确保选举的顺利进行。

复制组的节点可以以多种角色运行,其中数据节点包含用户数据,编目节点包含系统数据。编目复制组一般在集群部署时创建完成,本章以创建数据复制组为例。

Note:

创建节点的主机上需要先安装 SequoiaDB 巨杉数据库

  • 连接协调节点
  1. > var db = new Sdb( 'sdbserver1', 11810 )
  • 创建数据复制组:group1
  1. > var rg = db.createRG( "group1" )
  • 创建三个复制组节点
  1. > rg.createNode( "sdbserver1", 11820, "/opt/sequoiadb/database/data/11820" )
  2. > rg.createNode( "sdbserver2", 11820, "/opt/sequoiadb/database/data/11820" )
  3. > rg.createNode( "sdbserver3", 11820, "/opt/sequoiadb/database/data/11820" )
  • 启动复制组
  1. > rg.start()

创建 / 删除节点

在复制组运行过程中,用户可以添加或者删除节点。

  • 连接数据复制组:group1
  1. > var rg = db.getRG( "group1" )
  • 创建新节点
  1. > var node = rg.createNode( "sdbserver4", 11820, "/opt/sequoiadb/database/data/11820" )
  • 启动节点
  1. > node.start()
  • 删除节点
  1. > rg.removeNode( "sdbserver4", 11820 )

创建节点时,可以指定 weight 参数设置节点选举权重,权重高的节点将会优先成为复制组的主节点。

  • 连接数据复制组:group1
  1. > var rg = db.getRG( "group1" )
  • 创建新节点时设置选举权重
  1. > var node = rg.createNode( "sdbserver4", 11820, "/opt/sequoiadb/database/data/11820", { weight: 20 } )

分离 / 添加节点

当节点出现故障时,如出现磁盘损坏等情况,为避免影响复制组的正常运行,可以先将故障节点分离出复制组。

  • 连接数据复制组:group1
  1. > var rg = db.getRG( "group1" )
  • 从复制组中分离 sdbserver3:11820 节点
  1. > rg.detachNode( "sdbserver3", 11820 )

待节点恢复后,可将该节点重新添加回复制组。

  • 连接数据复制组:group1
  1. > var rg = db.getRG( "group1" )
  • 把 sdbserver3:11820 节点加入到复制组
  1. > rg.attachNode( "sdbserver3", 11820 )

查看复制组状态

  • 连接数据复制组:group1
  1. > var rg = db.getRG( "group1" )
  • 查看该复制组主节点
  1. > rg.getMaster()
  2. sdbserver1:11820
  • 查看该复制组信息
  1. > rg.getDetail()
  2. {
  3. "Group": [
  4. {
  5. "HostName": "sdbserver1",
  6. "Status": 1,
  7. "dbpath": "/opt/sequoiadb/database/data/11820/",
  8. "Service": [
  9. {
  10. "Type": 0,
  11. "Name": "11820"
  12. },
  13. {
  14. "Type": 1,
  15. "Name": "11821"
  16. },
  17. {
  18. "Type": 2,
  19. "Name": "11822"
  20. }
  21. ],
  22. "NodeID": 1000
  23. },
  24. {
  25. "HostName": "sdbserver2",
  26. "Status": 1,
  27. "dbpath": "/opt/sequoiadb/database/data/11820/",
  28. "Service": [
  29. {
  30. "Type": 0,
  31. "Name": "11820"
  32. },
  33. {
  34. "Type": 1,
  35. "Name": "11821"
  36. },
  37. {
  38. "Type": 2,
  39. "Name": "11822"
  40. }
  41. ],
  42. "NodeID": 1001
  43. },
  44. {
  45. "HostName": "sdbserver3",
  46. "Status": 1,
  47. "dbpath": "/opt/sequoiadb/database/data/11820/",
  48. "Service": [
  49. {
  50. "Type": 0,
  51. "Name": "11820"
  52. },
  53. {
  54. "Type": 1,
  55. "Name": "11821"
  56. },
  57. {
  58. "Type": 2,
  59. "Name": "11822"
  60. }
  61. ],
  62. "NodeID": 1002
  63. }
  64. ],
  65. "GroupID": 1000,
  66. "GroupName": "group1",
  67. "PrimaryNode": 1000,
  68. "Role": 0,
  69. "SecretID": 1843393377,
  70. "Status": 1,
  71. "Version": 7,
  72. "_id": {
  73. "$oid": "580043577e70618777a2cf39"
  74. }
  75. }