Moodle, 's werelds meest populaire leerbeheersysteem (LMS), wordt vaak ingezet in een snelgroeiende en grootschalige omgeving. Gelukkig is Moodle gebouwd met beschikbaarheid en schaalbaarheid in het achterhoofd, met veel tools om ons te helpen bij het beheren van een grote infrastructuur. Grootschalige Moodle-infrastructuren kunnen worden opgezet op verschillende soorten machines, van bare-metal tot gecompartimenteerde virtuele containers (of Kubernetes-pods) en omvatten gewoonlijk een architectuur met meerdere lagen voor afzonderlijke load balancers, webservers, cacheservers, gecentraliseerde/geclusterde opslagservers en database-servers.
In deze blogpost laten we je zien hoe je een benchmark van je Moodle-site uitvoert, zodat we kunnen begrijpen hoe onze Moodle-site presteert in een bepaalde periode. In een geclusterde opstelling kunnen de prestaties van een Moodle-cluster worden beïnvloed door verschillende factoren, zoals hardwarebronnen, virtualisatie-overhead, netwerklatenties tussen servers, firewalls, caching en nog veel meer, en het uitvoeren van benchmarks is een solide manier om de Moodle-prestaties te testen en in te schatten voordat het live in productie gaat.
Benchmarking-plug-in rapporteren
Allereerst is het goed om een goed begrip te hebben wanneer onze setup inactief is en ook onder een zware belastingomgeving. Het wordt ten zeerste aanbevolen om de Report Benchmark-plug-in voor Moodle te installeren, die verschillende tests uitvoert om de kwaliteit van het Moodle-platform te bepalen met behulp van een scoresysteem. Deze score vergelijkt uw systeem en snelheid met enkele drempelwaarden (aanvaardbaar en kritisch), net zoals de volgende schermafbeelding:
Ga nadat de plug-in is geïnstalleerd naar Sitebeheer -> Rapporten -> Benchmark -> Start de benchmark om de benchmark uit te voeren. De benchmarktests zouden minder dan 1 minuut moeten duren en zullen na 2 minuten worden afgebroken, wat duidelijk maakt of er zorgen zijn op uw platform. Hoe lager de score, hoe beter, en als alles groen is, geeft dit over het algemeen aan dat onze Moodle-site in goede staat zou moeten zijn. Er zijn in principe 5 testgroepen:
- Serversnelheid
- Processorsnelheid
- Snelheid harde schijf
- Databasesnelheid
- Laadsnelheid van pagina
In de gevallen waarin de Moodle zich langzamer gedraagt dan verwacht, ziet u enkele niet-groene vakjes verschijnen in het benchmarkrapport, zoals weergegeven in het volgende voorbeeld:
Verder in het rapport vindt u de samenvatting van de benchmark. In het bovenstaande geval hebben we een Apache Benchmark (ab)-tool gemaakt om de website te stresstesten met 20 gelijktijdige gebruikersverbindingen en tegelijkertijd dit benchmarkrapport uit te voeren en de Moodle-prestaties te observeren. De samenvattende rechtvaardiging, ondanks dat deze vrij breed is in afstemmingsaspecten, zou ons kunnen helpen het gebied te verfijnen dat moet worden verbeterd, zoals database-optimalisatie, Moodle-cache en hardwarebronnen.
Het wordt aanbevolen om deze benchmarktest meerdere keren uit te voeren om een significant gemiddelde te verkrijgen. Als de prestatie van uw installatie niet optimaal is, vindt u enkele aanbevelingen om deze te verbeteren in de Moodle-documentatie. Voer deze benchmark niet uit op een productieplatform tijdens actieve uren, omdat dit kan leiden tot aanzienlijke prestatievermindering.
Apache JMeter
Apache JMeter is een Java-toepassing die is ontworpen om functioneel gedrag te testen en de prestaties van statische en dynamische webtoepassingen te meten. Het kan worden gebruikt om een zware belasting op een server, groep servers, netwerk of object te simuleren om de sterkte ervan te testen of om de algehele prestaties onder verschillende belastingstypes te analyseren.
Sinds Moodle v2.5 en later wordt het geleverd met een JMeter-testplangenerator om het proces van belastingtesten met JMeter te vereenvoudigen via twee ingebouwde scripts - "Maak testcursus" en "Maak JMeter-testplan", beide beschikbaar onder Sitebeheer -> Ontwikkeling , aangevuld met een reeks add-ons Moodle prestatievergelijking. Om deze functie via de Moodle-webinterface te gebruiken, moet u de Moodle in de ontwikkelaarsmodus zetten onder Sitebeheer -> Ontwikkeling -> Debugging -> Foutopsporingsberichten -> ONTWIKKELAAR:extra Moodle-foutopsporingsberichten voor ontwikkelaars . Gebruik anders de CLI-tools die beschikbaar zijn onder {Moodle}/admin/tool/generator/cli directory.
Merk op dat de JMeter-test niet mag worden uitgevoerd op een productiesysteem. De testplanscripts genereren gegevens en belasten de server opzettelijk tot het uiterste, waardoor deze vaak overbelast raakt en niet meer reageert. Voer ze niet eens uit op een aparte Moodle-instantie in de productieserver en maak verbinding met hetzelfde productiedatabasesysteem, omdat dit de prestaties rechtstreeks beïnvloedt.
De JMeter-server implementeren
Om de instructies te vereenvoudigen, voeren we al onze opdrachten uit als rootgebruiker. Installeer op de JMeter-server alle benodigde pakketten:
$ sudo apt install apache2 mysql-client mysql-server php libapache2-mod-php graphviz aspell ghostscript clamav php7.4-pspell php7.4-curl php7.4-gd php7.4-intl php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-ldap php7.4-zip php7.4-soap php7.4-mbstring
Maak een bevoorrechte MySQL-gebruiker die kan worden gebruikt door de Moodle-tool voor prestatievergelijking. Het is niet nodig om eerst een database aan te maken:
$ mysql -uroot -p
mysql> CREATE USER 'moodleperformance'@'localhost' IDENTIFIED BY 'mys3cret';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'moodleperformance'@'localhost';
mysql> exit
Maak de dataroot en back-upmap:
$ mkdir /var/moodledata
$ chmod -R 777 /var/moodledata
$ mkdir /root/backups
Java installeren:
$ apt update
$ apt install default-jre
Download Apache JMeter van de officiële site en sla het op onder /opt directory:
$ wget https://downloads.apache.org//jmeter/binaries/apache-jmeter-5.4.tgz
$ tar -xzf apache-jmeter-5.4.tgz -C /opt
Haal de Moodle Performance Comparison-tool van Github en plaats deze onder de Apache-webserver standaard documenthoofdmap op /var/www/html, en kopieer ook de configuratiebestanden van hun sjablonen:
$ cd /var/www/html
$ git clone https://github.com/moodlehq/moodle-performance-comparison
$ cd moodle-performance-comparison
$ cp webserver_config.properties.dist webserver_config.properties
$ cp jmeter_config.properties.dist jmeter_config.properties
Open jmeter_config.properties en bewerk de volgende regel:
jmeter_path=/opt/apache-jmeter-5.4
Het JMeter-testplan uitvoeren
De eenvoudigste manier om een Moodle-benchmark uit te voeren met behulp van deze tool, is door een lokale Moodle-benchmark uit te voeren, waarbij de scripts automatisch de Moodle-toepassing uit Github halen, de database opzetten en de benodigde configuraties instellen voor een lokale testomgeving. Wat we moeten doen is het volgende specificeren in de webserver_config.properties:
dbtype="mysqli"
dbhost="localhost"
dbuser="moodleperformance"
dbpass="mys3cret"
wwwroot="http://18.141.187.189/moodle-performance-comparison/moodle"
dataroot="/var/moodledata"
backupsdir="/root/backups"
Waar 18.141.187.189 het openbare IP-adres van deze JMeter-server is. De Moodle die zal worden gebenchmarkt, is toegankelijk via http://18.141.187.189/moodle-performance-comparison/moodle . Nadat het bovenstaande is geconfigureerd, navigeert u naar /var/www/html/moodle-performance-comparison:
$ cd /var/www/html/moodle-performance-comparison
Het eerste is om de Moodle-testsite te voorzien van een set gegevens. De grootte van de Moodle-site kan als volgt worden bepaald:
Maat
Testplan
XS
1 gebruiker, 5 loops en 1 aanloopperiode
S
30 gebruikers, 5 loops en 6 opstartperiode
M
100 gebruikers, 5 loops en 40 opstartperiode
L
1000 gebruikers, 6 loops en 100 opstartperiode
XL
5000 gebruikers, 6 loops en 500 opstartperiode
XXL
10000 gebruikers, 7 loops en 800 opstartperiode
$ ./before_run_setup.sh XS
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
#######################################################################
Installing Moodle (ec58cefefb2722f61f77c9a2b6a12d40a8c078a0)
Moodle site configuration finished successfully.
Creating Moodle (ec58cefefb2722f61f77c9a2b6a12d40a8c078a0) database and dataroot backups
mysqldump: [Warning] Using a password on the command line interface can be insecure.
Upgrading Moodle (ec58cefefb2722f61f77c9a2b6a12d40a8c078a0) to master
#######################################################################
'Before' run setup finished successfully.
Note the following files were generated, you will need this info when running
testrunner.sh in a different server, they are also saved in test_files.properties.
- Test plan: /var/www/html/moodle-performance-comparison/moodle/testplan.jmx
- Test users: /var/www/html/moodle-performance-comparison/moodle/testusers.csv
- Dataroot backup: /root/backup/dataroot_backup_202101090901
- Database backup: /root/backup/database_backup_202101090901.sql
Now you can:
- Change the site configuration
- Change the cache stores
And to continue with the test you should:
- Run restart_services.sh (or manually restart web and database servers if
this script doesn\'t suit your system)
- Run test_runner.sh
Voordat we de benchmark starten, is het raadzaam om de web- en databaseservers opnieuw op te starten, zodat we een goed basisresultaat krijgen:
$ ./restart_service.sh
#######################################################################
Services restarted successfully.
Now you can begin running the tests with test_runner.sh.
Nu zijn we klaar om de JMeter-benchmark uit te voeren met het test_runner.sh-script:
$ ./test_runner.sh Group1 Run1
#######################################################################
Test running... (time for a coffee?)
Jan 09, 2021 9:03:55 AM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
Warning: Nashorn engine is planned to be removed from a future JDK release
#######################################################################
Test plan completed successfully.
To compare this run with others remember to execute after_run_setup.sh before
it to clean the site restoring the database and the dataroot.
We hebben nu onze eerste run voltooid en hebben een optreden op een eenvoudige Moodle-site. Op dit punt kunt u elke prestatieafstemming en aanpassing uitvoeren aan uw databaseserver, PHP, Apache-webserver of andere componenten die verband houden met Moodle en de tweede run uitvoeren om te vergelijken of de toegepaste afstemming zinvol is. Voordat we de tweede benchmark maken, moeten we het after_run_setup.sh-script uitvoeren om de test-Moodle-site voor te bereiden en op te schonen waar het script de database en de Moodle-dataroot zal herstellen:
$ ./after_run_setup.sh
Nu zijn we klaar om de tweede benchmark uit te voeren:
$ ./test_runner.sh Group1 Run2
#######################################################################
Test running... (time for a coffee?)
Jan 09, 2021 9:03:55 AM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
Warning: Nashorn engine is planned to be removed from a future JDK release
#######################################################################
Test plan completed successfully.
To compare this run with others remember to execute after_run_setup.sh before
it to clean the site restoring the database and the dataroot.
Benchmarkresultaten
De benchmarkresultaten zouden moeten verschijnen en toegankelijk zijn op http://18.141.187.189/moodle-performance-comparison/ . De volgende schermafbeelding van een hele pagina is een voorbeeld van de resultaten die u zou krijgen:
De vergelijking stelt ons in staat om te begrijpen in welke aspecten of componenten van de Moodle-site tussen runs zijn verbeterd. Het is goed om de benchmark meerdere keren uit te voeren om een significant gemiddelde te krijgen, voordat u uiteindelijk een beslissing neemt of een bepaalde afstemming goede of slechte resultaten heeft opgeleverd op de Moodle-site.
Er zijn veel andere manieren om de JMeter-benchmark uit te voeren, zoals hier beschreven. U kunt de benchmark rechtstreeks naar de live-site uitvoeren (niet aanbevolen), of de lokale Moodle-testsite uitvoeren met de gegevens van de productie door de back-up van de productiedatabase en de moodledata-directory te gebruiken, of u kunt de benchmark ook lokaal uitvoeren tegen meerdere versies van Moodle installatie om de winst of het verlies in prestaties voor elke versie te vergelijken.