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

Самостоятелно хостван MongoDB

Вероятно хоствате своя MongoDB на надежден доставчик на облачни услуги, да речем Atlas например, защото наистина искате да се съсредоточите върху идеята си и да делегирате всички фини ключови области за управление, като работа в мрежа, съхранение, достъп и т.н.

Първоначално всичко изглежда добре, докато малката ви идея не започне да се превръща в бизнес и цената не започне да скача до небето. Дори и да не е така, тази публикация пак ще ви даде общ преглед на техническите сложности (и спестени пари!), ако трябва да мигрирате към самостоятелно хоствано решение.

Между другото, за колко спестявания говорим? Нека направим бързо сравнение между Атлас екземпляр и самостоятелно хостван MongoDB на AWS .

Атлас (~166$/месец)

$0,23/час въз основа на избраните по-горе изисквания (~ cloud.mongodb.com)



AWS (~36$/месец)

$0,0416/час за екземпляра и допълнителни цени въз основа на типа EBS и съхранение (~ calculator.aws)

Това е почти 4,5 пъти спестяване само по отношение на инфраструктурата!

Сега, след като знаете основната причина(и) и все още четете тази публикация, без повече приказки, нека се потопим в технологията.

Контур

  1. Настройване на инфраструктурата
  2. Настройване на MongoDB
  3. Групова миграция
  4. Delta-sync за преодоляване на латентността на превключвателя на връзката (не е приложимо за остарели клъстери)

Тъй като цялото съдържание може да бъде малко изтощително на едно място, ще разделя това на 2 свързани публикации.

1. Създаване на инфраструктура

Ще спомена по-долу ръководството за настройка на екземпляр, работещ с RedHat Enterprise Linux 8 на AWS. Това е така, защото MongoDB обикновено работи по-добре с файловата система xfs. Ето една статия, за да го разберете по-добре.

Завъртете екземпляр EC2

Използвах t3.small екземпляр, който идва с 2 vCPU и 2Gb RAM въпреки че можете да изберете всеки екземпляр по ваш избор.

Препоръчително е вашата БД да има достъп до поне 1GB RAM и2 истински ядра тъй като това пряко засяга производителността по време на механизмите за кеширане и едновременност, както се обработва от механизма по подразбиране WiredTiger . Можете да прочетете повече за бележки за производството, свързани с изискванията за RAM и CPU тук .

Общ преглед на конфигурацията:

  • ОС:Redhat Enterprise Linux 8 (x64 базирана на Intel)
  • Тип на екземпляра:t3.small
  • Съхранение:10 GB (os) + 30GB (данни) + 3GB (регистрационни файлове) на EBS т.е. 3 отделни тома

Предполагам, че сте запознати със създаването на VM в AWS.

Сега, след като екземплярът е в състояние на работа, задайте Еластичен IP към него и след това просто направете дистанционно влизане в машината.

Ще ни трябва Elastic IP за да настроите публично име на хост за екземпляра

$ ssh -i <PEM_FILE> ec2-user@<ELASTIC_IP>

Монтиране на допълнителни томове

Добавихме 2 допълнителни EBS тома, различни от Root FS за данни и регистрационни файлове, които тепърва ще бъдат монтирани (Помните ли 30Gb и 3Gb? ). Можете да изброите блоковете за сила на звука, като използвате,

$ sudo lsblk

Допълнителните томове ще бъдат изброени непосредствено след основния блок (вижте стрелките)

На изображението по-горе можете да видите, че допълнителните томове са наименувани

  1. xvdb (30Gb пространство за съхранение на данни)
  2. xvdc (3Gb пространство за съхранение на регистрационни файлове)

Сега нека създадем файловите системи в тези томове.

$ sudo mkfs.xfs -L mongodata /dev/xvdb
$ sudo mkfs.xfs -L mongologs /dev/xvdc

-L е опция за псевдоним за задаване на етикета на обема

И след това монтирайте томовете.

$ sudo mount -t xfs /dev/xvdb /var/lib/mongo
$ sudo mount -t xfs /dev/xvdc /var/log/mongodb

За да се отразят тези промени, системата трябва да се рестартира. Следователно, сега се нуждаем и от постоянството на дяла, така че в случай на неволно рестартиране да не загубим хранилището на базата данни.

