Xây dựng một hệ thống MySQL Cluster

Xin giới thiệu với các bạn về cách thiết lập hệ thống MySQL Cluster .
Ưu điểm của MySQL Cluster.
– Tính sẵn sàng cao.
– Hiệu suất tải khi hoạt động.

Mô hình tối thiểu yêu cầu bao gồm 4 node:

1 . 1 x MySQL mgm – quản lý và đồng bộ các data node và sql node
2 . 2 x sQL node – chạy service mysql để nhận các query.
3 . 2 x Data node- chứa dữ liệu – database.

Số lượng Data node tối thiểu 2 node.

Về phần cứng và phần mềm yêu cầu tùy thuộc vào ứng dụng và số lượng truy vấn . Đối với cấu hình P4 3GHZ ram 1GB cho 1 Data node có thể đáp ứng truy cập cho khoảng 200 000 người online cùng lúc trên 1 forum.

Phần mềm :

MySql cluster có thể triển khai trên windows hoặc trên hệ thông *nix ( nix nói chung bao gồm các hệ thống thuần unix hoặc like unix như GNU/Linux )
Môi trường triển khai

– Windows
– Unix ( SunOS, AIX, *BSD )
– Linux ( HP linux, Linux nói chung như Fedora Core , RedHat Linux phiên bản cho doanh nghiệp, Debian, OpenSUSE hoặc các phiên bản tương tự sử dụng linux kernel)

Các cách cài đặt.

– Cài đặt từ gói biên dịch sẵn
– Cài đặt từ source code.

Một số hệ thống đã được các nhà phát triển đóng gói sẵn phiên bản mysql cluster . Tùy thuộc vào các hệ thống và các trình quản lý gói phần mềm khác nhau nên cách cài đặt khác nhau. Ở phần này tôi không đi sâu vào cài đặt từ gói đóng sẵn nên tôi sẽ không đề cập đến.

Ở trong mô hình này tôi lựa chọn sử dụng các biên dịch từ source code, hệ thống môi trường sử dụng OS FreeBSD , Phần cứng bao gồm 2 server sử dụng CPU intel xeon 2.6Ghz Ram 1GB – Rack 1U .Sử dụng công nghệ ảo hóa để tận dụng toàn bộ tài nguyên và hiệu suất còn dư khi sử dụng server chạy 1 process đơn lẻ.

Cách cài đặt từ source code.
Nguồn source : http://dev.mysql.com/downloads
Link download: http://dev.mysql.com/get/Downloads/MySQL-Cluster-6.3/mysql-cluster-gpl-6.3.24.tar.gz/from/http://mirror-fpt-telecom.fpt.net/mysql/

-Yêu cầu các lib và trình biên dịch như gcc,gmake,libtool, automake,autoconf…

Sau khi download file nén chứa source code có tên mysql-cluster-gpl-6.3.24.tar.gz từ mirror của mysql tại fpt-telecom. Ta tiến hành cài đặt. Mô hình bao gồm:
2 server chạy ảo hóa 6OS sẽ giúp tiết kiệm tài nguyên và nâng cao hiệu suất hoạt động.

Danh sách các node trong demo
Dải ip 10.1.11.0/24

MGM node : 10.1.11.56

SQL node : 10.1.11.57
4 Data Node : 10.1.11.58 – 61

Giả sử file source đặt tại thư mục /tmp ta tiến hành cài đặt như sau

$/tmp> su
Password: (ghõ password của root vào đây – pass sẽ không hiện ra)
root@/tmp# groupadd mysql

root@/tmp# useradd –c ‘Mysql user’ –g mysql –s /sbin/fail \ mysql
root@/tmp# tar –zxvf mysql-cluster-gpl-6.3.24.tar.gz

root@/tmp# cd mysql-cluster-gpl-6.3.24

root@/tmp/mysql-cluster-gpl-6.3.24#umask 022

root@/tmp/mysql-cluster-gpl-6.3.24#./configure\ prefix=/usr/local/mysql \
–with-plugins = all

root@/tmp/mysql-cluster-gpl-6.3.24#make ( hoặc gmake )

root@/tmp/mysql-cluster-gpl-6.3.24#make install

Lặp lại toàn bộ thao tác trên 5 server còn lại

