Как да настроите и оптимизирате MongoDB на публични сървъри в облака

Отдавна са отминали дните, в които MongoDB е бил „новото хлапе в блока“. Днес MongoDB вече е стандартно решение за много хора, които оставят релационните бази данни на заден план. В тази статия няма да се извеждат аргументи за това защо трябва да използвате MongoDB вместо която и да е друга база от данни, която не е SQL, или дори няма да обясняваме защо трябва да използвате база от данни, която не е SQL вместо релационна база данни. Просто ще приемем, че вече сте направили вашите проучвания и сте стигнали до извода, че MongoDB е най-доброто решение за вас.

Преди да започнем, нека да се върнем назад и да разгледаме различните компоненти на MongoDB. Ще се придържаме към простите неща и ще оставим настрана темите за напреднали, такива като разлистването. 

Когато въвеждате MongoDB в производство, трябва да използвате една настройка наречена Replica Set. Replica Set е еквивалентът на ‘Master/Slave’ настройката на MongoDB в релационния свят, но за разлика от там при MongoDB настройката е по-лесна, защото всичко е подготвено.

Планиране на MongoDB Cloud Server Cluster

За да настроите Replica Set се нуждаете от три възела (или два възела и арбитър). Тези възли могат да работят на почти всяка операционна система, която искате. В този случай ние ще използваме Ubuntu 14.04, но имайте предвид че повечето от съветите в настоящата статия важат за която и да е Linux дистрибуция. Важно е да предоставите на възлите еднакво количество ресурси, защото всеки от тях може да се превърне в основен (което е еквивалентът на ‘Master’ в MongoDB).

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

Важно е също така да използвате 64-битова версия на Linux. Причината за това е проста – MongoDB не работи добре с 32-битови системи (повече за това тук).

Инсталиране MongoDB в облака

Тази задача е доста лесна. Избирате или да използвате един от предварително конфигурираните Ubuntu 14.04 изображения, или го инсталирате сами.

CPU, RAM и конфигурацията на диска е индивидуална и зависи от това колко искате да натоварите машината си. За по-малка конфигурация, 4 GHz CPU, 4 GB RAM и 40 GB диск (за системата) би трябвало да са достатъчни. Когато прикрепвате дисковете, уверете се, че използвате VirtIO. Ако използвате IDE, производителността ще пострада значително. Също така, тъй като създаваме Replica Set, нужно е всички възли (също и тези на сървърите с приложението) да бъдат на един и същи VLAN.

Противно на много други доставчици на облачни услуги, при нас няма нужда да конфигурирате дисковете си с RAID10 или нещо подобно, за да подобрите производителността си. Ако просто ползвате SSD дисковете на CloudSigma, ще се радвате на изключително висока производителност без допълнителни настройки.

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

С оглед на това, най-лесно е просто да добавите този диск след като сте настроили вашите сървъри. Засега просто се съсредоточете върху инсталирането на системата. Ако ще я инсталирате сами (вместо да използвате предварително конфигурираната система) препоръчваме ви да натиснете F4 в менюто за зареждане и да изберете “install a minimal virtual machine”.

След като сте готови с инсталацията, добавете вашия диск с данни. Размерът много зависи от това колко го използвате, но за малка система 20 GB вероятно ще бъдат достатъчни. Тъй като понякога е трудно да се предскаже колко данни ще се съхраняват, ние ще използваме LVM. Това ще ни позволи просто да добавим друг диск по-късно и да разширим обема без да се налага да започваме отначало. Също така, може да използвате един диск и просто да го преоразмерите по-късно с:resize2fs.

След като сме прикрепили диска (който ще се появи като /dev/vdb), към системата, следва да го настроим по оптимален начин. Първо трябва да инициализираме диска. За целта можете да ползвате програмка по желание. Ние предпочитаме fdisk. С fsidk просто изпълнете следната команда:

[bash] $ sudo fdisk /dev/vdb
[/bash]

Използването на fdisk е доста просто:

След като дискът е разделен трябва да се създаде LVM пространство. Това е доста просто. Заменете ‘N’ в командата ‘lvcreate’ с размера на вашия диск.

[bash] $ sudo pvcreate /dev/vdb1
$ sudo vgcreate mongodb /dev/vdb1
$ sudo lvcreate -n db -L Ng mongodb
[/bash]

