HOWTO set up a MySQL Cluster at FreeBSD

Apa itu MySQL Cluster?
MySQL Cluster ialah sebuah teknologi database relasional yang memungkinkan clustering in­memory databases (main memory database system atau MMDB) dalam sebuah shared­ node system. Dengan adanya  shared­ node system  maka sebuah sistem dapat menggunakan hardware yang tidak terlalu mahal dan hanya dibutuhkan spesifikasi minimum software dan hardware.

Dengan MySQL Cluster dapat membagi pekerjaan database ke beberapa server, sehingga dalam  menyelesaikan pekerjaannya, server menjadi lebih ringan. Secara otomatis beberapa server tersebut akan  melakukan sincronisasi secara realtime melalui Server Database Manajemen.

MySQL Cluster didisain untuk mengatasi single point of failure, yaitu bagian dari suatu sistem, yang bilamana sistem tersebut mengalami kerusakan maka seluruh sistem akan berhenti bekerja. Oleh karena itu maka setiap komponen diharapkan memiliki memory dan disk sendiri / terpisah, dan menggunakan mekanisme shared storage.

Langkah Instalasi MySQL Cluster :

SYARAT YANG DIPERLUKAN :

  • 3 PC Hardware : (1 pc) Management Server (2 pc) Node Server yang sudah terinstall FreeBSD
  • User root dan password untuk instalasi dan konfigurasi.
  • Source mysql-5.0.82.tar.gz
  • Source mysql-proxy
  • Konektivitas jaringan (TCP/IP).
  • Tabel di buat harus ber-ENGINE=NDBCLUSTER

DESAIN SISTEM

  • MySQL-A ~ MANAGEMENT SERVER (NDB MGM) ~ 192.168.2.1
  • MySQL-B ~ NODE 1 ~ DATABASE SERVER ~ 192.168.2.2
  • MySQL-C ~ NODE 2 ~ DATABASE SERVER ~ 192.168.2.3

INSTALASI & KONFIGURASI :

1. Installasi MySQL ( Node1/192.168.2.2 dan Node2/192.168.2.3 )

Download source Source mysql-5.0.82.tar.gz.

shell> pw groupadd mysql
shell> pw useradd mysql
shell> tar xvfz mysql-5.0.82.tar.gz
shell> cd mysql-5.0.82
shell>./configure –prefix=/usr/local/mysql –with-mysqld-user=mysql –with-plugins=max –with-ndbcluster
shell> make
shell> make install
shell> cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
shell> cd /usr/local/mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> bin/mysql_install_db –user=mysql
shell> chown -R root .
shell> chown -R mysql var

edit file /etc/my.cnf

shell>vi /etc/my.cnf

Tambahkan sintak berikut

[mysqld]
ndbcluster
ndb-connectstring = 192.168.2.1

[mysql_cluster]
ndb-connectstring=
192.168.2.1

Membuat directory data ;

shell> cd /usr/local/mysql
shell> mkdir mysql-cluster
shell> ln -s /usr/local/mysql/mysql-cluster /var/lib/mysql-cluster

Jalankan CLUSTER DATABASE SERVER dan MySQL;

PERINTAH INI DIJALANKAN SETELAH KONFIGURASI MANAJEMEN SELESAI

shell> cd /usr/local/mysql/mysql-cluster
shell> ln -s /usr/local/mysql/libexec/ndbd /sbin/ndbd
shell> /sbin/ndbd –initial
shell> /usr/local/etc/rc.d/mysqld .sh

Untuk eksekusi perintah “/sbin/ndbd –initial” hanya dilakukan pada proses awal inisialisasi saja, selanjutnya cukup menggunakan perintah “/sbin/ndbd”.

2. Instalasi server manajemen node ( MySQL-A/192.168.2.1 )

Pada MANAGEMENT SERVER sebenarnya tidaklah memerlukan instalasi paket MySQL, dan hanya membutuhkan PC dengan hardware requirement yang relatif rendah dibanding dengan DATABASE SERVER, MANAGEMENT SERVER dapat di shutdown setelah DATABASE CLUSTER aktif / berjalan dengan baik, namun hal ini mengakibatkan fungsi redudancy database tidak berjalan secara realtime, dan hilangnya fungsi control pada DATABASE CLUSTER.

Konfigurasi:

kopi file ndb_mgm,ndb_mgmd dan my.cnf dari Server Database Mysql (Node1/192.168.2.2)  atau (Node2/192.168.2.3)

shell> cd /usr/local/
shell> mkdir mysql-mgm

shell> cd /usr/local/mysql-mgm
shell> sftp admin@192.168.2.2
shell> cd /usr/local/mysql/bin
shell> get ndb_mgm
shell> cd
/usr/local/mysql/libexec
shell> get
ndb_mgmd
shell> cd /etc/
shell> get my.cnf
shell> exit

Kembali ke server manajemen

shell> cd /usr/local/mysql-mgm
shell> ln -s /usr/local/mysql-mgm/ndb_mgm /sbin/ndb_mgm
shell> ln -s /usr/local/
mysql-mgm/ndb_mgmd /sbin/ndb_mgmd
shell> mkdir mysql-cluster
shell> ln -s /usr/local/mysql/mysql-cluster /var/lib/mysql-cluster

Edit file my.cnf

