Tag Archives

4 Articles
Galera dengan Galera Arbitrator (GARB)

Galera dengan Galera Arbitrator (GARB)

Galera with Galera Arbitrator for conflict resolution.

Pada implementasi terdahulu, digunakan tiga basisdata agar tercapai kuorum. Kuorum ditujukan agar tidak tercapai konflik penulisan (split brain). Namun, sebenarnya untuk dua basisdata saja sudah cukup. Pasang saja Galera Arbritator (GARB) pada kepala kluster dan matikan saja salah satu node supaya terjadi kuorum.

 The twins looked at each other jubilantly but with some surprise. Although 70-534 answer analysis they 70-534 answer analysis considered themselves Scarlett’s favored suitors, they had never before gained tokens ADM-201 exam dumps of this favor so easily. Usually she made them beg and plead, while she put them off, CISSP exam topics refusing to give a 70-534 answer analysis Yes or No answer, laughing if they sulked, growing cool if they became angry. And here she had practically promised them 70-534 answer analysis the ADM-201 exam dumps whole of tomorrow—seats by her at 70-534 answer analysis the barbecue, all the waltzes (and they’d see to it that the dances were CISSP exam topics all waltzes!) and the supper intermission. This was worth getting expelled from the university.Filled ADM-201 exam dumps with new enthusiasm by their success, they CISSP exam topics lingered on, talking about the barbecue 70-534 answer analysis and the ball and Ashley Wilkes 300-208 study material CISSP exam topics and Melanie Hamilton, CISSP exam topics interrupting each other, making jokes and laughing at them, hinting broadly for invitations 300-208 study material to supper. ADM-201 exam dumps Some time had passed before they realized that Scarlett was having very little to say. The atmosphere had somehow changed. Just how, the twins did not know, but the fine glow had gone out of the afternoon. Scarlett seemed to ADM-201 exam dumps be paying little attention to 70-534 answer analysis what they 300-208 study material 70-534 answer analysis ADM-201 exam dumps said, although she made the correct answers. Sensing something they 300-208 study material could not understand, baffled and annoyed by it, the twins struggled along for a while, and then rose reluctantly, ADM-201 exam dumps looking at their 300-208 study material watches.The sun was low CISSP exam topics across the new-plowed fields and the tall woods across the river ADM-201 exam dumps were looming ADM-201 exam dumps blackly in silhouette. Chimney swallows were darting swiftly across the yard, and chickens, ducks and turkeys were waddling 70-534 answer analysis and strutting and straggling in from the fields.Stuart bellowed: “Jeems!” And after an interval a 70-534 answer analysis tall black boy of their own age ran breathlessly around CISSP exam topics the house and out toward the ADM-201 exam dumps tethered horses. Jeems was their 300-208 study material body servant and, like CISSP exam topics the dogs, accompanied them everywhere. He had been CISSP exam topics their childhood playmate and had been given to the twins for their own ADM-201 exam dumps on their tenth birthday. At the sight of him, CISSP exam topics CISSP exam topics the Tarleton hounds rose up out of the red dust and stood waiting expectantly for their masters. The 300-208 study material boys bowed, shook hands and 300-208 study material told CISSP exam topics Scarlett they’d be over 300-208 study material at the 300-208 study material Wilkeses’ early in the morning, waiting for her. Then CISSP exam topics they were ADM-201 exam dumps off down the 70-534 answer analysis walk CISSP exam topics at a rush, mounted their horses and, followed by ADM-201 exam dumps ADM-201 exam dumps Jeems, went down the avenue of cedars at a gallop, waving their hats and yelling back to her.When they had rounded the curve of the dusty road that hid them from Tara, Brent drew his horse to a ADM-201 exam dumps stop under a clump of dogwood. Stuart halted, 70-534 answer analysis too, and the darky boy pulled up a few paces behind 300-208 study material them. The horses, feeling slack reins, 300-208 study material stretched down their necks to crop the tender spring grass, and the patient hounds lay down again in the 300-208 study material CISSP exam topics soft red dust and looked up longingly at the chimney swallows circling in the gathering dusk. 300-208 study material Brent’s wide ingenuous face was puzzled and mildly indignant.“Look,” he said. “Don’t it look to you like she 70-534 answer analysis would of asked us to stay for supper?”  Nor did 70-534 answer analysis James and Andrew, who took him into their store in Savannah, regret his lack of education. His clear hand, his 300-208 study material accurate CISSP exam topics figures and his shrewd ADM-201 exam dumps ability in bargaining won their respect, where a knowledge 70-534 answer analysis of literature and a fine appreciation of music, had young 300-208 study material Gerald possessed them, would have moved them to snorts of contempt. America, in the early years of the century, had been kind to the Irish. James and Andrew, who had begun by hauling goods in covered wagons 70-534 answer analysis from Savannah to Georgia’s inland towns, had prospered into a store of their own, and Gerald prospered with them.