Можем да постигнем това, като посочим правилата за монтиране във файла fstab. Можете да прочетете повече за това тук.

Преди това нека копираме UUID на горните дялове (защото са уникални и няма да се променят при рестартиране на системата )

$ sudo blkid

Копирайте UUID, изброени за /dev/xvdb и /dev/xvdc . Вижте ЕТИКЕТ” за идентификация на блок

Сега отворете /etc/fstab файл и поставете конфигурацията в следния формат.

UUID=<COPIED_UUID_FOR_DATA> /var/lib/mongo xfs defaults,nofail 0 0
UUID=<COPIED_UUID_FOR_LOGS> /var/log/mongodb xfs defaults,nofail 0 0

Актуализиране на името на хоста

Името на хоста ще се използва за идентифициране на вашия сървър на база данни в мрежата. Можете да използвате или присвоения по-горе Еластичен IP или Име на домейн (ако е налично). Отворете /etc/hostname файл и добавете записа. Например

ip-xx.us-east-2.compute.internal **<ELASTIC_IP> <DOMAIN_1> <DOMAIN_2>** ...

Актуализиране на ограниченията на процеса (по избор)

Това се изисква по избор, за да контролирате максималния брой приемливи връзки, като същевременно поддържате системата стабилна. Отворете /etc/security/limits.conf файл и добавете следните записи.

* soft nofile 64000
* hard nofile 64000
* soft nproc 32000
* hard nproc 32000

След като всички предпоставки, свързани с инфра, са сортирани, рестартирайте екземпляра и нека продължим към инсталацията на MongoDB.

1. Настройка на MongoDB

Добавяне на източника на репо

Създайте файл /etc/yum.repos.d/mongodb-org.4.2.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.

$ sudo yum -y install mongodb-org

Създаване на директории и разрешения за настройка

MongoDB по подразбиране използва следните пътища за съхранение на данните и вътрешните регистрационни файлове:

/var/lib/mongo → Данни
/var/log/mongodb → Регистри

Създайте директории

$ sudo mkdir /var/lib/mongo
$ sudo mkdir /var/log/mongodb

Промяна на разрешенията за потребители и групи

$ sudo chown mongod:mongod /var/lib/mongo
$ sudo chown mongod:mongod /var/log/mongod

Създаване на потребител с администратор

Демонът/услугата mongod трябва първо да се стартира, преди да продължим да създаваме потребител. Нека използваме конфигурацията по подразбиране (съхранена в /etc/mongod.conf ) засега и стартирайте процеса на демона.

$ sudo -u mongod mongod -f /etc/mongod.conf

Горната команда ще стартира демона mongod в режим на вилка (по подразбиране).

Сега нека да влезем в сървъра и да създадем първия си администратор.

Отворете монго черупка

$ mongo

Използвайте базата данни „admin“, за да създадете root-admin

> use admin

Създаване на потребител с администратор

> db.createUser({user: "admin", pwd: "password", roles: [{role: "root", db: "admin"}]})

Създайте редовен потребител

> db.createUser({user: "normal_user", pwd: "password", roles: [{role: "readWriteAnyDatabase", db: "admin"}]})

Изключете сървъра засега. Ще рестартираме отново с модифицираната конфига

> db.shutDownServer()

Настройка на удостоверяване

Тук ще активираме удостоверяването на базата данни и ще променим адреса за свързване за нашия сървър, за да бъде достъпен в публичното пространство. Отворете /etc/mongod.conf и направете следните промени.

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0 # accessible on the network address
security:
  authorization: enabled # creds will be required for making db operations

Запазете конфигурацията и рестартирайте сървъра.

$ sudo -u mongod mongod -f /etc/mongod.conf

Тестово влизане

Можете да проверите дали идентификационните данни работят с помощта на,

$ mongo -u admin -p password

Това е всичко за първоначалната настройка! Моля, следете за следващата ми свързана публикация относно подробния процес на миграция и съвети как да поддържате БД готова за производство.

P.S. Благодарим на Пиюш Кумар за помощта за куратора на тази публикация!


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB findOneAndReplace()

  2. mongoDB различен и къде в същата заявка?

  3. Как да инсталирам по-ранна версия на mongodb с homebrew?

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

  5. Как да десериализирате обект на BsonDocument обратно в клас