MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Оптимизиране на вашата Linux среда за MongoDB

Производителността на MongoDB зависи от това как използва основните ресурси. Той съхранява данни на диск, както и в паметта. Той използва ресурсите на процесора за извършване на операции и мрежа за комуникация със своите клиенти. Трябва да има достатъчно ресурси за поддържане на неговата обща жизненост. В тази статия ще обсъдим различни изисквания за ресурси за системата на базата данни MongoDB и как можем да ги оптимизираме за максимална производителност.

Изисквания за MongoDB

Освен предоставянето на мащабни ресурси като RAM и CPU към базата данни, настройката на операционната система също може да подобри производителността до известна степен. Важните помощни програми, необходими за създаване на среда MongoDB, включват:

  1. Достатъчно дисково пространство
  2. Достатъчна памет
  3. Отлична мрежова връзка.

Най-често срещаната операционна система за MongoDB е Linux, така че ще разгледаме как да я оптимизираме за базата данни.

Състояние за рестартиране.

Има много техники за настройка, които могат да бъдат приложени към Linux. Въпреки това, тъй като някои промени се извършват без рестартиране на вашия хост, винаги е добра практика да рестартирате след извършване на промени, за да сте сигурни, че са приложени. В този раздел реализациите за настройка, които ще обсъдим, са:

  1. Мрежов стек
  2. NTP Daemon
  3. Linux User Limit
  4. Файлова система и опции
  5. Сигурност
  6. Виртуална памет

Мрежов стек

Както всеки друг софтуер, отличната мрежова връзка осигурява по-добър интерфейс за обмен на заявки и отговори със сървъра. Въпреки това, MongoDB не е предпочитан с настройките на мрежата по подразбиране на ядрото на Linux. Както показва името, това е подреждане от много слоеве, които могат да бъдат категоризирани в 3 основни:потребителска област, зона на ядрото и зона на устройството. Потребителската област и областта на ядрото се наричат ​​хост, тъй като техните задачи се изпълняват от процесора. Зоната на устройството е отговорна за изпращането и получаването на пакети чрез интерфейс, наречен Network Interface Card. За по-добра производителност със средата MongoDB, хостът трябва да бъде ограничен до ограничение на мрежовия интерфейс от 1Gbps. В този случай това, което трябва да настроим, са настройките за относителна пропускателна способност, които включват:

  1. net.core.somaxconn (увеличете стойността)
  2. net.ipv4.tcp_max_syn_backlog (увеличете стойността)
  3. net.ipv4.tcp_fin_timeout (намалете стойността)
  4. net.ipv4.tcp_keepalive_intvl (намалете стойността)
  5. net.ipv4.tcp_keepalive_time (намалете стойността)

За да направите тези промени постоянни, създайте нов файл /etc/sysctl.d/mongodb-sysctl.conf, ако не съществува и добавете тези редове към него.

net.core.somaxconn = 4096
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_max_syn_backlog = 4096

След това изпълнете командата като root потребител /sbin/sysctl -p, за да приложите промените за постоянно.

NTP Daemon

Протоколът за мрежово време (NTP) е техника, за която софтуерният часовник на Linux система се синхронизира със сървъри за време в интернет. MongoDB, тъй като е клъстер, зависи от съгласуваността във времето между възлите. Поради тази причина е важно NTP да се изпълнява постоянно на хостове на MongoDB. Значението на конфигурацията на NTP е да осигури непрекъснато обслужване на сървъра до определено време след прекъсване на връзката с мрежата. По подразбиране NTP е инсталиран от страна на клиента, така че за MongoDB да инсталира NTP на Linux система с Debian/Ubuntu вкус, просто изпълнете командата:

$ sudo apt-get install ntp

Можете да посетите ntp.conf, за да видите конфигурацията на NTP демона за различни ОС.

Linux User Limit

Понякога грешка от страна на потребителя може да повлияе на целия сървър и хост система. За да избегне това, системата Linux е проектирана да поеме някои ограничения на системните ресурси по отношение на процесите, които се изпълняват на базата на потребител. Тъй като това е очевидно, ще бъде неуместно да се разгръща MongoDB на такива системни конфигурации по подразбиране, тъй като това ще изисква повече ресурси от предоставената по подразбиране. Освен това MongoDB често е основният процес за използване на основния хардуер, следователно ще бъде преобладаващо оптимизирането на Linux системата за такава специална употреба. След това базата данни може да използва напълно наличните ресурси.

Въпреки това, няма да е удобно да деактивирате тези ограничения или да ги зададете на неограничено състояние. Например, ако се сблъскате с недостиг на памет на процесора или RAM, малка грешка може да ескалира в огромен проблем и да доведе до отказ на други функции – например SSH, който е жизненоважен за решаването на първоначалния проблем.

За да постигнете по-добри оценки, трябва да разберете изискванията за ограничения на ниво база данни. Например, оценка на броя на потребителите, които ще направят заявки към базата данни и времето за обработка. Можете да се обърнете към Ключови неща за наблюдение за MongoDB. Най-предпочитаната граница за max-user-processs и open-files е 64000. За да зададете тези стойности, създайте нов файл, ако той не съществува като /etc/security/limits.d и добавете тези редове

