Установка и настройка 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. Перед установкой на ваш сервер, перейдите на сайт разработчика и проверьте актуальную версию.
После создания repo файла с параметрами репозитория, можно приступать к установке пакетов.
Установка MongoDB в CentOS
Чтобы установить нужные пакеты для работы MongoDB, запустите команду yum или dnf (в CentOS 8):
# yum install mongodb-org -y
Как и любой другой сервис, MongoDB нужно запустить и добавить в автозагрузку:
# systemctl start mongod
# systemctl enable mongod
Чтобы проверить, что сервис mongod «слушает» нужный порт (по умолчанию TCP 27017), выполните:
# lsof -i: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:
# 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
Но есть один ньюанс, на самом деле новая база данных не будет создана, пока вы в ней не сохраните хотя бы один документ. Если выполнить проверку на существующие БД глобально, мы увидим, что нашей БД в списке нет:
> show dbs
Выполним простой запрос, который сохранит документ в нашей БД:
> db.new_collection.insert({ some_key: "some_value" })
Чтобы удалить БД, нужно находится в той самой БД, которую будете удалять и выполнить запрос:
> 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" } ] } )
Чтобы вывести список пользователей, выполните запрос:
> db.getUsers()
Или
> show users
Обе команды, выводят идентичный результат:
Чтобы удалить пользователя:
> 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