0

Mongoレプリカセットを再構成すると、replsetのバージョン番号がランダムに増加します。すべてが機能しますが、幾何学的に増加しているように見えるため、最終的に数がオーバーフローする可能性があるのではないかと心配しています。

私が行った場合:

conf = rs.conf()

そして、私が見ることを確認してくださいconf['version' ] = 1 それから私はします:

conf['members'][0]['priority'] = 2
rs.reconfig(conf, {force:1})

そしてそれは動作します、私のreplsetは再構成されました、しかし私がそうするとき:

conf = rs.conf()

conf['version']のようなものです24956。そして、もう一度やると、83584それから282961、などになります(必ずしも正確な数ではありませんが、パターンは同じで、ランダムに大きく増加し、多くの場合、2倍またはさらに悪くなります)。

これは、次のようにバージョン番号を指定した場合でも発生します。

conf['members'][0]['priority'] = 2
conf['version'] = conf['version'] + 1
rs.reconfig(conf, {force:1})

基盤となるMongoで何が起こっているのか、そして信頼できるバージョン番号の増分を取得する方法を知っている人はいますか?(私はUbuntuでMongo 2.0.2を実行しています)。

ところで、これは、Mongoシェルを介して実行するか、Pymongoconn.admin.command('replSetReconfig', config)を使用してPythonスクリプトで実行すると発生します。

4

1 に答える 1

2

大きなランダム増分は、フォースフラグの実装方法です。

https://github.com/mongodb/mongo/blob/master/src/mongo/db/repl/rs_config.cpp#L653

void ReplSetConfig::init(BSONObj cfg, bool force) {
    _constructed = false;
    clear();
    from(cfg);
    if( force ) {
        version += rand() % 100000 + 10000;
    }
    configAssert( version < 0 /*unspecified*/ || (version >= 1) );
    if( version < 1 )
        version = 1;
    _ok = true;
    _constructed = true;
}

レプリカセットは、常に最新バージョンの構成を使用します。すでに最高のバージョンを入手している場合は、強制は必要ありません。大きな飛躍は、セットの別のメンバーが更新されているバージョンよりも新しいバージョンを持っている場合でも、新しい構成が常に最高のバージョンであることを保証しようとしています。

于 2013-10-22T13:19:02.013 に答える