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.

PS У мене подібної помилки не було, але в мережі часто зустрічається подібне питання і я вирішив описати його рішення.

Для вирішення проблеми, потрібно відкрити файл /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

показати 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
  • блок чистий – служить для управління роботи з мережею:
    port – вказує номер порту на якому буде запущений демон mongod, за замовчуванням порт 27017
    bindIp – ip адреса з якого можна звертатися до БД. Як і у випадку з mysql / mariadb це настройка служить для безпеки, щоб уникнути доступу з зовнішніх серверів. Якщо вказати тут 127.0.0.1, то підключення буде працювати тільки локально.
    maxIncomingConnections – кількість одночасних підключень, які може обробити MongoDB. Даний параметр не може перевищувати системний, за замовчуванням значення 65536
    Приклад:
    net:
port: 27017
bindIp: 127.0.0.1
  • блок безпеки – даний блок відповідає за безпеку: authorization – якщо параметр включений, то необхідно ввійти в систему користувача, без логіна і пароля не буде встановлено з’єднання з процесом, який його запитує. За замовчуванням, отключен.javascriptEnabled – включає / відключає виконання JavaScript на стороні сервера.
  • блок зберігання – блок відповідає за параметри зберігання БД: dbPath – рядок яка вказує в якому місці буде зберігається БД. За замовчуванням / data / dbjournal – якщо включений, включає журнал довговічності, щоб файли в базі залишалися дійсними і восстанавлівалісь.Прімер настройки:
    storage:
dbPath: /var/lib/mongo
journal:
enabled: true

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

Оптимізація MongoDB для підвищення продуктивності

щоб MongoDB працювало досить швидко і не виникало проблем, потрібно щоб були дотримані деякі умови:

Leave a Reply

Your email address will not be published. Required fields are marked *