ELMA365 On-premises > ELMA365 Enterprise > Высокодоступный кластер ELMA365 / Установка MongoDB

Установка MongoDB

Несколько серверов прозрачно объединяются в отказоустойчивый кластер перераспределяя и дублируя данные между собой. Более подробно смотрите в официальной документации: https://docs.mongodb.com/v3.6/replication/. Инструкция по установке и настройке mongodb на официальном сайте: https://docs.mongodb.com/v3.6/tutorial/install-mongodb-on-ubuntu/.

Исходные данные

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

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

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

В этом примере используется 3 узла со следующими hostname и IP-адресами:

  • mongo-server-1, 192.168.1.11
  • mongo-server-2, 192.168.1.12
  • mongo-server-3, 192.168.1.13

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

  1. Импортируйте необходимые ключи:

sudo wget -qO - https://www.mongodb.org/static/pgp/server-3.6.asc | sudo apt-key add -

  1. Добавьте репозитории MongoDB:

sudo echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list

  1. Обновите кэш пакетов:

sudo apt-get update -y

  1. Установите mongodb и его зависимости:

sudo apt-get install mongodb-org -y

  1. Запустите mongodb:

sudo systemctl enable --now mongod

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

Следующие действия выполняются на первичном узле:

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

sudo mongo

  1. Создайте отдельную базу для системы:

use elma365

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

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

Настройка конфигурационного файла MongoDB /etc/mongod.conf на всех узлах:

sudo nano /etc/mongod.conf

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

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

  1. Перезапустите mongodb:

sudo systemctl restart mongod

Следующие действия выполняются на первичном узле:

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

sudo mongo

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

rs.initiate(
  {
    _id: "rs0",
    members: [
      { _id: 0, host: "mongo-server1.your_domain" },
      { _id: 1, host: "mongo-server2.your_domain" },
      { _id: 2, host: "mongo-server3.your_domain" }
    ]
})

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

rs.conf()

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

  1. Включите безопасный доступ к серверу MongoDB, если он находится в открытой зоне.
  2. Создайте и укажите права для файла с общим ключом аутентификации, данный ключ будут использовать все члены 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. Для настройки необходимо отредактировать файл /etc/mongod.conf на каждом из серверов. Строки должны выглядеть следующим образом:

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

  1. Перезапустите mongodb:

sudo systemctl restart mongod

  1. Откройте консоль mongo используя пользователя для доступа к MongoDB:

mongo -u superuser

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

rs.conf()

Шаг 4: Подключение к ELMA365

Строка для подключения к кластеру Mongodb:

mongodb://elma365:SecretPassword@mongo-server1.your_domain:27017,mongo-server2.your_domain:27017,mongo-server3.your_domain:27017/elma365?replicaSet=rs0&readPreference=secondary&maxStalenessSeconds=120

Нашли опечатку? Выделите текст, нажмите ctrl + enter и оповестите нас