การติดตั้ง Mysql Cluster (CENTOS 6)

การติดตั้ง Mysql Cluster (CENTOS 6)

mysql-cluster-logo-150x105

 

สืบเนื่องจากหัวข้อ การทำ Web Server Load Balance  ซึ่งก็คลอบคลุมในส่วนการทำ HA (High Availability) ในฝั่งของ Web Server แล้วนะครับแต่ในระบบเว็บเซิฟเวอร์ส่วนใหญ่นั้นจำเป็นต้องใช้งานร่วมกันกับระบบฐานข้อมูล ไม่ว่าจะเป็น Mysql , MsSQL , Oracle , MariaDB เป็นต้น

ซึ่งวันนี้ผมจะมาแนะนำการเพิ่มประสิทธิภาพในส่วนของ MySQL เป็นหลักนะครับซึ่งจำลองเป็นเซิฟเวอร์ 5 เครื่องนะครับซึ่งจะทำเป็นระบบ Cluster ให้เพื่อนๆได้นำไปต่อยอดและประยุกต์ใช้กันตามถนัดเลยครับ

 

mysql_cluster

 

ในส่วนของการทำ Load Balancer ให้เพื่อนๆได้ดูจาก ที่นี่

 

ในส่วนของ MySQL Cluster นี้ผมจะใช้เครื่องทั้งหมด 5 เครื่องครับ (VM) แบ่งการทำงานดังนีี้

Data node (ใช้สำหรับเก็บข้อมูล)

– mysql-data1
– mysql-data2

Sql daemon node (ใช้สำหรับประมวลผลคำสั่ง SQL)

mysql-mysqld1
mysql-mysqld2

Management node (ใช้บริหารจัดการ Mysql Cluster โดยให้ Data Node และ daemon node ทำงานร่วมกัน)

mysql-management

 

ขั้นตอนการทำ MySQL Cluster

 

All Server
เตรียมความพร้อมของ packages ก่อนด้วยการ ติดตั้ง EPEL

 

1 > ทำการปิด SELINUX ที่ไฟล์ /etc/sysconfig/selinux

SELINUX=disabled

2 > ปิด firewall ของเครื่องเซิฟเวอร์ทั้งหมด

$ service iptables stop
$ chkconfig iptables off
$ setenforce 0

3 > แก้ไขไฟล์ /etc/host เพื่อให้ทุกเครื่องรู้จักกันและสามาถเชื่อมต่อกันได้ด้วย hostname

192.168.1.51 mysql-mysqld1
192.168.1.52 mysql-mysqld2
192.168.1.53 mysql-management
192.168.1.54 mysql-data1
192.168.1.55 mysql-data2

Management Node

1 ดาวโหลดและติดตั้ง MySQL Cluster (management & tools) โดยสามารถหา Packages ที่อัพเดทล่าสุดได้ที่นี่

$ cd /usr/local/src
$ wget http://download.softagency.net/MySQL/Downloads/MySQL-Cluster-7.0/MySQL-Cluster-gpl-management-7.0.35-1.rhel5.x86_64.rpm
$ wget http://download.softagency.net/MySQL/Downloads/MySQL-Cluster-7.0/MySQL-Cluster-gpl-tools-7.0.34-1.rhel5.x86_64.rpm
$ rpm -Uhv MySQL-Cluster-gpl-management-7.0.35-1.rhel5.x86_64.rpm
$ rpm -Uhv MySQL-Cluster-gpl-tools-7.0.34-1.rhel5.x86_64.rpm

2 สร้างพื่้นที่สำหรับ Mysql Cluster และสร้างไฟล์ Config ของระบบ

$ mkdir -p /var/lib/mysql-cluster
$ vim /var/lib/mysql-cluster/config.ini

โดยแก้ไขไฟล์ตามโครงสร้างด้านล่างได้เลยครับ

[ndb_mgmd default]
DataDir=/var/lib/mysql-cluster

[ndb_mgmd]
HostName=mysql-management
[ndbd default]
NoOfReplicas=2
DataMemory=256M
ndexMemory=128M
DataDir=/var/lib/mysql-cluster

[ndbd]
HostName=mysql-data1

[ndbd]
HostName=mysql-data2

[mysqld]
HostName=mysql-mysqld1

[mysqld]
HostName=mysql-mysqld2

จะเห็นว่าเราสามารถ เพิ่ม,ลบ หรือเปลี่ยนชื่อ node ได้ที่ไฟล์นี้ครับ

Data Nodes
ในส่วนของ Data Node เราจะทำการตั้งค่าทั้ง mysql-data1 และ mysql-data2 โดยค่า config ทุกอย่างจะเหมือนกันครับ สามารถดู Packages ที่มีการอัพเดทได้จาก ที่นี่

$ cd /usr/local/src
$ wget http://download.softagency.net/MySQL/Downloads/MySQL-Cluster-7.0/MySQL-Cluster-gpl-storage-7.0.35-1.rhel5.x86_64.rpm
$ rpm -ihv MySQL-Cluster-gpl-storage-7.0.35-1.rhel5.x86_64.rpm

