sql >> Databáze >  >> NoSQL >> MongoDB

Jak nasadit otevřenou databázi edX MongoDB pro vysokou dostupnost

Open edX je platforma, která poskytuje masivně škálovatelnou výukovou softwarovou technologii za edX. Projekt Open edX je webová platforma pro vytváření, poskytování a analýzu online kurzů. Je to software, který pohání edx.org a mnoho dalších online vzdělávacích stránek.

Dříve jsme blogovali o nasazení databáze High Availability for MySQL na platformě Open edX. Jak již bylo řečeno, je to komplexní platforma, protože pokrývá více komponent a část této obrovské platformy je pokryta více službami:

  • elektronický obchod:https://github.com/edx/ecommerce
  • Katalog:https://github.com/edx/course-discovery
  • LMS / Studio:https://github.com/edx/edx-platform
  • Přihlašovací údaje:https://github.com/edx/credentials
  • Statistiky:https://github.com/edx/edx-analytics-dashboard
  • Analytics API:https://github.com/edx/edx-analytics-data-api

Open Edx je v podstatě ideální pro online kurzy uprostřed pandemie a online školení, protože jste si to mohli vyzkoušet a již absolvovat, zvláště pokud získáváte certifikaci produktu.

Stručný přehled architektury

Ústředním prvkem architektury Open edX je platforma edx, která obsahuje aplikace pro správu výuky a vytváření kurzů (LMS a Studio). Technické služby tvořící celou platformu zahrnují kromě své platformy edx různé zapojené technologie, které pokrývají celou komplexní úroveň tohoto softwaru. Podívejte se na níže uvedený diagram převzatý z prezentace týmu edX v prosinci minulého roku.

Máte Snowflake, Amazon RDS, MongoDB, Amazon S3, Elasticsearch, Memcached a Redis jako technologie ztělesňující tuto bohatou platformu. Přesto je dokonce těžké nainstalovat a nastavit Open edX, ale podařilo se mi vytvořit jednoduché vývojové prostředí, abych trochu porozuměl této platformě.

Zatímco se zaměřme na MongoDB, který se používá k ukládání obsahu pro fóra, strukturu kurzu a aktiva kurzu. Data pro jednotlivé studenty jsou uložena v MySQL, takže pokud chcete vědět a mít vysokou dostupnost pro své MySQL s Open edX, přečtěte si je zde.

Ukládání obsahu pro MongoDB

MongoDB je databáze, kterou si Open edX vybrala pro ukládání velkých souborů, kterými jsou textové soubory, soubory PDF, audio/video klipy, tarbally atd. Pokud znáte Open edX a používali jste jej zejména jako autor pro LMS nebo Studio, data se uloží, pokud nahrajete podklady do nastavení Open edX. Tyto uploady se nazývají „contentstore“, což je v podstatě instance GridFS podporovaná MongoDB. Open edX používá MongoDB GridFS k ukládání dat souborů v blocích v rámci instance MongoDB a je schopen ukládat soubory větší než 16 MB. Může také obsluhovat části velkých souborů místo celého souboru.

Dílo lze nahrát jako „uzamčené“ nebo „odemčené“. Uzamčené aktivum je k dispozici pouze studentům, kteří absolvují určitý kurz – platforma edx před poskytnutím souboru zkontroluje roli uživatele. Odemčená aktiva jsou na požádání poskytnuta každému uživateli. Když student v kurzu požádá o aktivum, celé aktivum se obslouží z GridFS.

Nastavení vysoké dostupnosti pro vaši otevřenou databázi edX MongoDB

Přiznejme si, že instalace nebo nastavení vaší platformy Open edX je velkou výzvou. Je to těžké zejména proto, že jste s touto platformou nebo softwarem noví, ale má velmi skvělý architektonický design. Je však možné, že vaše nastavení s MongoDB je jako primární stojan Replica Set s jedním uzlem. Na druhou stranu je nejlepší, když vaše sada replik musí mít alespoň sekundární nebo více sekundárních uzlů kromě primárního. To slouží vašemu nastavení vysoké dostupnosti v případě, že váš primární přejde kaput, váš sekundární uzel repliky převezme primární roli.

Nastavení sady replik se sekundárními replikami

K tomu stačí přidat a nastavit alespoň dvě sekundární repliky. Ideální je, že alespoň v sadě replik máte 3 uzly, z nichž jeden je vaším primárním uzlem a další dva uzly jsou vašimi sekundárními uzly replikujícími se do primárního. To umožňuje sadě MongoDB Replica pokračovat ve volbách v případě, že primární ztratí spojení se svými sekundárními. To vám dává spolehlivost, redundanci a samozřejmě vysokou dostupnost. Je to jednoduché nastavení, které můžete mít k dosažení vysoce dostupného prostředí s MongoDB.

Proč to zajišťuje vysokou dostupnost? Sada replik v MongoDB je skupina procesů mongod, které udržují stejnou datovou sadu. Sady MongoDB Replica používají volby k určení, který člen sady se stane primárním v případě, že primární selže nebo se abnormálně ukončí nebo se změní konfigurace. Sady replik mohou vyvolat volby v reakci na různé události, jako například:

  • Přidání nového uzlu do sady replik,
  • spuštění sady replik,
  • provádění údržby sady replik pomocí metod jako rs.stepDown() nebo rs.reconfig() a
  • sekundární členové ztratí připojení k primárnímu po dobu delší, než je nakonfigurovaný časový limit (ve výchozím nastavení 10 sekund).

