`

快速/简单实现mysql数据库集群(mysql cluster)

阅读更多

最近一直在研究mysql的高可用性和负载均衡技术,对于数据库/数据表数目比较少的情况下,还是推荐mysql官方提供的mysql-cluster技术。
下面列出mysql相关HA技术方面的比较,可以根据你的需要来实现:

我采用debian系统来担任mysql服务器,操作起来比较方便。
准备两台机器: 
192.168.10.172  ndb management, sql_node, data_node
192.168.10.173  sql_node, data_node

1、apt-get install mysql-server;  两台机器分别安装mysql-server 5.0,5.0自带cluster功能;

2、 cp /usr/share/doc/mysql-server-5.0/examples/ndb_mgmd.cnf /etc/mysql/ndb_mgmd.cnf,复制cluster management模板,并编辑成类似如下的信息:
 cat /etc/mysql/ndb_mgmd.cnf
[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=10MB
IndexMemory=25MB
MaxNoOfTables=256
MaxNoOfOrderedIndexes=256
MaxNoOfUniqueHashIndexes=128

[MYSQLD DEFAULT]

[NDB_MGMD DEFAULT]

[TCP DEFAULT]

[NDB_MGMD]
Id=1                            # the NDB Management Node (this one)
HostName=192.168.10.172

[NDBD]
Id=2                            # the first NDB Data Node
HostName=192.168.10.172
DataDir= /var/lib/mysql

[NDBD]
Id=3                            # the second NDB Data Node
HostName=192.168.10.173
DataDir=/var/lib/mysql

[MYSQLD]
Id=4                            # the first SQL node
HostName=192.168.10.172

[MYSQLD]
Id=5                          # the second SQL node
HostName=192.168.10.173

3、编辑/etc/mysql/my.cnf,类似如下信息,其实就是增加了红色部分内容:
 more my.cnf  |grep -v ^#

[client]
port  = 3306
socket     = /var/run/mysqld/mysqld.sock


[mysqld_safe]
socket     = /var/run/mysqld/mysqld.sock
nice  = 0

[mysqld]
user  = mysql
pid-file   = /var/run/mysqld/mysqld.pid
socket     = /var/run/mysqld/mysqld.sock
port  = 3306
basedir    = /usr
datadir    = /var/lib/mysql
tmpdir     = /tmp
language   = /usr/share/mysql/english
skip-external-locking
bind-address  = 127.0.0.1
key_buffer  = 16M
max_allowed_packet      = 16M
thread_stack  = 128K
thread_cache_size       = 8
myisam-recover          = BACKUP
query_cache_limit       = 1M
query_cache_size        = 16M
expire_logs_days        = 10
max_binlog_size         = 100M
skip-bdb

ndbcluster
ndb-connectstring=192.168.10.172


[mysqldump]
quick
quote-names
max_allowed_packet      = 16M

[mysql]

[isamchk]
key_buffer  = 16M

[MYSQL_CLUSTER]

ndb-connectstring=192.168.10.172


!includedir /etc/mysql/conf.d/

4、scp my.cnf 192.168.10.173:/etc/mysql/ ,把mysql配置文件复制到另一台机器;

5、在192.168.10.172上运行 /etc/init.d/mysql-ndb-mgm restart; /etc/init.d/mysql-ndb restart; /etc/init.d/mysql restart 三个脚本;

6、在192.168.10.173运行 /etc/init.d/mysql-ndb restart; /etc/init.d/mysql restart  两个脚本;

7、任何一台机器运行下列命令,如果显示如下信息,证明全部运行成功:
ndb_mgm -e show
Connected to Management Server at: 192.168.10.172:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2    @192.168.10.172  (Version: 5.0.51, Nodegroup: 0, Master)
id=3    @192.168.10.173  (Version: 5.0.51, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.10.172  (Version: 5.0.51)

[mysqld(API)]   2 node(s)
id=4    @192.168.10.172  (Version: 5.0.51)
id=5    @192.168.10.173  (Version: 5.0.51)

8、登录mysql,验证数据同步和复制功能,DB2机器上必须要创建一个test的数据库,其他不用做就可以实现数据的同步和复制;
192.168.10.172
DB1:/etc/mysql# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 31
Server version: 5.0.51a-24+lenny4 (Debian)

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

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

mysql> use test
Database changed
mysql> create table mytable(id int(10),name varchar(10)) engine=ndbcluster;
Query OK, 0 rows affected (0.30 sec)

mysql> insert into mytable values(1,'Jone');
Query OK, 1 row affected (0.01 sec)

mysql> insert into mytable values(3,'Jane');
Query OK, 1 row affected (0.01 sec)

mysql> select * from mytable;
+------+------+
| id   | name |
+------+------+
|    3 | Jane |
|    2 | Mark |
|    1 | Jone |
+------+------+
3 rows in set (0.01 sec)

192.168.10.173
DB2:~# mysql -uroot -p     
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 30
Server version: 5.0.51a-24+lenny4 (Debian)

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

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

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| mytable        |
+----------------+
1 row in set (0.01 sec)

mysql> insert into mytable values(2,'Mark');
Query OK, 1 row affected (0.01 sec)

mysql> select * from mytable;
+------+------+
| id   | name |
+------+------+
|    1 | Jone |
|    3 | Jane |
|    2 | Mark |
+------+------+
3 rows in set (0.00 sec)

经过以上操作就实现了mysql-cluster,快速/简单。
更多信息请查看官方参考手册:http://dev.mysql.com/doc/refman/5.1/zh/ndbcluster.html

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics