MaxScale - Memaksimalkan Kinerja Sistem Database

Submitted by w41lf0x on Fri, 12/18/2015 - 00:19

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,

Uuntuk 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-…

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?