Moodle er et open source-læringsstyringssystem, der er meget brugt af skoler og universiteter rundt om i verden. Projektet startede i 2002 af Martin Dougiamas med det formål at give elever, lærere, undervisere en sikker, robust, åben og gratis platform for læringsmiljøer.
Selve softwaren er skrevet i PHP og understøtter forskellige RDBMS, såsom:Oracle, MySQL, PostgreSQL, MariaDB osv.
I denne blog vil vi diskutere, hvordan man gør Moodle-databasen modstandsdygtig ved hjælp af MySQL-replikering, som er nødvendig for at understøtte en High Availability Moodle-implementering. Vi vil gennem ClusterControl implementere en databaseopsætning bestående af master/slave MySQL-replikering forankret af redundante databasebelastningsbalancer.
Arkitektur
MySQL-replikering er en populær måde at opnå redundans for databasen. Det er vigtigt at sikre, at alle skrivninger sendes til masteren, mens læsninger kan loadbalanceres mellem slaverne. For at gøre det skal vi bruge ProxySQL, som er en database-bevidst load balancer, der sørger for at opdele skrivetrafikken og sende den til masteren. Da masterrollen kan flytte til en anden server, for eksempel i tilfælde af et databasenedbrud, kan ProxySQL holde styr på den nye master og sørge for, at skrivetrafikken dirigeres i overensstemmelse hermed. En VirtualIP administreres af Keepalved for at sikre ét robust databaseslutpunkt for alle Moodle-applikationsservere.
Overvågning og Failover Management
I diagrammet ovenfor foreslår vi to replikaer, der slaver af masterdatabasen. I tilfælde af masternedbrud vil en af replikaerne blive forfremmet til ny master. Der vil stadig være en replika tilbage til at håndtere ting som læsninger, sikkerhedskopier, rapportering osv.
Applikationsforbindelsen gør brug af en VIP (Virtuel IP-adresse) i databaseforbindelsesstrengen, så hvis der sker noget på databasesiden, vil det minimere påvirkningen fra din applikation, og du behøver ikke at omkonfigurere hvad som helst. ClusterControl er den komponent, der holder øje med databaserne og automatiserer failover, for eksempel promovering af en af replikaerne til ny master og gendannelse af den fejlbehæftede databaseserver.
Databaseopsætning
Vi vil gøre brug af ClusterControl til at implementere vores databaseopsætning.
For det første skal du have en dedikeret server til opsætning af ClusterControl. Installationen er meget nem, du skal bare downloade install-cc fra flerenines repository, give tilladelse til at udføre filen og køre den. Som vist nedenfor:
$ wget http://www.severalnines.com/downloads/cmon/install-cc
$ chmod +x install-cc
$ sudo ./install-cc # omit sudo if you run as root
Du kan køre ovenstående script i enhver form for Linux-variant. Det vil implementere alt, hvad der kræves af ClusterControl.
Når du har ClusterControl oppe at køre, skal du vælge knappen Implementer fra ClusterControl Dashboard.
Den vil vise en ny side, der viser nogle muligheder. Vi vælger den første implementeringsmulighed til vores MySQL-replikeringsopsætning.
Du skal have adgang til måldatabaseserveren via SSH. Glem ikke at aktivere adgangskodefri SSH og give sudo-adgang til brugeren. Definer klyngenavnet, og klik på Fortsæt som vist nedenfor:
På næste side skal du vælge leverandøren af databasen, version af databasen, du vil installere, root-adgangskoden, serverporten, hvis du vil have brugerdefinerede eller specifikke porte, og MySQL-datamappe.
Når alle oplysninger er udfyldt, kan du gå til næste trin, som er Definer Topologi-siden. Udfyld venligst databaseserverens ip-adresse, i dette tilfælde når vi konfigurerer MyQL-replikeringen med 1 master og 2 replikaer.
Deploy vil nu udløse et job, der vil "Create Cluster", du skal bare skal vente, indtil jobbet er færdigt.
ProxySQL-opsætning
Når databasen er implementeret, kan du gå gennem Load Balancer fra din klyngemenu. Gå venligst til Administrer -> Load Balancer. Det vil blive vist som nedenfor:
Implementering af ProxySQL kræver, at du udfylder nogle oplysninger, såsom IP-adressen, hvor du ønsker at installere ProxySQL, adgangskode til administration og overvågning af brugere, og gøre det muligt for instansen at indlæse balance. Derefter skal du blot klikke på Deploy. For høj tilgængelighed skal du have mindst 2 load balancere installeret foran databasen.
Keelived opsætning
Keelived-tjenesten bruges til at gøre din load balancer yderst tilgængelig. Opsætningen er virkelig ligetil, stadig på Load Balancer-siden er der en fane for Keepalived som vist nedenfor:
Vælg typen af load balancer-implementering, i dette tilfælde bruger vi ProxySQL, vælg ProxySQL-tjenesten til keepalive. Udfyld den virtuelle IP-adresse og netværksgrænsefladen. Klik derefter på Implementer Keepalived, det vil automatisk udløse et nyt job for at konfigurere tjenesten.
Opsætning af applikation
Før du opsætter moodle-applikationen, skal du forberede brugeroplysningerne og selve databasen. For legitimationsoplysningerne kan du gå til:Administrer -> Skemaer og brugere.
Du skal udfylde nogle oplysninger, f.eks.:brugernavn, adgangskode, værtsnavn og privilegium. Derefter skal du blot klikke på Opret bruger. Dette giver dig mulighed for at oprette en bruger til moodle-applikationen:
For at oprette databasen kan du vælge fanen Opret database på samme side som brugere.
Det næste trin er at konfigurere legitimationsoplysningerne på ProxySQL-siden, du kan importere legitimationsoplysninger, som du havde oprettet i ProxySQL. Du kan gå til ProxySQL-noden, vælg fanen Brugere, der er en Importer bruger-knap i højre side.
Søg i moodle_application-brugeren, og vælg derefter brugeren. På næste side skal du definere standardværtsgruppen for brugeren og derefter importere brugere.
Gentag venligst trinene for at importere brugerne på den anden ProxySQL-node, eller du kan bruge Synkroniseringsforekomster i ProxySQL-menuen.
Du skal downloade moodle-applikationen fra moodles officielle hjemmeside (re. https ://download.moodle.org/), den seneste version, når denne blog er skrevet, er 3.9.1. De giver to typer komprimerede filer, zip-komprimeret og tar zip. Download zip-filen og læg filen på dine applikationsservere. Tjek kravene til moodle-software, dvs.:Webserver, PHP-bibliotek.
Udpak zip-filerne til temp-mappen, opret /var/www/html/moodle-mappen, kopier den udpakkede mappe til mappen. Glem ikke at give tilladelse 0755 til mappen. Derefter kan du få adgang til webbrowseren for den næste opsætning. Vælg sproget som vist nedenfor:
Vælg databasedriveren til din MySQL-opsætning som nedenfor:
Du skal udfylde nogle databaselegitimationsoplysninger, som du havde lavet tidligere, for eksempel:brugernavn, adgangskode, vært, database, port. Værtsnavnet skal være din virtuelle IP-adresse, og porten er ProxySQL-port, som er 6032.
Databaseværten ville være din virtuelle IP-adresse. Når du har udfyldt felterne, skal du klikke på Næste og så er du færdig.
At bygge en meget tilgængelig database til Moodle ved hjælp af ClusterControl er meget let og ligetil, du kan bygge din egen database, der vil understøtte din 99,99 % serviceoppetid.