ELMA365 On-Premises > Подготовка инфраструктуры > Базы данных > Отказоустойчивая инфраструктура / Кластер MongoDB

Кластер MongoDB

Для корректной работы системы требуется MongoDB версии 3.6 – 6.0. В статье описана установка MongoDB 6.0 для ОС Ubuntu Linux 22.04. Также вы можете ознакомиться с руководством в официальной документации MongoDB.

начало внимание

В рамках статьи используется имя базы elma365, пользователь elma365 и пароль SecretPassword.

При настройке задайте эти данные согласно политике безопасности, принятой в вашей организации.

конец внимание

Установка состоит из семи этапов:

  1. Подготовка нод (серверов).
  2. Установка MongoDB.
  3. Настройка MongoDB.
  4. Настройка подключения к MongoDB.
  5. Инициализация реплики.
  6. Безопасность MongoDB.
  7. Подключение к MongoDB.

Шаг 1: Подготовка нод (серверов)

Начало внимание

Минимальное количество серверов для организации кластера — три.

Конец внимание

  1. Создайте три ноды (сервера) с последовательно пронумерованными именами хостов:
  • mongodb-server1.your_domain;
  • mongodb-server2.your_domain;
  • mongodb-server3.your_domain.
  1. Создайте необходимые сопоставления имён хостов в DNS. Если такой возможности нет, внесите нужные записи в /etc/hosts.

Шаг 2: Установка MongoDB

  1. Чтобы установить 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

  1. Установите на каждой ноде MongoDB:

sudo apt install mongodb-org

  1. Запустите на каждой ноде MongoDB:

sudo systemctl enable --now mongod

Шаг 3: Настройка MongoDB

начало Внимание

Для пароля разрешается применять следующие символы:

  • Заглавные латинские буквы: от A до Z;
  • Строчные латинские буквы: от a до z;
  • Цифры от 0 до 9;
  • Символы:  -_.

Зарезервированные (недопустимые) символы:

! * ' ( ) ; : @ & = + $ , / ? % # [ ]

конец Внимание

Следующие действия выполняются на узле mongodb-server1.your_domain:

  1. Зайдите в mongosh (Command Line Interface) и создайте базу данных:

mongosh

  1. Используйте базу ELMA365. Если база отсутствует, её необходимо создать:

use elma365

  1. Создайте отдельного пользователя elma365 для работы с БД с паролем SecretPassword. Имя пользователя и пароль приведены для примера:

db.createUser({user:'elma365', pwd:'SecretPassword', roles:[{role:"readWrite", db:"elma365"},{"role":"root", "db":"admin"}]})

  1. Убедитесь, что пользователь создан:

show users

  1. Создайте суперпользователя, чтобы включить аутентификацию:

use admin
db.createUser({user:'superuser', pwd:'SecretPassword', roles: ["root"]})

  1. Убедитесь, что пользователь создан:

show users

  1. Завершите настройку:

exit

Шаг 4: Настройка подключения к MongoDB

  1. Внесите изменения в файл конфигурации /etc/mongod.conf на каждой ноде:

sudo nano /etc/mongod.conf

  1. Настройте значения переменных:
  • bindIp — список адресов, с которых можно принимать соединения по порту 27017 (в данном случае это делает доступным сервис MongoDB со всех внешних адресов);
  • replSetName — название реплики, по умолчанию rs0.

. . .
# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0
. . .
replication:
  replSetName: "rs0"
  enableMajorityReadConcern: true
. . .

Настройка включения TLS/SSL в MongoDB

  1. Перезапустите MongoDB на каждой ноде, чтобы изменение вступило в силу:

sudo systemctl restart mongod

Шаг 5: Инициализация реплики

Следующие действия выполняются на узле mongodb-server1.your_domain:

  1. Откройте консоль mongosh для конфигурирования.

Для подключения к MongoDB выполните следующую команду:

sudo mongosh

Для подключения к MongoDB с включённым TLS/SSL:

sudo mongosh --tls --host mongodb-server1.your_domain --tlsCAFile /etc/ssl/CA.pem

  1. Инициализируйте реплику:

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" }]})

  1. Проверьте конфигурацию:

rs.conf()

Шаг 6: Безопасность MongoDB

  1. Создайте и укажите права для файла с общим ключом аутентификации. Данный ключ будут использовать все члены Replica Set для коммуникации друг с другом:

openssl rand -base64 756 > /var/lib/mongodb/keyfile
chmod 400 /var/lib/mongodb/keyfile
chown mongodb:mongodb /var/lib/mongodb/keyfile

  1. Скопируйте ключевой файл на каждую реплику.

начало внимание

Содержимое ключевого файла на всех узлах должно быть одинаковым с сохранением прав доступа.

конец внимание

  1. Включите безопасный доступ к серверу MongoDB, если он находится в открытой зоне.

Для настройки необходимо отредактировать файл /etc/mongod.conf на каждом из серверов. Строки должны выглядеть следующим образом:

. . .
setParameter:
  enableLocalhostAuthBypass: false
security:
  authorization: "enabled"
  keyFile: /var/lib/mongodb/keyfile
. . .

  1. Перезапустите MongoDB на каждой ноде:

sudo systemctl restart mongod

  1. Откройте консоль 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

  1. Проверьте конфигурацию:

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://elma365:SecretPassword@mongodb-server1.your_domain:27017,mongodb-server2.your_domain:27017,mongodb-server3.your_domain:27017/elma365?ssl=true&replicaSet=rs0&readPreference=nearest&maxStalenessSeconds=120