След изпълнението на горните команди, вече ще имате създадено ново устройство наречено /dev/mongodb/db. Сега трябва да форматирате това устройство с ext4 (не използвайте ext3, тъй като става много по-бавно). За да направите това, просто изпълнете следната команда:

[bash] $ sudo mkfs.ext4 /dev/mongodb/db
[/bash]

Почти сме готови с настройките. Единственото, което остава, е да се създаде точка на монтиране. Добавете диска към fstab, и накрая закачете диска:

[bash] $ sudo mkdir /mongodb
$ echo -e ‘/dev/mongodb/dbt/mongodbtext4tdefaults,auto,noatime,noexec,nodiratimet0t0’ | sudo tee -a /etc/fstab
$ sudo mount /mongodb
[/bash]

Инсталиране на MongoDB

С вече подготвената система може да продължим към инсталирането на MongoDB. Ubuntu предлага версия на MongoDB в собствения си архив, но ние ви препоръчваме да използвате официалната MongoDB версия. Причината е, че архивът със софтуерни версии на Ubuntu не е напълно актуален, така че ако искате да се възползвате от възможно най-доброто от MongoDB, по-добре е да заложите на официалните версии.

MongoDB предлагат собствен архив, затова можем просто да го добавим към нашата система и да инсталираме MongoDB както обикновено:

[bash] $ sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv 7F0CEB10
$ echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org
[/bash]

Ако приемем, че не сте се сблъскали с някакви проблеми с горните команди, вече трябва да сте инсталирали MongoDB на вашата система. Сега трябва да го конфигурирате така, че данните да се съхраняват на диска, който сме създали по-горе.

[bash] $ sudo service mongodb stop
$ sudo mkdir /mongodb/data
$ sudo chown -R mongodb:mongodb /mongodb/data
$ sudo sed -i ‘s/dbpath=/var/lib/mongodb/dbpath=/mongodb/data/g’ /etc/mongodb.conf
$ sudo service mongodb start
[/bash]

Сега би трябвало да имате MongoDB инсталиран, като данните се съхраняват в отделения диск, който създадохме. Ако очаквате повече натоварване и / или много връзки, може да се наложи да повишите ulimit стойностите.

Ако искате да получите повече информация за вашите данни, може да разгледате MongoDB MMS. Това е безплатна облачно базирана услуга за наблюдение на MongoDB.

Създаване на Replica Set за вашия MongoDB облак

Преди да почнете създаването на Replica Set, трябва да се уверете, че всичкитe три възeлa могат да комуникират помежду си по вътрешната мрежа. Настройването на това варира в зависимост от разпределението и структурата на вашата мрежа. Инструкциите за настройването на Ubuntu могат да бъдат намерени тук.

Да приемем, че вашата мрежа е правилно настроена. За по-лесно нека предположим, че сте кръстили сървърите си: mongo0, mongo1 и mongo2. Също така, нека приемем, че имате настроен DNS или записите са добавени към /etc/hosts, така че да осъществяват връзка помежду си.

Ако сте активирали защитната стена (което препоръчваме да направите), уверете се, че възлите могат да изпращат и получават TCP трафик на порт 28017 и 27017 на вътрешния интерфейс.

След като се уверите, че нещата от по-горе са направени, следва да конфигурирате MongoDB да се използва и като Replica Set. За целта трябва да направите две неща. Първо, трябва да се каже каква част от Replica Set е MongoDB и второ – да се инциализира Replica Set.

Да започнем с позволяването на функцията Replica Set и да извикаме нашия Replica Set ‘MyReplSet’:

[bash] $ echo -e ‘replSet = MyReplSet’ | sudo tee -a /etc/mongodb.conf
$ sudo service mongodb restart
[/bash]

MongoDB сега осъзнава, че е част от Replica Set. Това трябва да се направи на всички възли в клъстера.

Когато е готово всичко това, трябва да инициализираме Replica Set. Това може да бъде направено от всеки възел, но в този пример, ние ще го направим от ‘mongo0’.

[bash] $ mongo
[/bash] В рамките на MongoDB трябва да се добавят два други възела на Replica Set:

След това можете да следите статуса с помощта на командата rs.status().

Това е всичко. Сега би трябвало вашият сървър да работи с MongoDB клъстер на нашия невероятно бърз облак.

About Viktor Petersson

Former VP of Business Development at CloudSigma. Currently CEO at WireLoad and busy making a dent in the Digital Signage industry with Screenly. Viktor is a proud geek and loves playing with the latest technologies.