0

ec2 にデッド ノードがあります。pymongo を使用して、rep セットから死んだセカンダリを削除するにはどうすればよいですか?

{u'date': datetime.datetime(2012, 11, 16, 11, 53, 53),
 u'members': [{u'_id': 0,
               u'health': 1.0,
               u'name': u'xxxxxxxxx:27017',
               u'optime': Timestamp(1352810702, 1),
               u'optimeDate': datetime.datetime(2012, 11, 13, 12, 45, 2),
               u'self': True,
               u'state': 1,
               u'stateStr': u'PRIMARY',
               u'uptime': 507560},
              {u'_id': 1,
               u'health': 1.0,
               u'lastHeartbeat': datetime.datetime(2012, 11, 16, 11, 53, 51),
               u'name': u'ffffffffff:27017',
               u'optime': Timestamp(1352810702, 1),
               u'optimeDate': datetime.datetime(2012, 11, 13, 12, 45, 2),
               u'pingMs': 1,
               u'state': 2,
               u'stateStr': u'SECONDARY',
               u'uptime': 163187},
              {u'_id': 2,
               u'errmsg': u'socket exception [CONNECT_ERROR] for jjjjjjjj:27017',
               u'health': 0.0,
               u'lastHeartbeat': datetime.datetime(2012, 11, 16, 11, 53, 14),
               u'name': u'jjjjjjjjjj:27017',
               u'optime': Timestamp(1352810702, 1),
               u'optimeDate': datetime.datetime(2012, 11, 13, 12, 45, 2),
               u'pingMs': 0,
               u'state': 8,
               u'stateStr': u'(not reachable/healthy)',
               u'uptime': 0}],
 u'myState': 1,
 u'ok': 1.0,
 u'set': u'heythat'}
4

1 に答える 1

0

local.system.replsetコレクションからレプリカ セットの構成を取得できます。

>>> from pymongo import Connection
>>> c = Connection()
>>> conf = c['local']['system.replset'].find_one()

rs.reconfig ラッパーの動作を mongo シェルで確認すると、バージョンも増加し、特別なreplSetReconfigコマンドが実行されることがわかります。

default:PRIMARY> rs.reconfig
function (cfg, options) {
    cfg.version = rs.conf().version + 1;
    cmd = {replSetReconfig:cfg};
    for (var i in options) {
        cmd[i] = options[i];
    }
    return this._runCmd(cmd);
}

Python から同じことを行うだけです。ドキュメントを変更しconf['members'](デッド ノードを削除するなど)、バージョンを更新します (1 を追加)。次に、更新されたディクショナリをパラメーターとして使用replSetReconfigして、管理データベースに対してコマンドを実行します。conf

>>> # change conf['members'] accordingly
>>> conf['version'] += 1
>>> c['admin'].command({'replSetReconfig':conf})
于 2012-11-19T03:32:06.760 に答える