web-dev-qa-db-ja.com

mongoレプリカセットへのノードの追加と削除

Mongoレプリカセットに追加する新しいバックアップサーバーがあります。私が知る限り、レプリカセットプライマリにログオンし、次のコマンドを追加するだけで簡単です。

rs.add( { Host: "mongobackup:10003", priority: 0, votes: 0, hidden: true } )

私の理解では、そうすることで、プライマリーはすべての構成とデータを新しいノードと同期するはずです。

さらに、レプリカセットから削除したい古いバックアップサーバーがあります。これは、次のコマンドをレプリカセットのプライマリに入力するだけです。

rs.remove( "oldmongobackup:10003" )

他に欠けているものはありますか?

rs2:PRIMARY> rs.conf()
{
    "_id" : "rs2",
    "version" : 26,
    "members" : [
        {
            "_id" : 7,
            "Host" : "mongo03:10001",
            "arbiterOnly" : false,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 20,
            "tags" : {
                "dc" : "maid"
            },
            "slaveDelay" : 0,
            "votes" : 1
        },
        {
            "_id" : 8,
            "Host" : "mongo01:10002",
            "arbiterOnly" : false,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 10,
            "tags" : {
                "dc" : "maid"
            },
            "slaveDelay" : 0,
            "votes" : 1
        },
        {
            "_id" : 9,
            "Host" : "mongo02:10003",
            "arbiterOnly" : true,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 1,
            "tags" : {

            },
            "slaveDelay" : 0,
            "votes" : 1
        },
        {
            "_id" : 10,
            "Host" : "oldmongobackup:10003",
            "arbiterOnly" : false,
            "buildIndexes" : true,
            "hidden" : true,
            "priority" : 0,
            "tags" : {

            },
            "slaveDelay" : 0,
            "votes" : 1
        }
    ],
    "settings" : {
        "chainingAllowed" : true,
        "heartbeatTimeoutSecs" : 10,
        "getLastErrorModes" : {

        },
        "getLastErrorDefaults" : {
            "w" : 1,
            "wtimeout" : 0
        }
    }
}
3
CrazyHorse019

コマンドは正常に実行されるはずです。なぜ ???

rs.add()rs.remove()はそれぞれ選挙をトリガーする必要があります。残りのノードの優先順位には一意の値があるため、次のようになります。

  • _id : 7 なので priority : 20
  • _id : 8 なので priority : 10
  • _id : 9 なので priority : 1

あなたは選挙が不正であると言うことができます。プライマリノードはプライマリのままである必要があります。

1
RolandoMySQLDBA