БпСстСтС 15% ΠΎΡ‚ всички хостинг услуги

ВСствай умСнията си ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠžΡ‚ΡΡ‚ΡŠΠΏΠΊΠ° Π·Π° всСки хостинг ΠΏΠ»Π°Π½

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΄: Skills Π—Π° Π½Π°Ρ‡Π°Π»ΠΎ
Заглавия
Linux Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ

Как Π΄Π° инсталиратС ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ MongoDB Π½Π° VPS (Пълно Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ)

MongoDB Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½Π° NoSQL Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, която ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° записи ΠΊΠ°Ρ‚ΠΎ BSON (Binary JSON) Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ, позволявайки схСмно-свободно ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ с Ρ…ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»Π½Π° мащабируСмост Ρ‡Ρ€Π΅Π· Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ ΡˆΠ°Ρ€Π΄ΠΈΡ€Π°Π½Π΅. Π—Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, MongoDB Π½Π΅ изисква ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π° схСма Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ я ΠΏΡ€Π°Π²ΠΈ Π΄ΠΎΠΌΠΈΠ½ΠΈΡ€Π°Ρ‰ ΠΈΠ·Π±ΠΎΡ€ Π·Π° прилоТСния с Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‰ΠΈ сС структури Π½Π° Π΄Π°Π½Π½ΠΈ, висока пропускатСлна способност ΠΏΡ€ΠΈ запис ΠΈΠ»ΠΈ ΠΉΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π½ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π°Π½Π½ΠΈΡ‚Π΅.

Π’ΠΎΠ²Π° Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ описва производствСно Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° MongoDB Π½Π° Linux VPS β€” Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‰ΠΎ инсталация ΠΎΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΡƒΠΊΡ€Π΅ΠΏΠ²Π°Π½Π΅ Π½Π° автСнтикацията, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° мрСТовия Π΄ΠΎΡΡ‚ΡŠΠΏ, TLS конфигурация, настройка Π½Π° производитСлността ΠΈ автоматизация Π½Π° Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΈΡ‚Π΅ копия. Всяка ΡΡ‚ΡŠΠΏΠΊΠ° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°, Ρ‡Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ Π² Ρ€Π΅Π°Π»Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π½Π° срСда, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ сигурността ΠΈ надСТдността са Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΈ.

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΈ изисквания

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅, ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄Π΅Ρ‚Π΅ слСдното:

  • VPS с Ubuntu 20.04 LTS ΠΈΠ»ΠΈ Ubuntu 22.04 LTS (ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ са ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ ΠΈ Π·Π° Π΄Π²Π΅Ρ‚Π΅)
  • Root ΠΈΠ»ΠΈ sudo-ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ потрСбитСлски Π΄ΠΎΡΡ‚ΡŠΠΏ Ρ‡Ρ€Π΅Π· SSH
  • ΠœΠΈΠ½ΠΈΠΌΡƒΠΌ 2 GB RAM (ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°Ρ‚ сС 4 GB Π·Π° производствСни натоварвания)
  • ПонС 20 GB свободно дисково пространство Π½Π° Π±ΡŠΡ€Π· носитСл Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅
  • UFW ΠΈΠ»ΠΈ iptables, Π½Π°Π»ΠΈΡ‡Π½ΠΈ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π½Π°Ρ‚Π° стСна
  • Основно ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ Π½Π° командния Ρ€Π΅Π΄ Π½Π° Linux

> Π‘Π΅Π»Π΅ΠΆΠΊΠ° Π·Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π°: ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡŠΡ‚ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ WiredTiger Π½Π° MongoDB ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ΅Π½ кСш ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΎΡ‚ 50% ΠΎΡ‚ (RAM – 1 GB). На VPS с 2 GB Ρ‚ΠΎΠ²Π° Π΄Π°Π²Π° ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ 512 MB кСш. Π—Π° натоварвания с ΠΈΠ½Ρ‚Π΅Π½Π·ΠΈΠ²Π½ΠΎ Ρ‡Π΅Ρ‚Π΅Π½Π΅ осигурСтС ΠΏΠΎΠ½Π΅ 4 GB RAM, Π·Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅Ρ‚Π΅ постоянСн дисков I/O ΠΎΡ‚ натиска Π²ΡŠΡ€Ρ…Ρƒ кСша.

MongoDB срСщу Π΄Ρ€ΡƒΠ³ΠΈ NoSQL Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ: Π‘ΡŠΡ€Π·ΠΎ сравнСниС