shell>vi /etc/my.cnf

Tambahkan sintak berikut

[mysqld]
ndbcluster
ndb-connectstring =
192.168.2.1

[ndbd]
ndb-connectstring =
192.168.2.1
[ndb_mgmd]
ndb-connectstring =
192.168.2.1
[ndb_mgm]
ndb-connectstring =
192.168.2.1
[mysql_cluster]
ndb-connectstring =
192.168.2.1

Edit file konfigurasi MANAGEMENT SERVER ;

shell> vi /usr/local/mysql/mysql-cluster/config.ini

Isi file config.ini:

[NDBD DEFAULT]
NoOfReplicas=2            #banyak server node mysql yang akan digunakan
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]
# MANAGEMENT SERVER
[NDB_MGMD]
HostName=192.168.2.1        # IP MANAGEMENT SERVER
# DATABASE SERVER
[NDBD]
HostName=192.168.2.2        # IP DATABASE SERVER 1
[NDBD]
HostName=192.168.2.3        # IP DATABASE SERVER 2
# 2 DATABASE SERVER
[MYSQLD]
[MYSQLD]

Jalankan MANAGEMENT SERVER ;

shell> /sbin/ndb_mgmd -f /usr/local/mysql/mysql-cluster/config.ini

Check akses MANAGEMENT CONSOLE ;

shell> /sbin/ndb_mgm
ndb_mgm> HELP
—————————————————————————
NDB Cluster — Management Client — Help
—————————————————————————

dst….

For detailed help on COMMAND, use HELP COMMAND.
ndb_mgm>
ndb_mgm> exit

3. CHECK KINERJA

Untuk melakukan pemeriksaan pada kinerja MYSQL-CLUSTER, dimulai dari MANAGEMENT SERVER sebagai berikut ;

Check melalui MANAGEMENT CONSOLE ( 192.168.2.1 ) ;

shell> /sbin/ndb_mgm
— NDB Cluster — Management Client —
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
———————
[ndbd(NDB)]     2 node(s)
id=2    @192.168.2.2  (mysql-5.0.82 ndb-7.0.6, Nodegroup: 0, Master)
id=3    @192.168.2.3  (mysql-5.0.82 ndb-7.0.6, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.2.1  (mysql-5.0.82 ndb-7.0.6)

[mysqld(API)]   2 node(s)
id=4    @192.168.2.2  (mysql-5.0.82 ndb-7.0.6)
id=5    @192.168.2.3  (mysql-5.0.82 ndb-7.0.6)

ndb_mgm>exit

Fungsi CLUSTER berjalan dengan baik apabila indikator diatas terpenuhi, dimana seluruh node database (NDB) telah dikenali dan tersambung pada MANAGEMENT SERVER, bila anda menemukan informasi berikut ;

id=3    @192.168.2.3  (mysql-5.0.82 ndb-7.0.6, starting) atau

not connected, accepting connect from 192.168.2.2 atau,
not connected, accepting connect from 192.168.2.3

pada 2 baris awal (NDB) atau 2 baris akhir (API) menandakan adanya kendala pada proses CLUSTER, lakukan check pada konektivitas jaringan dan konfigurasi pada system tersebut.

Check melalui DATABASE SERVER ( 192.168.2.[2/3] ) ;

Akses pada MySQL Console MySQL-B dan MySQL-C,lakukan test insert dan query pada database.
dengan cara terlebih dahulu membuat database yang sama di 192.168.2.[2/3]

Lakukan perintah dibawah ini di server node1(192.168.2.2) dan server node2(192.168.2.3)

mysql> create database dbcoba;
Query OK, 1 row affected (0.00 sec)

Buat table dengan engine=ndbcluster dan lakukan insert maupun update disalah satu server node, secara real time server node yang lain akan sama persis dengan server node yang di update.

Pada server node1(192.168.2.2) lakukan perintah berikut :

mysql> use dbcoba;
Database changed
mysql> CREATE TABLE tblcoba(
->   `ID` int(5) NOT NULL auto_increment,
->   `NAMA` varchar(100) NOT NULL default ”,
->   PRIMARY KEY  (`ID`)
-> ) ENGINE=ndbcluster;
Query OK, 0 rows affected (0.77 sec)

mysql> insert into tblcoba (NAMA) values
-> (‘BUDI’),
-> (‘WA2N’),
-> (‘SITI’);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

Pada server Node2(192.168.2.3) lakukan perintah berikut :

mysql> use dbcoba;
Database changed
mysql> show tables;
+——————+
| Tables_in_dbcoba |
+——————+
| tblcoba          |
+——————+
1 rows in set (0.01 sec)

mysql> select * from tblcoba;
+—-+——+
| ID | NAMA |
+—-+——+
|  1 | BUDI |
|  2 | WA2N |
|  3 | SITI |
+—-+——+
3 rows in set (0.00 sec)

secara realtime node2 akan mengikuti node1

Perhatian: ENGINE untuk table adalah NDBCLUSTER

atau jika terlanjur engine-nya MyISAM maka harus dialter dengan perintah :

mysql> ALTER TABLE [nama_table] ENGINE=NDBCLUSTER;

Selanjutnya saya akan menuliskan tutoril load balancing untuk mysql.

Referensi :
– http://dev.mysql.com