• attachNode()
    • 语法
    • 参数描述
    • options选项
    • 返回值
    • 错误
    • 示例

    attachNode()

    语法

    rg.attachNode( <host>, <service>, <options> )

    将一个已经创建完成但不属于任何分区组的节点加入到当前分区组。可以搭配 rg.detachNode() 使用。目前可以支持加入到数据组或者编目组。

    参数描述

    参数名参数类型描述是否必填
    hoststring节点的主机名或者主机 IP。
    servicestring节点服务名或者端口。
    optionsJson 对象详见options选项说明。

    options选项

    参数名参数类型描述默认值
    KeepDatabool是否保留新加节点原有的数据。无默认值,需用户显式指定。

    Note:

    1. 参数 options 中的 KeepData 字段为必填项,需用户显式指定。由于该选项会决定新节点数据是否继续被保留,用户应该谨慎考虑。
    2. 如果新加的节点原本不属于当前组,建议用户将 KeepData 设置为 false。否则,一旦发生主备切换及全量同步,当前组原有节点的数据将有可能被新加节点的数据覆盖。
    3. 节点配置文件中角色(role)指定为编目(catalog)的节点只能加入编目组中;角色指定为数据(data)的节点只能加入到数据组中。

    返回值

    无返回值,出错抛异常,并输出错误信息。可以通过 getLastErrMsg 获取错误信息,或通过 getLastError 获取错误码。关于错误处理可以参考 常见错误处理指南 。

    错误

    错误信息记录在节点诊断日志(diaglog)中,可参考错误码。

    错误码可能的原因解决方法
    -15网络错误1. 检查 sdbcm 状态是否正常,如果状态异常,可以尝试重启; 2. 检查填写的 host 是否正确。
    -146节点不存在检查节点是否存在。
    -157节点已存在于其他复制组检查节点是否已加入到当前或其他复制组,如果已属于任何复制组将不支持该操作。注意:编目节点不能加入到数据组中,数据节点也不能加入到编目组中。

    示例

    将一个节点从 group1 中分离,加入到 group2 中,方法如下:

    attachNode 前的节点信息:

    1. > db.listReplicaGroups()
    2. {
    3. "Group": [
    4. {
    5. "HostName": "hostname1",
    6. "Status": 1,
    7. "dbpath": "/opt/sequoiadb/database/data/11830/",
    8. "Service": [
    9. {
    10. "Type": 0,
    11. "Name": "11830"
    12. },
    13. {
    14. "Type": 1,
    15. "Name": "11831"
    16. },
    17. {
    18. "Type": 2,
    19. "Name": "11832"
    20. }
    21. ],
    22. "NodeID": 1007
    23. }
    24. ......
    25. ],
    26. "GroupID": 1002,
    27. "GroupName": "group1",
    28. "PrimaryNode": 1002,
    29. "Role": 0,
    30. "Status": 1,
    31. "Version": 7,
    32. "_id": {
    33. "$oid": "580adfd531ae32109e38ca29"
    34. }
    35. }
    36. ......
    37. {
    38. "Group": [
    39. {
    40. "HostName": "hostname2",
    41. "Status": 1,
    42. "dbpath": "/opt/sequoiadb/database/data/11840/",
    43. "Service": [
    44. {
    45. "Type": 0,
    46. "Name": "11840"
    47. },
    48. {
    49. "Type": 1,
    50. "Name": "11841"
    51. },
    52. {
    53. "Type": 2,
    54. "Name": "11842"
    55. }
    56. ],
    57. "NodeID": 1000
    58. }
    59. ......
    60. ],
    61. "GroupID": 1000,
    62. "GroupName": "group2",
    63. "PrimaryNode": 1000,
    64. "Role": 0,
    65. "Status": 1,
    66. "Version": 7,
    67. "_id": {
    68. "$oid": "580adfd531ae32109e38ca27"
    69. }
    70. }

    将“hostname1:11830” 节点从 group1 分区组中分离:

    1. > db.getRG('group1').detachNode('hostname1', '11830', { KeepData: true } )

    将“hostname1:11830” 节点加入到 group2 分区组中,由于节点原本不属于 group2, 此处将其原本的数据清空:

    1. > db.getRG('group2').attachNode('hostname1', '11830', { KeepData: false } )

    查看 attachNode 后的节点信息,group1 分区组中已不存在“hostname1:11830” 节点,group2 分区组存在“hostname1:11830” 节点:

    1. > db.listReplicaGroups()
    2. {
    3. "HostName": "hostname3",
    4. "Status": 1,
    5. "dbpath": "/opt/sequoiadb/database/data/11830/",
    6. "Service": [
    7. {
    8. "Type": 0,
    9. "Name": "11830"
    10. },
    11. {
    12. "Type": 1,
    13. "Name": "11831"
    14. },
    15. {
    16. "Type": 2,
    17. "Name": "11832"
    18. }
    19. ],
    20. "NodeID": 1002
    21. }
    22. ],
    23. "GroupID": 1002,
    24. "GroupName": "group1",
    25. "PrimaryNode": 1002,
    26. "Role": 0,
    27. "Status": 1,
    28. "Version": 7,
    29. "_id": {
    30. "$oid": "580adfd531ae32109e38ca29"
    31. }
    32. }
    33. ......
    34. {
    35. "Group": [
    36. {
    37. "HostName": "hostname1",
    38. "Status": 1,
    39. "dbpath": "/opt/sequoiadb/database/data/11830/",
    40. "Service": [
    41. {
    42. "Type": 0,
    43. "Name": "11830"
    44. },
    45. {
    46. "Type": 1,
    47. "Name": "11831"
    48. },
    49. {
    50. "Type": 2,
    51. "Name": "11832"
    52. }
    53. ],
    54. "NodeID": 1010
    55. },
    56. {
    57. "HostName": "hostname2",
    58. "Status": 1,
    59. "dbpath": "/opt/sequoiadb/database/data/11840/",
    60. "Service": [
    61. {
    62. "Type": 0,
    63. "Name": "11840"
    64. },
    65. {
    66. "Type": 1,
    67. "Name": "11841"
    68. },
    69. {
    70. "Type": 2,
    71. "Name": "11842"
    72. }
    73. ],
    74. "NodeID": 1000
    75. },
    76. ......
    77. ],
    78. "GroupID": 1000,
    79. "GroupName": "group2",
    80. "PrimaryNode": 1000,
    81. "Role": 0,
    82. "Status": 1,
    83. "Version": 7,
    84. "_id": {
    85. "$oid": "580adfd531ae32109e38ca27"
    86. }
    87. }