Системные требования
Для развертывания реплик MongoDB требуется операционная система Ubuntu 22.04 x64 LTS.
Требуется наличие процессора с поддержкой инструкций AVX.
Рекомендуемые системные требования сервера:
- число аппаратных серверов — 1;
- процессор — Intel, AMD (4+ процессорных ядер, для Intel – процессоры 11 поколения и выше, для AMD – процессоры поколения 5000 и выше);
- оперативная память — 4 ГБ;
- место на диске — 100 ГБ;
- производительность дискового массива (чтение/запись) — 2000 IOPS.
Подготовка к установке MongoDB
Перед началом работ по установке, необходимо определиться с требуемым количеством реплик БД.
Минимальное необходимое количество реплик БД — 3.
Максимальное количество реплик БД — 50.
Рекомендуется разворачивать нечетное количество реплик, так как четное количество не повышает отказоустойчивость по сравнению с меньшим на единицу нечетным количеством реплик.
Количество реплик БД следует выбирать с учетом таблицы ниже:
| Общее количество реплик | Кол-во реплик, которые можно потерять с сохранением работоспособности |
|---|---|
| 3 | 1 |
| 4 | 1 |
| 5 | 2 |
| 6 | 2 |
| 7 | 3 |
| 8 | 3 |
| 9 | 4 |
| 10 | 4 |
| 11 | 5 |
| 12 | 5 |
| 13 | 6 |
Пример схемы работы с 3 репликами:
Установка MongoDB
Примечание
Приведенные ниже команды предназначены для установки MongoDB 6.0 на ОС Ubuntu 22.04 (Jammy Jellyfish)
1.1. Установите MongoDB на все сервера, которые будут выполнять роль реплик БД, при помощи следующих команд:
sudo apt update sudo apt -y install gnupg curl curl -fsSL https://www.mongodb.org/static/pgp/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 update sudo apt-get install -y mongodb-org
1.2. Включите сервис MongoDB при помощи следующей команды:
sudo systemctl enable mongod
1.3. Отредактируйте файл конфигурации /etc/mongod.conf:
sudo nano /etc/mongod.conf
Базовая структура разделов net и replication в файле /etc/mongod.conf:
# mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # where to write logging data. systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log # Where and how to store data. storage: dbPath: /var/lib/mongo # how the process runs processManagement: timeZoneInfo: /usr/share/zoneinfo # network interfaces net: port: 27017 bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting. #security: #operationProfiling: #replication: #sharding: ## Enterprise-Only Options #auditLog:
Описание основных параметров реплики БД в файле mongod.conf:
| Параметр | Значение по умолчанию | Требуемое значение | Описание |
|---|---|---|---|
| net.port | 27017 | 27017 | Порт, по которому MongoDB будет принимать подключения к БД |
| net.bindIp | 127.0.0.1 | 0.0.0.0 | Список IP-адресов, которые MongoDB будет прослушивать для подключений к БД. |
| replication.replSetName | iotRepl | Название набора реплик, к которому будет принадлежать данная реплика БД. Необходимо, чтобы это значение было одинаковым на всех репликах БД. |
Пример итогового содержимого файла mongod.conf:
В целях безопасности настоятельно рекомендуется ограничить доступ к порту, указанному в параметре net.port (по умолчанию: 27017), со всех IP-адресов, кроме IP-адресов реплик БД и IP-адреса платформы умного дома ELIS.
1.4. Запустите сервис MongoDB при помощи следующей команды:
sudo systemctl start mongod
1.5. Проверьте состояние сервиса MongoDB:
sudo systemctl status mongod
Пример вывода команды:
● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2025-04-16 05:08:36 UTC; 21h ago
Docs: https://docs.mongodb.org/manual
Main PID: 1084 (mongod)
Memory: 2.7G
CPU: 7min 59.969s
CGroup: /system.slice/mongod.service
└─1084 /usr/bin/mongod --config /etc/mongod.conf
Apr 16 05:08:36 repl-test-db systemd[1]: Started MongoDB Database Server.
Apr 16 05:08:37 repl-test-db mongod[1084]: {"t":{"$date":"2025-04-16T05:08:37.003Z"},"s":"I", "c":"CONTROL", "id":7484500, "ctx":"-","msg":"Environment variable MONGODB_CONFIG_OVERRIDE_NOFORK == 1, overriding \"processManagement.fork\" to false"}
В выводе данной команды необходимо найти состояние сервиса в поле Active. Сервис должен иметь состояние active (running).
Настройка набора реплик
Примечание
Перед выполнением данного шага требуется, чтобы все реплики БД уже были развернуты.
2.1. Подключитесь к любой из реплик при помощи утилиты mongosh:
mongosh mongodb://[ip любой из реплик]:[port mongodb любой из реплик]
2.2. Инициируйте набор реплик следующей командой, подставив IP-адреса и порты MongoDB всех развернутых реплик БД:
rs.initiate(
{
_id: "iotRepl",
version: 1,
members: [
{ _id: 0, host : "[ip первой реплики]:[port MongoDB первой реплики]" },
{ _id: 1, host : "[ip второй реплики]:[port MongoDB второй реплики]" },
{ _id: 2, host : "[ip третьей реплики]:[port MongoDB третьей реплики]" }
]
}
)
2.3. При помощи команды rs.status().members.map(x => x.stateStr) проверьте, что все реплики перешли в корректные состояния (одна PRIMARY, а все остальные SECONDARY). Этот процесс может занять до нескольких минут.
iotRepl [direct: secondary] test> rs.status().members.map(x => x.stateStr) [ 'PRIMARY', 'SECONDARY', 'SECONDARY' ]