Использование pymongo для добавления нового члена в существующий набор реплик? - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь использовать pymongo для добавления нового члена в набор реплик.Когда я подключаюсь к оболочке mongodb, я делаю следующую команду:

rs.add( { host: "mongodb3.example.net:27017", priority: 0, votes: 0 } )

Я не могу найти подобную команду в pymongo.

Я могу получить текущий статус, используя эту команду:

client  = MongoClient(host)
client.admin.command("replSetGetStatus")

Но есть ли способ добавить нового участника?

1 Ответ

0 голосов
/ 19 февраля 2019

rs.add(), rs.reconfig() и аналогичные в оболочке mongo на самом деле являются помощниками оболочки, а не фактическими командами, выполняемыми mongod.

Вы можете проверить это, запустив rs.add (безскобки) в оболочке mongo.Вы увидите исходный код команды в консоли.

По сути, эти помощники в конечном итоге вызывают db.runCommand () или db.adminCommand () .Помощники заполняют необходимые поля для вызова runCommand().

Используя Python, вы можете эмулировать этих помощников, используя Database.command .

Например, здесь будет показано определение элемента набора реплик:

import pymongo

conn = pymongo.MongoClient()
conf = conn.admin.command({'replSetGetConfig': 1})
print(conf['config']['members'])

rs.add() - это в основном переконфигурация набора реплик путем изменения содержимого поля membersтак что вам нужно сделать что-то вроде:

import pymongo

conn = pymongo.MongoClient()
conf = conn.admin.command({'replSetGetConfig': 1})

conf['config']['members'].append({
    '_id': 3,
    'host': 'localhost:27020',
    'hidden': True,
    'priority': 0})
conf['config']['version'] += 1  # Bump the config version

res = conn.admin.command({'replSetReconfig': conf['config']})
print(res)
...