Только для посетителей нашего блога: получите дополнительные 3 месяца бесплатно + скидку 10% на трехгодичный план YSBLOG10
Захватить сделку

Как настроить MongoDB на сервере Linux — простое руководство

Настройка MongoDB на сервере LinuxДобавьте официальный репозиторий MongoDB в свой дистрибутив, установите пакет mongodb-org, запустите и включите службу mongod, защитите её с помощью аутентификации, настройте bindIp и правила брандмауэра, а также проверьте соединения с помощью mongosh. Приведённые ниже шаги охватывают Ubuntu/Debian и RHEL/AlmaLinux/Rocky/Amazon Linux с настройками, готовыми к использованию в производственной среде.

В этом руководстве вы узнаете, как настроить MongoDB на сервере Linux с нуля — включая установку, конфигурацию, безопасность, оптимизацию производительности, резервное копирование и устранение неполадок. Я поделюсь практическими, проверенными на практике советами, основанными на более чем 12-летнем опыте поддержки баз данных на VPS, облачных и физических серверах, чтобы новички могли уверенно следовать инструкциям.

Что вы узнаете

  • Установка MongoDB используя официальный репозиторий в дистрибутивах Ubuntu/Debian и RHEL.
  • Запустите, включите и проверьте службу mongod.
  • Настройка bindIp, портов, TLS/SSLи аутентификация
  • Обеспечить брандмауэр сервера (UFW/firewalld) и обработка SELinux
  • Применяйте лучшие производственные практики (THP, ulimits, файловая система).
  • Создайте резервную копию и восстановите данные с помощью mongodump/mongorestore.
  • Мониторинг производительности и Исправление распространенных ошибок

Предпосылки и планирование

  • Linux: Ubuntu 22.04 LTS (Jammy), Ubuntu 20.04 (Focal), Debian 11 (Bullseye), RHEL 8/9, AlmaLinux/Rocky 8/9 или Amazon Linux 2
  • Доступ root или sudo
  • 2+ CPU ядра, 4–8 ГБ RAM Минимальные требования для небольших объемов работы (более высокие для производственных задач)
  • Диск: рекомендуется SSD; для WiredTiger предпочтительнее файловая система XFS.
  • Открытые порты: 27017/TCP (MongoDB), доступ только по доверенным IP-адресам.
  • Синхронизация времени (systemd-timesyncd или chrony)

Примечание: MongoDB поддерживает определенные версии дистрибутивов в зависимости от версии. Если ваша ОС отличается, обратитесь к официальной документации. В этом руководстве показаны часто используемые и поддерживаемые комбинации.

Краткое руководство по быстрой установке от дистрибутива

Пример использования MongoDB 8.0 в Ubuntu 22.04 (Jammy).

sudo apt-get update
sudo apt-get install -y curl gnupg

# Import MongoDB GPG key
curl -fsSL https://pgp.mongodb.com/server-8.0.asc | \
  sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-8.0.gpg

# Add official repo
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] \
https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/8.0 multiverse" | \
  sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list

# Install
sudo apt-get update
sudo apt-get install -y mongodb-org

# Start and enable
sudo systemctl enable --now mongod

# Check status and logs
systemctl status mongod --no-pager
sudo journalctl -u mongod -e --no-pager

Если вы используете Ubuntu 20.04 (Focal) или более новую LTS-версию, замените «jammy» на ваше кодовое имя, а «8.0» — на последнюю стабильную версию, поддерживаемую MongoDB для вашей ОС.

Пример использования MongoDB 7.0 в Debian 11 (Bullseye).

sudo apt-get update
sudo apt-get install -y curl gnupg

curl -fsSL https://pgp.mongodb.com/server-7.0.asc | \
  sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-7.0.gpg

echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] \
https://repo.mongodb.org/apt/debian bullseye/mongodb-org/7.0 main" | \
  sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

sudo apt-get update
sudo apt-get install -y mongodb-org
sudo systemctl enable --now mongod

