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

Как да разположите Open edX MongoDB база данни за висока наличност

Open edX е платформа, която предоставя масово мащабируемата софтуерна технология за обучение зад edX. Проектът Open edX е уеб-базирана платформа за създаване, предоставяне и анализиране на онлайн курсове. Това е софтуерът, който захранва edx.org и много други онлайн образователни сайтове.

Предихме блогове относно внедряването на база данни с висока достъпност за MySQL на платформата Open edX. Както беше казано по-горе, това е сложна платформа, тъй като обхваща множество компоненти и част от тази огромна платформа е покрита от множество услуги:

  • Електронна търговия:https://github.com/edx/ecommerce
  • Каталог:https://github.com/edx/course-discovery
  • LMS/Студио:https://github.com/edx/edx-platform
  • Идентификационни данни:https://github.com/edx/credentials
  • Прозрения:https://github.com/edx/edx-analytics-dashboard
  • API за анализи:https://github.com/edx/edx-analytics-data-api

По същество Open Edx е идеален за онлайн курсове на фона на пандемия и онлайн обучение, тъй като това, което може да сте опитали и взели вече, особено ако придобивате сертификат за продукт.

Кратък архитектурен преглед

В центъра на Open edX архитектурата е edx-платформата, която съдържа приложенията за управление на обучението и за създаване на курсове (съответно LMS и Studio). Освен своята edx-платформа, техническите услуги, включващи цялата платформа, включват различни технологии, които покриват цялото сложно ниво на този софтуер. Вижте диаграмата по-долу, взета от презентацията на екипа на edX миналия декември.

Имате Snowflake, Amazon RDS, MongoDB, Amazon S3, Elasticsearch, Memcached и Redis като технологиите, въплъщаващи тази богата платформа. И все пак е дори трудно да се инсталира и настрои Open edX, но успях да създам проста среда за разработка, за да разбера част от тази платформа.

Въпреки това, нека се съсредоточим върху MongoDB, който се използва за съхраняване на съдържание за форуми, структура на курса и активи на курса. Данните за всеки учащ се съхраняват в MySQL, така че ако искате да знаете и да имате висока наличност за вашия MySQL с Open edX, прочетете ги тук.

Съхранение на съдържание за MongoDB

MongoDB е избраната от Open edX база данни за съхранение на големи файлове, които са текстови файлове, PDF файлове, аудио/видео клипове, tarballs и др. Ако сте запознати с Open edX и сте го използвали особено като автор за LMS или Studio, данните се съхраняват, ако качите активи във вашата настройка на Open edX. Тези качвания са така наречените "contentstore" е основно поддържан от MongoDB GridFS екземпляр. Open edX използва MongoDB GridFS, за да съхранява файлови данни на парчета в рамките на екземпляр на MongoDB и може да съхранява файлове с размер, по-голям от 16 MB. Може също да обслужва части от големи файлове вместо целия файл.

Актив може да бъде качен като "заключен" или "отключен". Заключен актив е достъпен само за студенти, които посещават конкретен курс - edx-платформата проверява ролята на потребителя, преди да обслужва файла. Отключените активи се предоставят на всеки потребител при поискване. Когато студент в курс поиска актив, целият актив се обслужва от GridFS.

Настройване на висока наличност за вашата Open edX MongoDB база данни

Нека признаем, че инсталирането или настройката на вашата Open edX платформа е голямо предизвикателство. Особено трудно е, че сте нов в тази платформа или софтуер, но има много страхотен архитектурен дизайн. Възможно е обаче вашата настройка с вашия MongoDB да е стойка за комплект реплики с един възел като основна. От друга страна, най-добре е вашият набор от реплики да има поне вторичен или множество вторични възли освен основния. Това обслужва вашата настройка за висока наличност, в случай че вашият първичен е капут, вашият вторичен реплика възел ще поеме основната роля.

Настройте набор от реплики с вторични реплики

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

Защо това осигурява висока наличност? Наборът реплики в MongoDB е група от процеси на mongod, които поддържат един и същ набор от данни. Наборите реплики на MongoDB използват избори, за да определят кой член на набора ще стане основен в случай, че първичният спадне или прекъснат необичайно или някои промени в конфигурацията. Наборите реплики могат да задействат избори в отговор на различни събития, като например:

  • Добавяне на нов възел към набора от реплики,
  • иницииране на набор от реплики,
  • извършване на поддръжка на набор от реплики с помощта на методи като rs.stepDown() или rs.reconfig() и
  • вторичните членове губят връзка с основния за повече от конфигурираното време за изчакване (10 секунди по подразбиране).

Вземете тази примерна диаграма, която визуализира как протичат изборите.

Изображението е предоставено от документацията на MongoDB

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

Сега това изглежда страхотно, но справянето с крайната точка на клиента на приложението, като например промяна на името на хоста или IP адреса, изисква ръчна промяна. Не е идеално, ако имате балансьор на натоварване върху вашия набор от реплики, точно както HaProxy, тъй като MongoDB Replica Set извършва избора вътрешно на MongoDB.

Настройте разделен клъстер

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

И така, защо да имате mongos пред приложението си? В моменти, когато вашата реплика е задала Основно име на хост или IP се променят след избора, от гледна точка на приложението, това означава, че трябва да промените и крайната точка. С mongos, просто насочете клиента на приложението си към един от нашите mongos екземпляри. Вашият клиент на приложението взаимодейства само с екземпляра на mongos и това е всичко, което има значение. Mongos ще бъде този, който ще обработва вашите заявки или транзакции, като използва своята цел и функция за вашата настройка на MongoDB Shard. Това означава, че във вашите конфигурационни файлове на Open edx няма да се правят промени. Не е необходимо да рестартирате сървърите на приложения, за да наваксате промените от вашите MongoDB реплики.

