“文档” 菜单
文档首页
/
MongoDB Manual
/ / /

rs.reconfigForPSASet()

在此页面上

  • 语法
  • 行为
  • 例子
rs.reconfigForPSASet( memberIndex, config, { options } )

版本 5.0 中的新增功能

在主-辅助-仲裁节点 (PSA) 副本集或正在转换为 PSA 架构的副本集上,安全地执行一些配置变更。仅在以下任一情况下,您才可以使用此方法:

  • 您想要将具有 PSA 架构的现有三成员副本集中的从节点重新配置为具有非零 priority的投票、数据承载节点。

  • 您要向包含一个投票、数据承载节点和一个仲裁节点的现有双节点副本集添加一个具有非零优先级的新投票、数据承载节点。

警告

如果您添加的从节点滞后,并且生成的副本集是 PSA 配置,则第一个配置更改将使用 "majority" 更改提交更改需要的节点数。在这种情况下,您的提交点将滞后,直到从节点赶上。

有关此方法行为的详细信息,请参阅行为。

rs.reconfigForPSASet() 方法使用的语法如下:

rs.reconfigForPSASet(
memberIndex: <num>,
config: <configuration>,
{
"force" : <boolean>,
"maxTimeMS" : <int>
}
)
参数
类型
说明
memberIndex
整型
正在添加或修改的从节点的索引。
config
文档
用于指定副本集新配置的文档
force
布尔

Optional

警告

不建议使用 force: true 运行rs.reconfigForPSASet() 方法,这会导致已提交的写入被回滚。

指定 true 会迫使可用副本集节点接受新配置。默认值为 false

强制重新配置可能导致意外或不希望发生的行为,包括回滚 "majority" 已提交的写入。

maxTimeMS
整型

Optional

指定在 rs.reconfigForPSASet() 操作期间处理每次重新配置的累积时间限制(以毫秒为单位)。默认情况下,rs.reconfigForPSASet() 会无限期等待副本配置传播到大多数副本集成员。

rs.reconfigForPSASet() 方法分两步重新配置副本集:

  1. 该方法重新配置您的副本集,以使用{ votes: 1, priority: 0 }添加或修改从节点。

  2. 一旦已添加或已修改的从节点赶上了所有已提交的写入操作,该方法就会将从节点重新配置为具有在 rs.reconfigForPSASet() 命令({ votes: 1, priority: <num> })中指定的 priority

两步方法避免了在故障转移到新从节点的情况下,在新从节点还没有先前配置中的所有已提交写入时,已提交写入回滚的可能性。

名为 rs0 的副本集配置如下:

{
"_id" : "rs0",
"version" : 1,
"term": 1,
"members" : [
{
"_id" : 0,
"host" : "mongodb0.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {},
"secondaryDelaySecs" : Long("0"),
"votes" : 1
},
{
"_id" : 2,
"host" : "mongodb1.example.net:27017",
"arbiterOnly" : true,
"buildIndexes" : true,
"hidden" : false,
"priority" : 0,
"tags" : {},
"secondaryDelaySecs" : Long("0"),
"votes" : 1
}
],
"protocolVersion" : Long("1"),
"writeConcernMajorityJournalDefault": true,
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : 2000,
"getLastErrorModes" : {},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("60e6f83923193faa336889d2")
}
}

以下操作序列会在副本集中添加新的从节点。这些操作是在连接到主节点时在 mongosh Shell 中发出的。

cfg = rs.conf();
cfg["members"] = [
{
"_id" : 0,
"host" : "mongodb0.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {},
"secondaryDelaySecs" : Long("0"),
"votes" : 1
},
{
"_id" : 1,
"host" : "mongodb1.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 2,
"tags" : {},
"secondaryDelaySecs" : Long("0"),
"votes" : 1
},
{
"_id" : 2,
"host" : "mongodb2.example.net:27017",
"arbiterOnly" : true,
"buildIndexes" : true,
"hidden" : false,
"priority" : 0,
"tags" : {},
"secondaryDelaySecs" : Long("0"),
"votes" : 1
}
]
rs.reconfigForPSASet(1, cfg);
  1. 第一个语句使用 rs.conf() 方法来检索包含副本集当前配置的文档,并将该文档存储在局部变量 cfg 中。

  2. 第二条语句将新的从节点添加到 members 数组中。在此配置中,新的从节点被添加到 memberIndex 1 处。memberIndex 与数组索引相同。有关其他设置,请参阅副本集配置设置

  3. 最后一条语句使用 memberIndex 1 和修改后的 cfg 调用 rs.reconfigForPSASet() 方法。memberIndex 是新节点在 members 数组中的数组位置。成功重新配置后,副本集配置如下所示:

    {
    "_id" : "rs0",
    "version" : 1,
    "term": 1,
    "members" : [
    {
    "_id" : 0,
    "host" : "mongodb0.example.net:27017",
    "arbiterOnly" : false,
    "buildIndexes" : true,
    "hidden" : false,
    "priority" : 1,
    "tags" : {},
    "secondaryDelaySecs" : Long("0"),
    "votes" : 1
    },
    {
    "_id" : 1,
    "host" : "mongodb1.example.net:27017",
    "arbiterOnly" : false,
    "buildIndexes" : true,
    "hidden" : false,
    "priority" : 2,
    "tags" : {},
    "secondaryDelaySecs" : Long("0"),
    "votes" : 1
    },
    {
    "_id" : 2,
    "host" : "mongodb2.example.net:27017",
    "arbiterOnly" : true,
    "buildIndexes" : true,
    "hidden" : false,
    "priority" : 0,
    "tags" : {},
    "secondaryDelaySecs" : Long("0"),
    "votes" : 1
    }
    ],
    "protocolVersion" : Long("1"),
    "writeConcernMajorityJournalDefault": true,
    "settings" : {
    "chainingAllowed" : true,
    "heartbeatIntervalMillis" : 2000,
    "heartbeatTimeoutSecs" : 10,
    "electionTimeoutMillis" : 10000,
    "catchUpTimeoutMillis" : 2000,
    "getLastErrorModes" : {},
    "getLastErrorDefaults" : {
    "w" : 1,
    "wtimeout" : 0
    },
    "replicaSetId" : ObjectId("60e6f83923193faa336889d2")
    }
    }

提示

另请参阅:

← rs.reconfig()

在此页面上