GARB adalah sebuah layanan khusus untuk memilih (voting) di Galera. Dia tidak ada ada data di dalamnya.

Pasang GARB

Supaya sama, saya asumsikan kita memasang repositori resmi dari MariaDB.

curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
sudo apt-get update

Mari memasang GARB:

sudo apt-get install galera-arbitrator-3

Selesai.

Konfigurasi GARB

Ubah berkas /etc/default/garb sebelum memulai GARB.

# Copyright (C) 2012 Codership Oy
# This config file is to be sourced by garb service script.

# A comma-separated list of node addresses (address[:port]) in the cluster
GALERA_NODES="192.168.101.10:4567,192.168.101.11:4567"

# Galera cluster name, should be the same as on the rest of the nodes.
GALERA_GROUP="apakek_cluster"

# Optional Galera internal options string (e.g. SSL settings)
# see http://galeracluster.com/documentation-webpages/galeraparameters.html
# GALERA_OPTIONS=""

# Log file for garbd. Optional, by default logs to syslog
# LOG_FILE=""

Jangan lupa untuk menyertakan port! Ada galat dikonfigurasi GARB bila kita tidak secara spesifik menyebutkan port Galera.

Jalankan GARB

sudo /etc/init.d/garb start

Bila sudah benar, seharusnya saat menguji jumlah node dalam kluster tetap tiga.

$ sudo mysql --defaults-file=/etc/mysql/debian.cnf -e 'SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"'
+--------------+
| cluster size |
+--------------+
| 3            |
+--------------+

Selesai.

MariaDB + Galera Cluster + HAProxy untuk Basisdata Lebih Handal

MariaDB + Galera Cluster + HAProxy untuk Basisdata Lebih Handal

HA Proxy Galera

HA Proxy encapsulate a Galera cluster for High-Availability solution.

Ada banyak aplikasi PHP di luar sana yang secara naas belum bisa pindah dari MySQL ke PostgreSQL. Aplikasi seperti WordPress dan Magento. Untuk aplikasi-aplikasi kritikal tersebut, diperlukan adanya redundansi untuk menjamin data. Untungnya, sekarang sudah ada produk Galera Cluster yang bisa mencapai itu. Produk ini menjadikan serangkaian MySQL Server untuk memiliki replikasi data yang sama.

Eh, tapi kayaknya kalau nanti PHP7 sudah resmi, mereka bakal dipaksa menggunakan ADODB, deh. Abstraksi ADODB memungkinkan SQL yang portabel. Hmm… sepertinya alasan ini nantinya bakal tidak ada.

Atau, mungkin Anda tertarik mengetahui bagaimana layanan MySQL Object (DBaaS) pada AWS dibuat? Atau, bagaimana layanan DBaaS pada OpenStack dibuat?

Ah, sudahlah, apa pun alasan supaya artikel ini ditulis supaya menjaga semangat ngeblog. Sejujurnya, saya menulis tutorial ini karena mood lagi naik akibat mendapatkan banyak Pokémon unik tadi siang di Perpustakaan Pusat UI.

Konfigurasi Peladen

Supaya tidak pusing, saya jelaskan dalam contoh kali ini ada 4 peladen. Satu peladen untuk HAProxy (harusnya dua, tapi saya malas). Lalu, tiga peladen menjadi peladen MySQL. Saya memilih untuk menggunakan MariaDB karena gratis dan mudah konfigurasi Galera-nya.

Peladen HAPROXY (selanjutnya dalam artikel akan saya sebut HAProxy)

  • IP 1: 192.168.1.12
  • IP 2: 192.168.101.1

IP 1 adalah IP eksternal yang digunakan untuk berhubungan dengan aplikasi. IP 2 adalah IP internal dalam jaringan lokal basisdata. Perhatikan baik-baik! Implementasi pusat data yang baik seharusnya memisahkan antara jaringan aplikasi, jaringan basisdata, jaringan administrasi, dan jaringan lainnya. Walau pun keempat peladen ini dijalankan pada VirtualBox sekalipun, tetap saya pisahkan untuk menunjukkan arsitektur yang benar.

