Size: a a a

2020 May 20

AT

Alex T in MongoDB Russian
Olexandr Lytvyn
Это прод, у меня есть ощущение что как только я создам admin юзера, включиться авторизация по пользователям, и пока я не создам и не дам всем права на свои базы будет downtime
да
источник

OL

Olexandr Lytvyn in MongoDB Russian
Alex T
ну тогда будет у тебя даунтайм, когда накатишь права и проапдейтишь апп
Спасибо
источник

y

yopp in MongoDB Russian
Olexandr Lytvyn
Это прод, у меня есть ощущение что как только я создам admin юзера, включиться авторизация по пользователям, и пока я не создам и не дам всем права на свои базы будет downtime
Вы не можете включить аутентификацию без перезапуска сервера.


https://docs.mongodb.com/manual/tutorial/enable-authentication/#procedure
источник

OL

Olexandr Lytvyn in MongoDB Russian
yopp
Вы не можете включить аутентификацию без перезапуска сервера.


https://docs.mongodb.com/manual/tutorial/enable-authentication/#procedure
Хотел бы посоветоваться.

Почитал документацию, вижу что для того чтобы включить  "Access Control" нужно сначала включить " internal authentication" между участниками ReplicaSet.

Увидел статью (https://docs.mongodb.com/manual/tutorial/enforce-keyfile-access-control-in-existing-replica-set-without-downtime/) :  там упоминается про "--transitionToAuth" режим, когда "A mongod running with --transitionToAuth accepts both authenticated and non-authenticated connections. Clients connected to the mongod during this transition state can perform read, write, and administrative operations on any database".

Я правильно понимаю что для уже работающего ReplicaSet это самый оптимальный вариант? Условно поменять строку конфига mongodb.conf на каждом учаснике ReplicaSet, по очереди сделать перезагрузку сервиса и "в путь"?

Где бы вы посоветовали (в каком каталоге) хранить "keyfile" на участниках ReplicaSet ?
источник

y

yopp in MongoDB Russian
Olexandr Lytvyn
Хотел бы посоветоваться.

Почитал документацию, вижу что для того чтобы включить  "Access Control" нужно сначала включить " internal authentication" между участниками ReplicaSet.

Увидел статью (https://docs.mongodb.com/manual/tutorial/enforce-keyfile-access-control-in-existing-replica-set-without-downtime/) :  там упоминается про "--transitionToAuth" режим, когда "A mongod running with --transitionToAuth accepts both authenticated and non-authenticated connections. Clients connected to the mongod during this transition state can perform read, write, and administrative operations on any database".

Я правильно понимаю что для уже работающего ReplicaSet это самый оптимальный вариант? Условно поменять строку конфига mongodb.conf на каждом учаснике ReplicaSet, по очереди сделать перезагрузку сервиса и "в путь"?

Где бы вы посоветовали (в каком каталоге) хранить "keyfile" на участниках ReplicaSet ?
Да, включение аутентификации потребует включения внутренний аутентификации.

—transitionToAuth, как и указано, позвляет использовать оба режима одновременно, пока весь кластер и все приложения не включат аутентификацию.

Да, для реплики это самый подходящий механизм. Но учтите, если у вас не 4.2 и не retryWrites=true, то у вас всё равно будет отказ в обслуживании клиентов. В случае с 4.2, монга принудительно завершит все write операции, но не будет закрывать соединения с клиентами и прерывать операции чтения. В случае с retryWrites=true, 4.2-compatible драйвера автоматически попробуют однократно повторить операцию записи, после того как смогут подключится к новому primary

see https://docs.mongodb.com/manual/reference/command/replSetStepDown
see https://docs.mongodb.com/manual/core/retryable-writes/
источник

OL

Olexandr Lytvyn in MongoDB Russian
yopp
Да, включение аутентификации потребует включения внутренний аутентификации.

—transitionToAuth, как и указано, позвляет использовать оба режима одновременно, пока весь кластер и все приложения не включат аутентификацию.

Да, для реплики это самый подходящий механизм. Но учтите, если у вас не 4.2 и не retryWrites=true, то у вас всё равно будет отказ в обслуживании клиентов. В случае с 4.2, монга принудительно завершит все write операции, но не будет закрывать соединения с клиентами и прерывать операции чтения. В случае с retryWrites=true, 4.2-compatible драйвера автоматически попробуют однократно повторить операцию записи, после того как смогут подключится к новому primary

see https://docs.mongodb.com/manual/reference/command/replSetStepDown
see https://docs.mongodb.com/manual/core/retryable-writes/
Ух, вот тут я немного запутался.

Версия MongoDB 4.2. Я примерно вижу последовательность так:

На Secondary добавляю в конфиг " — transitionToAuth", перезапускаю службу, дожидаюсь когда сервер перейдет в статус Secondary снова.
Повторяю для всех Secondary.

Захожу на Primary, делаю StepDown. Один из Secondary стает Primary. В конфиг файле сервера (на котором мы сделали StepDown) добавляю " — transitionToAuth", и перезапускаю сервис.

Сервер с найбольшим приоритетом стает Primary.

На этом этапе все 3 сервера запущены с опцией " — transitionToAuth", у клиентов все ок, они могут делать Write + Read к БД.

Далее генерирую KeyFile, редактиую сначала на Secondary  (по аналогии выше) конфиг (добавляю  строку ниже) а потом и на Primary.

security:
 keyFile: <path-to-keyfile>

В конечном итоге все 3 сервера будут иметь конфиг (как ниже), и будет включена Internal Authentication:

security:
 keyFile: <path-to-keyfile>
 transitionToAuth: true


Далее создаю пользователей и добавлю права на БД, редактирую Connection String в приложениях.

В итоге у нас включен "Access Control".

Единственное что я не понял -  это фразу " В случае с 4.2, монга принудительно завершит все write операции, но не будет закрывать соединения с клиентами и прерывать операции чтения. "

В какой момент операции write снова будут доступны/выполняться?
источник

OL

Olexandr Lytvyn in MongoDB Russian
Прошу прощение за полотно текста 😊

Перечитал стать еще раз, https://docs.mongodb.com/manual/tutorial/enforce-keyfile-access-control-in-existing-replica-set-without-downtime/

Там создают админа, пользователей, дают права, и только в самом конце (шаг 7) включают "--transitionToAuth". Я думал что как только я создам админа, то сразу включиться Access Control, и клиентов без пароля будет "Reject" (отбрасывать). И чтобы этого не случилось нужно сначала включить "--transitionToAuth"... Но в самой статье --transitionToAuth  включают после создания пользователей, назначения прав, и изменения Connection String в приложениях.
источник

AT

Artem Tafintsev in MongoDB Russian
Добрый всем вечер, подскажите неопытному ) у монгуса populate только на другие коллекции ссылается? Как можно заполнить поле документами из этой же коллекции?
источник

N

Nick in MongoDB Russian
Artem Tafintsev
Добрый всем вечер, подскажите неопытному ) у монгуса populate только на другие коллекции ссылается? Как можно заполнить поле документами из этой же коллекции?
указываете эту же модель в схеме в описании или какаято ошибка появляется?
источник

