Selasa, 18 September 2018

Mysql Cluster 1

Setup Database MySQL Clustering

Posted by kusprayitna on May 15th, 2012
Database MySQL merupakan database yang sudah tidak asinglagi bagi kita di dunia internet ataupun database gratisan.
Seperti halnya di kantor saya Universitas Islam Indonesia menggunakan database MySQL untuk melayani hosting website bagi sudbomain di bawah uii.ac.id
Untuk meningkatkan kinerja database yang semakin lama diakses olehbanyak pengguna, tentunya melalui websitenya, maka diperlukan upgrade.
Upgrade dilakukan dalam dua jenis, yaitu upgrade hardware dengan menambah kapasitas RAM maupun Harddisk dan jumlah prosesor. Upgrade ini terbatas oleh kemampuan hardware, dimana jumlah slot RAM hanya ada 4 buat slot dan slot CPU hanya ada.
Upgrade yang kedua adalah dengan menambahkan jumlah komputer servernya.
Upgrade yang kedua ini mempunyai beberapa hal yang harus dipertimbangkan, yaitu bagaimana data dibeberapa komputer harus sama. Masalah ini biasa disebut dengan clustering.
Dalam artikel ini, clusting database MySQL akan dilakukan tahap demi tahap mengguankan OS Centos 5.8 dan MySQL 5.
Komputer yang dibutuhkan adalah :
a. 1 buah untuk MySQL Cluster Manager (alokasi IP : 192.168.0.130)
b. 2 buah untuk MySQL database server (alokasi IP : 192.168.0.131 & 192.168.0.132)
c. 1 buah untuk Loadbalancing (alokasi IP : 192.168.0.1)
Tahapan yang dilakukan yaitu :

A. Persiapan

1. Install OS Centos versi 5.8 dan update
Ini dilakukan sebanyak jumlah server yang dibutuhkan, baik dilakukan di Virtual Machine maupun komputer fisik tidak menjadi masalah.
2. Download MySQL-Server
MySQL yang dipakai adalah versi  5.0.19 (versi max!)
File tersebut dapat didownload dari http://www.mirrorservice.org/sites/ftp.mysql.com/ atau dengan cara googling akan diperoleh file tersebut di
Simpan file di /~ dan diextract disana
# tar -xzf mysql-max*

B. Instalasi MySQL Cluster Manager

1. Salin file MySQL hasil download  cluster manager (berdasar hasil persiapan)
# cd mysql-max*
# mv bin/ndb_mgm /usr/bin
# mv bin/ndb_mgmd /usr/bin
# chmod 755 /usr/bin/ndb_mg*
2. Konfigurasi MySQl Cluster "/var/lib/mysql-cluster/config.ini"
# mkdir /var/lib/mysql-cluster
# vi /var/lib/mysql-cluster/config.ini
[NDBD DEFAULT]
NoOfReplicas=2

[MYSQLD DEFAULT]

[NDB_MGMD DEFAULT]

[TCP DEFAULT]

# Bagian Cluster Manager
[NDB_MGMD]
# Alamat IP Cluster Manager (PC bersangkutan)
HostName=192.168.0.130

# Bagian Cluster Node, setup storage
[NDBD]
# Node PC pertama
HostName=192.168.0.131
DataDir= /var/lib/mysql-cluster

[NDBD]
# Node PC kedua
HostName=192.168.0.132
DataDir=/var/lib/mysql-cluster

