Chamilo är, precis som Open edX eller Moodle, en plattform som tillåter utbildningsinstitutioner att överföra sin utbildningsverksamhet till internet. Med tanke på att majoriteten av utbildningsverksamheten har flyttat online under det senaste året är det inte förvånande att vi ser fler och fler människor kämpar för att skala ut sina utbildningsplattformar och säkerställa bättre tillgänglighet.
Chamilo är en plattform byggd på *AMP-stacken, som består av Apache, MySQL och PHP. Som vanligt är databasen det svåraste elementet att migrera till en mycket tillgänglig miljö. I den här korta bloggen vill vi diskutera hur du kan förbättra den höga tillgängligheten för Chamilo-databasen.
Som du kan föreställa dig är den enda MySQL-databasen en enda felpunkt och bör därför undvikas i produktionsinstallationer. Lyckligtvis finns det ett par sätt på vilka du kan förbättra tillgängligheten för MySQL-databasen.
Ett av sätten du kan närma dig problemet är att använda ett Galera-kluster. Den minimala utbyggnaden bör bestå av tre noder - sådana kluster kan automatiskt hantera fel på en enda nod. De återstående två noderna kommer att fortsätta att fungera och vara lyhörda för frågor som kommer från applikationen.
Denna inställning skulle kräva någon sorts lastbalanserare framför Galera-klustret. Dess uppgift skulle vara att hantera trafiken och omdirigera den till en riktig destination.
Låt oss se hur ClusterControl kan hjälpa dig att distribuera ett Galera-kluster med en uppsättning lastbalanserare som du kan använda för din Chamilo-plattform.
Distribuera MariaDB Cluster
Den här gången ska vi försöka använda MariaDB Cluster som vår backend. Chamilo stöder MySQL 5.6 och nyare eller MariaDB 5.5 och nyare. Som första steg måste vi välja "Deploy" från guiden:
När vi har gjort det måste vi definiera SSH-anslutning, lösenordslös, nyckel -baserad SSH-åtkomst är ett krav för ClusterControl, annars kommer den inte att kunna hantera databasinfrastruktur:den förlitar sig på SSH-anslutning för att utföra kommandon för att starta eller stoppa tjänster, installera programvara och så vidare.
Då bör vi bestämma leverantör, version, lösenord, värdar och några ytterligare inställningar:
Med alla dessa uppgifter ifyllda är vi bra att fortsätta med distributionen.
Distribuera ProxySQL
Som vi nämnde tidigare är databasen i sig inte det enda elementet som vi vill distribuera. Vi skulle kunna använda en lastbalanserare som vi kommer att använda för att flytta runt trafiken om en av noderna skulle misslyckas. Vi kommer också att använda den för att tillhandahålla läs/skrivdelning, dirigera alla skrivningar till en enda MariaDB Galera-nod och dela läsningar över återstående MariaDB Galera-noder. Detta kommer att hjälpa oss att undvika konflikter mellan skrivningar som utförs på olika Galera-noder.
För ProxySQL ClusterControl kräver också att du fyller i viss information - du måste välja värd för att installera den på, besluta om ProxySQL-version, autentiseringsuppgifter för de administrativa och övervakande användarna. Dessa användare kommer att användas för att hantera ProxySQL och övervaka tillståndet för ditt Galera-kluster. Du bör också importera befintliga databasanvändare eller skapa en ny för din applikation. Slutligen är det upp till dig att bestämma vilka databasnoder du vill använda med ProxySQL och bestämma om du använder implicita transaktioner.
Distribuera Keepalived
ProxySQL kommer att fungera utmärkt för att distribuera vår trafik över klusternoderna. Å andra sidan kommer en enda ProxySQL-nod att fungera som en enda felpunkt. Därför vill vi distribuera minst två av dem. Sedan är frågan hur man upptäcker felet i ProxySQL-noden och hur man flyttar trafiken till en sund ProxySQL. Här kommer Keepalved. Tanken här är att ha en virtuell IP som pekar på den fungerande ProxySQL-instansen. Sådan VIP kan sedan användas i applikationen som slutpunkt för MySQL-databasens anslutning, vilket säkerställer att applikationen alltid kommer att träffa friska ProxySQL som i sin tur kommer att säkerställa att trafiken kommer att träffa den friska klusternoden.
Efter att ha skickat detaljer som ProxySQL-instanser som bör övervakas, virtuell IP och gränssnitt VIP ska binda till vi är redo att distribuera. Efter några minuter bör allt vara klart och topologin bör se ut som nedan:
Det är det när det kommer till miljön som vi byggde. Du kan peka din Chamilo mot VIP och port 6033, detta borde vara tillräckligt för att få anslutning till din backend-databas. Om du stöter på några problem relaterade till inaktuella läsningar (när skrivning träffar en nod och sedan Chamilo försöker läsa från en annan nod, kan du undersöka att aktivera kausalitetskontroller på Galera-klustret. Det finns en wsrep_sync_wait-variabel som kan aktivera tester på flera åtkomster mönster:läser, uppdaterar, infogar, tar bort, ersätter och SHOW-kommandon. Om vi bara är intresserade av SELECT-frågorna kommer vi att ställa in denna variabel till '1' med ClusterControl-konfigurationshantering.
Detta kommer att utföra denna ändring på alla MariaDB Cluster-noder.
Det är ungefär det. Om du vill dela med dig av dina erfarenheter med Chamilo är du välkommen att lämna en kommentar till oss.