Сегодня я столкнулся с этой очень раздражающей проблемой.
По сути, я настроил базу данных MongoDB с помощью предложения GCP Marketplace. Он настраивает первичный узел, вторичный узел и арбитр. Что очень круто. Чего он не делает, так это безопасности. Вообще. Так что вполне естественно, что мне пришлось настраивать ее самому. Ну, теперь, спустя 20 часов и получив несколько хороших ударов по лицу, я все еще пытаюсь заставить ее работать.
По сути, вот моя частичная конфигурация:
security:
authorization: enabled
keyFile: '/etc/mongodKey'
Если я закомментирую keyFile
экземпляр, он запустится. Но он не сможет подключиться ни к одному другому узлу, так как включена безопасность. И нет, я не могу его отключить, вы что, с ума сошли?
Но вот насчет keyFile... Насколько я понимаю, mongod
его нельзя открыть, поэтому он не запускается. Полагаю, /etc
это не лучшее место для его размещения? Я пробовал другие папки, но безрезультатно. Ничего не работает.
И мне нужна эта мера безопасности, поскольку к базе данных должны подключаться мои коллеги с помощью Robo 3T. Поэтому об удалении внешнего IP-адреса не может быть и речи.
Что я делаю не так? Помогите, пожалуйста, а то я вырываю себе волосы.
Это вывод sudo service mongod status
:
● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Wed 2019-08-21 15:28:08 UTC; 4min 29s ago
Docs: https://docs.mongodb.org/manual
Process: 1024 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=1/FAILURE)
Main PID: 1024 (code=exited, status=1/FAILURE)
Aug 21 15:28:08 m-vm-0 systemd[1]: Started MongoDB Database Server.
Aug 21 15:28:08 m-vm-0 systemd[1]: mongod.service: Main process exited, code=exited, status=1/F
Aug 21 15:28:08 m-vm-0 systemd[1]: mongod.service: Unit entered failed state.
Aug 21 15:28:08 m-0 systemd[1]: mongod.service: Failed with result 'exit-code'.
Редактировать:
Я проверил mongod.log
. Да, это проблема с разрешением. И я не могу ее решить.
Я пробовал, sudo chmod 400 /etc/mongodKey
но ничего не получается. Пожалуйста, кто-нибудь, куда мне положить файл ключа, чтобы он был доступен для чтения mongodb? Это очень важно!
решение1
Если вы используете развертывание GCP MongoDB marketplace под названием «MongoDB», которое позволяет вам настраивать репликацию, учтите следующее:
Они не настраивают безопасность в первоначальной конфигурации, поэтому есть 2 варианта:
- Отключить внешний IP
- Включить авторизацию в
mongod.conf
Если вы выберете первое решение, вы не сможете легко подключиться к базе данных из других внешних источников.
Если вы выберете второе решение, вам нужно будет сделать следующее:
Сгенерируйте ключ, весь процесс можно найти здесь:https://docs.mongodb.com/manual/tutorial/enforce-keyfile-access-control-in-existing-replica-set/
Скопируйте содержимое файла
- Подключитесь по SSH ко всем экземплярам Compute Engine
- Выберите каталог
sudo touch <path to key>
sudo nano <path to key>
- Вставьте сгенерированный вами ключ на свой компьютер и сохраните.
sudo chmod 600 <path to key>
sudo chown mongodb: <path to key>
- Обновите свой
mongod.conf
, который находится под/etc/mongod.conf
- Раскомментировать
security
,authorization
,keyFile
- Укажите путь
keyFile
к вашему ключевому файлу. - Остановите все экземпляры и запустите их снова.
Теперь MongoDB имеет доступ к ключевому файлу.
Какой кошмар. И chmod 400 <path to key>
не работало у меня так, как указано в документации. Пришлось установить chmod 600 <path to key>
.