Для развертывания реплик MongoDB требуется операционная система Ubuntu 22.04 x64 LTS. |
Требуется наличие процессора с поддержкой инструкций AVX. |
Рекомендуемые системные требования сервера:
Перед началом работ по установке, необходимо определиться с требуемым количеством реплик БД.
Минимальное необходимое количество реплик БД — 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 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:
# 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: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting. #security: #operationProfiling: replication: replSetName: iotRepl #sharding: ## Enterprise-Only Options #auditLog: |
В целях безопасности настоятельно рекомендуется ограничить доступ к порту, указанному в параметре |
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' ] |