Sau khi cài đặt mysql-cluster vào thư mục /usr/local/mysql ta tiến hành cấu hình mysql.

Đoạn cấu hình dành cho cả SQL node và Data Node

root@/tmp/mysql-cluster-gpl-6.3.24# cd
root@~# export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/libexec
root@~# cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
root@~# cat << EOF >> /etc/my.cnf
>#Option for mysqld process

>[mysqld]
>Ndbcluster
>Ndbcluster-connectstring=10.1.11.56
>#Option for ndbd process
>[mysql-cluster]
>Ndb-connectstring=10.1.11.56
>EOF
Đoạn cấu hình dành riêng cho SQL Node
root@~# mysql_install_db –-user=mysql

root@~# mysqld_safe –-user=mysql &
root@~# mysqladmin –u root password ‘123456’
root@~# mysql –u root –p
Enter password: ( nhập pass của user root có quyền đăng nhập vào mysql service )

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.32-ndb-7.0.5-log Source distribution

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql>

Hiện ra màn hình như trên là ta đã cài đặt thành công mysql server.
Với thao tác cấu hình như trên ta chỉ tiến hành cho SQL Node để chạy Service Mysql nhận các query từ client.

Đối với các server còn lại đảm nhiệm việc quản lý và chứa data node ta không cần thiết phải cài đặt và cấu hình cho service mysqld chạy trên các server đó.

Cấu hình MGM
> cd /usr/local/mysql
> mkdir –p var/lib/mysql-cluster
> mkdir –p data
> cp share/mysql/ndb-config-2-node.ini var/lib/mysql-cluster
> ee var/lib/mysql-cluster

Sửa nội dung cho phù hợp mô hình
# Example Ndbcluster storage engine config file.
#
[ndbd default]
NoOfReplicas= 2
MaxNoOfConcurrentOperations= 10000
DataMemory= 80M
IndexMemory= 24M
TimeBetweenWatchDogCheck= 30000

DataDir= /usr/local/mysql/data
MaxNoOfOrderedIndexes= 512

[ndb_mgmd default]
DataDir= /usr/local/mysql/data

[ndb_mgmd]
Id=1
HostName= 10.1.11.56

[ndbd]
Id=2
HostName= 10.1.11.58

[ndbd]
Id=3
HostName= 10.1.11.60

[ndbd]
Id=4
HostName= 10.1.11.59

[ndbd]
Id=5
HostName= 10.1.11.61

[mysqld]

Id=6
HostName= 10.1.11.57

# choose an unused port number
# in this configuration 63132, 63133, and 63134
# will be used
[tcp default]
PortNumber= 63132

Save file lại, sau đó khởi động NDB CLUSTER MGM

>ndb_mgmd –f var/lib/mysql-cluster/config.ini
2009-06-09 18:25:08 [MgmSrvr] INFO — NDB Cluster Management Server. mysql-5.1.32 ndb-7.0.5-beta
2009-06-09 18:25:08 [MgmSrvr] INFO — Loaded config from ‘/usr/local/mysql/mysql-cluster/ndb_1_config.bin.1′
>ps –aux|grep ndb|grep –v grep
root 27818 0.0 0.5 28896 5312 ?? Is Mon06PM 5:23.76 ./libexec/ndb_mgmd -f var/lib/mysql-cluster/confi
root 27821 0.0 0.5 8576 5092 ?? IsJ Mon06PM 0:00.00 ./libexec/ndbd
root 27822 0.0 7.5 394128 78084 ?? IJ Mon06PM 12:30.84 ./libexec/ndbd

root 27824 0.0 0.5 8576 5104 ?? IsJ Mon06PM 0:00.00 ./libexec/ndbd
root 27825 0.0 7.5 394128 77976 ?? IJ Mon06PM 10:16.44 ./libexec/ndbd

Như vậy là service ndb_mgmd đã chạy, kiểm tra kết nối bằng ndb_client
>ndb_mgm
– NDB Cluster — Management Client –
ndb_mgm> show
Connected to Management Server at: localhost:1186

Cluster Configuration
———————
[ndbd(NDB)] 4 node(s)
id=2 (not connected, accepting connect from 10.1.11.58)
id=3 (not connected, accepting connect from 10.1.11.60)
id=4 (not connected, accepting connect from 10.1.11.59)
id=5 (not connected, accepting connect from 10.1.11.61)

