Moodle, Sistem Manajemen Pembelajaran open source, menjadi semakin populer pada tahun lalu karena pandemi memaksa penguncian keras dan sebagian besar kegiatan pendidikan telah berpindah dari sekolah, perguruan tinggi, dan universitas ke platform online. Dengan itu, tekanan diberikan pada tim TI untuk memastikan bahwa platform online tersebut akan dapat mengakomodasi beban yang jauh lebih tinggi daripada yang biasa mereka alami. Pertanyaan telah diajukan - bagaimana platform Moodle dapat diskalakan untuk menangani peningkatan beban? Di satu sisi, menskalakan aplikasi itu sendiri bukanlah hal yang sulit untuk dicapai, tetapi database, di sisi lain, adalah hal yang berbeda. Basis data, seperti semua layanan stateful, sangat sulit untuk diskalakan. Dalam postingan blog ini, kami ingin membahas beberapa tantangan yang akan Anda hadapi saat menskalakan database Moodle.
Menskalakan basis data Moodle - Tantangannya
Sumber utama masalah adalah warisan - Moodle, seperti banyak database, berasal dari satu latar belakang database dan, dengan demikian, ia datang dengan beberapa harapan yang terkait dengan lingkungan seperti itu. Yang khas adalah Anda dapat melakukan satu transaksi demi satu dan transaksi kedua akan selalu melihat hasil dari yang pertama. Ini belum tentu terjadi di sebagian besar lingkungan database terdistribusi. Replikasi asinkron tidak menjanjikan. Setiap transaksi mungkin tersesat dalam prosesnya. Cukup master akan crash sebelum data transaksi akan ditransfer ke slave. Replikasi semisinkron menjanjikan keamanan data tetapi tidak menjanjikan hal lain. Budak masih bisa tertinggal dan meskipun data disimpan pada penyimpanan persisten sebagai log relai dan, pada akhirnya, itu akan diterapkan ke kumpulan data, itu tidak berarti bahwa itu sudah diterapkan. Anda dapat meminta budak Anda dan tidak melihat data yang baru saja Anda tulis ke master.
Bahkan cluster seperti Galera secara default tidak datang dengan replikasi yang benar-benar sinkron - kesenjangan berkurang secara signifikan dibandingkan dengan sistem replikasi tetapi masih ada dan SELECT langsung dieksekusi setelah penulisan sebelumnya mungkin tidak melihat data yang baru saja Anda simpan di database karena SELECT Anda dirutekan ke simpul Galera yang berbeda dari penulisan Anda sebelumnya.
Ada beberapa solusi yang dapat Anda gunakan untuk menskalakan database MySQL Moodle. Sebagai permulaan, jika Anda menggunakan pengaturan replikasi, Anda dapat menggunakan fitur "pembacaan aman" dari Moodle. Kami membahasnya di salah satu blog kami sebelumnya. Ini akan mengarah pada situasi di mana Moodle akan memutuskan penulisan mana yang akan didistribusikan ke seluruh budak dan mana yang akan mengenai master.
Di satu sisi bagus - Anda aman menggunakan beberapa slave yang terpasang ke master, memungkinkan Anda untuk menurunkan master setidaknya sampai batas tertentu. Di sisi lain, ini jauh dari ideal, karena ini hanyalah bagian dari SELECT yang dapat Anda kirim ke slave. Tentu saja, itu semua tergantung pada kasus yang tepat, tetapi Anda dapat berharap bahwa master akan tetap menjadi hambatan terkait beban.
Pendekatan alternatif dapat menggunakan Galera Cluster dan mendistribusikan beban secara merata di semua node.
Dengan sendirinya ini tidak cukup untuk menangani semua read-after -menulis masalah tetapi untungnya Anda dapat menggunakan variabel wsrep-sync-wait yang dapat digunakan untuk memastikan bahwa pemeriksaan kausalitas sudah dilakukan dan cluster berperilaku seperti cluster sinkron yang nyata. Menggunakan pengaturan ini akan memungkinkan Anda membaca dengan aman dari semua node Galera Anda.
Tentu saja, menerapkan pemeriksaan kausalitas akan memengaruhi kinerja Galera, tetapi tetap masuk akal karena Anda dapat mengambil manfaat dari membaca beberapa node Galera secara bersamaan. Sejak saat itu, penskalaan pembacaan dengan Galera Cluster cukup mudah - Anda cukup menambahkan lebih banyak node Galera ke cluster. Load Balancer harus dikonfigurasi ulang untuk mengambilnya dan digunakan sebagai target tambahan untuk pembacaan yang memungkinkan Anda menskalakan bahkan hingga 10+ node pembaca.
Anda harus ingat bahwa menambahkan node tambahan, replikasi atau Galera, itu tidak terlalu penting, menambah beberapa kerumitan pada operasi di cluster. Anda harus memastikan bahwa node Anda dipantau dengan benar, bahwa Anda memiliki cadangan yang berfungsi, replikasi berjalan dengan baik, dan bahwa cluster itu sendiri dalam keadaan yang benar. Untuk lingkungan replikasi, failover harus ditangani dengan satu atau lain cara dan untuk Galera dan replikasi Anda mungkin ingin dapat membangun kembali node dalam cluster jika Anda mendeteksi segala jenis inkonsistensi data di seluruh cluster. Untungnya, ClusterControl dapat membantu Anda menangani tantangan tersebut secara signifikan.
Bagaimana ClusterControl Membantu Mengelola Cluster Database MySQL Moodle
Pertama-tama, jika seluruh cluster runtuh, ClusterControl akan melakukan otomatisasi pemulihan cluster - selama semua node tersedia, ClusterControl akan memulai proses pemulihan cluster:
Setelah beberapa saat, seluruh cluster akan kembali online.
ClusterControl hadir dengan serangkaian opsi pengelolaan:
Anda dapat memperkecil skala cluster dengan menambahkan node atau slave replikasi. Anda bahkan dapat membuat seluruh kluster budak yang akan direplikasi dari kluster utama.
Anda dapat dengan mudah menyiapkan jadwal pencadangan yang akan dijalankan oleh ClusterControl. Anda bahkan dapat mengatur verifikasi pencadangan otomatis.
Anda mungkin ingin dapat memantau cluster database Anda. ClusterControl memungkinkan Anda melakukan hal itu:
Seperti yang Anda lihat, ClusterControl adalah platform hebat yang dapat digunakan untuk mengurangi kerumitan penskalaan dan pengelolaan database MySQL Moodle. Kami akan senang mendengar tentang pengalaman Anda dalam mengembangkan Moodle dan basis datanya secara khusus.