Установка и настройка MongoDB в CentOS

Установка и настройка MongoDB в CentOS

MongoDB – это бесплатная документо-ориентированная база данных с открытым исходным кодом, написанная на C++. Классифицируется как NoSQL база данных, так как в ее основе не лежит традиционная реляционная структура БД. Вместо этого в MongoDB используются JSON-подобные документы с динамическими схемами. DСхемы можно менять в любое удобное время без необходимости установки новой базы данных с обновленной схемой.

Преимущество NoSQL БД перед привычными реляционными БД в том, что можно без проблем настроить горизонтальное масштабирование, репликацию и шардинг. MongoDB базы часто используется для хранения документов, тестовых файлов, почтовых сообщений и т.д.

В данной статье, мы рассмотрим установку MongoDB на сервер с CentOS 7 или 8, выполним базовую настройку, а также рассмотрим варианты оптимизации.

Подключение репозитория MongoDB

MongoDB имеет свой собственный репозиторий, откуда и выполняется установка. В стандартных репозиториях пакета для установки данного сервера БД, нет. Создадим файл для репозитория и добавим в него данные для подключения:

# nano /etc/yum.repos.d/mongodb-org.repo

Содержимое файла будет следующее:

[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

На момент написания статьи последняя версия MongoDB в репозитории была именно 4.2. Перед установкой на ваш сервер, перейдите на сайт разработчика и проверьте актуальную версию.

подключение репозитория mongodb в centos

После создания repo файла с параметрами репозитория, можно приступать к установке пакетов.

Установка MongoDB в CentOS

Чтобы установить нужные пакеты для работы MongoDB, запустите команду yum или dnf (в CentOS 8):

# yum install mongodb-org -y

установка mongodb: yum install mongodb-org

Как и любой другой сервис, MongoDB нужно запустить и добавить в автозагрузку:

# systemctl start mongod
# systemctl enable mongod

Чтобы проверить, что сервис mongod «слушает» нужный порт (по умолчанию TCP 27017), выполните:

# lsof -i:27017

mongod - порт 27017

Можно открыть доступ к службе MongoDB в файлеволе (ниже пример для firewalld):

# firewall-cmd --add-port=27017/tcp --permanent
# firewall-cmd --reload

Логи сервиса доступны в файле:

# tail -f /var/log/mongodb/mongod.log

При запуске MongoDB может выйти предупреждение:

** WARNING: soft rlimits too low. rlimits set to 4096 processes, 64000 files. Number of processes should be at least 32000 : 0.5 times number of files.

P.S. У меня подобной ошибки не было, но в сети часто встречается подобный вопрос и я решил описать его решение.

Для решения проблемы, нужно открыть файл /etc/security/limits.d/20-nproc.conf и повысить лимиты:

# nano /etc/security/limits.d/20-nproc.conf

В конец файла добавьте:

mongod soft nproc 32000

mongod soft nproc 32000

Сохраните файл и перезапустите сервис mongod:

# systemctl restart mongod

Чтобы войти в консоль MongoDB, введите mongo:

[root@server mongodb]# mongo

MongoDB shell version v4.2.2
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("f75bee8f-d71d-47fb-8728-6f67fb7a6982") }
MongoDB server version: 4.2.2

Основные команды MongoDB

Рассмотрим несколько команд MongoDB, которые можно использовать в шеле mongo. В частности, создадим базу данных, пользователя и покажем парочку других полезных команд.

Чтобы создать базу данных в MongoDB, нужно выполнить команду в консоли СУБД:

> use buildcentos

Заметили, что она похожа на ту, что используется в mysql/mariadb для входа в существующую БД? В MongoDB как оказалось все проще.

Чтобы проверить, что мы действительно находимся в этой БД, выполним:

> db

mongodb создать базу данных

Но есть один ньюанс, на самом деле новая база данных не будет создана, пока вы в ней не сохраните хотя бы один документ. Если выполнить проверку на существующие БД глобально, мы увидим, что нашей БД в списке нет:

> show dbs

show dbs mongodb

Выполним простой запрос, который сохранит документ в нашей БД:

> db.new_collection.insert({ some_key: "some_value" })

db.new_collection.insert добавить документ в mongodb

Чтобы удалить БД, нужно находится в той самой БД, которую будете удалять и выполнить запрос:

> db.dropDatabase()

Например:

> use buildcentos

switched to db buildcentos

> db.dropDatabase()

{ "dropped" : "buildcentos", "ok" : 1 }

>

После чего, БД будет удалена:

> show dbs

admin 0.000GB
config 0.000GB
local 0.000GB
>

Чтобы создать нового пользователя с правами чтения и записи для вашей БД, выполните следующий запрос:

> db.createUser(

{
user: "centos",
pwd: "rewqrwe213213",
roles: [ { role: "readWrite", db: "buildcentos" } ]
}
)

mongodb создать пользователя

Чтобы вывести список пользователей, выполните запрос:

> db.getUsers()

Или

> show users

Обе команды, выводят идентичный результат:

db.getUsers()

Чтобы удалить пользователя:

> db.dropUser('centos')

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

> db.dropUser('centos')

true

> db.getUsers()

Конфигурационный файл MongoDB

Как у любой СУБД, у MongoDB есть конфигурационный файл, расположенный по пути /etc/mongod.conf. Рассмотрим его основные параметры:

  • Блок systemLog — отвечает за логирование. Минимальные параметры, которые должны быть прописаны в этом блоке, чтобы логирование работало:
    systemLog:
    destination: file
    logAppend: true
    path: /var/log/mongodb/mongod.log
  • Блок processManagement — управление процессом в котором работает MongoDB:fork — запускает демона в фоновом режиме для работы базы, по умолчанию значение false pidFilePath – путь к PID файлу timeZoneInfo – указывает путь к файлу для загрузки временных зон Пример конфига:
    processManagement:
    fork: true # fork and run in background
    pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
    timeZoneInfo: /usr/share/zoneinfo
  • Блок net — служит для управления работы с сетью:
    port — указывает номер порта на котором будет запущен демон mongod, по умолчанию порт 27017
    bindIp – ip адрес с которого можно обращаться к БД. Как и в случае с mysql/mariadb это настройка служит для безопасности, чтобы избежать доступа с внешних серверов. Если указать здесь 127.0.0.1, то подключение будет работать только локально.
    maxIncomingConnections – количество одновременных подключений, которые может обработать MongoDB. Данный параметр не может превышать системный, по умолчанию значение 65536
    Пример:
    net:
    port: 27017
    bindIp: 127.0.0.1
  • Блок security — данный блок отвечает за безопасность:authorization — если параметр включен, то требуется авторизация юзера, без логина и пароля не будет установлено соединение с процессом, который его запрашивает. По умолчанию, отключен.javascriptEnabled — включает/отключает исполнение JavaScript на стороне сервера.
  • Блок storage — блок отвечающий за параметры хранения БД:dbPath — строка которая указывает в каком месте будет хранится БД. По умолчанию /data/dbjournal – если включен, включает журнал долговечности, чтобы файлы в базе оставались действительными и восстанавливались.Пример настройки:
    storage:
    dbPath: /var/lib/mongo
    journal:
    enabled: true

Более расширенные настройки, можно найти в документации к MongoDB на официальном сайте.

Оптимизация MongoDB для повышения производительности

Чтобы MongoDB работало достаточно быстро и не возникало проблем, нужно чтобы были соблюдены некоторые условия:

Linux
Установка и настройка MongoDB в CentOS