AT

Artem Tafintsev in MongoDB Russian
нет, прочитал доку, там написанно что связывает разные коллекции, вот решил уточнить у знающих
источник

AT

Artem Tafintsev in MongoDB Russian
аа самое главное - праваильно ли это?
источник

N

Nick in MongoDB Russian
на самом деле не пробовал, сказал как предположение)
источник

N

Nick in MongoDB Russian
правильно или нет - это зависит от задачи, если у вас друзья  хранятся у самого пользователя, то без этого никак
источник

AT

Artem Tafintsev in MongoDB Russian
да, типа того )
источник

AT

Artem Tafintsev in MongoDB Russian
коллекция людей, и поле с айдишниками друзей, их надо заполнить доками из этой же коллекции
источник

N

Nick in MongoDB Russian
источник

N

Nick in MongoDB Russian
тут вроде вроде работает, надо пробовать
источник

AT

Artem Tafintsev in MongoDB Russian
ага, спасибо, значит норм идея )
источник

y

yopp in MongoDB Russian
Olexandr Lytvyn
Прошу прощение за полотно текста 😊

Перечитал стать еще раз, https://docs.mongodb.com/manual/tutorial/enforce-keyfile-access-control-in-existing-replica-set-without-downtime/

Там создают админа, пользователей, дают права, и только в самом конце (шаг 7) включают "--transitionToAuth". Я думал что как только я создам админа, то сразу включиться Access Control, и клиентов без пароля будет "Reject" (отбрасывать). И чтобы этого не случилось нужно сначала включить "--transitionToAuth"... Но в самой статье --transitionToAuth  включают после создания пользователей, назначения прав, и изменения Connection String в приложениях.
1) создаёте пользователей и настраиваете ACL
2) перезапускаете все ноды в кластере с transitToAuth и keyfile
3) обновляете ваши приложения, так чтоб они использовали аутентификацию
4) перезапускаете все ноды в калсетер transitToAuth
источник

OL

Olexandr Lytvyn in MongoDB Russian
yopp
1) создаёте пользователей и настраиваете ACL
2) перезапускаете все ноды в кластере с transitToAuth и keyfile
3) обновляете ваши приложения, так чтоб они использовали аутентификацию
4) перезапускаете все ноды в калсетер transitToAuth
Спасибо
источник