Vezměte si tento příklad diagramu, který znázorňuje, jak volby fungují.

Obrázek s laskavým svolením dokumentace MongoDB

Další sekundární repliky můžete navíc použít jako vaše preference čtení, ale to závisí na nastavení založeném na připojení vašeho klienta. Více se můžete dozvědět přečtením možností předvolby čtení pro připojení nebo zaškrtnutím předvolby čtení zde.

Nyní to vypadá skvěle, ale práce s koncovým bodem aplikačního klienta, jako je změna názvu hostitele nebo IP adresy, vyžaduje ruční změnu. Není ideální, pokud máte na své Replica Set vyrovnávač zátěže stejně jako HaProxy, protože MongoDB Replica Set provádí interně volby MongoDB.

Nastavení sdíleného clusteru

Sharded cluster je ideální, pokud pracujete s velkou velikostí datových sad. Ačkoli to neznamená, že musíte navrhnout sdílený cluster, musí se zabývat velkými soubory dat. MongoDB nabízí mongos, což je utilita, která bude fungovat jako směrovací služba pro konfigurace fragmentů MongoDB, která zpracovává dotazy z aplikační vrstvy a poté určuje umístění těchto dat ve sdíleném clusteru identifikovaném pomocí jeho shard klíče za účelem dokončení transakcí nebo databáze. operace. V podstatě si představte, že instance mongos se chovají identicky jako jakákoli jiná instance MongoDB.

Proč tedy mít před aplikací mongo? V době, kdy se vaše replika po volbách změní primární název hostitele nebo IP, z pohledu aplikace to znamená, že musíte změnit také koncový bod. S mongos jednoduše nasměrujte svého aplikačního klienta na jednu z našich instancí mongos. Váš aplikační klient komunikuje pouze s instancí mongos a to je vše, na čem záleží. Mongos bude ten, kdo bude zpracovávat vaše požadavky na dotazy nebo transakce s využitím svého účelu a funkce pro vaše nastavení MongoDB Shard. To znamená, že v konfiguračních souborech Open edx není třeba provádět žádné změny. Nemusíte restartovat své aplikační servery, abyste dohnali změny z vašich sad replik MongoDB.

Jak nastavit vysokou dostupnost

Například pomocí ClusterControl. Použití ClusterControl lze dosáhnout jednoduše a efektivně, protože to lze provést přes uživatelské rozhraní a vyhnout se tak ručním konfiguracím a instalacím pro velmi složité nastavení.

Předpokládejme, že máte existující instanci MongoDB s existující databází 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

}

Můžete to jednoduše importovat jako existující databázi do ClusterControl a vytvořit zálohu pomocí funkce zálohování ClusterControl. Případně můžete použít mongodump nebo zkusit použít Percona Backup pro MongoDB.

Nyní v ClusterControl vytvořte MongoDB Shard jako nové nasazení. To lze provést pomocí následujících kroků:

  1. Nasaďte nový MongoDB Shard v dialogovém okně průvodce nasazením.

  1. Nastavte nastavení SSH a jeho konfigurační servery a směrovače. Zde budou vaše instance mongos kromě vašich konfiguračních serverů.

  1. Definujte své úlomky. Toto jsou vaše fragmenty sady replik. V závislosti na vaší potřebě. Například v tomto nasazení jsem nasadil dva fragmenty, ale pro začátek můžete použít pouze jeden fragment, zejména pro malá nasazení.

  1. Definujte nastavení databáze

V tuto chvíli stiskněte tlačítko nasazení a počkejte, až ClusterControl zpracuje úlohu.

  1. Po dokončení můžete nyní obnovit zálohu, kterou jste převzali z mongodump. Vzal jsem například zálohu pomocí ClusterControl a pak jsem ji použil jako svou zdrojovou zálohu. Při použití příkazu mongorestore se ujistěte, že váš cílový hostitel je jednou z vašich instancí mongos. Pro tento příklad nasazení mám hostitele 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. Nyní jste připraveni a poté proveďte nějaké změny v konfiguračních souborech Open edX . V nastavení instalace můžete aktualizovat soubory /edx/etc/studio.yml a  /edx/etc/lms.yml. Možná budete muset změnit také soubory v souborech /edx/app/edxapp/lms.auth.json a /edx/app/edxapp/cms.auth.json a nahradit je správným názvem hostitele vaší instance mongos.

  2. Ověřte ve svých mongoch a zkontrolujte, zda jsou databáze načteny a zda jsou přístupné,

[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

Nyní jste připraveni!!!

Ve webovém zobrazení také ClusterControl, jakmile ClusterControl dokončí nasazení, budete mít topologii, která bude vypadat takto,

Po dokončení můžete spravovat svůj Open edX a spravovat vaše kurzy!


  1. Přístup k MongoDB z Go

  2. Co je třída Hadoop Reducer v MapReduce?

  3. Jak implementovat MongoDB vnořený $elemMatch Query v C#

  4. flushdb nevymaže všechny klíče v redis?