ЀункцияMongoDBRedisCassandraCouchDB
МодСл Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅Π½ (BSON)ΠšΠ»ΡŽΡ‡-стойностШирока ΠΊΠΎΠ»ΠΎΠ½Π°Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅Π½ (JSON)
Π•Π·ΠΈΠΊ Π·Π° заявкиMQL (Π±ΠΎΠ³Π°Ρ‚ΠΈ заявки)КомандиCQLMango / MapReduce
Π₯ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»Π½ΠΎ мащабиранСНативно ΡˆΠ°Ρ€Π΄ΠΈΡ€Π°Π½Π΅ΠšΠ»ΡŠΡΡ‚Π΅Ρ€Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌΠΠ°Ρ‚ΠΈΠ²Π½ΠΎΠœΡƒΠ»Ρ‚ΠΈ-ΠΌΠ°ΡΡ‚ΡŠΡ€
ACID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΠ”Π° (v4.0+, ΠΌΡƒΠ»Ρ‚ΠΈ-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π½ΠΈ)Частично (Lua скриптовС)Π›Π΅ΠΊΠΈΠ”Π°
Най-Π΄ΠΎΠ±ΡŠΡ€ случай Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ с ΠΎΠ±Ρ‰ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, APIsΠšΠ΅ΡˆΠΈΡ€Π°Π½Π΅, сСсииВрСмСви сСрии, IoTБинхронизация ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° ΠΎΡ„Π»Π°ΠΉΠ½
Дисково ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ΠžΡΠ½ΠΎΠ²Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠŸΠΎ ΠΈΠ·Π±ΠΎΡ€ (RDB/AOF)Основно Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠžΡΠ½ΠΎΠ²Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅
ΠŸΡŠΠ»Π½ΠΎΡ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΠΎ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Atlas Search / тСкстов ΠΈΠ½Π΄Π΅ΠΊΡΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎΠΠ΅ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ

Π‘Ρ‚ΡŠΠΏΠΊΠ° 1: АктуализиранС Π½Π° систСмата

Π’ΠΈΠ½Π°Π³ΠΈ Π·Π°ΠΏΠΎΡ‡Π²Π°ΠΉΡ‚Π΅ с напълно Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° систСма. ΠžΡΡ‚Π°Ρ€Π΅Π»ΠΈΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π²ΡŠΠ²Π΅ΠΆΠ΄Π°Ρ‚ извСстни CVE уязвимости, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Сксплоатирани ΠΏΡ€Π΅Π΄ΠΈ Π΄ΠΎΡ€ΠΈ Π΄Π° инсталиратС вашия стСк ΠΎΡ‚ прилоТСния.

sudo apt update && sudo apt upgrade -y

Π‘Π»Π΅Π΄ ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° ядрото ΠΈΠ»ΠΈ libc, рСстартирайтС, Π·Π° Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ Π½ΠΎΠ²ΠΎΡ‚ΠΎ ядро:

sudo reboot

Π‘Π²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ сС ΠΎΡ‚Π½ΠΎΠ²ΠΎ Ρ‡Ρ€Π΅Π· SSH слСд ΠΊΠ°Ρ‚ΠΎ ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ сС Π²ΡŠΡ€Π½Π΅ ΠΎΠ½Π»Π°ΠΉΠ½ (ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ 30–60 сСкунди).

Π‘Ρ‚ΡŠΠΏΠΊΠ° 2: Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° MongoDB ΠΎΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅

Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°Ρ‚Π° apt ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π½Π° Ubuntu ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ остаряла, ΠΏΡ€Π΅ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π° ΠΎΡ‚ общността вСрсия Π½Π° MongoDB, която липсва ΡΠΊΠΎΡ€ΠΎΡˆΠ½ΠΈ ΠΊΠΎΡ€Π΅ΠΊΡ†ΠΈΠΈ Π·Π° сигурност ΠΈ подобрСния Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°. Π’ΠΈΠ½Π°Π³ΠΈ инсталирайтС ΠΎΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° MongoDB.

ДобавянС Π½Π° MongoDB GPG ΠΊΠ»ΡŽΡ‡ ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅

ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° apt-key Π΅ остаряла Π² Ubuntu 22.04. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π°Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ с keyring, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΈ Π½Π° 20.04, ΠΈ Π½Π° 22.04:

curl -fsSL https://www.mongodb.org/static/pgp/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/ubuntu $(lsb_release -cs)/mongodb-org/7.0 multiverse" | 
  sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

> Π‘Π΅Π»Π΅ΠΆΠΊΠ° Π·Π° вСрсията: Π—Π°ΠΌΠ΅Π½Π΅Ρ‚Π΅ 7.0 с Π²Π°ΡˆΠ°Ρ‚Π° Ρ†Π΅Π»Π΅Π²Π° вСрсия (Π½Π°ΠΏΡ€. 6.0), Π°ΠΊΠΎ изискватС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π° вСрсия Π·Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. MongoDB 7.0 Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΎΡ‚ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ с Π΄ΡŠΠ»Π³ΠΎΡΡ€ΠΎΡ‡Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° към 2024 Π³.

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ MongoDB

sudo apt update
sudo apt install -y mongodb-org

