Я создаю резервную копию реплики MongoDB, но есть проблема. Каждый раз, когда запрос отправляется в базу данных, по-видимому, выбирается случайная реплика.Mongoid предпочитает читать реплику
MOPED: x.x.x.0:p COMMAND database=admin command={:ismaster=>1} runtime: 148.4439ms
MOPED: x.x.x.1:p COMMAND database=admin command={:ismaster=>1} runtime: 150.5547ms
MOPED: x.x.x.2:p COMMAND database=admin command={:ismaster=>1} runtime: 3.8707ms
MOPED: x.x.x.3:p COMMAND database=admin command={:ismaster=>1} runtime: 289.3072ms
Как вы можете видеть, что третья реплика является ближайшей, так что это будет пустая трата времени, чтобы читать из другого, но вот что происходит:
MOPED: x.x.x.3:p QUERY database=d collection=c selector={} flags=[:slave_ok] limit=-1 skip=0 batch_size=nil fields=nil runtime: 393.3878ms
Таким образом, вопрос, может Я указываю IP-адрес предпочтительного чтения или просто указываю MOPED для подключения к самому быстрому?
Файл mongoid.yml теперь указывается все 4 реплики:
hosts:
- x.x.x.0:p
- x.x.x.1:p
- x.x.x.2:p
- x.x.x.3:p
options:
read: :secondary
Одним из вариантов было бы просто вручную установить только мастер, и ближайший реплика:
hosts:
- x.x.x.0:p
- x.x.x.2:p
options:
read: :secondary
Но я не» t является хорошим решением, поскольку доступность будет страдать в случае сбоев.
Попробуйте установить предпочтение чтения в ближайший вместо вторичный. Вторичный выбирает случайным образом (ну, в значительной степени), в то время как ближайший будет выбирать в зависимости от времени тестирования ping. – wdberkeley