# Bagian MySQLD
[MYSQLD]
[MYSQLD]
3.  Start Cluster Manager
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
4. Otomatis start-up,
Perintah no 3 diatas bisa dimasukkan dalam file "/etc/rc.local" agar jalan otomatis saat komputer nyala.
5. Menjalankan Cluster Manager
# ndb_mgm
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2 (not connected, accepting connect from 192.168.0.131)
id=3 (not connected, accepting connect from 192.168.0.132)
[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.0.130  (Version: 5.0.19)
[mysqld(API)]   2 node(s)
id=4 (not connected, accepting connect from any host)
id=5 (not connected, accepting connect from any host)

C. Instalasi MySQL Database Server (2 Server)

1. Install database MySQL menggunakan file versi mysql-max
# mv mysql-max* /usr/local/mysql
# groupadd mysql
# useradd -g mysql mysql
# cd /usr/local/mysql
# scripts/mysql_install_db --user=mysql
# chown root:mysql . -R
# chown mysql data -R
2. Sesuaikan folder mysql/bin
# cp support-files/mysql.server /etc/init.d/
# chmod 755 /etc/init.d/mysql.server
# cd /usr/local/mysql/bin
# mv * /usr/bin
# cd ../
# rm -fr /usr/local/mysql/bin
# ln -s /usr/bin /usr/local/mysql/bin
3. Konfigurasi MySQL Database Server
# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/tmp/mysql.sock
user=mysql
## Default to using old password format for compatibility with mysql 3.x
## clients (those using the mysqlclient10 compatibility package).
old_passwords=1

## Disabling symbolic-links is recommended to prevent assorted security risks;
## to do so, uncomment this line:
## symbolic-links=0

# CLUSTER
ndbcluster
# Alamat IP Cluster Manager
ndb-connectstring=192.168.0.130

[mysql_cluster]
# Alamat IP Cluster Manager
ndb-connectstring=192.168.0.130


[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
4. Siapkan folder database
# mkdir /var/lib/mysql-cluster
# chown mysql /var/lib/mysql-cluster
5. Start Database node
# ndbd --initial
# /etc/init.d/mysql.server start
Catatan : opsi "--initial" diberikan untuk start yang pertama kali saja atau jika ada perubahan config.ini di Cluster Manager.
6. Otomatis start database
Untuk menjalankan database node secara otomatis dapat dilakukan dengan memasukkan di file "/etc/rc.local" dari perintah nomor 5 diatas.

C. Ujicoba Clustering MySQL

1. Restart semua server dengan seting bahwa semua seting sudah diset agar jalan otomatis saat start
2. MySQL Cluster
# ndb_mgm
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2    @192.168.0.131  (Version: 5.0.19, Nodegroup: 0)
id=3    @192.168.0.132  (Version: 5.0.19, Nodegroup: 0, Master)
[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.0.130  (Version: 5.0.19)
[mysqld(API)]   2 node(s)
id=4    @192.168.0.132  (Version: 5.0.19)
id=5    @192.168.0.131  (Version: 5.0.19)
3. Data diatas menunjukkan semua komputer dalam cluster sudah terhubung dengan baik.
Catatan tentang MySQL Cluster yaitu :
- Bersifat read-write untuk semua node yang terhubung
- Database tidak otomatis terbuat di setiap database node, akan tetapi jika database sudah ada maka tabel-tabel dan data akan otomatis masuk ke Database node tersebut
- Saat membuat tabel, database engine yang digunakan haruslah NDBCLUSTER
4. Ujicoba membuat data di Database Node 1 (192.168.0.131)
# mysql
mysql>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)
mysql>CREATE DATABASE mysqlclustertest;
mysql> USE mysqlclustertest;
mysql> CREATE TABLE test (i INT) ENGINE=NDBCLUSTER;
mysql> INSERT INTO test VALUES (1);
mysql> SELECT * FROM testtable;
+------+
| i    |
+------+
| 1    |
+------+
1 rows in set (0.00 sec)
mysql> quit;
5. Login ke Database Node 2 (192.168.0.132)
mysql
mysql>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)
mysql>CREATE DATABASE mysqlclustertest;
mysql> USE mysqlclustertest;
mysql> SELECT * FROM testtable;
+------+
| i    |
+------+
| 1    |
+------+
1 rows in set (0.00 sec)
6. Ujicoba saat 1 Node mati
Perubahan di Node lain akan otomatis di update di node yang mati saat node tersebut hidup dan terhubung dengan Cluster Manager

D. Loadbalancing

Loadbalancing ditujukan agar alamat database Node1 maupun Node 2 dapat diakses dengan satu alamat saja, dan jika terjadi salah satu Node mati, maka otomatis akses diarahkan ke Node yang hidup.
Disini dilakukan penambahan monitoring database berdasarkan status webserver (httpd) di setiap node. Untuk itu diinstall apache di server database.
Konfidurasi haproxy secara sederhana yaitu :
frontend public_mysql
bind :3306
mode tcp
default_backend         farm_mysql

backend farm_mysql
balance roundrobin
mode tcp
option httpchk HEAD /check.txt HTTP/1.0                         # Fungsi cek kesehatan server
server mysql-db1        192.168.200.131 check port 80
server mysql-db2        192.168.200.132 check port 80
Dengan demikian, untuk seting koneksi ke database MySQL maka digunakan alamat IP 192.168.0.1 dengan port 3306
Semoga bermanfaat
Reff:

Tidak ada komentar:

Posting Komentar