แก้ไขไฟล์ /etc/my.cnf โดยเพิ่มคำสั่งด้านล่างต่อท้ายข้อมูลเดิม

[mysqld]
ndbcluster
ndb-connectstring=mysql-management

[mysql_cluster]
ndb-connectstring=mysql-management

SQL Nodes

ในส่วนของ SQL Node จะทำทั้งเครื่อง mysql-mysqld1 และ mysql-mysqld2

ลบ library mysql ที่ติดอยู่กับ CentOS ออกทั้งหมด

$ yum remove mysql-libs -y

ติดตั้ง library ใหม่

$ yum install libaio -y

ดาวโหลดและติดตั้ง MySQL client โดยดูข้อมูลอัพเดทล่าสุดได้จาก ที่นี่

$ cd /usr/local/src
$ wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.2/MySQL-Cluster-client-gpl-7.2.8-1.el6.x86_64.rpm/from/http://cdn.mysql.com/
$ wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.2/MySQL-Cluster-shared-gpl-7.2.8-1.el6.x86_64.rpm/from/http://cdn.mysql.com/
$ wget http://www.mysql.com/get/Downloads/MySQL-Cluster-7.2/MySQL-Cluster-server-gpl-7.2.8-1.el6.x86_64.rpm/from/http://cdn.mysql.com/

ติดตั้ง MySQL Cluster Packages

$ rpm -Uhv MySQL-Cluster-*

เพิมข้อมูลลงไฟล์ /etc/my.cnf

[mysqld]
ndbcluster
ndb-connectstring=mysql-management
default_storage_engine=ndbcluster

[mysql_cluster]
ndb-connectstring=mysql-management

Start the Cluster

ขั้นตอนการ Start Service ต้องเรียงลำดับตามนี้

- Management Node
– Data Node
– SQL Node

mysql-management

$ ndb_mgmd -f /var/lib/mysql-cluster/config.ini
MySQL Cluster Management Server mysql-5.1.63 ndb-7.0.35
2012-11-22 07:36:55 [MgmtSrvr] INFO — The default config directory ‘/usr/mysql-cluster’ does not exist. Trying to create it…
2012-11-22 07:36:55 [MgmtSrvr] INFO — Sucessfully created config directory

mysql-data1

$ ndbd
2012-11-22 07:37:24 [ndbd] INFO — Angel connected to ‘mysql-management:1186’
2012-11-22 07:37:24 [ndbd] INFO — Angel allocated nodeid: 2

mysql-data2

$ ndbd
2012-11-22 07:37:24 [ndbd] INFO — Angel connected to ‘mysql-management:1186’
2012-11-22 07:37:24 [ndbd] INFO — Angel allocated nodeid: 3

mysql-mysqld1

$ service mysql start

mysql-mysqld2

$ service mysql start

Monitor the Cluster

$ ndb_mgm -e show
Connected to Management Server at: localhost:1186
Cluster Configuration
———————[ndbd(NDB)] 2 node(s)
id=2 @192.168.1.54 (mysql-5.1.63 ndb-7.0.35, Nodegroup: 0, Master)
id=3 @192.168.1.55 (mysql-5.1.63 ndb-7.0.35, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)id=1 @192.168.1.53 (mysql-5.1.63 ndb-7.0.35)
[mysqld(API)] 2 node(s)
id=4 @192.168.1.51 (mysql-5.5.27 ndb-7.2.8)
id=5 @192.168.1.52 (mysql-5.5.27 ndb-7.2.8)

เช็คสถานะ Data nodes

$ ndb_mgm -e “all status”
Connected to Management Server at: localhost:1186
Node 2: started (mysql-5.1.63 ndb-7.0.35)
Node 3: started (mysql-5.1.63 ndb-7.0.35)

ตรวจสอบ Memory

$ ndb_mgm -e “all report memory”
Connected to Management Server at: localhost:1186
Node 2: Data usage is 0%(23 32K pages of total 8192)
Node 2: Index usage is 0%(20 8K pages of total 16416)
Node 3: Data usage is 0%(23 32K pages of total 8192)
Node 3: Index usage is 0%(20 8K pages of total 16416)

Stop the Cluster

ขั้นตอนการ Stop Service ต้องเรียงลำดับตามนี้

1. SQL Node
2. Management Node
3. Data Node

mysql-mysqld1 & mysql-mysqld2

service mysql stop

mysql-management

ndb_mgm -e shutdown

หลังจากติดตั้งเสร็จก็จะสามารถทดสอบด้วยการใช้คำสั่ง Query ข้อมูลมาที่ mysql-mysqld1 หรือ mysql-mysqld2 หากไม่มีอะไรผิดพลาด ฐานข้อมูลใน data node จะอัพเดท พร้อมกันทั้ง 2 ที่ครับ

ข้อมูลเพิ่มเติม
http://blog.secaserver.com/2012/11/centos-6-install-mysql-cluster-the-simple-way/
http://www.mysql.com/products/cluster/
http://dev.mysql.com/doc/refman/5.5/en/mysql-cluster-install-linux-rpm.html
https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/2.1/html/Cluster_Manager_Installation_and_Administration/s1-service-mysql.html