mongod       soft        nofile       64000
mongod       hard        nofile       64000
mongod       soft        nproc        64000
mongod       hard        nproc        64000

За да приложите тези промени, рестартирайте своя mongod, тъй като промените важат само за нови шелове.

Файлова система и опции

MongoDB използва 3 типа файлови системи, които са ext3, ext4 и XFS за данни на дисковата база данни. За механизма за съхранение на WiredTiger, използван за MongoDB версия, по-голяма от 3, XFS е най-добре да се използва, а не ext4, което се счита, че създава някои проблеми със стабилността, докато ext3 също се избягва поради лошата му производителност преди разпределение. MongoDB не използва техниката на файловата система по подразбиране за извършване на актуализация на метаданните по време на достъп като други системи. Следователно можете да деактивирате актуализациите на времето за достъп, за да спестите малкото количество дискова IO активност, използвана от тези актуализации.

Това може да стане чрез добавяне на флаг noatime към полето за опции на файловата система във файла etc/fstab за диска, обслужващ данни MongoDB.

$ grep "/var/lib/mongo" /proc/mounts
/dev/mapper/data-mongodb /var/lib/mongo ext4 rw, seclabel, noatime, data=ordered 0 0

Тази промяна може да бъде реализирана само когато рестартирате или рестартирате своя MongoDB.

Сигурност

Сред няколкото функции за сигурност, които Linux системата има, на ниво ядро ​​е Linux-Enhanced Linux. Това е реализация на фино-зърнест задължителен контрол на достъпа. Той осигурява мост към политиката за сигурност, за да се определи дали дадена операция трябва да продължи. За съжаление, много потребители на Linux настройват този модул за контрол на достъпа само да предупреждава или го деактивират напълно. Това често се дължи на някои свързани неуспехи, като например неочаквана грешка при отказано разрешение. Този модул, колкото и много хора да го игнорират, играе основна роля за намаляване на локалните атаки към сървъра. С активирана тази функция и съответните режими, зададени на положителни, тя ще осигури сигурен фон за вашия MongoDB. Следователно, трябва да активирате режима SELinux и също така да приложите режима Enforcing, особено в началото на вашата инсталация. За да промените режима SELinux на Enforcing:изпълнете командата

$ sudo setenforce Enforcing

Можете да проверите работещия режим SELinux, като стартирате

$ sudo getenforce
Severalnines Станете DBA на MongoDB – Пренасяне на MongoDB в Производството Научете какво трябва да знаете, за да внедрите, наблюдавате, управлявате и мащабирате MongoDB Изтеглете безплатно

Виртуална памет

Мръсно съотношение

MongoDB използва технологията за кеширане, за да подобри бързото извличане на данни. В този случай се създават мръсни страници и ще е необходима известна памет за тяхното съхранение. Следователно коефициентът на замърсяване се превръща в процента от общата системна памет, която може да побере мръсни страници. В повечето случаи стойностите по подразбиране са между (25 - 35)%. Ако тази стойност е надвишена, страниците се записват на диск и имат ефект на създаване на твърда пауза. За да избегнете това, можете да настроите ядрото винаги да изтрива данните чрез друго съотношение, наречено dirty_background_ratio, чиято стойност варира между (10% - 15%) спрямо диска във фонов режим, без непременно да създавате твърда пауза.

Целта тук е да се гарантира качествено изпълнение на заявката. Следователно можете да намалите съотношението на фона, ако вашата система от база данни ще изисква голяма памет. Ако е разрешена твърда пауза, може да имате дублирани данни или някои данни да не бъдат записани през това време. Можете също да намалите размера на кеша, за да избегнете честото записване на данни на диск на малки партиди, което може да доведе до увеличаване на пропускателната способност на диска. За да проверите текущата стойност, можете да изпълните тази команда:

$ sysctl -a | egrep “vm.dirty.*_ratio”

и ще ви бъде представено нещо подобно.

vm.dirty_background_ratio = 10
vm.dirty_ratio = 20

Размяна

Това е стойност, варираща от 1 до 100, за която може да се повлияе поведението на мениджъра на виртуалната памет. Задаването му на 100 означава принудителна смяна на диск и настройка на 0 насочва ядрото да разменя само за избягване на проблеми с липсата на памет. Диапазонът по подразбиране за Linux е 50 - 60 от които не е подходящ за системи с бази данни. В моя собствен тест настройката на стойността между 0 и 10 е оптимална. Винаги можете да зададете тази стойност в /etc/sysctl.conf

vm.swappiness = 5

След това можете да проверите тази стойност, като изпълните командата

$ sysctl vm.swappiness

За да приложите тези промени, изпълнете командата /sbin/sysctl -p или можете да рестартирате системата си.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Вграден документ без масив?

  2. MongoDB различен()

  3. Mongodb заявка конкретен месец|година не дата

  4. Има ли еквивалент на NOW() в MongoDB

  5. 5 начина да получите милисекунди от дата в MongoDB