[ndb_mgmd(MGM)] 1 node(s)

id=1 @10.1.11.56 (mysql-5.1.32 ndb-7.0.5)

[mysqld(API)] 1 node(s)
id=6 (not connected, accepting connect from 10.1.11.57)

ndb_mgm>
ndb_mgm>quit

Khởi động kết nối đến MGM tại 4 Data node

> ndbd -c 10.1.11.56
2009-06-09 11:54:42 [ndbd] INFO — Configuration fetched from ‘10.1.11.56:1186′, generation: 1
>ps –aux|grep ndbd|grep –v grep
root 27821 0.0 0.5 8576 5092 ?? IsJ Mon11AM 0:00.00 ./libexec/ndbd
root 27822 0.0 7.5 394128 78084 ?? IJ Mon11AM 12:36.62 ./libexec/ndbd
Như vậy là service ndbd của Data node đã chạy

Kiểm tra kết nối tại NDBCLUSTER MGM
>ndb_mgm
ndb_mgm> show
Cluster Configuration
———————
[ndbd(NDB)] 4 node(s)
id=2 @10.1.11.58 (mysql-5.1.32 ndb-7.0.5, starting, Nodegroup: 0, Master)

id=3 @10.1.11.60 (mysql-5.1.32 ndb-7.0.5, starting, Nodegroup: 0)
id=4 @10.1.11.59 (mysql-5.1.32 ndb-7.0.5, starting, Nodegroup: 0)
id=5 @10.1.11.61 (mysql-5.1.32 ndb-7.0.5, starting, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.1.11.56 (mysql-5.1.32 ndb-7.0.5)

[mysqld(API)] 1 node(s)
id=6 (not connected, accepting connect from 10.1.11.57)

ndb_mgm>

Các Data node đang tiến hành kết nối.

ndb_mgm> show
Cluster Configuration
———————

[ndbd(NDB)] 4 node(s)
id=2 @10.1.11.58 (mysql-5.1.32 ndb-7.0.5, Nodegroup: 0, Master)
id=3 @10.1.11.60 (mysql-5.1.32 ndb-7.0.5, Nodegroup: 0)
id=4 @10.1.11.59 (mysql-5.1.32 ndb-7.0.5, Nodegroup: 1)
id=5 @10.1.11.61 (mysql-5.1.32 ndb-7.0.5, Nodegroup: 1)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.1.11.56 (mysql-5.1.32 ndb-7.0.5)

[mysqld(API)] 1 node(s)
id=6 @10.1.11.57 (mysql-5.1.32 ndb-7.0.5)

ndb_mgm>

Kết nối thành công.

Để sử dụng engine ndbcluster tất cả các table phải thay đổi engine từ MyISAM hay InoDB sang engine NDBCLUSTER. Thao tác này có thể sử dụng lệnh alter table.

Ví dụ đối với db fsoftweb làm như sau

Dump db cũ
> mysqldump –u root –p fsoftweb > /home/root/fsoftweb.sql
Password:
> mysql –u root –p
Password:

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.32-ndb-7.0.5-log Source distribution

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql> show databases;
mysql> show databases;

+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
| test |
+——————–+
3 rows in set (0.00 sec)
mysql> create database fsoftweb;

Query OK, 1 row affected (0.10 sec)
Mysql> quit

Restored database
> mysql –u root –p fsoftweb
Password:
> mysql –u root -p

Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.1.32-ndb-7.0.5-log Source distribution

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql>show databases;

+——————–+
| Database |
+——————–+
| information_schema |
| fsoftweb |
| mysql |
| test |
+——————–+
4 rows in set (0.00 sec)

mysql> use fsoftweb;
Database changed
mysql> show tables;
+——————–+
| Tables_in_fsoftweb |
+——————–+
| news |

| news_fr |
| news_jp |
| newsletter |
| newsletter_fr |
| newsletter_jp |
| user |
+——————–+
7 rows in set (0.01 sec)

mysql>
mysql> alter table news engine=ndbcluster;
Query OK, 337 rows affected (2.70 sec)
Records: 337 Duplicates: 0 Warnings: 0

mysql> alter table news_fr engine=ndbcluster;
Query OK, 1991 rows affected (4.37 sec)

Records: 1991 Duplicates: 0 Warnings: 0

mysql> alter table news_jp engine=ndbcluster;
Query OK, 207 rows affected (2.83 sec)
Records: 207 Duplicates: 0 Warnings: 0

mysql> alter table newsletter engine=ndbcluster;

Query OK, 24 rows affected (1.79 sec)
Records: 24 Duplicates: 0 Warnings: 0

mysql> alter table newsletter_fr engine=ndbcluster;
Query OK, 2 rows affected (2.09 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> alter table newsletter_jp engine=ndbcluster;

Query OK, 16 rows affected (1.55 sec)
Records: 16 Duplicates: 0 Warnings: 0

mysql> alter table user engine=ndbcluster;
Query OK, 1 row affected (1.80 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql>select * from news\G;

…………
*************************** 337. row ***************************
id: 65
title: November 11th, 2002: Buckingham Technology kicked off the Pilot Project with FPT-SOFT
content: November 11th, 2002 – Mr. Ron Lavery-Founder and EVP of Buckingham Technology arrived in FPT-Soft to start the pilot project under abc/Buckingham Technology Master Agreement signed in September this year. After the full week working tirelessly, abc development team had successfully demonstrated their capabilities to master the project\’s technology and requirement. In the last meeting at abc, Mr. Lavery spoke highly confidence on the abc development team.
postingdate: 0000-00-00
rate: 0

visible: Y
ishotnews: N
shortnews: NULL
imagepath: NULL
337 rows in set (0.20 sec)

ERROR:
No query specified

Như vậy là toàn bộ database đã được chuyển sang cluster.
Để kiểm tra ta có thể shutdown hệ thống cluster và thực hiện query như bình thường xem có lỗi xảy ra hay không ?

>ndb_mgm
ndb_mgm> show
Cluster Configuration
———————
[ndbd(NDB)] 4 node(s)

id=2 @10.1.11.58 (mysql-5.1.32 ndb-7.0.5, Nodegroup: 0, Master)
id=3 @10.1.11.60 (mysql-5.1.32 ndb-7.0.5, Nodegroup: 0)
id=4 @10.1.11.59 (mysql-5.1.32 ndb-7.0.5, Nodegroup: 1)
id=5 @10.1.11.61 (mysql-5.1.32 ndb-7.0.5, Nodegroup: 1)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.1.11.56 (mysql-5.1.32 ndb-7.0.5)

[mysqld(API)] 1 node(s)

id=6 @10.1.11.57 (mysql-5.1.32 ndb-7.0.5)

ndb_mgm> shutdown
Connected to Management Server at: localhost:1186
Node 2: Cluster shutdown initiated
Node 3: Cluster shutdown initiated
Node 4: Cluster shutdown initiated
Node 5: Cluster shutdown initiated

Node 2: Node shutdown completed.
Node 4: Node shutdown completed.
Node 3: Node shutdown completed.
Node 5: Node shutdown completed.
4 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown.
ndb_mgm>
ndb_mgm> show

Unable to connect with connect string: nodeid=0,localhost:1186
Retrying every 5 seconds. Attempts left: 2

Như vậy là hệ thống cluster đã shutdown – hiện tại chỉ còn SQL node là đang chạy service mysqld – nhưng toàn bộ database không chứa trên SQL Node đó.
Để kiểm tra ta thực hiện truy vấn tại SQL Node

mysql> select * from news\G;
ERROR 1296 (HY000): Got error 157 ‘Unknown error code’ from NDBCLUSTER

ERROR:
No query specified

Như vậy không có dữ liệu nào được trả về từ hệ thống cluster.

Qua demo trên các bạn có thể xây dựng một hệ thống cluster hoàn chình cho nhu cầu của bạn.

Chúc các bạn thành công.

Nguyễn Thăng Long (Kenhgiaiphap.vn)

About Tony Nguyễn
Tôi tên Tony tự Tèo trú tại thôn Tám, Trảng Thanh tỉnh Thừa Thiên. Thưở thiếu thời trí tuệ tôi thường thường, tuy thế tính tình thật thà thẳng thắng, thích thi thơ ...

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: