mysql cluster安装及使用--二进制版

mysql NDB
一.原理
mysql cluster基于NDB CLUSTER存储引擎的完整的分布式数据库系统。MYSQL CLUSTER是一个share noting架构,各个mysql server之间并不共享任何数据。mysql cluster实际上是在无共享存储设备上实现的一种完全分布式数据库系统。现在版本的MYSQL CLUSTER可以做到将所有索引装载在内存中,实际的数据可以不用全部装载到内存中。
二.mysql cluster的组成
(1)sql node:负责数据库存储层之上的的所有事情,比如连接管理,query优化和响应,cache管理。SQL节点是使用命令mysqld –ndbcluster启动的,或将ndbcluster添加到my.cnf后使用mysqld启动。
(2)data node:实现底层的数据存储功能,保存CLUSTER的数据,每个data节点保存完整数据的一个fragment,一般来说ndb节点被组成一个一个的ndb group,一个ndb group实际上就是一组存有完全相同的物理数据的NDB节点群。数据节点的配置参数在管理节点的config.ini中配置。NoOfreplicas参数指定每一份数据被冗余存储在不同节点上面的份数,一般至少设置为2.数据节点是用命令ndbd启动的。
(3)managerment node:负责管理整个集群中的各个节点的管理工作,包括集群的配置,启动并停止节点,运行备份,对各个节点进行常规维护等。MGM节点是用命令ndb_mgmd启动的,在启动其他节点之前首先启动这类节点。
三。配置步骤:
安装版本:mysql-cluster-gpl-7.2.15-linux2.6-x86_64.tar.gz
操作系统 :centos6.4(X64)
1.网络规划
managerment node :10.10.54.57
data node:10.54.56/58
sql node:10.10.54.56/58
2.停止各个节点的mysql服务
/etc/init.d/mysqld stop
##避免对mysql的破坏,需移动文件
mv /usr/local/mysql /usr/local/mysql_bak
3.管理节点安装配置
(1)安装mysql-cluster
##解压缩文件
tar xvf mysql-cluster-gpl-7.2.15-linux2.6-x86_64.tar.gz
##移动文件到指定目录 
mv mysql-cluster-gpl-7.2.15-linux2.6-x86_64 /usr/local/mysql
##改变文件级文件所有者:
chown mysql.mysql -R /usr/local/mysql 
chown mysql.mysql /data/ndb/ -R
(2)初始化数据库
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --user=mysql --datadir=/data/ndb
##错误:
/usr/local/mysql/bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
安装:yum list |grep libaio
     yum install libaio-devel.x86_64 
##复制ndb节点管理命令到本地,方便使用
cd /usr/local/mysql/bin
[root@xiao57 bin]# cp ndb_mgm* /usr/local/bin
(3)修改mysql主配置文件(可以不做这步,做过管理节点也可以成为SQL节点)
vim /etc/my.cnf
===============================
[mysql_cluster]
ndb-connectstring=10.10.54.57
[mysqld]
# 数据库存放目录
datadir         = /data/ndb
ndbcluster
ndb-connectstring=10.10.54.57
=============================
##修改启动文件
vim /etc/init.d/mysqld
====================
datadir=/data/ndb
====================
##重启
/etc/init.d/mysqld restart
(4)创建mysql集群配置文件
[root@xiao57 bin]# mkdir /etc/ndb
[root@xiao57 bin]# vim /etc/ndb/config.ini
========================================
[NDBD DEFAULT]
#定义在Cluster环境中相同数据的份数,最大为4
NoOfReplicas=2
#分配的数据内存大小,根据本机服务器内存适量来分配,否则会连接失败
DataMemory=256M
#设定用于存放索引(非主键)数据的内存段大小
IndexMemory=64M
[TCP DEFAULT]
portnumber=2202
[NDB_MGMD]
nodeid=1
hostname=10.10.54.57
datadir=/data/ndb
[NDBD]
nodeid=2
hostname=10.10.54.56
datadir=/data/ndb
backupdatadir=/data/backup
[NDBD]
nodeid=3
hostname=10.10.54.58
datadir=/data/ndb
backupdatadir=/data/backup
[MYSQLD]
nodeid=10
hostname=10.10.54.56
[MYSQLD]
nodeid=11
hostname=10.10.54.58
========================================
##改变文件所有者
chown mysql.mysql  /etc/ndb/config.ini
4.配置两台数据节点和SQL节点:配置相同
1)安装mysql-cluster
##解压缩文件
tar xvf mysql-cluster-gpl-7.2.15-linux2.6-x86_64.tar.gz
##移动文件到指定目录 
mv mysql-cluster-gpl-7.2.15-linux2.6-x86_64 /usr/local/mysql
##改变文件级文件所有者:
chown mysql.mysql -R /usr/local/mysql 
(2)初始化数据库
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --user=mysql --datadir=/data/ndb
##错误:
/usr/local/mysql/bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
安装:yum list |grep libaio
     yum install libaio-devel.x86_64 
##复制ndb节点管理命令到本地,方便使用
cd /usr/local/mysql/bin
[root@xiao56 bin]# cp ndb_mgm* /usr/local/bin
(3)修改mysql配置文件
vim /etc/my.cnf
===============================
[mysql_cluster]
ndb-connectstring=10.10.54.57
[mysqld]
datadir         = /data/ndb
#运行NDB存储引擎
ndbcluster
#mysql cluster 管理节点IP
ndb-connectstring=10.10.54.57
=============================
##修改启动文件
vim /etc/init.d/mysqld
====================
datadir=/data/ndb
====================
##重启
/etc/init.d/mysqld restart
5.测试(必须关闭每台机器上的iptables&&selinux)
(1)启动管理节点
[root@xiao57 ~]# cd /usr/local/bin/
[root@xiao57 bin]# ndb_mgmd -f /etc/ndb/config.ini --initial
MySQL Cluster Management Server mysql-5.5.35 ndb-7.2.15
#默认连接端口1186,启动成功
[root@xiao57 bin]# netstat -ntlup|grep 1186
tcp        0      0 0.0.0.0:1186                0.0.0.0:*                   LISTEN      2940/ndb_mgmd       
[root@xiao57 bin]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
(2)启动两台数据节点和SQL节点
数据节点: /usr/local/mysql/bin/ndbd --initial --ndb-connectstring=10.10.54.57
2014-02-26 11:56:31 [ndbd] INFO     -- Angel connected to '10.10.54.57:1186'
2014-02-26 11:56:31 [ndbd] INFO     -- Angel allocated nodeid: 2
SQL节点:/etc/init.d/mysqld start
(3)查看集群状态
#显示管理节点和数据节点则配置成功
ndb_mgm -e show 
##出错:
所有节点正常启动,但是显示一直连接不上
ndb_mgm> show
Connected to Management Server at: 10.10.54.57:1186
Cluster Configuration
---------------------
[ndbd(NDB)]	2 node(s)
id=2 (not connected, accepting connect from 10.10.54.56)
id=3 (not connected, accepting connect from 10.10.54.58)

[ndb_mgmd(MGM)]	1 node(s)
id=1	@10.10.54.57  (mysql-5.5.35 ndb-7.2.15)

[mysqld(API)]	5 node(s)
id=10 (not connected, accepting connect from 10.10.54.56)
id=11 (not connected, accepting connect from 10.10.54.58)
id=12 (not connected, accepting connect from any host)
id=13 (not connected, accepting connect from any host)
id=14 (not connected, accepting connect from any host)
//查看日志:
[root@xiao56 ndb]# vim ndb_2_out.log 
[ndbd] ERROR    -- ndbd_malloc_impl.cpp:619:grow(155414, 2061) not using 64Mb - Unable to use due to bitmap pages missaligned!!
解决方法:把DataMemory和IndexMemory的值调小
DataMemory=256M
IndexMemory=64M
#一个NDB节点能存放的数据量是会受到DataMemory和IndexMemory两个参数设置的约束,两者任何一个达到限制数量后,都无法再增加能存储的数据量。如果继续存入数据系统会报错“table is full”。
(4)在数据节点上创建一个数据库验证是否同步
mysql -u root -p
Mysql>create database tt;
Mysql>use tt;
#指定数据库表的引擎为NDB,否则同步失败
Mysql>create table abc (id int) engine=ndbcluster;
Mysql>insert into abc values(1),(2);
Mysql>select * from abc;
#此时看两个数据是否数据一致,如果一致说明集群已经成功!
注意事项:
1.在建表的时候一定要用ENGINE=NDB或ENGINE=NDBCLUSTER指定使用NDB集群存储引擎,或用ALTER TABLE选项更改表的存储引擎。
2.NDB表必须有一个主键,因此创建表的时候必须定义主键,否则NDB存储引擎将自动生成隐含的主键。
3.Sql节点的用户权限表仍然采用MYISAM存储引擎保存的,所以在一个Sql节点创建的MySql用户只能访问这个节点,如果要用同样的用户访问别的Sql节点,需要在对应的Sql节点追加用户。
4.--initial:第一次启动时加上,其它时候不要加,不然会数据清空,除非是在备份、恢复或配置变化后重启时。
##扩展:
管理和维护命令
关闭mysql集群:ndb_mgm -e shutdown
重启mysql集群:ndb_mgmd -f /etc/ndb/config.ini
重启数据节点:/usr/local/mysql/bin/ndbd
启动SQL节点:/usr/local/mysql/bin/mysqld_safe --user=mysql & 或 service mysqld restart
查看mysql状态:ndb_mgm -e show
启动顺序:
管理节点 -> 数据节点 -> SQL节点
关闭顺序:
SQL节点 -> 数据节点 -> 管理节点
-----改变节点生效操作步骤-----
关闭服务:ndb_mgm -e shutdown
删除文件:rm /usr/local/mysql/mysql-cluster/ndb_1_config.bin.1 
重启mysql集群:ndb_mgmd -f /etc/ndb/config.ini
------启动数据节点失败:no free node id-------
解决方法:杀掉正在运行的ndb进程


你可能感兴趣的:(cluster,数据节点,管理节点,SQL节点)