Ada tiga peladen yang akan digunakan sebagai peladen basisdata. Saya akan namakan MariaDB1 (192.168.101.10), MariaDB2 (192.168.101.11), dan MariaDB3 (192.168.101.12). Walau pun nantinya setiap peladen bisa ditulisi, saya akan menggunakan peladen MariaDB1 sebagai awalan.

Berhubung saya malas, saya akan kurang detail menjelaskan. Silakan tinggalkan komentar bila kurang jelas. Saya menggunakan Debian Jessie sebagai sistem operasi dasar. Lalu, saya memilih menggunakan MariaDB 10.1 karena dia sudah mendukung langsung Galera Cluster.

Memasang MariaDB

Lakukan ini pada setiap peladen MariaDB: MariaDB1, MariaDB2, dan MariaDB3. Pokoknya, identik!

Memasang Peladen MariaDB

Aktifkan repositori MariaDB. Sebagai contoh dengan menggunakan Perkakas Konfigurasi Repositori kali ini saya ambil cermin Biznet karena yang sebelumnya Kartolo. Buatlah berkas /etc/apt/sources.list.d/mariadb.list yang berisi:

# MariaDB 10.1 repository list - created 2016-07-22 08:52 UTC
# http://downloads.mariadb.org/mariadb/repositories/
deb [arch=amd64,i386] http://mariadb.biz.net.id/repo/10.1/debian jessie main
deb-src http://mariadb.biz.net.id/repo/10.1/debian jessie main

Atau cara lainnya:

sudo apt-get install software-properties-common
sudo add-apt-repository 'deb [arch=amd64,i386] http://mariadb.biz.net.id/repo/10.1/debian jessie main'

Setelah itu, impor kunci publik repositori MariaDB:

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db

MariaDB versi 10.1 sudah memasang Galera secara baku. Jadi, perintah pemasangan menjadi lebih mudah, cukup:

sudo apt-get install mariadb-server

Setelah itu, matikan layanan MariaDB:

sudo systemctl stop mysql

Atau, kalau Anda nyentrik atau punya alasan idealisme lainnya sehingga tidak menggunakan SystemD:

sudo service mysql stop

Setelah ini, konfigurasi Galera.

Berkas yang Identik

Debian Jessie menggunakan konfigurasi /etc/mysql/debian.cnf untuk menyediakan pengguna internalnya. Pengguna internal ini yang digunakan oleh Debian dalam mengonfigurasi peladen MySQL. Salin berkas tersebut dari MariaDB1 ke MariaDB2 dan MariaDB3 sehingga ketiganya memiliki /etc/mysql/debian.cnf yang identik.

Hanya berkas ini yang tidak identik karena dibuat secara otomatis oleh Debian pada saat pemasangan. Tetapi, kita perlu ketiga peladen memiliki konfigurasi yang identik. Itu sebabnya, satu berkas yang berbeda ini yang perlu disamakan.

Buat Konfigurasi untuk Kluster Galera

Pada ketiga peladen (MariaDB1, MariaDB2, MariaDB3) buat konfigurasi /etc/mysql/conf.d/galera.cnf

[mysqld]
#mysql settings
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
innodb_doublewrite=1
query_cache_size=0
query_cache_type=0
bind-address=0.0.0.0

#galera settings
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="apakek_cluster"
wsrep_cluster_address=gcomm://192.168.101.10,192.168.101.11,192.168.101.12
wsrep_sst_method=rsync

Silakan ganti nama berkas galera.cnf dengan nama lain kalau Anda mau. Silakan ganti “apakek_cluster” sesuai selera Anda untuk mendapatkan nama kluster yang jauh lebih baik.

Aktifkan Salah Satu Peladen Terlebih Dahulu

Lakukan langkah ini di salah satu peladen yang akan dimulai pertama kali. Bisa jadi karena pemasangan baru seperti saat ini. Atau, bisa jadi ada mati lampu sehingga menyebabkan seluruh kluster mati. Atau, laptop Anda baru dinyalakan kembali. Intinya, lakukan langkah ini pada saat tidak ada satu pun peladen yang menyala dan kluster ini baru mau dinyalakan dulu.

