Для корректной работы системы требуется MongoDB версии 3.6 – 6.0. В статье описана установка MongoDB 6.0 для ОС Ubuntu Linux 22.04. Также вы можете ознакомиться с руководством в официальной документации MongoDB.
начало внимание
В рамках статьи используется имя базы elma365, пользователь elma365 и пароль SecretPassword.
При настройке задайте эти данные согласно политике безопасности, принятой в вашей организации.
конец внимание
Установка состоит из семи этапов:
- Подготовка нод (серверов).
- Установка MongoDB.
- Настройка MongoDB.
- Настройка подключения к MongoDB.
- Инициализация реплики.
- Безопасность MongoDB.
- Подключение к MongoDB.
Шаг 1: Подготовка нод (серверов)
Начало внимание
Минимальное количество серверов для организации кластера — три.
Конец внимание
- Создайте три ноды (сервера) с последовательно пронумерованными именами хостов:
- mongodb-server1.your_domain;
- mongodb-server2.your_domain;
- mongodb-server3.your_domain.
- Создайте необходимые сопоставления имён хостов в DNS. Если такой возможности нет, внесите нужные записи в
/etc/hosts
.
Шаг 2: Установка MongoDB
- Чтобы установить MongoDB на каждой ноде, добавьте официальный репозиторий:
sudo apt-get install gnupg
curl -fsSL https://pgp.mongodb.com/server-6.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg --dearmor
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt-get update
- Установите на каждой ноде MongoDB:
sudo apt install mongodb-org
- Запустите на каждой ноде MongoDB:
sudo systemctl enable --now mongod
Шаг 3: Настройка MongoDB
начало Внимание
Для пароля разрешается применять следующие символы:
- Заглавные латинские буквы: от A до Z;
- Строчные латинские буквы: от a до z;
- Цифры от 0 до 9;
- Символы: -_.
Зарезервированные (недопустимые) символы:
! * ' ( ) ; : @ & = + $ , / ? % # [ ]
конец Внимание
Следующие действия выполняются на узле mongodb-server1.your_domain:
- Зайдите в mongosh (Command Line Interface) и создайте базу данных:
mongosh
- Используйте базу ELMA365. Если база отсутствует, её необходимо создать:
use elma365
- Создайте отдельного пользователя elma365 для работы с БД с паролем SecretPassword. Имя пользователя и пароль приведены для примера:
db.createUser({user:'elma365', pwd:'SecretPassword', roles:[{role:"readWrite", db:"elma365"},{"role":"root", "db":"admin"}]})
- Убедитесь, что пользователь создан:
show users
- Создайте суперпользователя, чтобы включить аутентификацию:
use admin
db.createUser({user:'superuser', pwd:'SecretPassword', roles: ["root"]})
- Убедитесь, что пользователь создан:
show users
- Завершите настройку:
exit
Шаг 4: Настройка подключения к MongoDB
- Внесите изменения в файл конфигурации
/etc/mongod.conf
на каждой ноде:
sudo nano /etc/mongod.conf
- Настройте значения переменных:
- bindIp — список адресов, с которых можно принимать соединения по порту 27017 (в данном случае это делает доступным сервис MongoDB со всех внешних адресов);
- replSetName — название реплики, по умолчанию rs0.
. . .
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0
. . .
replication:
replSetName: "rs0"
enableMajorityReadConcern: true
. . .
Настройка включения TLS/SSL в MongoDB
Чтобы включить поддержку TLS/SSL в MongoDB, выполните следующие действия:
cat your_domain.key > mongodb.pem
cat fullchain_your_domain.pem >> mongodb.pem
net: Подробнее о настройке TLS/SSL в MongoDB читайте в официальной документации MongoDB. |
- Перезапустите MongoDB на каждой ноде, чтобы изменение вступило в силу:
sudo systemctl restart mongod
Шаг 5: Инициализация реплики
Следующие действия выполняются на узле mongodb-server1.your_domain:
- Откройте консоль mongosh для конфигурирования.
Для подключения к MongoDB выполните следующую команду:
sudo mongosh
Для подключения к MongoDB с включённым TLS/SSL:
sudo mongosh --tls --host mongodb-server1.your_domain --tlsCAFile /etc/ssl/CA.pem
- Инициализируйте реплику:
rs.initiate({ _id: "rs0", members: [{ _id: 0, host: "mongodb-server1.your_domain" },{ _id: 1, host: "mongodb-server2.your_domain" },{ _id: 2, host: "mongodb-server3.your_domain" }]})
- Проверьте конфигурацию:
rs.conf()
Шаг 6: Безопасность MongoDB
- Создайте и укажите права для файла с общим ключом аутентификации. Данный ключ будут использовать все члены Replica Set для коммуникации друг с другом:
openssl rand -base64 756 > /var/lib/mongodb/keyfile
chmod 400 /var/lib/mongodb/keyfile
chown mongodb:mongodb /var/lib/mongodb/keyfile
- Скопируйте ключевой файл на каждую реплику.
начало внимание
Содержимое ключевого файла на всех узлах должно быть одинаковым с сохранением прав доступа.
конец внимание
- Включите безопасный доступ к серверу MongoDB, если он находится в открытой зоне.
Для настройки необходимо отредактировать файл /etc/mongod.conf
на каждом из серверов. Строки должны выглядеть следующим образом:
. . .
setParameter:
enableLocalhostAuthBypass: false
security:
authorization: "enabled"
keyFile: /var/lib/mongodb/keyfile
. . .
- Перезапустите MongoDB на каждой ноде:
sudo systemctl restart mongod
- Откройте консоль mongosh, используя пользователя для доступа к MongoDB.
Для подключения к MongoDB выполните команду:
sudo mongosh -u superuser
Для подключения к MongoDB с включённым TLS/SSL:
sudo mongosh -u superuser --tls --host mongodb-server1.your_domain --tlsCAFile /etc/ssl/CA.pem
- Проверьте конфигурацию:
rs.conf()
Шаг 7: Подключение к MongoDB
Строка для подключения к MongoDB:
mongodb://elma365:SecretPassword@mongodb-server1.your_domain:27017,mongodb-server2.your_domain:27017,mongodb-server3.your_domain:27017/elma365?replicaSet=rs0&readPreference=nearest&maxStalenessSeconds=120
Строка для подключения к MongoDB c TLS/SSL:
Подготовка базы данных в MongoDB к восстановлению
Если вам потребовалось восстановить базу данных из резервной копии, сначала подготовьте БД к восстановлению. Подробнее об этом читайте в статье «MongoDB».