Moodle adalah Sistem Manajemen Pembelajaran (LMS) paling populer yang memungkinkan pendidik membuat situs web mereka sendiri dengan kursus atau konten yang memperluas pembelajaran. Platform semacam ini semakin penting untuk memungkinkan Anda terus belajar dari jarak jauh ketika sistem pendidikan tradisional tidak tersedia atau hanya sebagai pelengkapnya, sehingga peningkatan lalu lintas atau pengguna perlu meningkatkan skala lingkungan Anda untuk memastikan respons yang rendah waktu.
Skalabilitas adalah properti dari sistem/basis data untuk menangani peningkatan jumlah permintaan dengan menambahkan sumber daya. Ada beberapa pendekatan berbeda yang tersedia untuk menskalakan database Anda bergantung pada cara Anda perlu menskalakannya, dan, dalam lingkungan produksi, kemungkinan besar waktu henti yang lama tidak diinginkan, jadi Anda juga harus mempertimbangkan hal ini.
Di blog ini, kita akan melihat opsi skala apa saja yang tersedia dan bagaimana menskalakan database Moodle PostgreSQL Anda dengan cara yang mudah tanpa mempengaruhi sistem Anda yang sedang berjalan.
Penskalaan Horizontal dan Penskalaan Vertikal
Ada dua cara utama untuk menskalakan database Anda:
- Penskalaan Horizontal (penskalaan):Hal ini dilakukan dengan menambahkan lebih banyak node database untuk membuat atau meningkatkan cluster database.
- Penskalaan Vertikal (penskalaan):Ini dilakukan dengan menambahkan lebih banyak sumber daya perangkat keras (CPU, Memori, Disk) ke node database yang ada.
Untuk Penskalaan Horizontal , Anda dapat menambahkan lebih banyak node database sebagai node siaga. Ini dapat membantu Anda meningkatkan kinerja baca dengan menyeimbangkan lalu lintas antar node. Dalam hal ini, Anda perlu menambahkan penyeimbang beban untuk mendistribusikan lalu lintas ke node yang benar bergantung pada kebijakan dan status node. Anda juga harus mempertimbangkan untuk menambahkan dua atau lebih node penyeimbang beban untuk menghindari satu titik kegagalan, dan menggunakan alat seperti "Keepalived", untuk memastikan ketersediaan. Keepalive adalah layanan yang memungkinkan Anda untuk mengonfigurasi Alamat IP Virtual dalam grup server aktif/pasif. Alamat IP Virtual ini ditetapkan ke server aktif (Load Balancer aktif). Jika server ini gagal, Alamat IP secara otomatis dimigrasikan ke server pasif “Sekunder”, memungkinkannya untuk terus bekerja dengan Alamat IP yang sama secara transparan untuk sistem.
Untuk Penskalaan Vertikal , mungkin diperlukan untuk mengubah beberapa parameter konfigurasi agar PostgreSQL dapat menggunakan sumber daya perangkat keras baru atau yang lebih baik. Mari kita lihat beberapa parameter ini dari dokumentasi PostgreSQL.
- work_mem:Menentukan jumlah memori yang akan digunakan oleh operasi sortir internal dan tabel hash sebelum menulis ke file disk sementara. Beberapa sesi yang berjalan dapat melakukan operasi seperti itu secara bersamaan, sehingga total memori yang digunakan bisa berkali-kali lipat dari nilai work_mem.
- maintenance_work_mem:Menentukan jumlah maksimum memori yang akan digunakan oleh operasi pemeliharaan, seperti VACUUM, CREATE INDEX, dan ALTER TABLE ADD FOREIGN KEY. Setelan yang lebih besar dapat meningkatkan performa untuk menyedot debu dan memulihkan dump database.
- autovacuum_work_mem:Menentukan jumlah maksimum memori yang akan digunakan oleh setiap proses pekerja autovacuum.
- autovacuum_max_workers:Menentukan jumlah maksimum proses autovacuum yang dapat berjalan pada satu waktu.
- max_worker_processes:Menyetel jumlah maksimum proses latar belakang yang dapat didukung sistem. Tentukan batas proses seperti menyedot debu, pos pemeriksaan, dan pekerjaan pemeliharaan lainnya.
- max_parallel_workers:Menyetel jumlah maksimum pekerja yang dapat didukung sistem untuk operasi paralel. Pekerja paralel diambil dari kumpulan proses pekerja yang ditetapkan oleh parameter sebelumnya.
- max_parallel_maintenance_workers:Menyetel jumlah maksimum pekerja paralel yang dapat dimulai dengan satu perintah utilitas. Saat ini, satu-satunya perintah utilitas paralel yang mendukung penggunaan pekerja paralel adalah CREATE INDEX, dan hanya ketika membangun indeks B-tree.
- effective_cache_size:Menetapkan asumsi perencana tentang ukuran efektif cache disk yang tersedia untuk satu kueri. Ini diperhitungkan dalam perkiraan biaya penggunaan indeks; nilai yang lebih tinggi membuat pemindaian indeks lebih mungkin digunakan, nilai yang lebih rendah membuat pemindaian berurutan lebih mungkin digunakan.
- shared_buffers:Menyetel jumlah memori yang digunakan server database untuk buffer memori bersama. Pengaturan yang jauh lebih tinggi dari minimum biasanya diperlukan untuk kinerja yang baik.
- temp_buffers:Menyetel jumlah maksimum buffer sementara yang digunakan oleh setiap sesi database. Ini adalah buffer sesi-lokal yang hanya digunakan untuk akses ke tabel sementara.
- effective_io_concurrency:Menyetel jumlah operasi I/O disk bersamaan yang diharapkan PostgreSQL dapat dijalankan secara bersamaan. Menaikkan nilai ini akan meningkatkan jumlah operasi I/O yang setiap sesi PostgreSQL mencoba untuk memulai secara paralel. Saat ini, setelan ini hanya memengaruhi pemindaian heap bitmap.
- max_connections:Menentukan jumlah maksimum koneksi bersamaan ke server database. Meningkatkan parameter ini memungkinkan PostgreSQL untuk menjalankan lebih banyak proses backend secara bersamaan.
Tantangannya di sini adalah bagaimana mengetahui apakah Anda perlu menskalakan Basis Data Moodle Anda dan dengan cara apa, dan jawabannya adalah Pemantauan.
Memantau PostgreSQL untuk Moodle
Menskalakan basis data adalah proses yang rumit, jadi Anda harus memeriksa beberapa metrik untuk dapat menentukan strategi terbaik untuk menskalakannya.
Anda dapat memantau penggunaan CPU, Memori, dan Disk untuk menentukan apakah ada masalah konfigurasi atau apakah Anda perlu menskalakan basis data Anda. Misalnya, jika Anda melihat beban server tinggi tetapi aktivitas database rendah, mungkin tidak perlu menskalakannya, Anda hanya perlu memeriksa parameter konfigurasi untuk mencocokkannya dengan sumber daya perangkat keras Anda.
Memeriksa ruang disk yang digunakan oleh node PostgreSQL per database dapat membantu Anda mengonfirmasi apakah Anda memerlukan lebih banyak disk atau bahkan partisi tabel. Untuk memeriksa ruang disk yang digunakan oleh database/tabel, Anda dapat menggunakan beberapa fungsi PostgreSQL seperti pg_database_size atau pg_table_size.
Dari sisi database, Anda harus memeriksa:
- Jumlah koneksi
- Menjalankan kueri
- Penggunaan indeks
- Kembung
- Keterlambatan Replikasi
Ini bisa menjadi metrik yang jelas untuk mengonfirmasi apakah penskalaan database Anda diperlukan.
ClusterControl sebagai Sistem Penskalaan dan Pemantauan
ClusterControl dapat membantu Anda mengatasi kedua cara penskalaan yang kami sebutkan sebelumnya dan untuk memantau semua metrik yang diperlukan untuk mengonfirmasi persyaratan penskalaan.
Jika Anda belum menggunakan ClusterControl, Anda dapat menginstalnya dan menerapkan atau mengimpor database PostgreSQL Anda saat ini dengan memilih opsi "Impor" dan ikuti langkah-langkahnya, untuk memanfaatkan semua fitur ClusterControl seperti pencadangan, failover otomatis, peringatan, pemantauan, dan banyak lagi.
Penskalaan Horizontal
Untuk penskalaan horizontal, jika Anda membuka tindakan cluster dan memilih “Tambahkan Budak Replikasi”, Anda dapat membuat replika baru dari awal atau menambahkan database PostgreSQL yang ada sebagai replika.
Mari kita lihat bagaimana menambahkan budak replikasi baru dapat menjadi tugas yang sangat mudah.
Seperti yang Anda lihat di gambar, Anda hanya perlu memilih Master Anda server, masukkan alamat IP untuk server budak baru Anda dan port database. Kemudian, Anda dapat memilih apakah Anda ingin ClusterControl menginstal perangkat lunak untuk Anda dan apakah slave replikasi harus Sinkron atau Asinkron.
Dengan cara ini, Anda dapat menambahkan replika sebanyak yang Anda inginkan dan menyebarkan lalu lintas baca di antara mereka menggunakan penyeimbang beban, yang juga dapat Anda terapkan dengan ClusterControl.
Sekarang, jika Anda membuka tindakan cluster dan memilih “Add Load Balancer”, Anda dapat menerapkan HAProxy Load Balancer baru atau menambahkan yang sudah ada.
Dan kemudian, di bagian penyeimbang beban yang sama, Anda dapat menambahkan Keepalive layanan yang akan berjalan pada node penyeimbang beban untuk meningkatkan lingkungan ketersediaan tinggi Anda.
Setelah menambahkan Load Balancer atau menggunakan IP Virtual yang memiliki layanan Keepalive di tempat, Anda harus memperbarui konfigurasi Moodle Anda untuk menggunakan titik akhir database baru. Untuk ini, buka direktori root Moodle Anda dan ubah file config.php dengan alamat IP baru:
$CFG->dbhost = 'IP_ADDRESS';
$CFG->dbname = 'moodle';
$CFG->dbuser = 'mdluser';
$CFG->dbpass = '********';
$CFG->prefix = 'mdl_';
$CFG->dboptions = array (
'dbpersist' => 0,
'dbport' => PORT,
'dbsocket' => '',
);
Pastikan Anda dapat mengakses database Anda melalui Load Balancer atau alamat IP Virtual, atau jika Anda perlu memperbarui file PostgreSQL pg_hba.conf untuk mengizinkannya.
Penskalaan Vertikal
Untuk penskalaan vertikal, dengan ClusterControl Anda dapat memantau node database dari sistem operasi dan sisi database. Anda dapat memeriksa beberapa metrik seperti penggunaan CPU, Memori, koneksi, kueri teratas, kueri yang berjalan, dan bahkan banyak lagi. Anda juga dapat mengaktifkan bagian Dasbor, yang memungkinkan Anda melihat metrik dengan cara yang lebih mendetail dan ramah.
Dari ClusterControl, Anda juga dapat melakukan berbagai tugas manajemen seperti Reboot Host, Rebuild Replikasi Budak, atau Promosikan Budak, dengan satu klik.
Kesimpulan
Menskalakan basis data PostgreSQL Moodle Anda dapat menjadi tugas yang sulit karena Anda perlu mengetahui bagaimana Anda perlu menskalakan dan bagaimana melakukannya tanpa mempengaruhi sistem. Memiliki sistem pemantauan yang baik adalah langkah pertama untuk mengetahui kapan dan bagaimana Anda perlu menskalakan Basis Data Moodle Anda. Menambahkan Load Balancer akan membantu Anda menghindari waktu henti yang tidak perlu dan juga akan meningkatkan Ketersediaan Tinggi di lingkungan LMS Anda.
Semua hal yang kami sebutkan ini dapat dilakukan dengan menggunakan ClusterControl yang akan membuat pekerjaan lebih mudah. ClusterControl menyediakan berbagai macam fitur, seperti pemantauan, peringatan, failover otomatis, pencadangan, pemulihan tepat waktu, verifikasi pencadangan, penskalaan, dan banyak lagi.