2015-02-05 2 views
0

Я создаю резервную копию реплики 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 является хорошим решением, поскольку доступность будет страдать в случае сбоев.

+0

Попробуйте установить предпочтение чтения в ближайший вместо вторичный. Вторичный выбирает случайным образом (ну, в значительной степени), в то время как ближайший будет выбирать в зависимости от времени тестирования ping. – wdberkeley

ответ