Bila pada kasus mati lampu atau peladen mati mendadak (crash), periksa berkas /var/lib/mysql/grastate.dat pada masing-masing peladen untuk memilih mana peladen dengan data terbaru. Sehingga, peladen tersebutlah yang dimulai pertama kali.

Bila Anda menggunakan SystemD, gunakan skrip ini:

sudo /usr/bin/galera_new_cluster

Atau, demi alasan idealisme atau apa pun sehingga Anda membuang SystemD dan menggunakan sistem init lainnya:

sudo service mysql start --wsrep-new-cluster

Pada saat ini seharusnya sudah berjalan:

$ sudo mysql --defaults-file=/etc/mysql/debian.cnf -e 'SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"'
+--------------+
| cluster size |
+--------------+
| 1            |
+--------------+

Kalau 0, berarti Anda ada salah konfigurasi di suatu tempat.

Jalankan Peladen MariaDB Sisanya

Pada dua peladen sisanya, MariaDB dijalankan dengan cara normal:

sudo systemctl start mysql

Atau

sudo service mysql start

Seharusnya, apabila tidak ada kerusakan, pada akhirnya akan ada tiga peladen.

$ sudo mysql --defaults-file=/etc/mysql/debian.cnf -e 'SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"'
+--------------+
| cluster size |
+--------------+
| 3            |
+--------------+

Sampai saat ini, Galera sudah selesai dibuat. Anda lakukan operasi SQL pada salah satu peladen mana pun hasilnya akan sama.

BONUS TUGAS

Terakhir, untuk tugas. Silakan buat satu pengguna Admin Super yang bisa membuat basis data dan penggunanya. Pengguna ini harus bisa mengakses dari luar.

Konfigurasi HAProxy

Pada salah satu peladen MariaDB (MariaDB1/MariaDB2/MariaDB3), buat sebuah pengguna HAProxy di basisdata. Pengguna ini akan mengkueri basisdata untuk mengecek keberlangsungan masing-masing peladen.

sudo mysql --defaults-file=/etc/mysql/debian.cnf -e "CREATE USER 'haproxy'@'192.168.101.1'"

Ganti nama pengguna haproxy dengan sesuatu yang lebih kreatif. Demi keamanan, jangan cuma copas saja di sini!

Lalu, masuk pada peladen HAProxy dan pasang HAProxy di sana:

sudo apt-get install haproxy

Lalu, buat konfigurasi HAProxy. Caranya, tambahkan baris-baris ini pada berkas konfigurasi /etc/haproxy/haproxy.cfg

# Load Balancing for Galera Cluster
listen galera 192.168.1.12:3306
     balance source
     mode tcp
     option tcpka
     option mysql-check user haproxy
     server node1 192.168.101.10:3306 check weight 1
     server node2 192.168.101.11:3306 check weight 1
     server node2 192.168.101.12:3306 check weight 1

Ganti nama pengguna haproxy dengan sesuatu yang lebih kreatif. Demi keamanan, jangan cuma copas saja di sini!

Lalu, jalankan ulang HAProxy. (Pada titik ini saya sudah malas membuat dua versi)

sudo service haproxy restart

Selesai.

Optimasi

Bonus untuk landasan pemikiran. Berikut arsitektur-arsitektur alternatif yang bisa dibuat untuk memenuhi kebutuhan.

  1. Ganti HAProxy dengan perangkat keras router atau load-balancer.
  2. Pasang HAProxy pada setiap peladen aplikasi agar menghilangkan bottleneck jaringan. Jadi, hubungan antara aplikasi dan basisdata menjadi M:N. Kalau pakai ini, HAProxy lebih baik bind ke localhost jangan ke IP. Jadi, akses per aplikasi langsung ke localhost. Ini pondasi arsitektur layanan mikro (microservice architecture).
    HAProxy per apps

    HAProxy per apps

  3. Partisi peladen-peladen aplikasi untuk mengakses hanya salah peladen dalam kluster.
  4. Tambah jumlah peladen dalam kluster.

Jumlah kluster 3 itu adalah demi memenuhi konsep kuorum.

Optimasi Lebih Lanjut yang Belum Sempat Ditulis Karena Saya Ingin Mencari Pokémon Lagi Riset Lebih Lanjut

