Friday, January 15, 2010

Database Clustering, High Availability, dan Load Balancing.

High Availability didefinisikan sebagai kemampuan mempertahankan sekumpulan aplikasi bisnis, tersedia bagi user sepanjang waktu. Hal ini meliputi dari antisipasi / persiapan saat aliran listrik padam sampai kondisi bencana seperti kebakaran atau gempa bumi. Setiap critical system punya satu atau lebih redundant backup system. Konsep fault tolerance berhubungan dengan high availability pada aplikasi bisnis.

Clustering adalah penggunaan dua atau lebih komputer / node / server untuk sejumlah fungsi-fungsi yang sama. Jadi jika satu komputer mati, maka komputer yang lainnya dapat mengambil alih tugas komputer tersebut. Ide clustering mendukung konsep fault tolerance. Cluster juga dapat meningkatkan kemampuan kalkulasi/komputing/performance/dari sistem komputer sehingga mendukung konsep scalability. Dengan mengimplementasikan ide clustering, kita juga dapat sekaligus mengimplementasikan konsep high availability serta meningkatkan processing power.

Toleransi terhadap failure bergantung kepada dua hal;
1. Lokasi kegagalan; Dari dalam cluster atau dari luar.
2. Kemampuan aplikasinya sendiri dalam mengatasi kesalahan.

MySQL cluster adalah sistem database terdistribusi yang terdiri dari 3 komponen utama ;
1. MySQL server ( SQL node atau API node atau mysqld)
Untuk mendukung MySQL Cluster, MySQL harus dikonfigurasikan untuk menggunakan NDB storage engine. Hal ini bisa dilakukan dengan (pada saat build dari source) menggunakan parameter "--with-ndbcluster" pada script configure. Untuk bisa menggunakan engine tersebut, harus dipastikan sedikitnya satu "MGM" node sudah berjalan. Secara default, MySQL Server yang dikonfigurasi menggunakan engine NDB akan mencari MGM node pada localhost. Dan jika berada pada host lain perlu dispesifikasikan pada "my.cnf" atau command line.
2. Management Server (management node atau MGM node atau ndb_mgmd)
Istilah lainnya adalah cluster management server, dll.
3. Data node (NDB node atau ndbd)
Jika SQL node dijalankan pada host dimana terdapat data node, maka MySQL Server yang bersangkutan harus meng-enable "NDBCLUSTER: storage engine. Selanjutnya setiap proses seperti "create table" atau "alter table" oleh MySQL harus dijalankan setelah cluster dijalankan dan menggunakan engine ndbcluster atau ndb (Misalnya; "create table session (...) engine=ndbcluster;"), selain itu table-table juga harus mempunyai primary key.
4. Data access program (MySQL client, dll).

