Почему Mongoid не отправляет slaveOk в mongos в изолированной среде?

#mongodb #mongoid #sharding

#mongodb #mongoid #сегментирование

Вопрос:

Я могу запускать запросы из консоли ‘mongos’ и видеть, что чтения попадают в первичные. Я могу успешно выполнить rs.slaveOk(); , а затем запустить одни и те же запросы и увидеть, что чтения попадают во вторичные.

Проблема в том, что независимо от того, что я пытаюсь, я не могу получить запросы в Mongoid для доступа к вторичным. Похоже, что он не отправляет slaveOk . Я пробовал настроить read: :secondary в mongoid.yml, и я также пробовал read_secondary: true , но базовое соединение не является репликой, поэтому я думаю, что именно поэтому mongoid игнорирует его.

Есть ли какой-либо другой способ (кроме простого создания моего собственного пула соединений и настройки :slave_ok ), которым я могу заставить mongoid работать? Я пропускаю какую-то волшебную недокументированную настройку yml?

Ответ №1:

Поскольку Mongoid подключается к одному маршрутизатору mongos, просто добавьте следующую строку под записью имени хоста в mongoid.yml:

 slave_ok: true
  

Комментарии:

1. Наша настоящая проблема заключалась в том, что в mongoid yml мы указывали ‘host’ вместо ‘hosts’. Мы думали, что нам просто нужна спецификация ‘host’, поскольку мы общаемся с mongos только локально. Однако это приводит к тому, что соединение устанавливается как обычное соединение mongo, а не как соединение с набором реплик, и, следовательно, slaveOk не отправлялся.