Ada riset lanjutan yang dapat membuat arsitektur aplikasi lebih terskalakan. Yakni, membuat sebuah peladen obyek penyimpan (storage object) semacam Amazon S3 dengan menggunakan OpenStack Swift dengan menggunakan CEPH. Atau, implementasi sederhana dengan GlusterFS atau NFS. Silakan kembangkan lebih lanjut agar aplikasi Anda lebih terskalakan.

Gunakan Puppet, Ansible, Chef, atau konfigurator apa pun yang lebih baik. Kalau arsitektur sudah skala besar seperti ini, mengubah peladen satu persatu itu sudah mustahil bila tanpa ada kesalahan. Buat tutorial ini menjadi cookbook/rule yang bisa secara dinamis di-deploy.

Semoga bermanfaat.

Bacaan Lebih Lanjut

WordPress JP: Installing MariaDB

WordPress JP: Installing MariaDB

THERE WAS A BUG IN THE SERVER THAT MADE ME LOST THIS POST. THIS IS THE RETRIEVED VERSION THAT I BACK UP.

It’s obvious that I speed write and take everything from guide. As I said before, writing this in Bahasa Indonesia kind of hard for me. So, I write this as I do in parallel.

Setup Filesystem

Disable ZFS file-level prefetch as in the guide:

cat >> /etc/modprobe.d/zfs.conf << .
options zfs zfs_prefetch_disable=1
.

That would be last on the next reboot, but for now disable:

echo 1 | sudo tee /sys/module/zfs/parameters/zfs_prefetch_disable

Create the dataset and the optimizations:

zfs create -o mountpoint=/var/lib/mysql rpool/MARIADB
zfs set primarycache=metadata rpool/MARIADB
zfs set recordsize=16k rpool/MARIADB

It is optimized to use cache for metadata only if we are going to use INNODB. Its chunk is 16k, so we set it also in ZFS. In the guide we are told that MariaDB log is a 128k chunk — default chunk in ZFS.

Remember that ZFSOnLinux Bug early on? Yeah, we should regenerate Ramdisk everytime we’ve done something to /etc/zfs/zpool.cache. To be honest, I don’t know if any of the operation we did earlier warrant such action. But, just do that for precaution.

update-initramfs -d -k `uname -r`
update-initramfs -c -k `uname -r`

And now, we go with installing MariaDB server.

Installing Database Server

According to MariaDB Repository configuration page, let’s set MariaDB:

cat >> /etc/apt/sources.list.d/mariadb.list << .
# MariaDB 10.1 repository list - created 2016-05-03 08:05 UTC
# http://mariadb.org/mariadb/repositories/
deb [arch=amd64,i386] http://kartolo.sby.datautama.net.id/mariadb/repo/10.1/debian jessie main
deb-src http://kartolo.sby.datautama.net.id/mariadb/repo/10.1/debian jessie main
.

Import its key and update our list:

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
sudo apt-get update

Install MariaDB server:

sudo apt-get install mariadb-server

Disable MariaDB server double buffer by add a line (mine, vanilla at line 142) with:

skip-innodb_doublewrite

And restart MariaDB server:

sudo systemctl restart mysql

From this onward, we are ready to install WordPress, NGINX and such.

Bacaan Lebih Lanjut

KMail Gagal Dijalankan

KMail Gagal Dijalankan

TL;DR

Pada suatu waktu sehabis memperbaharui sistem, KMail saya tidak lagi dapat dijalankan. Alasan kegagalan karena layanan Akonadi tidak berjalan. Hal ini disebabkan oleh karena pembaharuan MySQL ke versi 5.6. Untuk mengatasi itu, paket MySQL diganti dengan MariaDB.

Versi Lengkap

Saya sempat gagal menjalankan KMail. Alasan yang diberikan adalah karena layanan Akonadi tidak berjalan. Dari jurnal Akonadi, saya dapati pesan kesalahan berikut:

stderr: "2015-05-21 07:25:45 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2015-05-21 07:25:45 0 [Note] /usr/sbin/mysqld (mysqld 5.6.24-0ubuntu2) starting as process 13829 ...

Ternyata, Akonadi tidak kompatibel dengan MySQL 5.6. Menurut sumber yang saya temukan dari wawancara dengan Mbah Gugel, saya harus mengganti MySQL dengan MariaDB. Ya, sudah:

sudo apt-get install mariadb-common mariadb-client-core-10.0 mariadb-server-core-10.0

Lalu, saya jalankan ulang KMail dan berhasil. Oh, iya, saya menggunakan Ubuntu Vivid.