Chamilo je, stejně jako Open edX nebo Moodle, platforma, která umožňuje vzdělávacím institucím přenést své vzdělávací aktivity na internet. Vzhledem k tomu, že většina vzdělávacích aktivit se v posledním roce přesunula online, není překvapivé, že vidíme stále více lidí, kteří se snaží rozšířit své vzdělávací platformy a zajistit lepší dostupnost.
Chamilo je platforma postavená na *AMP stacku, který se skládá z Apache, MySQL a PHP. Jako obvykle je databáze nejobtížnějším prvkem pro migraci do vysoce dostupného prostředí. V tomto krátkém blogu bychom rádi probrali, jak můžete zlepšit vysokou dostupnost databáze Chamilo.
Jak si dokážete představit, jediná databáze MySQL je jediným bodem selhání a jako takové je třeba se jí v produkčním nasazení vyhnout. Naštěstí existuje několik způsobů, jak můžete zlepšit dostupnost databáze MySQL.
Jedním ze způsobů, jak k problému přistoupit, je použít Galera Cluster. Minimální nasazení by se mělo skládat ze tří uzlů – takové clustery si automaticky poradí s výpadkem jednoho uzlu. Zbývající dva uzly budou nadále fungovat a reagovat na dotazy přicházející z aplikace.
Toto nastavení by vyžadovalo nějaký vyvažovač zátěže před clusterem Galera. Jeho úkolem by bylo zvládnout provoz a přesměrovat jej do správného cíle.
Podívejme se, jak vám ClusterControl může pomoci nasadit Galera Cluster se sadou load balancerů, které můžete použít pro svou platformu Chamilo.
Nasazení MariaDB Cluster
Tentokrát se pokusíme použít MariaDB Cluster jako náš backend. Chamilo podporuje MySQL 5.6 a novější nebo MariaDB 5.5 a novější. Jako první krok musíme v průvodci vybrat „Deploy“:
Jakmile to uděláme, musíme definovat konektivitu SSH, bez hesla, klíč ClusterControl vyžaduje přístup založený na SSH, jinak nebude schopen spravovat databázovou infrastrukturu:spoléhá na konektivitu SSH při provádění příkazů ke spuštění nebo zastavení služeb, instalaci softwaru a tak dále.
Pak bychom se měli rozhodnout pro dodavatele, verzi, heslo, hostitele a další další nastavení:
Když jsou všechny tyto podrobnosti vyplněny, můžeme pokračovat v nasazení.
Nasazení ProxySQL
Jak jsme již zmínili, samotná databáze není jediným prvkem, který chceme nasadit. Mohli bychom použít load balancer, který použijeme k přesunu provozu, pokud by jeden z uzlů selhal. Použijeme jej také k rozdělení čtení/zápisu, nasměrování všech zápisů do jednoho uzlu MariaDB Galera a rozdělení čtení mezi zbývající uzly MariaDB Galera. To nám pomůže vyhnout se konfliktům mezi zápisy prováděnými na různých uzlech Galera.
Pro ProxySQL ClusterControl také vyžaduje vyplnění některých informací – musíte vybrat hostitele, na který jej chcete nainstalovat, rozhodnout o verzi ProxySQL, přihlašovacích údajích pro uživatele s administrací a monitorováním. Tito uživatelé budou používáni ke správě ProxySQL a sledování stavu vašeho clusteru Galera. Měli byste také importovat stávající uživatele databáze nebo vytvořit nového pro vaši aplikaci. Nakonec je na vás, abyste se rozhodli, které databázové uzly chcete používat s ProxySQL, a rozhodnete se, zda použijete implicitní transakce.
Nasazení Keepalived
ProxySQL bude skvěle fungovat při distribuci našeho provozu mezi uzly clusteru. Na druhou stranu, jeden uzel ProxySQL bude fungovat jako jediný bod selhání. Proto chceme nasadit alespoň dva z nich. Pak je otázkou, jak detekovat selhání uzlu ProxySQL a jak přesunout provoz do zdravého ProxySQL. Přichází Keepalived. Cílem je mít virtuální IP, která bude ukazovat na fungující instanci ProxySQL. Takový VIP pak může být použit v aplikaci jako koncový bod pro konektivitu databáze MySQL, což zajistí, že aplikace vždy narazí na zdravé ProxySQL, což zase zajistí, že provoz zasáhne zdravý uzel clusteru.
Po předání podrobností, jako jsou instance ProxySQL, které by měly být monitorovány, virtuální IP a rozhraní VIP by se mělo vázat na jsme připraveni k nasazení. Po několika minutách by mělo být vše připraveno a topologie by měla vypadat následovně:
To je vše, pokud jde o prostředí, které jsme budovali. Můžete nasměrovat svůj Chamilo na VIP a port 6033, to by mělo stačit k získání připojení k vaší backendové databázi. Pokud narazíte na nějaké problémy související se zastaralým čtením (když zápis zasáhne jeden uzel a poté se Chamilo pokusí číst z jiného uzlu, můžete se podívat na povolení kontrol kauzality na clusteru Galera. Existuje proměnná wsrep_sync_wait, která může povolit testy na několika přístupech vzory:čte, aktualizuje, vkládá, maže, nahrazuje a SHOW příkazy. Pokud nás zajímají pouze dotazy SELECT, nastavíme tuto proměnnou na '1' pomocí správy konfigurace ClusterControl.
Touto změnou se provede tato změna na všech uzlech klastru MariaDB.
To je v podstatě vše. Pokud byste se chtěli podělit o nějaké své zkušenosti s Chamilo, můžete nám zanechat komentář.