#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 не отправлялся.