Назад | Перейти на главную страницу

Почему набор реплик MongoDB не синхронизирует внешние данные RBAC $ при обновлении с 3.0 до 3.2?

Мне интересно, видел ли кто-нибудь проблему при обновлении с 3.0.9 до 3.2.8, когда база данных $ external user не реплицируется?

У меня есть существующая среда набора реплик 3.0.9, работающая без зашифрованной связи (без TLS) и без аутентификации; окружающая среда работает нормально. Но когда я обновляюсь с использованием 3.2.8, в которой есть TLS и RBAC (с использованием $ external), ВТОРИЧНЫЕ члены в кластере, похоже, не получили данные пользователя $ external.

Если я выполняю первоначальную установку 3.2.8 с моей конфигурацией, она работает нормально, то есть приложения, которые подключаются к набору реплик и читают / записывают с первичного или просто читают с вторичного, могут подключаться и аутентифицироваться. Но если я попытаюсь сделать то же самое в обновленном кластере 3.0.9–3.2.8, подключение, проверка подлинности и чтение / запись из основного в порядке, но они могут подключиться, но не авторизоваться ни к одному из дополнительных.

Это известная ошибка? Я прочитал все документы по обновлению на mongodb, но не могу найти, где кто-то пытался это сделать.

Ошибка, которую я получаю, когда это не удается:

test7-mongodb-rs:SECONDARY> db.getSiblingDB("$external").auth( {   mechanism: "MONGODB-X509", user:       "CN=*******,OU=******,O=**********,L=***,ST=**,C=US@$external"
Error: 11 { ok: 0.0, errmsg: "Could not find user CN=*******,OU=******,O=**********,L=***,ST=**,C=US@$external", code: 11 }

0

Дополнительная информация, которая кажется интересной. Если я использую сертификат члена кластера вместо сертификата клиента, я могу подключиться и авторизоваться ко второстепенным серверам. Затем, когда я запускаю команду getUsers () в $ external DB, она выдает следующую ошибку:

test7-mongodb-rs:SECONDARY> 
db.getSiblingDB("$external").getUsers() 2016-08-17T16:49:56.188-0400 E QUERY Error: not master and slaveOk=false at Error (<anonymous>) at DB.getUsers (src/mongo/shell/db.js:1342:15) at (shell):1:30 at src/mongo/shell/db.js:1342

Я также собираюсь добавить, что как только я столкнусь с проблемой выше, если я остановлю участников кластера, а затем удалю каталог lib и перезапущу свою установку, все заработает. Итак, в данных 3.0.9 осталось что-то, что вызывает проблему. Может, я должен выполнить dropAllUsers () перед созданием новых для RBAC? То есть существуют ли данные по умолчанию или скрытые данные, которые создаются без аутентификации в 3.0.9, что предотвращает эту $ external репликацию при обновлении?

Обновите, я вижу, в чем проблема, но не понимаю, почему это проблема. База данных администратора на первичном сервере не реплицируется. Если я скопирую его на вторичные, аутентификация там сработает. Спросите теперь, почему не синхронизируется эта БД