Как да настроите висока наличност

Например с помощта на ClusterControl. Използването на ClusterControl може да се постигне просто и ефективно, тъй като това може да се направи през потребителския интерфейс, като се избягват тези ръчни конфигурации и инсталации за много сложна настройка.

Да приемем, че имате съществуващ екземпляр на MongoDB със съществуваща база данни Open edX,

rs0:PRIMARY> show dbs;

admin                0.000GB

cs_comments_service  0.000GB

edxapp               0.087GB

local                0.118GB



rs0:PRIMARY> rs.status()

{

        "set" : "rs0",

        "date" : ISODate("2021-01-22T14:46:51.398Z"),

        "myState" : 1,

        "term" : NumberLong(17),

        "heartbeatIntervalMillis" : NumberLong(2000),

        "members" : [

                {

                        "_id" : 0,

                        "name" : "192.168.40.10:27017",

                        "health" : 1,

                        "state" : 1,

                        "stateStr" : "PRIMARY",

                        "uptime" : 133,

                        "optime" : {

                                "ts" : Timestamp(1611326680, 1),

                                "t" : NumberLong(17)

                        },

                        "optimeDate" : ISODate("2021-01-22T14:44:40Z"),

                        "electionTime" : Timestamp(1611326679, 1),

                        "electionDate" : ISODate("2021-01-22T14:44:39Z"),

                        "configVersion" : 2,

                        "self" : true

                }

        ],

        "ok" : 1

}

Можете просто да импортирате това като съществуваща база данни в ClusterControl и да направите резервно копие, като използвате функцията за архивиране на ClusterControl. Като алтернатива можете да използвате mongodump или да опитате да използвате Percona Backup за MongoDB.

Сега, в ClusterControl, създайте MongoDB Shard като ново внедряване. Това може да стане чрез следните стъпки:

  1. Разгръщане на нов MongoDB Shard в диалоговия прозорец на съветника за внедряване.

  1. Настройте настройките на SSH и неговите конфигурационни сървъри и рутери. Това е мястото, където вашите mongos екземпляри ще бъдат встрани от вашите конфигурационни сървъри.

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

  1. Определете настройките на вашата база данни

В този момент натиснете бутона за разгръщане и просто изчакайте, докато заданието се обработи от ClusterControl.

  1. След като приключите, вече можете да възстановите архива, който сте взели от mongodump. Например, направих резервно копие с помощта на ClusterControl и след това използвах това като резервно копие на източника. Когато използвате командата mongorestore, уверете се, че вашият дестинационен хост е един от вашите mongos екземпляри. За това примерно внедряване имам хост 192.168.40.233.

$ mongorestore --host 192.168.40.233 --port 27017 --username <username> --password <password> --gzip  --archive=BACKUP-2/rs0.gz --authenticationDatabase=admin

2021-01-22T11:17:06.335+0000    preparing collections to restore from

2021-01-22T11:17:06.336+0000    don't know what to do with subdirectory "cs_comments_service", skipping...

2021-01-22T11:17:06.336+0000    don't know what to do with subdirectory "edxapp", skipping...

2021-01-22T11:17:06.337+0000    don't know what to do with subdirectory "admin", skipping...

2021-01-22T11:17:06.337+0000    don't know what to do with subdirectory "", skipping...

2021-01-22T11:17:06.372+0000    restoring to existing collection edxapp.modulestore.definitions without dropping

2021-01-22T11:17:06.372+0000    reading metadata for edxapp.modulestore.definitions from archive 'BACKUP-2/rs0.gz'

2021-01-22T11:17:06.373+0000    restoring edxapp.modulestore.definitions from archive 'BACKUP-2/rs0.gz'

2021-01-22T11:17:06.387+0000    restoring to existing collection edxapp.fs.chunks without dropping

2021-01-22T11:17:06.387+0000    reading metadata for edxapp.fs.chunks from archive 'BACKUP-2/rs0.gz'

…

……
  1. Сега сте готови и след това направете някои промени в конфигурационните си файлове на Open edX . В моята инсталационна настройка можете да актуализирате /edx/etc/studio.yml и  /edx/etc/lms.yml. Може да се наложи да промените и файловете във файловете /edx/app/edxapp/lms.auth.json и /edx/app/edxapp/cms.auth.json и да ги замените с правилното име на хост на вашия mongos екземпляр.

  2. Проверете във вашите mongos и проверете дали базите данни са заредени и могат да бъдат достъпни,

[email protected]:~# mongo --host "mongodb://edxapp:[email protected]:27017/?authSource=admin"

MongoDB shell version v4.2.11

connecting to: mongodb://192.168.40.233:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb

Implicit session: session { "id" : UUID("00a3a395-3531-4381-972e-502478af38d1") }

MongoDB server version: 4.2.11

mongos> show dbs

admin                0.000GB

config               0.002GB

cs_comments_service  0.000GB

edxapp               0.104GB

Сега сте готови!!!

В уеб изгледа също на ClusterControl, след като ClusterControl завърши внедряването, ще имате топология, която ще изглежда така,

След като сте готови, всички сте готови да управлявате своя Open edX и да управлявате вашите курсове!


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $subtract

  2. неуспешно с грешка 10068:невалиден оператор:$oid

  3. Как да започнете с ClusterControl

  4. Какви знаци НЕ са разрешени в имената на полета в MongoDB?

  5. Cassandra срещу MongoDB:кое да изберете