Π’ΠΎΠ²Π° инсталира слСднитС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ:

    mongod β€” основният Π΄Π΅ΠΌΠΎΠ½ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ
    mongos β€” ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π·Π° ΡˆΠ°Ρ€Π΄ΠΈΡ€Π°Π½Π΅ (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° сС ΠΏΡ€ΠΈ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½ΠΈΡ Π½Π° ΡˆΠ°Ρ€Π΄ΠΈΡ€Π°Π½ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€)
    mongosh β€” ΠΌΠΎΠ΄Π΅Ρ€Π½Π°Ρ‚Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° Π½Π° MongoDB (замСства наслСдствСния Π΄Π²ΠΎΠΈΡ‡Π΅Π½ Ρ„Π°ΠΉΠ» mongo)
    mongodb-database-tools β€” Π²ΠΊΠ»ΡŽΡ‡Π²Π° mongodump, mongorestore, mongoexport ΠΈ mongoimport

    ЀиксиранС Π½Π° инсталираната вСрсия

    ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚Π΅Ρ‚Π΅ Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½ΠΈ надстройки, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π½Π°Ρ€ΡƒΡˆΠ°Ρ‚ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚Ρ‚Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ:

    echo "mongodb-org hold" | sudo dpkg --set-selections
    echo "mongodb-org-database hold" | sudo dpkg --set-selections
    echo "mongodb-org-server hold" | sudo dpkg --set-selections
    echo "mongosh hold" | sudo dpkg --set-selections
    echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
    echo "mongodb-org-tools hold" | sudo dpkg --set-selections

    Π‘Ρ‚ΡŠΠΏΠΊΠ° 3: ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° систСмни ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΈ изисквания

    MongoDB Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° ядрото ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма са настроСни ΠΏΡ€Π΅Π΄ΠΈ стартиранС Π½Π° Π΄Π΅ΠΌΠΎΠ½Π°.

    Π—Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ulimit Π·Π° ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅

    MongoDB изисква висок Π»ΠΈΠΌΠΈΡ‚ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈΡ‚Π΅ дСскриптори. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ systemd замяна:

    sudo mkdir -p /etc/systemd/system/mongod.service.d
    sudo tee /etc/systemd/system/mongod.service.d/limits.conf > /dev/null <<EOF
    [Service]
    LimitFNOFILE=64000
    LimitNPROC=64000
    EOF

    Π”Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° Transparent Huge Pages (THP)

    THP причинява Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΈ скоковС Π½Π° латСнтност Π² MongoDB. Π”Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΉΡ‚Π΅ Π³ΠΎ постоянно:

    sudo tee /etc/systemd/system/disable-thp.service > /dev/null <<EOF
    [Unit]
    Description=Disable Transparent Huge Pages (THP)
    DefaultDependencies=no
    After=sysinit.target local-fs.target
    Before=mongod.service
    
    [Service]
    Type=oneshot
    ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null'
    ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/defrag > /dev/null'
    
    [Install]
    WantedBy=basic.target
    EOF
    
    sudo systemctl daemon-reload
    sudo systemctl enable --now disable-thp

    ΠŸΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ Π΄Π°Π»ΠΈ настройката Π΅ влязла Π² сила:

    cat /sys/kernel/mm/transparent_hugepage/enabled

    Π˜Π·Ρ…ΠΎΠ΄ΡŠΡ‚ трябва Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π° [never] ΠΊΠ°Ρ‚ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½Π° стойност.

    Π‘Ρ‚ΡŠΠΏΠΊΠ° 4: Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅ ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° MongoDB

    sudo systemctl daemon-reload
    sudo systemctl start mongod
    sudo systemctl enable mongod

    ΠŸΠΎΡ‚Π²ΡŠΡ€Π΄Π΅Ρ‚Π΅, Ρ‡Π΅ Π΄Π΅ΠΌΠΎΠ½ΡŠΡ‚ Ρ€Π°Π±ΠΎΡ‚ΠΈ:

    sudo systemctl status mongod

    ΠŸΠΎΡ‚ΡŠΡ€ΡΠ΅Ρ‚Π΅ Active: active (running) Π² ΠΈΠ·Ρ…ΠΎΠ΄Π°. Ако услугата Π½Π΅ успСС Π΄Π° стартира, Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°ΠΉΡ‚Π΅ ΠΆΡƒΡ€Π½Π°Π»Π°:

    sudo tail -50 /var/log/mongodb/mongod.log

    ЧСсти ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ Π·Π° Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ стартиранС Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚:

    • ΠŸΠΎΡ€Ρ‚ 27017 Π²Π΅Ρ‡Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° β€” Π΄Ρ€ΡƒΠ³ процСс Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ с ΠΏΠΎΡ€Ρ‚Π°; ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°ΠΉΡ‚Π΅ Π³ΠΎ с sudo ss -tlnp | grep 27017
    • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π° дирСкторията с Π΄Π°Π½Π½ΠΈ β€” потрСбитСлят mongod трябва Π΄Π° ΠΏΡ€ΠΈΡ‚Π΅ΠΆΠ°Π²Π° /var/lib/mongodb; ΠΏΠΎΠΏΡ€Π°Π²Π΅Ρ‚Π΅ с sudo chown -R mongodb:mongodb /var/lib/mongodb
    • THP всС ΠΎΡ‰Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ β€” ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡŠΡ‚ WiredTiger рСгистрира ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° влоши производитСлността

    Π‘Ρ‚ΡŠΠΏΠΊΠ° 5: Π—Π°Ρ‰ΠΈΡ‚Π° Π½Π° MongoDB β€” автСнтикация ΠΈ оторизация

    Π’ΠΎΠ²Π° Π΅ Π½Π°ΠΉ-критичният Ρ€Π°Π·Π΄Π΅Π». НСзащитСнитС инстанции Π½Π° MongoDB, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚, са ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π½ΠΈ Π·Π° хиляди ΠΏΡ€ΠΎΠ±ΠΈΠ²ΠΈ Π½Π° Π΄Π°Π½Π½ΠΈ. Π˜Π½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡΡ‚Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ няма автСнтикация, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ всСки, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° достигнС ΠΏΠΎΡ€Ρ‚ 27017, ΠΈΠΌΠ° пълСн Π΄ΠΎΡΡ‚ΡŠΠΏ Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅/запис Π΄ΠΎ всяка Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ.

    БъздаванС Π½Π° административния ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»

    Π‘Π²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ сС с Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° Π½Π° MongoDB (Π½Π΅ сС изисква автСнтикация ΠΏΡ€Π΅Π΄ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΉ):

    mongosh

    Π’ ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π° ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π΅Ρ‚Π΅ към Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ admin ΠΈ ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ супСрпотрСбитСл:

    use admin
    
    db.createUser({
      user: "adminuser",
      pwd: passwordPrompt(),
      roles: [
        { role: "userAdminAnyDatabase", db: "admin" },
        { role: "readWriteAnyDatabase", db: "admin" },
        { role: "dbAdminAnyDatabase", db: "admin" },
        { role: "clusterAdmin", db: "admin" }
      ]
    })

    Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° passwordPrompt() вмСсто тСкстов Π½ΠΈΠ· прСдотвратява появата Π½Π° ΠΏΠ°Ρ€ΠΎΠ»Π°Ρ‚Π° Π² историята Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π°. Π’ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ ΠΏΠ°Ρ€ΠΎΠ»Π°Ρ‚Π° ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ°Π½Π°, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠ·Π»Π΅Π·Ρ‚Π΅:

    exit

    АктивиранС Π½Π° автСнтикацията Π² mongod.conf

    ΠžΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ конфигурационния Ρ„Π°ΠΉΠ» Π½Π° MongoDB:

    sudo nano /etc/mongod.conf

    НамСрСтС сСкцията security (тя Ρ‰Π΅ бъдС ΠΊΠΎΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½Π°) ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΉΡ‚Π΅ оторизацията:

    security:
      authorization: enabled

    Π—Π°ΠΏΠ°Π·Π΅Ρ‚Π΅ ΠΈ ΠΈΠ·Π»Π΅Π·Ρ‚Π΅ (Ctrl+X, слСд Ρ‚ΠΎΠ²Π° Y, слСд Ρ‚ΠΎΠ²Π° Enter), слСд ΠΊΠΎΠ΅Ρ‚ΠΎ рСстартирайтС Π΄Π΅ΠΌΠΎΠ½Π°:

    sudo systemctl restart mongod

    ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΄Π°Π»ΠΈ автСнтикацията Π΅ Π½Π°Π»ΠΎΠΆΠ΅Π½Π°

    ΠžΠΏΠΈΡ‚Π°ΠΉΡ‚Π΅ Π½Π΅Π°Π²Ρ‚Π΅Π½Ρ‚ΠΈΡ†ΠΈΡ€Π°Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ° β€” тя Π²Π΅Ρ‡Π΅ трябва Π΄Π° сС ΠΏΡ€ΠΎΠ²Π°Π»ΠΈ:

    mongosh --eval "db.adminCommand({ listDatabases: 1 })"

    Врябва Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠ° Unauthorized. Π‘Π΅Π³Π° сС Π°Π²Ρ‚Π΅Π½Ρ‚ΠΈΡ†ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ:

    mongosh -u adminuser -p --authenticationDatabase admin

    БъздаванС Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ с ΠΎΠ±Ρ…Π²Π°Ρ‚ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ

    Никога Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ администраторския супСрпотрСбитСл Π·Π° Π²Ρ€ΡŠΠ·ΠΊΠΈ с прилоТСния. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ Π·Π° всяка Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ:

    use myappdb
    
    db.createUser({
      user: "appuser",
      pwd: passwordPrompt(),
      roles: [
        { role: "readWrite", db: "myappdb" }
      ]
    })

    Π‘Ρ‚ΡŠΠΏΠΊΠ° 6: ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΎ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π½Π°Ρ‚Π° стСна

    ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Π½Π΅ ΠΈΠ»ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π°Π½Π΅ Π½Π° bindIp

    По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ mongod.conf сС ΡΠ²ΡŠΡ€Π·Π²Π° само с 127.0.0.1. Π’ΠΎΠ²Π° Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π½Π°Ρ‚Π° настройка, Π°ΠΊΠΎ Π²Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° ΡΡŠΡ‰ΠΈΡ VPS. Ако ΠΈΠΌΠ°Ρ‚Π΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ (Π½Π°ΠΏΡ€. ΠΎΡ‚ ΡΡŠΡ€Π²ΡŠΡ€ Π½Π° прилоТСния Π½Π° ΠΎΡ‚Π΄Π΅Π»Π΅Π½ хост), Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ /etc/mongod.conf:

    net:
      port: 27017
      bindIp: 127.0.0.1,10.0.0.5

    Π—Π°ΠΌΠ΅Π½Π΅Ρ‚Π΅ 10.0.0.5 с конкрСтния частСн IP Π½Π° вашия ΡΡŠΡ€Π²ΡŠΡ€ Π½Π° прилоТСния. Никога Π½Π΅ Π·Π°Π΄Π°Π²Π°ΠΉΡ‚Π΅ bindIp: 0.0.0.0 Π½Π° ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ интСрфСйс Π±Π΅Π· ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π½Π°Ρ‚Π° стСна, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Ρ‰ΠΎ Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ извСстни IP адрСси. Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ към всички интСрфСйси Π±Π΅Π· Π·Π°Ρ‰ΠΈΡ‚Π½Π° стСна Π΅ Π²ΠΎΠ΄Π΅Ρ‰Π°Ρ‚Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π·Π° ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚ΠΈ с ΠΈΠ·Π»Π°Π³Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π² MongoDB.

    РСстартирайтС слСд ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ:

    sudo systemctl restart mongod

    ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π° Π½Π° UFW Π·Π°Ρ‰ΠΈΡ‚Π½Π°Ρ‚Π° стСна

    Ако сС изисква ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Ρ‚Π΅ само конкрСтния Π΄ΠΎΠ²Π΅Ρ€Π΅Π½ IP:

    sudo ufw allow from 10.0.0.5 to any port 27017 proto tcp
    sudo ufw enable
    sudo ufw status verbose

    Π‘Π»ΠΎΠΊΠΈΡ€Π°ΠΉΡ‚Π΅ всички останали външни Π΄ΠΎΡΡ‚ΡŠΠΏΠΈ Π΄ΠΎ ΠΏΠΎΡ€Ρ‚ 27017:

    sudo ufw deny 27017

    UFW ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° ΠΏΠΎ Ρ€Π΅Π΄ β€” ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ allow from Π½Π°Π΄ ΡˆΠΈΡ€ΠΎΠΊΠΎΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ deny ΠΈΠΌΠ° ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π·Π° довСрСния IP.

    Π‘Ρ‚ΡŠΠΏΠΊΠ° 7: АктивиранС Π½Π° TLS/SSL Π·Π° ΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°Π½ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ

    Π—Π° всяко Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, ΠΏΡ€ΠΈ ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΡŠΡ‚ Π½Π° MongoDB ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° ΠΏΡ€Π΅Π· ΠΌΡ€Π΅ΠΆΠ° β€” Π΄ΠΎΡ€ΠΈ частна LAN β€” TLS ΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ. Π‘Π΅Π· Π½Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ ΠΈ Π΄Π°Π½Π½ΠΈΡ‚Π΅ сС ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚ Π² ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ тСкст.

    Π“Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΠΉΡ‚Π΅ самоподписан сСртификат Π·Π° тСстванС (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ сСртификат, подписан ΠΎΡ‚ CA Π² производствСна срСда β€” обмислСтС ΡΡŠΡ‡Π΅Ρ‚Π°Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ с SSL сСртификат Π·Π° вашия Π΄ΠΎΠΌΠ΅ΠΉΠ½):

    sudo mkdir -p /etc/mongodb/ssl
    sudo openssl req -newkey rsa:4096 -nodes -keyout /etc/mongodb/ssl/mongodb.key 
      -x509 -days 365 -out /etc/mongodb/ssl/mongodb.crt 
      -subj "/CN=your-vps-hostname"
    sudo cat /etc/mongodb/ssl/mongodb.crt /etc/mongodb/ssl/mongodb.key | 
      sudo tee /etc/mongodb/ssl/mongodb.pem > /dev/null
    sudo chown -R mongodb:mongodb /etc/mongodb/ssl
    sudo chmod 600 /etc/mongodb/ssl/mongodb.pem

    Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ TLS конфигурация към /etc/mongod.conf:

    net:
      port: 27017
      bindIp: 127.0.0.1
      tls:
        mode: requireTLS
        certificateKeyFile: /etc/mongodb/ssl/mongodb.pem

    РСстартирайтС MongoDB ΠΈ сС ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ с TLS:

    sudo systemctl restart mongod
    mongosh --tls --tlsCertificateKeyFile /etc/mongodb/ssl/mongodb.pem 
      --tlsAllowInvalidCertificates -u adminuser -p --authenticationDatabase admin

    Π€Π»Π°Π³ΡŠΡ‚ --tlsAllowInvalidCertificates Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ»ΠΈΠ² само Π·Π° самоподписани сСртификати ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°. ΠŸΡ€Π΅ΠΌΠ°Ρ…Π½Π΅Ρ‚Π΅ Π³ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° сСртификат, подписан ΠΎΡ‚ CA.

    Π‘Ρ‚ΡŠΠΏΠΊΠ° 8: Настройка Π½Π° производитСлността Π² mongod.conf

    Π—Π° производствСно Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° VPS с dedicated рСсурси, настройтС кСша Π½Π° WiredTiger ΠΈ настройкитС Π·Π° ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ€Π°Π½Π΅. ΠžΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ /etc/mongod.conf ΠΈ Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚Π΅ слСдното:

    storage:
      dbPath: /var/lib/mongodb
      journal:
        enabled: true
      wiredTiger:
        engineConfig:
          cacheSizeGB: 1.5
    
    operationProfiling:
      slowOpThresholdMs: 100
      mode: slowOp
    
    replication:
      oplogSizeMB: 1024

    ОбяснСниС Π½Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° настройка:

    • cacheSizeGB β€” Π—Π°Π΄Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΠ²Π° Π½Π° ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ 50% ΠΎΡ‚ Π½Π°Π»ΠΈΡ‡Π½Π°Ρ‚Π° RAM минус 1 GB. На VPS с 4 GB ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ 1.5. На VPS с 8 GB ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ 3.5.
    • slowOpThresholdMs β€” ЗаявкитС, Π½Π°Π΄Π²ΠΈΡˆΠ°Π²Π°Ρ‰ΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€Π°Π³ (Π² милисСкунди), сС записват Π² ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅Ρ€Π°. НамаляванСто ΠΌΡƒ ΠΏΠΎΠΌΠ°Π³Π° Π·Π° Ρ€Π°Π½Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅ Π½Π° заявки Π±Π΅Π· индСкс.
    • oplogSizeMB β€” Π Π΅Π»Π΅Π²Π°Π½Ρ‚Π½ΠΎ, Π°ΠΊΠΎ ΠΏΠ»Π°Π½ΠΈΡ€Π°Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Ρ‡Π»Π΅Π½ΠΎΠ²Π΅ Π½Π° replica set ΠΏΠΎ-късно. ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎΡ‚ΠΎ оразмСряванС Π½Π° oplog избягва забавянС Π½Π° рСпликацията ΠΏΡ€ΠΈ натоварвания с ΠΈΠ½Ρ‚Π΅Π½Π·ΠΈΠ²Π΅Π½ запис.

    ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅:

    sudo systemctl restart mongod

    Π‘Ρ‚ΡŠΠΏΠΊΠ° 9: Π Π΅Π·Π΅Ρ€Π²Π½ΠΎ ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅ ΠΈ Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ с mongodump

    Π ΡŠΡ‡Π½ΠΎ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎ ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅

    mongodump 
      --uri="mongodb://adminuser:yourpassword@127.0.0.1:27017/?authSource=admin" 
      --out /var/backups/mongodb/$(date +%Y-%m-%d)

    Π ΡŠΡ‡Π½ΠΎ Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅

    mongorestore 
      --uri="mongodb://adminuser:yourpassword@127.0.0.1:27017/?authSource=admin" 
      /var/backups/mongodb/2024-06-15

    АвтоматизиранС Π½Π° Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΈΡ‚Π΅ копия с Cron

    Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ спСциалСн скрипт Π·Π° Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎ ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅:

    sudo tee /usr/local/bin/mongodb-backup.sh > /dev/null <<'EOF'
    #!/bin/bash
    BACKUP_DIR="/var/backups/mongodb"
    TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S)
    MONGO_URI="mongodb://adminuser:yourpassword@127.0.0.1:27017/?authSource=admin"
    RETENTION_DAYS=7
    
    mkdir -p "${BACKUP_DIR}/${TIMESTAMP}"
    mongodump --uri="${MONGO_URI}" --out="${BACKUP_DIR}/${TIMESTAMP}"
    find "${BACKUP_DIR}" -maxdepth 1 -type d -mtime +${RETENTION_DAYS} -exec rm -rf {} ;
    EOF
    
    sudo chmod +x /usr/local/bin/mongodb-backup.sh

    ΠŸΠ»Π°Π½ΠΈΡ€Π°ΠΉΡ‚Π΅ Π³ΠΎ Π΄Π° сС изпълнява Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎ Π² 2:00 Ρ‡. сутринта:

    (crontab -l 2>/dev/null; echo "0 2 * * * /usr/local/bin/mongodb-backup.sh >> /var/log/mongodb-backup.log 2>&1") | crontab -

    > ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½ΠΎ ΡΡŠΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅: Π‘ΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΉΡ‚Π΅ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΈΡ‚Π΅ копия извън ΡΡŠΡ€Π²ΡŠΡ€Π°. Π‘ΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΈ копия Π½Π° ΡΡŠΡ‰ΠΈΡ VPS ΠΊΠ°Ρ‚ΠΎ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π½Π΅ осигурява Π·Π°Ρ‰ΠΈΡ‚Π° срСщу ΠΏΠΎΠ²Ρ€Π΅Π΄Π° Π½Π° диска ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΡ€ΠΎΠΌΠ΅Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ rsync, rclone ΠΈΠ»ΠΈ S3-ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎ ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Π·Π° Π΄Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ€Π°Ρ‚Π΅ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΈΡ‚Π΅ копия Π½Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎ мСстополоТСниС.

    Π‘Ρ‚ΡŠΠΏΠΊΠ° 10: НаблюдСниС Π½Π° Π·Π΄Ρ€Π°Π²Π΅Ρ‚ΠΎ Π½Π° MongoDB

    Π’Π³Ρ€Π°Π΄Π΅Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° наблюдСниС

    Π’ mongosh ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ статистики Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°:

    db.serverStatus()
    db.stats()
    db.currentOp()

    ИзползванС на mongostat и mongotop

    ΠžΡ‚ ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π° Π½Π°Π±Π»ΡŽΠ΄Π°Π²Π°ΠΉΡ‚Π΅ броя Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅:

    mongostat --uri="mongodb://adminuser:yourpassword@127.0.0.1:27017/?authSource=admin"

    ΠΠ°Π±Π»ΡŽΠ΄Π°Π²Π°ΠΉΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅/запис ΠΏΠΎ ΠΊΠΎΠ»Π΅ΠΊΡ†ΠΈΠΈ:

    mongotop --uri="mongodb://adminuser:yourpassword@127.0.0.1:27017/?authSource=admin"

    ΠšΠ»ΡŽΡ‡ΠΎΠ²ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Π·Π° наблюдСниС

    ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠ°ΠŸΡ€Π°Π³ Π·Π° ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠšΠ°ΠΊΠ²ΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π°
    wiredTiger.cache.bytes currently in cache> 90% ΠΎΡ‚ cacheSizeGBНатиск Π²ΡŠΡ€Ρ…Ρƒ кСша; ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Ρ‚Π΅ RAM ΠΈΠ»ΠΈ Π½Π°ΠΌΠ°Π»Π΅Ρ‚Π΅ Π½Π°Π±ΠΎΡ€Π° ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ
    connections.current> 80% ΠΎΡ‚ connections.availableΠ˜Π·Ρ‡Π΅Ρ€ΠΏΠ²Π°Π½Π΅ Π½Π° ΠΏΡƒΠ»Π° ΠΎΡ‚ Π²Ρ€ΡŠΠ·ΠΊΠΈ; настройтС ΠΏΡƒΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ
    opcounters.getmoreΠŸΠΎΡΡ‚ΠΎΡΠ½Π½ΠΎ високаНССфСктивност Π½Π° курсора; ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°ΠΉΡ‚Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ Π½Π° заявкитС
    repl.lag (replica sets)> 10 сСкундиЗабавянС Π½Π° рСпликацията; ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° ΠΈ дисковия I/O
    locks.Global.acquireWaitCountВсяка устойчива ΡΡ‚ΠΎΠΉΠ½ΠΎΡΡ‚ΠšΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΡ Π·Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅; ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°ΠΉΡ‚Π΅ Π΄ΡŠΠ»Π³ΠΎΡ‚Ρ€Π°ΠΉΠ½ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

    Π˜Π·Π±ΠΎΡ€ Π½Π° правилния хостинг Π·Π° MongoDB

    ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° ΠΈ надСТдността Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° инстанция Π½Π° MongoDB са пряко ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с основната инфраструктура. Π Π°Π·Π³Π»Π΅Π΄Π°ΠΉΡ‚Π΅ Ρ‚Π΅Π·ΠΈ Π½ΠΈΠ²Π° Π½Π° Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅:

    • Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ staging: Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π΅Π½ VPS с 2–4 GB RAM Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π΅Π½ Π·Π° нСпроизводствСни натоварвания, тСстванС Π½Π° схСми ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ срСди.
    • ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π΅Π½ възСл: VPS с 4–8 GB RAM, NVMe ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ dedicated CPU ядро ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° ΡƒΠΌΠ΅Ρ€Π΅Π½ производствСн Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π·Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΡƒΠ΅Π± прилоТСния.
    • ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²ΠΎ с висока пропускатСлна способност: Dedicated ΡΡŠΡ€Π²ΡŠΡ€ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π° Π΅Ρ„Π΅ΠΊΡ‚Π° Π½Π° ΡˆΡƒΠΌΠ½ΠΈΡ съсСд, ΠΏΡ€ΠΈΡΡŠΡ‰ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ срСди. I/O ΠΌΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ Π½Π° WiredTiger сС Π²ΡŠΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΎΡ‚ bare-metal NVMe масиви.
    • ML/Π°Π½Π°Π»ΠΈΡ‚ΠΈΡ‡Π½ΠΈ натоварвания: Ако ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅ MongoDB Π·Π°Π΅Π΄Π½ΠΎ с ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΈ Π·Π° Π΄Π°Π½Π½ΠΈ, Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ° с ΠΈΠ½Ρ‚Π΅Π½Π·ΠΈΠ²Π½ΠΈ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅, GPU хостинг ΠΌΠΎΠΆΠ΅ Π΄Π° ускори Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅ Π·Π° послСдваща ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.

    Π—Π° Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½ΠΈΡ, изискващи Π³Ρ€Π°Ρ„ΠΈΡ‡Π΅Π½ интСрфСйс Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, VPS с cPanel осигурява ΠΏΠΎΠ·Π½Π°Ρ‚Π° срСда Π·Π° Π΅ΠΊΠΈΠΏΠΈ, ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΈ с чисто CLI администриранС, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎΡ‚ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Π½Π΅ Π½Π° mongod.conf остава Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½Π° конфигурация.

    ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° Π·Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅

    Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Π½ списък ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ Π½Π° ΠΆΠΈΠ²ΠΎ:

    • [ ] MongoDB инсталиран ΠΎΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, вСрсията Π΅ фиксирана
    • [ ] Услугата mongod Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° ΠΈ ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄Π΅Π½Π° ΠΊΠ°Ρ‚ΠΎ active (running)
    • [ ] Transparent Huge Pages Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΈ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΈ
    • [ ] ulimit Π·Π° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ дСскриптори Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ Π½Π° 64000 ΠΈΠ»ΠΈ ΠΏΠΎ-висок
    • [ ] АвтСнтикацията Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° Π² mongod.conf (authorization: enabled)
    • [ ] Администраторският ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» Π΅ създадСн с passwordPrompt() β€” Π±Π΅Π· ΠΏΠ°Ρ€ΠΎΠ»ΠΈ Π² ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ тСкст Π² историята Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π°
    • [ ] ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, спСцифични Π·Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, са създадСни с Ρ€ΠΎΠ»ΠΈ с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ
    • [ ] bindIp Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ само Π΄ΠΎ localhost ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ Π΄ΠΎΠ²Π΅Ρ€Π΅Π½ΠΈ IP адрСси
    • [ ] ΠŸΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π½Π° UFW са Π½Π° място β€” ΠΏΠΎΡ€Ρ‚ 27017 Π΅ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ ΠΎΡ‚ публичния ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚
    • [ ] TLS Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ с Π²Π°Π»ΠΈΠ΄Π΅Π½ сСртификат
    • [ ] ΠšΠ΅ΡˆΡŠΡ‚ Π½Π° WiredTiger Π΅ ΠΎΡ€Π°Π·ΠΌΠ΅Ρ€Π΅Π½ Π½Π° 50% ΠΎΡ‚ (RAM – 1 GB)
    • [ ] ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π±Π°Π²Π½ΠΈ заявки Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΎ (slowOpThresholdMs: 100)
    • [ ] Автоматизирани Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΈ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΈ копия с рСпликация извън ΡΡŠΡ€Π²ΡŠΡ€Π°
    • [ ] Π’ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅Ρ‚ΠΎ ΠΎΡ‚ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅ Π΅ тСствано β€” Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ стС Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π»ΠΈ, Π½Π΅ Π΅ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅

    Π§Π—Π’

    На ΠΊΠΎΠΉ ΠΏΠΎΡ€Ρ‚ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΡΠ»ΡƒΡˆΠ° MongoDB ΠΈ трябва Π»ΠΈ Π΄Π° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ?

    MongoDB ΡΠ»ΡƒΡˆΠ° Π½Π° TCP ΠΏΠΎΡ€Ρ‚ 27017 ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅. ΠŸΡ€ΠΎΠΌΡΠ½Π°Ρ‚Π° ΠΌΡƒ към нСстандартСн ΠΏΠΎΡ€Ρ‚ добавя Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½Π° нСяснота, Π½ΠΎ Π½Π΅ Π΅ замСститСл Π½Π° автСнтикацията ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π½Π°Ρ‚Π° стСна. Ако Π³ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅, Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΉΡ‚Π΅ net.port Π² /etc/mongod.conf ΠΈ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΉΡ‚Π΅ всички ΠΏΡ€Π°Π²ΠΈΠ»Π° Π½Π° UFW ΠΈ Π½ΠΈΠ·ΠΎΠ²Π΅ Π·Π° Π²Ρ€ΡŠΠ·ΠΊΠ° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ.

    Π—Π°Ρ‰ΠΎ MongoDB ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ RAM Π΄ΠΎΡ€ΠΈ с малък Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ?

    WiredTiger ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ разпрСдСля Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ си кСш въз основа Π½Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°Ρ‚Π° max(50% of (RAM - 1 GB), 256 MB). Π’ΠΎΠ²Π° Π΅ ΡƒΠΌΠΈΡˆΠ»Π΅Π½ΠΎ β€” ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π° чСтСнията ΠΎΡ‚ диска. Ако ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° RAM Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π° малък VPS, ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ Π·Π°Π΄Π°ΠΉΡ‚Π΅ cacheSizeGB Π² /etc/mongod.conf Π½Π° ΠΏΠΎ-ниска стойност.

    Мога Π»ΠΈ Π΄Π° изпълнявам MongoDB Π½Π° сподСлСн хостинг?

    НС. MongoDB изисква постоянСн Ρ„ΠΎΠ½ΠΎΠ² Π΄Π΅ΠΌΠΎΠ½ (mongod), Π΄ΠΈΡ€Π΅ΠΊΡ‚Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма Π΄ΠΎ дирСкторията си с Π΄Π°Π½Π½ΠΈ ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ към ΠΌΡ€Π΅ΠΆΠΎΠ² ΠΏΠΎΡ€Ρ‚. Нито Π΅Π΄Π½ΠΎ ΠΎΡ‚ тях Π½Π΅ Π΅ Π½Π°Π»ΠΈΡ‡Π½ΠΎ Π½Π° сподСлСн ΡƒΠ΅Π± хостинг. VPS Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π°Ρ‚Π° ТизнСспособна срСда.

    Каква Π΅ Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ mongodump ΠΈ снимка Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма Π·Π° Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΈ копия?

    mongodump ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° логичСско Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎ ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅ β€” Ρ‡Π΅Ρ‚Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ Ρ‡Ρ€Π΅Π· интСрфСйса Π·Π° заявки Π½Π° MongoDB ΠΈ Π³ΠΈ Скспортира ΠΊΠ°Ρ‚ΠΎ BSON Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅. Π’ΠΎΠΉ Π΅ прСносим ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ вСрсии, Π½ΠΎ Π΅ ΠΏΠΎ-Π±Π°Π²Π΅Π½ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π° послСдоватСлност Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰Π° инстанция с ΠΈΠ½Ρ‚Π΅Π½Π·ΠΈΠ²Π΅Π½ запис Π±Π΅Π· --oplog. Π‘Π½ΠΈΠΌΠΊΠ°Ρ‚Π° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма (LVM, ZFS ΠΈΠ»ΠΈ снимка Π½Π° Π±Π»ΠΎΠΊΠΎΠ²ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π² ΠΎΠ±Π»Π°ΠΊΠ°) улавя Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ с Π΄Π°Π½Π½ΠΈ Π² послСдоватСлСн ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ ΠΈ Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎ-Π±ΡŠΡ€Π·Π° Π·Π° Π³ΠΎΠ»Π΅ΠΌΠΈ Π½Π°Π±ΠΎΡ€ΠΈ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ, Π½ΠΎ изисква ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡŠΡ‚ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π° Π΅ Π² послСдоватСлно ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅.

    Как Π΄Π° провСря коя вСрсия Π½Π° MongoDB Π΅ инсталирана?

    Π˜Π·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ слСдната ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°:

    mongod --version

    Или ΠΎΡ‚ Π²ΡŠΡ‚Ρ€Π΅ Π² mongosh:

    db.version()