Untuk 3 komponen pertama, masing-masing daemon yang berjalan adalah:
- "mysqld" (misalnya dijalankan dengan "mysqld --ndbcluster --ndb-connectionstring),
- "ndb_mgmd" (Management server daemon), dan
- "ndbd" (node daemon).

Database yang menggunakan engine ndbcluster juga bisa mengimport data file dari database yang menggunakan engine lain seperti "myisam", misalnya ;
"mysqldump --add-drop-table "name table" > "nama_backup_file".sql
lalu tinggal substitute semua "engine/type=myisam" dengan "engine=ndbcluster".

Untuk setiap daemon terdapat program client yang terinstall secara default yaitu "mysql", "ndb_mgm" (management console)

Contoh:
=====================================================
[root@local bin]pwd

/root/mysqlcluster-63-master/install/mysql/bin

[root@local bin]# ./ndb_mgm -c "192.168.0.126:1186" -e "all status"

Connected to Management Server at: 192.168.0.126:1186

Node 2: started (mysql-5.1.30 ndb-6.3.20)

Node 3: started (mysql-5.1.30 ndb-6.3.20)

=====================================================

Konfigurasi SQL Node dan data Node dispesifikasikan pada "my.cnf" dan management node pada "config.ini".
Dari cluster management server di "dbase-LBal1", berikut ini spesifikasi ketiga node yang terhubung ke management server tersebut misalnya ;
1. "NDB" node: id=3 @dbase-1, id=4 @dbase-2 (not connected, terima koneksi dari dbase-2)
2. "MGM" node: id=1 @dbase-LBal1, id=2 @dbase-LBal2
3, "API" node: id=5 @dbase-1, id=6 @dbase-2, id=7 (not connected)

Untuk mengaktifkan "NDB" node pada "dbase-1" atau "dbase-2"

"service ndbd start"

Sedangkan untuk "API" node,

"service mysql start"

Konfigurasi "my.cnf" pada "dbase-1" dan "dbase-2"

/etc/my.cnf @dbase-1
+++++++++++++++++++++++++++++++++++++++++++++++++++++
[mysqld]
ndbcluster
# IP Address of the cluster management node
ndb-connectionstring=192.168.0.119, 192.168.0.120
[mysql_cluster]
ndb-connectstring=192.168.0.119, 192.168.0.120
+++++++++++++++++++++++++++++++++++++++++++++++++++++

/etc/my.cnf @dbase-2
+++++++++++++++++++++++++++++++++++++++++++++++++++++
[mysqld]
ndbcluster
# IP Address of the cluster management node
ndb-connectionstring=192.168.0.119, 192.168.0.120
[mysql_cluster]
ndb-connectstring=192.168.0.119, 192.168.0.120
+++++++++++++++++++++++++++++++++++++++++++++++++++++

Konfigurasi "config.ini" pada "dbase-LBal1" dan "dbase-LBal2"

"/var/lib/mysql-cluster/config.ini @dbase-LBal1"

Proses :

"/usr/sbin/ndb_mgmd -c localhost:1186 -f /var/lib/mysql-cluster/config.ini"
+++++++++++++++++++++++++++++++++++++++++++++++++++++
[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=4000M
IndexMemory=500M
MaxNoOfOrderedIndexes=2048
MaxNoOfAttributes = 3000
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]
# Sectionfor the cluster management node
[NDB_MGMD]
# IP Address of the management node (this system)
HostName=192.168.0.119
[NDB_MGMD]
# IP Address of the management node (this system)
HostName=192.168.0.120
# Section for the storage nodes
[NDBD]
# IP Address of the first storage node
HostName=192.168.0.121
[NDBD]
# IP Address of the second storage node
HostName=192.168.0.122
DataDir=/var/lib/mysql-cluster
# one [MYSQLD] per storage node
[MYSQLD]
[MYSQLD]
# one for restore process
[MYSQLD]
+++++++++++++++++++++++++++++++++++++++++++++++++++++

"/var/lib/mysql-cluster/config.ini @dbase-LBal2

Proses:

"/usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini"
+++++++++++++++++++++++++++++++++++++++++++++++++++++
[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=4000M
IndexMemory=500M
MaxNoOfOrderedIndexes=2048
MaxNoOfAttributes = 3000
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]
# Sectionfor the cluster management node
[NDB_MGMD]
# IP Address of the management node (this system)
HostName=192.168.0.119
[NDB_MGMD]
# IP Address of the management node (this system)
HostName=192.168.0.120
# Section for the storage nodes
[NDBD]
# IP Address of the first storage node
HostName=192.168.0.121
[NDBD]
# IP Address of the second storage node
HostName=192.168.0.122
DataDir=/var/lib/mysql-cluster
# one [MYSQLD] per storage node
[MYSQLD]
[MYSQLD]
# one for restore process
[MYSQLD]
+++++++++++++++++++++++++++++++++++++++++++++++++++++

Proses backup harian dilakukan dari "dbase-LBal1"
=====================================================

[root@dbase-LBal1 ~]# crontab -l
0 0 * * * /root/automate/automate.sh

=====================================================

=====================================================
[root@dbase-LBal1 ~]# more /root/automate/automate.sh

+++++++++++++++++++++++++++++++++++++++++++++++++++++
#!/bin/sh
tgl='date'
echo "------------------------- [ $tgl ] ---------------------------" >>
root/automate.output.automate.log
/usr/bin/ndb_mgm << EOF >> /root/automate/output.automate.log 2>&1
show
start backup
show
quit
EOF
+++++++++++++++++++++++++++++++++++++++++++++++++++++

Hasil backup bisa disimpan di "/var/lib/mysql-cluster/BACKUP @dbase-1. Hal ini dikarenakan output dari management console menyatakan bahwa NDB id=4 (pada dbase-2) tidak terkoneksi, sehingga proses backup hanya dilakukan pada node 3 (db-1).
+++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++ Read more "Database Clustering, High Availability, dan Load Balancing...."
 

Linux Documentation ©  Copyright by Parapat Notes | Asterisk Telephony | OpenSource Distribution Source Developer