Подтвердить что ты не робот

Как вы подключаетесь к репликации из оболочки MongoDB?

Если я пишу приложение, которое подключается к mongodb, то я могу предоставить список семян для репликации, и драйвер направит меня к мастеру node, где я могу запускать команды записи.

Как указать список семян для командной строки mongo, чтобы перейти к репликации.

4b9b3361

Ответ 1

Чтобы подключиться к первичному набору реплик, используйте параметр оболочки --host:

mongo --host replicaSetName/host1[:porthost1],host2[:porthost1],host3[:porthost3],etc

Например:

$ mongo --host rs1/john.local:27019,john.local:27018
MongoDB shell version: v3.4.9
connecting to: mongodb://john.local:27019,john.local:27018/?replicaSet=rs1
2017-10-12T14:13:03.094+0000 I NETWORK  [thread1] Starting new replica set monitor for rs1/john.local:27019,john.local:27018
2017-10-12T14:13:03.096+0000 I NETWORK  [thread1] Successfully connected to john.local:27019 (1 connections now open to john.local:27019 with a 5 second timeout)
2017-10-12T14:13:03.096+0000 I NETWORK  [thread1] Successfully connected to john.local:27018 (1 connections now open to john.local:27018 with a 5 second timeout)
rs1:PRIMARY> db
test
rs1:PRIMARY>

Примечание. В версиях с 3.4.2 по 3.4.10 была ошибка (SERVER-28072), из-за которой не удавалось указывать db после использования --host или --port.

Ответ 2

Ответы выше для Монго 3.2.

Согласно документации Mongo 3.4, оболочка была немного изменена:

В 3.2:
mongo --host host1,host2,host3/myRS myDB
или же,
mongo --host host1:27017,host2:27017,host3:27017/myRS myDB

В 3.4:
mongo "mongodb://host1,host2,host3/myDB?replicaSet=myRS"
или же,
mongo "mongodb://host1:27017,host2:27017,host3:27017/myDB?replicaSet=myRS"

Ответ 3

Вы можете использовать формат "name/seed1, seed2,...":

> conn = new Mongo("myReplicaSet/A:27017,B:27017,C:27017")
> db = conn.getDB("test")

Это должно дать вам подключение к тому, что node в настоящее время является основным, и справиться с откатом. Вы можете указать один или несколько семян, и он найдет остальное.

Обратите внимание, что (AFAIK) оболочка не позволяет вам маршрутизировать чтение на вторичные с установлением с репликой.

Ответ 4

Все, что вам нужно сделать, это использовать -host и предоставить ему один из ваших хостов в репликации, но с именем репликации в качестве префикса.

Например:

mongo --host my_mongo_server1

будет подключаться к my_mongo_server1, он может быть просто еще одним SECONDARY node.

Но:

mongo --host my_repl_set_name/my_mongo_server1

всегда будет подключаться к PRIMARY node в наборе реплик, даже если это не my_mongo_server1.

Почему? Ответ "Монитор набора реплик". В приведенном выше примере оболочка mongo подключится к указанному node, запустит новый монитор набора реплик для набора реплик и будет использовать указанный node только для его семени. Оттуда монитор определит все узлы в наборе реплик и переключит соединение с PRIMARY node.

Надеюсь, что это помогло.

Ответ 5

Насколько я знаю, клиент командной строки mongo не будет принимать семена, чтобы перенаправить вас на мастер node, потому что вы часто можете фактически использовать вторичный node, а не перенаправлять.

Однако, после подключения к любому node в RS, вы можете обнаружить топологию RS через rs.config() или db.isMaster(). Затем вы можете использовать эту информацию для повторного подключения к первичному node. В зависимости от вашей оболочки вы можете использовать mongo --eval "db.isMaster()['primary']" для автоматического подключения к ведущему устройству.

Ответ 6

В оболочке вы можете сначала использовать:

mongo --nodb

чтобы открыть сеанс mongo без подключения к mongo replicaset

Затем, как сказала Кристина, вы должны иметь возможность использовать

conn = new Mongo("myReplicaSet/A:27017,B:27017,C:27017")

для подключения к репликатору.

Или, в конце концов, поставьте

conn = new Mongo("myReplicaSet/A:27017,B:27017,C:27017")

в вашем файле js и

mongo --nodb yourcode.js

Ответ 7

Вы можете использовать параметр --host, чтобы указать имя и список семплирования, а затем mongo будет автоматически подключаться к текущему основному хосту.

Пример:
mongo --host rs0/1.example.com:27017,2.example.com:27017,3.example.com:27017 [dbname]

Ответ 8

Основываясь на ответе Криса Хейлда, эти две псевдонимы bash позволяют мне подключиться к мастеру с помощью одной команды (где db1.test.test является одним из членов набора реплик, acme - это имя базы данных, mreppy - это моя учетная запись и т.д.). Конечно, если db1 не работает, но он по-прежнему удобен.

alias whichprimary='mongo db1.test.test/acme --username mreppy --password testtest --quiet --eval "db.isMaster()['"'primary'"']"' 
alias connectprimary='mongo -u mreppy -p testtest `whichprimary`/acme'

Цитата в псевдониме eval сложна, я использовал Как избежать одиночных кавычек в одиночных кавычках? для справки: -)

Ответ 9

Я использую v3.4. Также новичок в материалах mongodb... Хотя справочная информация из "man mongo" предлагает использовать "-host replicaSet/host: port, host: port" url, это не работает для меня. Тем не менее, я могу подключиться к моей реплике в соответствии с официальным документом как показано ниже:

$ mongo "mongodb://c1m,c2m,c3m/?replicaSet=rs0"
MongoDB shell version v3.4.1
connecting to: mongodb://c1m,c2m,c3m/?replicaSet=rs0
2017-02-08T14:46:43.818+0800 I NETWORK  [main] Starting new replica set monitor for rs0/c1m:27017,c2m:27017,c3m:27017
MongoDB server version: 3.4.1
Server has startup warnings:
2017-02-08T13:31:14.672+0800 I CONTROL  [initandlisten]
2017-02-08T13:31:14.672+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-02-08T13:31:14.672+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2017-02-08T13:31:14.672+0800 I CONTROL  [initandlisten]
rs0:PRIMARY>

Итак, я думаю, что страница man моего монго устарела (я использую CentOS 7.3).

Ответ 10

mongodb://< dbuser >:< dbpassword >@example.com:< port >,example2.com:< port >/< dbname >?replicaSet=setname