Поддержка Debian зависит от версии MongoDB. Используйте последнюю поддерживаемую версию сервера для вашего релиза Debian, указанную в официальной документации MongoDB.

Пример работы с MongoDB 8.0 на RHEL 8/9, AlmaLinux 8/9, Rocky 8/9.

sudo tee /etc/yum.repos.d/mongodb-org-8.0.repo >/dev/null <<'EOF'
[mongodb-org-8.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/8.0/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://pgp.mongodb.com/server-8.0.asc
EOF

sudo dnf clean all
sudo dnf -y install mongodb-org
sudo systemctl enable --now mongod
sudo systemctl status mongod --no-pager

Пример использования MongoDB 7.0 в Amazon Linux 2.

sudo tee /etc/yum.repos.d/mongodb-org-7.0.repo >/dev/null <<'EOF'
[mongodb-org-7.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/amazon/2/mongodb-org/7.0/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://pgp.mongodb.com/server-7.0.asc
EOF

sudo yum clean all
sudo yum -y install mongodb-org
sudo systemctl enable --now mongod

Почему бы не использовать стандартный пакет mongodb из дистрибутива? Он часто устаревает. В официальном репозитории mongodb-org можно найти актуальные версии с исправлениями безопасности.

Первоначальная проверка

# Confirm mongod is running
sudo systemctl status mongod --no-pager

# Connect with MongoDB Shell (mongosh)
mongosh --host 127.0.0.1 --port 27017

# Check server build info
db.runCommand({ buildInfo: 1 })

Надежная конфигурация (критически важна для производства)

Отредактируйте файл mongod.conf, чтобы ограничить сетевой доступ и включить аутентификацию. В большинстве дистрибутивов этот файл находится по адресу /etc/mongod.conf.

sudo nano /etc/mongod.conf

Рекомендуемый базовый уровень:

# /etc/mongod.conf
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true

net:
  port: 27017
  bindIp: 127.0.0.1,10.0.0.5   # Replace 10.0.0.5 with your private server IP

security:
  authorization: enabled

processManagement:
  timeZoneInfo: /usr/share/zoneinfo

setParameter:
  diagnosticDataCollectionEnabled: true

ТЛС/SSL (Настоятельно рекомендуется для удаленных клиентов):

net:
  tls:
    mode: requireTLS
    certificateKeyFile: /etc/ssl/mongodb.pem   # PEM with cert + key
    CAFile: /etc/ssl/ca.pem

Перезапустите приложение, чтобы применить изменения:

sudo systemctl restart mongod

Создайте первого пользователя-администратора.

Если вы только что включили авторизацию, сначала убедитесь, что у вас по-прежнему есть возможность локального подключения. Создайте администратора в базе данных администраторов, а затем используйте эту учетную запись в дальнейшем.

mongosh --host 127.0.0.1 --port 27017

use admin
db.createUser({
  user: "siteAdmin",
  pwd: passwordPrompt(),
  roles: [ { role: "root", db: "admin" } ]
})
exit

Создайте пользователя, предназначенного для конкретного приложения, с ограниченными правами доступа:

mongosh --host 127.0.0.1 --port 27017 -u siteAdmin -p --authenticationDatabase admin

use myapp
db.createUser({
  user: "myappUser",
  pwd: passwordPrompt(),
  roles: [ { role: "readWrite", db: "myapp" } ]
})
exit

Межсетевой экран и SELinux

UFW (Ubuntu/Debian)

# Allow only your trusted IP(s)
sudo ufw allow from 203.0.113.10 to any port 27017 proto tcp
# Or allow internal VPC subnet
sudo ufw allow from 10.0.0.0/24 to any port 27017 proto tcp
sudo ufw reload

firewalld (RHEL/Alma/Rocky/Amazon)

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" \
source address="203.0.113.10" port protocol="tcp" port="27017" accept'
sudo firewall-cmd --reload

SELinux: порт по умолчанию 27017 работает без изменений. Если вы измените порт, присвойте ему метку:

sudo semanage port -a -t mongod_port_t -p tcp 27018
sudo systemctl restart mongod

Передовые методы повышения производительности и производства.

  • Файловая система: на SSD предпочтительнее использовать XFS; для ресурсоемких OLTP-нагрузок следует избегать ext4.
  • Отключите прозрачные большие страницы (THP) и NUMA для обеспечения предсказуемой задержки.
  • Установить ulimits: разрешить открытие большего количества файлов и процессов.
  • Память: кэш WiredTiger использует примерно 50% памяти. RAM По умолчанию необходимо обеспечить запас по высоте.
  • Swap: Поддерживайте минимальный, но не нулевой уровень; установите vm.swappiness=1–10.
  • Резервное копирование и мониторинг с первого дня (см. разделы ниже).

Отключите THP (временно, до перезагрузки).

echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag

Сохраняйте настройки THP через systemd или rc.local в соответствии с рекомендациями вашего дистрибутива.

ULimits (пример)

echo "mongod soft nofile 64000
mongod hard nofile 64000" | sudo tee /etc/security/limits.d/99-mongodb.conf

Резервное копирование и восстановление

Логическое резервное копирование работает везде; снимки файловой системы быстрее для больших наборов данных. Всегда проверяйте восстановление.

mongodump / mongorestore

# Backup all databases
mongodump --username siteAdmin --password --authenticationDatabase admin \
  --out /backups/mongo-$(date +%F)

# Restore a specific database
mongorestore --username siteAdmin --password --authenticationDatabase admin \
  --db myapp /backups/mongo-2025-01-10/myapp

Снимки LVM/облака (схема горячего резервного копирования)

  • Убедитесь, что ведение журнала включено (по умолчанию).
  • Заморозьте том, создайте снимок, а затем разморозьте; или используйте снимки томов из облака.
  • Сохраняйте записи в журнале операций (в репликационных наборах), чтобы охватить момент времени, соответствующий моменту снимка.

Мониторинг и Наблюдение

  • Журналы: /var/log/mongodb/mongod.log (journalctl -u mongod -f)
  • Mongostat и Mongotop для быстрой проверки состояния здоровья.
  • Включите профилирование медленных запросов для оптимизации производительности.
# Quick metrics
mongostat --rowcount 5
mongotop 5

# Enable slow query profiling (level 1)
mongosh -u siteAdmin -p --authenticationDatabase admin --eval \
  'db.setProfilingLevel(1, { slowms: 100 })'

Необязательно: Базовая инициализация репликационного набора.

Для обеспечения высокой доступности запустите три узла и создайте репликационный набор. Используйте частную сеть и TLS с файлами ключей или аутентификацией x.509.

# In /etc/mongod.conf on each node
replication:
  replSetName: rs0

# Then on the primary candidate
mongosh -u siteAdmin -p --authenticationDatabase admin --host 10.0.0.5
rs.initiate({
  _id: "rs0",
  members: [
    { _id: 0, host: "10.0.0.5:27017" },
    { _id: 1, host: "10.0.0.6:27017" },
    { _id: 2, host: "10.0.0.7:27017" }
  ]
})
rs.status()

Устранение распространенных ошибок

  • Порт уже используется: другой процесс привязан к порту 27017. Выполните команду sudo lsof -i :27017 и остановите/отключите конфликтующую службу или измените порт MongoDB согласованно во всей конфигурации, брандмауэре и SELinux.
  • Не удалось подключиться: проверьте bindIp (должен включать IP-адрес вашего клиента или 0.0.0.0 только для тестирования), правила брандмауэра и настройки TLS.
  • Отказано в доступе к dbPath: Убедитесь, что mongod является владельцем файлов /var/lib/mongo и /var/log/mongodb; выполните команду sudo chown -R mongod:mongod .
  • Ошибка аутентификации: подтвердите правильную базу данных аутентификации (обычно admin) и роль пользователя. Попробуйте выполнить команду `mongosh -u user -p –authenticationDatabase admin`.
  • Интенсивность операций ввода-вывода или медленные запросы: проверьте индексы (db.collection.getIndexes()), включите профилирование медленных запросов и убедитесь, что THP отключен.

Практические советы из опыта проведения мероприятий.

  • Поддерживайте актуальность обновлений безопасности MongoDB и ОС, используя официальный репозиторий.
  • Отдельный том данных (например, /var/lib/mongo на выделенный SSD) для упрощения создания снимков и масштабирования.
  • Используйте частную сеть между приложением и базой данных; никогда не предоставляйте доступ к порту 27017 из общедоступного интернета.
  • Проверяйте восстановление резервных копий ежеквартально; резервная копия, которую вы не восстановили, — это лишь надежда, а не план.
  • Для обеспечения стабильного роста рекомендуется планировать работы по уплотнению грунта/техническому обслуживанию в периоды низкой интенсивности движения.

Не хочу manage Всё это вы делаете сами? YouStableАвтора manageVPS и облачные серверы могут развертывать MongoDB с усиленными настройками по умолчанию, резервным копированием вне офиса и круглосуточным мониторингом — таким образом, вы можете сосредоточиться на внедрении функций, а не на настройке THP и правил брандмауэра.

Выполнив эти шаги, вы теперь знаете, как правильно настроить MongoDB на сервере Linux — от установки и безопасности до производительности и обслуживания. Если вы предпочитаете... manageпуть d, YouStable Мы можем развернуть и поддерживать производственную среду MongoDB, адаптированную под ваши рабочие нагрузки.

Часто задаваемые вопросы: Как настроить MongoDB на сервере Linux

Как наиболее безопасно установить MongoDB на Linux?

Используйте официальный репозиторий MongoDB (mongodb-org) для вашего дистрибутива, установите его с помощью вашей нативной базы данных. пакет managerи избегать устаревших пакетов от сообщества. Это гарантирует наличие актуальных функций, обновлений безопасности и корректной работы службы systemd.

Как обеспечить безопасность MongoDB после установки?

Включите авторизацию в файле mongod.conf, создайте пользователя-администратора, ограничьте использование bindIp только частными адресами, включите TLS/SSLи разрешайте доступ к порту 27017 только с доверенных IP-адресов. Поддерживайте операционную систему и MongoDB в актуальном состоянии и регулярно проводите аудит журналов.

Какой порт использует MongoDB, и нужно ли его менять?

По умолчанию используется порт 27017/TCP. Вы можете изменить его, но реальная безопасность обеспечивается межсетевым экраном, TLS и аутентификацией. Если вы измените порт, обновите метки межсетевого экрана и (при необходимости) SELinux соответствующим образом.

Как создать резервную копию MongoDB на работающем сервере?

Используйте mongodump для логического резервного копирования или создавайте снимки файловой системы/LVM/облачного хранилища с включенным журналированием. Для больших наборов данных снимки работают быстрее; обеспечьте покрытие журналов операций в репликационных наборах и всегда проверяйте результаты восстановления.

Нужен ли мне комплект реплик для производства?

Для обеспечения высокой доступности и восстановления на определенный момент времени с помощью журнала операций — да. Стандартный подход — использование репликационного набора из трех узлов. На этапе разработки начинайте с одного узла; переходите к репликационным наборам по мере масштабирования производственного трафика.

Отправить по:

Прахлад Праджапати

Пралад — специалист по веб-хостингу и эксперт по органическому росту сайтов с упором на SEO из Индии. Активно работая в цифровом пространстве с 2019 года, он помогает людям развивать свои веб-сайты с помощью эффективных и устойчивых стратегий. Увлеченный обучением и быстрой адаптацией, он считает, что мелкие детали приводят к большому успеху. Узнайте его мнение о веб-хостинге и SEO, чтобы улучшить свое присутствие в интернете.

Оставьте комментарий

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *

Наверх