Tulisan ini saya mulai dengan membatasi permasalahan pada aplikasi berbasis web dan #database #mysql atau #mariadb. Bayangkan anda memiliki empat server database. Satu server berjalan sebagai master database di mana user melakukan penulisan ke database, dan tiga lainnya adalah server replikasi dari master tadi, biasanya disebut database slave. Nah lalu bagaimana sebuah aplikasi dapat menggunakan semua sumber daya tadi secara bersamaan? Misalnya jika ingin menulis data maka harus masuk ke server master, sedangkan jika hanya membaca data cukup dilakukan di server-server slave. Bisa saja kita menetapkan definisi server A adalah master untuk baca-tulis, server B, C, D adalah slave untuk baca-saja di aplikasi. Tetapi jika salah satu mesin mengalami perbaikan, perubahan konfigurasi, gangguan atau kerusakan bisa-bisa aplikasi ikut mengalami kegagalan hanya karena satu server slave tidak bisa diakses. Atau jika kita menambahkan satu mesin database lagi ke sistem sedangkan konfigurasi di aplikasi tidak diperbarui, bisa jadi satu mesin database tersebut menganggur sampai tiba waktunya untuk pensiun. Tentunya hal tersebut bukanlah solusi ideal.
Solusi yang ideal adalah sebuah sistem database selalu tersedia (High Availibility) dan dapat diakses dari satu pintu meskipun secara fisik terdapat lebih dari satu server database. Sistem database dapat diubah-ubah sesuai kebutuhan tanpa harus mengubah konfigurasi dari sisi aplikasi pengguna database. Di sinilah kita membutuhkan sebuah mekanisme router atau proxy database semacam #MaxScale. MaxScale memang dibuat untuk menyelesaikan permasalahan-permasalahan mengenai pembagian beban pemrosesan query database. MaxScale juga sangat membantu dalam pengembangan sistem database High Availibity.
Lanjut ke #Slackware,
Untuk memasang MaxScale di Slackware kita harus membangun ulang paket program mysql atau mariadb karena paket standar Slackware tidak menyertakan libmysqld.a yang dibutuhkan MaxScale untuk membangun driver/modul mysql-nya. Pustaka libmysqld.a ini berukuran sangat besar, sekitar 170 - 180 MB, sehingga layak jika tidak disertakan dalam distribusi paket mysql/mariadb. Pustaka statik ini hanya dibutuhkan saat pembangunan MaxScale dan tidak diperlukan untuk menjalankan MaxScale.
Untuk membangun ulang program mysql/mariadb dengan pustaka statik kita tinggal menggunakan SlackBuild mysql atau mariadb dari direktori source/ap/mysql, atau source/ap/mariadb, atau jika Slackware-nya sudah diperbarui dengan update terakhir maka kita sebaiknya menggunakan SlackBuild dari patches/source/mysql (mariadb). Misalnya untuk Slackware64-14.1:
# cd /tmp # rsync -avP rsync://mirrors.slackware.com/slackware/slackware64-14.1/patches/source/mariadb . # cd mariadb Ralat: env KEEPSTATIC tidak diperlukan karena libmysqld.a akan selalu dihasilkan saat membangun mysql/mariadb. # ./mariadb.SlackBuild # cd /tmp
Kita buat dahulu user dan group untuk service maxscale:
# getent group maxscale || groupadd -r maxscale # getent passwd maxscale || \ useradd -r -g maxscale -d /var/lib/maxscale \ -s /sbin/nologin -c "MaxScale Server" maxscale
Kemudian unduh versi stabil MaxScale terakhir (sampai tulisan ini dibuat versi stabil terakhir adalah 1.2.1.21) di GitHub:
# curl -OLJ -C - https://github.com/mariadb-corporation/MaxScale/archive/blr-1.2.1.21.tar.gz # tar xf MaxScale-blr-1.2.1.21.tar.gz # mkdir -p MaxScale-blr-1.2.1.21/build # cd MaxScale-blr-1.2.1.21/build # cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr \ -DEMBEDDED_LIB=/tmp/mariadb-5.5.43/build/libmysqld/libmysqld.a # make # make install # mkdir -p /var/{lib,log,cache,run}/maxscale # chown -R maxscale:maxscale /var/{lib,log,cache,run}/maxscale
Atau kalau ingin menjadikannya paket Slackware:
# mkdir -p /tmp/package-maxscale # make install DESTDIR=/tmp/package-maxscale # cd /tmp/package-maxscale # mv usr/share/man usr/ # gzip -9 usr/man/man1/maxscale.1 # mkdir -p var/{lib,log,cache,run}/maxscale # chown -R maxscale:maxscale var/{lib,log,cache,run}/maxscale # makepkg -p -c n -l y /tmp/maxscale-1.2.1.21-x86_64-1.txz # installpkg /tmp/maxscale-1.2.1.21-x86_64-1.txz
Silakan konfigurasi MaxScale sesuai kebutuhan:
# cp /etc/maxscale.cnf.template /etc/maxscale.cnf # SILAKAN KONFIGURASI FILE /etc/maxscale.cnf
Panduan konfigurasi per-opsi dari MaxScale dapat dilihat di
https://mariadb.com/kb/en/mariadb-enterprise/mariadb-maxscale/maxscale-getting-started/
Untuk menjalankan MaxScale, cukup tambahkan baris ini ke rc.local
if [ ! -d /var/lib/maxscale ]; then mkdir -p /var/lib/maxscale fi if [ ! -d /var/log/maxscale ]; then mkdir -p /var/log/maxscale fi if [ ! -d /var/cache/maxscale ]; then mkdir -p /var/cache/maxscale fi if [ ! -d /var/run/maxscale ]; then mkdir -p /var/run/maxscale fi chown -R maxscale:maxscale /var/{lib,log,cache,run}/maxscale # Start maxscale server /usr/sbin/maxscale -U maxscale -P /var/run/maxscale
Untuk merotasi log maxscale, buat file konfigurasi logrorate untuk MaxScale, misalnya /etc/logrotate.d/maxscale:
/var/log/maxscale/*.log { notifempty monthly rotate 5 missingok compress delaycompress postrotate # just if maxscale is really running if [ pidof maxscale >/dev/null ]; then # Silakan pilih salah satu #/usr/bin/maxadmin -pmariadb flush logs # atau kill -USR1 `cat /var/run/maxscale/maxscale.pid` fi endscript }
Sepertinya tulisan ini akan berlanjut dengan contoh implementasi MaxScale karena ada beberapa model implementasi. Atau mungkin pembaca mau menuliskan pengalamannya menggunakan MaxScale?