Moodle to bardzo dobrze znany system zarządzania nauczaniem, który ma na celu pomóc organizacjom edukacyjnym w organizacji ich zajęć edukacyjnych online. Jak można sobie wyobrazić, biorąc pod uwagę zmianę online w 2020 roku spowodowaną przez COVID-19, takie systemy stały się bardzo popularne, a obciążenie, z jakim te systemy muszą sobie poradzić, znacznie wzrosło. Wielu administratorów zastanawia się, jak poprawić wydajność bazy danych, która tworzy kopię zapasową instalacji Moodle. Na szczęście, jeśli używasz Moodle 3.9 lub nowszego, masz kilka wbudowanych opcji, które mogą pomóc Ci zwiększyć wydajność. W tym poście na blogu pokażemy, jak to zrobić.
Przede wszystkim zakładamy, że masz instalację Moodle z pojedynczym węzłem bazy danych. Przyjrzyjmy się krokom, które możesz chcieć podjąć, aby poprawić wydajność bazy danych Moodle. Oczywiście wszystkie opisane tutaj kroki można wykonać ręcznie. W tym celu użyjemy ClusterControl, ponieważ cenimy nasz czas.
Zakładając, że masz zainstalowany ClusterControl, pierwszym krokiem będzie zaimportowanie istniejącego węzła bazy danych.
Musi istnieć połączenie SSH przy użyciu klucza bez hasła. Mamy go skonfigurowany jako użytkownik root z kluczem SSH znajdującym się w /root/.ssh/id_rsa.
W kolejnym kroku zdefiniowaliśmy superużytkownika i jego hasło. Włączyliśmy również zapytania information_schema (jak wiemy, nie mamy dziesiątek tysięcy tabel) i obie opcje automatycznego odzyskiwania, dzięki czemu ClusterControl będzie mógł w razie potrzeby odzyskać naszą bazę danych.
Po chwili nasza baza pojawia się na liście klastrów:
Teraz możemy zacząć skalować nasz klaster, dodając więcej urządzeń podrzędnych. Powinniśmy upewnić się, że master ma włączone logi binarne. Jeśli nie, można to zrobić z ClusterControl. Pamiętaj, że włączenie logów binarnych wymaga ponownego uruchomienia, więc prawdopodobnie chcesz to zrobić w czasie, gdy obciążenie jest najmniejsze, a najlepiej, aby dać trochę informacji użytkownikom Twojej platformy Moodle.
Przekazaliśmy adres IP (lub nazwę hosta) węzła, którego chcemy użyć jako niewolnik. ClusterControl dostarczy mu dane z naszego węzła głównego. Moglibyśmy również użyć kopii zapasowych do udostępnienia urządzenia podrzędnego, ale do tej pory nie wykonaliśmy żadnych kopii zapasowych za pomocą ClusterControl.
Instalacja potrwa kilka minut, postęp możemy śledzić patrząc w dziennikach zadań w ClusterControl.
Dodanie urządzenia podrzędnego do naszego systemu nie ma żadnego znaczenia. Musimy powiedzieć Moodle, żeby zaczął z niego korzystać. Na szczęście Moodle ma funkcję, która pozwala skonfigurować węzły podrzędne, a następnie „bezpieczne” zapisy zostaną do nich przekierowane, zmniejszając obciążenie urządzenia głównego i poprawiając ogólną wydajność.
W pliku konfiguracyjnym (config-dist.php) możesz zobaczyć sekcję „readonly” tablicy „dboptions”. W tym miejscu możesz zdefiniować jeden lub więcej węzłów podrzędnych, które będą używane przez Moodle do wysyłania ruchu.
'readonly' => [ // Set to read-only slave details, to get safe reads
// from there instead of the master node. Optional.
// Currently supported by pgsql and mysqli variety classes.
// If not supported silently ignored.
'instance' => [ // Readonly slave connection parameters
[
'dbhost' => '10.0.0.132',
'dbport' => '', // Defaults to master port
'dbuser' => '', // Defaults to master user
'dbpass' => '', // Defaults to master password
],
[...],
],
Jak widać, możemy dodać więcej niż jednego hosta podrzędnego, co pozwala nam rozłożyć bezpieczne odczyty na wiele węzłów, które można łatwo udostępnić z ClusterControl i zmniejszyć obciążenie klastra.
Jeśli interesują Cię bardziej zaawansowane, wysoce dostępne konfiguracje baz danych dla Moodle, mamy kilka wpisów na blogu na ten temat opisujących, między innymi, w jaki sposób możesz wykorzystać Moodle z Galera Cluster jako backend. Opisaliśmy również bardziej zaawansowane techniki skalowania dla Moodle, obejmujące równoważenie obciążenia ProxySQL.
Przekaż nam swoje przemyślenia i doświadczenia dotyczące pracy z Moodle.