世界で最も人気のある学習管理システム(LMS)であるMoodleは、急速に成長している大規模な環境で一般的に展開されています。幸いなことに、Moodleは可用性とスケーラビリティを念頭に置いて構築されており、大規模なインフラストラクチャの管理に役立つ多くのツールを備えています。大規模なMoodleインフラストラクチャは、ベアメタルからコンパートメント化された仮想コンテナ(またはKubernetesポッド)まで、さまざまなタイプのマシンにセットアップでき、通常、個別のロードバランサー、ウェブサーバー、キャッシュサーバー、集中型/クラスター化ストレージサーバー用の多層アーキテクチャが含まれます。データベースサーバー。
このブログ投稿では、Moodleサイトのベンチマークを実行する方法を紹介します。これにより、Moodleサイトが特定の期間にどのように実行されるかを理解できます。クラスター化されたセットアップでは、Moodleクラスターのパフォーマンスは、ハードウェアリソース、仮想化オーバーヘッド、サーバー間のネットワークレイテンシ、ファイアウォール、キャッシングなどのさまざまな要因の影響を受ける可能性があり、ベンチマークの実行は、Moodleパフォーマンスをテストおよび推定するための確実な方法です。本番環境に移行する前に。
まず第一に、私たちのセットアップがアイドル状態であり、また高負荷環境下にあるときを理解することは良いことです。スコアリングシステムを使用してMoodleプラットフォームの品質を決定するためにさまざまなテストを実行するMoodle用のレポートベンチマークプラグインをインストールすることを強くお勧めします。このスコアは、次のスクリーンショットのように、システムと速度をいくつかのしきい値(許容可能およびクリティカル)と比較します。
プラグインをインストールしたら、サイト管理->に移動します。レポート->ベンチマーク->ベンチマークを開始 ベンチマークを実行します。ベンチマークテストは1分未満続く必要があり、プラットフォームに問題があるかどうかを明らかにするために、関係なく2分で中止されます。スコアが低いほど良いです。すべてが緑色の場合は、通常、Moodleサイトの状態が良好であることを示しています。基本的に5つのテストグループがあります:
Moodleの動作が予想よりも遅い場合、次の例に示すように、ベンチマークレポートに緑色以外のボックスが表示されます。
レポートをさらに下に移動すると、ベンチマークの概要を取得できます。上記の場合、Apache Benchmark(ab)ツールを作成して、20の同時ユーザー接続でWebサイトのストレステストを行い、同時にこのベンチマークレポートを実行してMoodleのパフォーマンスを観察しました。要約の正当化は、チューニングの側面がかなり広いにもかかわらず、データベースの最適化、Moodleキャッシュ、ハードウェアリソースなどの改善が必要な領域を絞り込むのに役立つ可能性があります。
有意な平均を得るために、このベンチマークテストを数回実行することをお勧めします。インストールのパフォーマンスが最適でない場合は、Moodleのドキュメントでそれを改善するためのいくつかの推奨事項を見つけることができます。パフォーマンスが大幅に低下する可能性があるため、アクティブな時間帯に本番プラットフォームでこのベンチマークを実行しないでください。
Apache JMeter
Apache JMeterは、テスト機能の動作をロードし、静的および動的Webアプリケーションのパフォーマンスを測定するように設計されたJavaアプリケーションです。サーバー、サーバーのグループ、ネットワーク、またはオブジェクトの高負荷をシミュレートして、その強度をテストしたり、さまざまな負荷タイプでの全体的なパフォーマンスを分析したりするために使用できます。
Moodle v2.5以降には、JMeterテストプランジェネレーターが付属しており、2つの組み込みスクリプト「Maketestcourse」と「MakeJMetertestplan」を通じてJMeterによる負荷テストのプロセスを簡素化します。どちらもサイト管理->開発 、一連のアドオンMoodleパフォーマンス比較によって強化されています。 Moodle Webインターフェースを介してこの機能を使用するには、サイト管理->開発->デバッグ->デバッグメッセージ->開発者:開発者向けの追加のMoodleデバッグメッセージでMoodleを開発者モードに切り替える必要があります。 / em> 。それ以外の場合は、{Moodle} / admin / tool / generator/cliディレクトリにあるCLIツールを使用してください。
JMeterテストは実動システムでは実行しないでください。テスト計画スクリプトはデータを生成し、サーバーをその限界以上に意図的にロードします。多くの場合、サーバーが過負荷になり、応答しなくなります。パフォーマンスに直接影響するため、本番サーバーの別のMoodleインスタンスで実行したり、同じ本番データベースシステムに接続したりしないでください。
JMeterサーバーの導入
手順を簡略化するために、rootユーザーとしてすべてのコマンドを実行します。 JMeterサーバーに、必要なすべてのパッケージをインストールします。
$ 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
Moodleパフォーマンス比較ツールで使用される特権MySQLユーザーを作成します。最初にデータベースを作成する必要はありません:
$ mysql -uroot -p
mysql> CREATE USER 'moodleperformance'@'localhost' IDENTIFIED BY 'mys3cret';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'moodleperformance'@'localhost';
mysql> exit
$ mkdir /var/moodledata
$ chmod -R 777 /var/moodledata
$ mkdir /root/backups
$ apt update
$ apt install default-jre
$ wget https://downloads.apache.org//jmeter/binaries/apache-jmeter-5.4.tgz
$ tar -xzf apache-jmeter-5.4.tgz -C /opt
GithubからMoodleパフォーマンス比較ツールを入手し、Apache Webサーバーのデフォルトのドキュメントルート(/ var / www / html)に配置し、テンプレートから構成ファイルをコピーします。
$ 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
jmeter_config.propertiesを開き、次の行を編集します。
jmeter_path=/opt/apache-jmeter-5.4
JMeterテストプランの実行
このツールを使用してMoodleベンチマークを実行する最も簡単な方法は、ローカルのMoodleベンチマークを実行することです。スクリプトはGithubからMoodleアプリケーションを自動的にプルし、データベースをセットアップし、ローカルのテスト環境に必要な構成を設定します。私たちがする必要があるのは、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"
ここで、18.141.187.189は、このJMeterサーバーのパブリックIPアドレスです。ベンチマークされるMoodleはhttp://18.141.187.189/moodle-performance-comparison/moodleからアクセスできます。上記を設定したら、/ var / www / html / moodle-performance-comparison:
に移動します。$ cd /var/www/html/moodle-performance-comparison
最初に、Moodleテストサイトに一連のデータを請求します。 Moodleサイトのサイズは以下によって決定できます:
サイズ | テストプラン |
XS | 1ユーザー、5ループ、1ランプアップ期間 |
S | 30ユーザー、5ループ、6ランプアップ期間 |
M | 100ユーザー、5ループ、40ランプアップ期間 |
L | 1000ユーザー、6ループ、100ランプアップ期間 |
XL | 5000ユーザー、6ループ、500ランプアップ期間 |
XCL | 10000ユーザー、7ループ、800ランプアップ期間 |
$ ./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
ベンチマークを開始する前に、良好なベースライン結果が得られるように、Webサーバーとデータベースサーバーを再起動することをお勧めします。
$ ./restart_service.sh
#######################################################################
Services restarted successfully.
Now you can begin running the tests with test_runner.sh.
これで、test_runner.shスクリプトを使用してJMeterベンチマークを実行する準備が整いました:
$ ./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.
これで最初の実行が完了し、プレーンなMoodleサイトでパフォーマンスが得られました。この時点で、データベースサーバー、PHP、Apache Webサーバー、またはMoodleに関連するその他のコンポーネントに対してパフォーマンスの調整と調整を実行し、2回目の実行を実行して、適用された調整が適切かどうかを比較できます。 2番目のベンチマークを作成する前に、after_run_setup.shスクリプトを実行して、スクリプトがデータベースとMoodleデータルートを復元するテストMoodleサイトを準備およびクリーンアップする必要があります:
$ ./after_run_setup.sh
これで、2番目のベンチマークを実行する準備が整いました:
$ ./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.
ベンチマーク結果は、http://18.141.187.189/moodle-performance-comparison/に表示され、アクセスできる必要があります。次のページ全体のスクリーンショットは、取得する結果の例です。
比較により、Moodleサイトのどの側面またはコンポーネントが実行間で改善されたかを理解することができます。特定のチューニングがMoodleサイトに良い結果をもたらしたか悪い結果をもたらしたかを最終的に決定する前に、ベンチマークを複数回実行して有意な平均を得るのは良いことです。
ここで説明するように、JMeterベンチマークを実行する方法は他にもたくさんあります。ベンチマークをライブサイトに直接実行するか(非推奨)、本番データベースとmoodledataディレクトリのバックアップを使用して本番からのデータを使用してローカルMoodleテストサイトをステージングするか、複数のバージョンのMoodleに対してローカルでベンチマークを実行することもできます各バージョンのパフォーマンスの向上または低下を比較するためのインストール。