สืบเนื่องจากหัวข้อ การทำ Web Server Load Balance ซึ่งก็คลอบคลุมในส่วนการทำ HA (High Availability) ในฝั่งของ Web Server แล้วนะครับแต่ในระบบเว็บเซิฟเวอร์ส่วนใหญ่นั้นจำเป็นต้องใช้งานร่วมกันกับระบบฐานข้อมูล ไม่ว่าจะเป็น Mysql , MsSQL , Oracle , MariaDB เป็นต้น
ซึ่งวันนี้ผมจะมาแนะนำการเพิ่มประสิทธิภาพในส่วนของ MySQL เป็นหลักนะครับซึ่งจำลองเป็นเซิฟเวอร์ 5 เครื่องนะครับซึ่งจะทำเป็นระบบ 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