MongoDB - це безкоштовна документо-орієнтована база даних з відкритим вихідним кодом, написана на C ++. класифікується як NoSQL база даних, так як в її основі не лежить традиційна реляційна структура БД. Замість цього в MongoDB використовуються JSON-подібні документи з динамічними схемами. DСхеми можна змінювати в будь-який зручний час без необхідності установки нової бази даних з оновленою схемою.
перевага NoSQL БД перед звичними реляційними БД в тому, що можна без проблем налаштувати горизонтальне масштабування, реплікацію і шардінг. MongoDB бази часто використовується для зберігання документів, тестових файлів, поштових повідомлень і т.д.
У даній статті, ми розглянемо установку MongoDB на сервер з CentOS 7 або 8, виконаємо базову настройку, а також розглянемо варіанти оптимізації.
зміст:
- Підключення сховища MongoDB
- Установка MongoDB в CentOS
- Основні команди MongoDB
- Конфігураційний файл MongoDB
- Оптимізація MongoDB для підвищення продуктивності
Підключення сховища 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 працювало досить швидко і не виникало проблем, потрібно щоб були дотримані деякі умови:
- Використовуйте файлову систему XFS, натомість більш повільної EXT4(XFS використовує паралельний дисковий ввод / вивід, що значно покращує продуктивність у порівнянні з EXT4).
- Використовуйте на своїх серверах швидкі SSD / NVME диски, натомість більш повільних HDD.
- вимкніть Transparent Huge Page. Для відключення THP в unit-файл MongoDB додати виклик команд:
# Echo 'never' >> / sys / kernel / mm / transparent_hugepage / enabled
# Echo 'never' >> / sys / kernel / mm / transparent_hugepage / defrag - Перевірте і при необхідності встановіть ліміти ulimit:
-f (file size): unlimited -t (cpu time): unlimited -v (virtual memory): unlimited -n (open files): 32000 і більше -m (memory size): unlimited -u (processes / threads): 32000 і більше
- Так само стежте за споживанням пам'яті на сервері, якщо MongoDB споживає досить багато пам'яті, проводите оптимізацію самих баз даних. Якщо проект дуже великий, є сенс рознести бази на різні сервера для більшої продуктивності.