为了减小数据中心结点压力和大数据量处理,采用把MySQL分布部署的方法,一个或多个application对应一个MySQL数据库。把几个MySQL数据库公用的数据作出共享数据,存在数据结点里面。其余不共享的数据还维持在各自分布的MySQL数据库自己中。结构以下图:node
上图是一个标准的MYSQL集群架构图,如图所示,一个MYSQL能够包含四个部分:Client/APIs、SQL Nodes、DataNodes和NDBManagement Server。mysql
1)SQL Node:分布式数据库。包括自身数据和查询中心结点数据.sql
2)Client/APIs:数据库访问接口,咱们一般使用的是mysqld,但在不一样的场合,结合不一样的编程语言、技术,他会表现成不一样的形式,有多是个命令行界面,固然也有多是个网页。shell
3)数据结点(Datanode):集群共享数据(内存中).数据库
4)管理服务器(ManagementServer–ndb_mgmd):集群管理SQL node,Data node.编程
按照上节的架构图,对我想要搭建的MYSQL集群环境作初步以下规划:windows
管理节点: 192.168.143.110bash
数据节点,SQL节点(0):192.168.143.240服务器
数据节点,SQL节点(1):192.168.143.241网络
在操做系统选择上面,我耽误了很长的时间,缘由主要是由于对vmware软件的不了解,和对软件的部署环境没有准确的认识。因此,在安装软件以前,先了解这个软件的版本能够部署的操做系统类型(包括厂家,硬件架构等)是很是重要的。
最后,在不断的尝试的体验下,MYSQL集群主要能够部署在以下系统上:
其中Suse Linux Enterprise Server只提供了64位的版本。而vmware通常只提供32位的虚拟服务。(实际部署时,应该考虑suse)
考虑到RedHat的升级比较繁琐,因此测试环境选择了Debian Linux。版本为6.0.
DebianLinux 6.0下载地址为: http://www.debian.org/distrib/
而由于硬件的限制,用于部署管理节点的电脑只能用现有的Windows系统。(顺便测试一下跨平台部署?)
结合软件版本以及其使用的操做系统版本。最终选择MySQL Cluster 7.3.3,下载地址:
http://dev.mysql.com/downloads/cluster/
节点类型 |
IP |
主机名 |
操做系统 |
软件版本 |
管理节点 |
192.168.143.110 |
Pc |
Windows 7 |
MySQL Cluster 7.3.3 |
数据和SQL节点1 |
192.168.143.240 |
Mysql-1 |
Debian Linux 6.0 |
MySQL Cluster 7.3.3 |
数据和SQL节点2 |
192.168.143.241 |
Mysql-2 |
Debian Linux 6.0 |
MySQL Cluster 7.3.3 |
由于管理节点是部署在Windows上的,先下载windows版的安装文件,默认安装在C:\,安装完后,C:\ProgramFiles\下会多出Mysql的文件夹,文件夹内容以下:
(1)在C:\根目录下新建mysql文件夹,而后在集中新建bin和mysql-cluster文件夹,在新建的bin文件夹中再新建cluster-logs文件夹。
(2)在bin文件夹中,新建2个文件config.ini和my.ini,而且把C:\ProgramFiles\MySQL\MySQL Cluster 7.3\bin下的ndb_mgm.exe和ndb_mgmd.exe拷过来。
作完前两步后,C:/mysql下的目录架构应该是这样的:
注意,(1)(2)两步的操做,是为了以后配置管理节点时方便,文件夹名字是能够更改取的,只要在写配置文件的时候把文件名和路径先对应就好了。
另外,管理节点在启动时,若是没有指定配置文件所在目录,会优先在c:\mysql、d:\mysql、C:\Program Files\MySQL\等目录下搜索,这样作能够避免一些潜在的问题。
其中:
Cluster-logs: 用于存放日志
Config.ini: 用于配置集群信息
my.ini: 用于配置管理节点
ndb_mgm.exe: 是管理节点的客户端程序
ndb_mgmd.exe: 是管理节点的服务端程序
(3)配置config.ini
做以下配置:
[NDBD DEFAULT]
NoOfReplicas=2 # Number of replicas
DataMemory=80M #How much memory to allocate for data storage
IndexMemory=18M #How much memory to allocate for index storage
#For DataMemory and IndexMemory, we have used the
# default values.Since the "world" database takes up
#only about 500KB, this should be more than enough for
#this example Cluster setup.
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]
# Managment Server
[NDB_MGMD]
HostName=192.168.143.110 # Hostname or IP address of MGM node
datadir=c:/mysql/bin/cluster-logs # Directory for MGM node logfiles
# Storage Engines
[NDBD] #(one [NDBD] section per data node)
HostName=192.168.143.240 # Hostname or IP address
DataDir= /var/mysql-node/data # Directory for this data node's datafile,
#If not existed,create it manally.
[NDBD]
HostName=192.168.143.241
DataDir= /var/mysql-node/data
[MYSQLD] #(one [MYSQLD] section per data node)
HostName=192.168.143.240 # Hostname or IP address
[MYSQLD]
HostName=192.168.143.241
★在config.ini文件中,配置了几个节点,就是有几个节点,不能多配也不能少配
(4)配置my.ini
做以下配置:
#Options for management node process
config-file=C:/mysql/bin/config.ini # 第三步中的配置文件的位置
每一个节点的配置方法是一摸同样的,这里以其中一个为例。
值得一提的是,只要是部署mysql集群,就只用到mysql-cluster这一个安装包,不须要单独安装mysql database。
(1)将从网上下载的安装包mysql-cluster-gpl-7.3.3-debian6.0-i686.deb FTP上传到目录上。执行指令安装.
指令:dpkg –i mysql-cluster-gpl-7.3.3-debian6.0-i686.deb
(2)安装后在/opt下会出现mysql文件夹,切换到安装根目录:
指令:cd /opt/mysql/server-5.6/
(3)新建mysql和mysql用户组
指令:groupadd mysql
指令:useradd mysql -g mysql
(4)新建数据目录
指令:mkdir /var/mysql-node
指令:mkdir /var/mysql-node/data # 这个数据目录必定要和config.ini中配置的一致
(5)配置目录权限
指令:chown –R mysql:mysql /opt/mysql
指令:chown –R mysql:mysql/var/mysql-node
(6)执行mysql默认数据初始化
指令:./scripts/mysql_install_db--user=mysql --datadir=/var/mysql-node/data
这步结束后/var/mysql-node/data下会有mysql,ndbinfo, performance_schema, test等文件。
(7)配置环境变量
为了操做方便,咱们一般会把/opt/mysql/server-5.6/bin下的ndbd,mysqld拷贝到/etc/bin下面,一样也能够把/opt/mysql/server-5.6/bin加到PATH里,我采用了后者。Debian默认的shell是bash。
第一种指令:cp support-files/mysql.server /etc/init.d/mysqld
第二种指令:declare -x PATH="$PATH:/opt/mysql/server-5.6/bin"
8)修改配置文件
指令:cp support-files/my.cnf /etc/my.cnf #若是没有,本身新建一个
指令:vi /etc/my.cnf
在标签项[mysqld]的末尾增长:
Ndbcluster #存储引擎,MYSQL集群只支持这个引擎
ndb-connectstring=192.168.143.110 # 管理节点的IP
datadir=/var/mysql-node/data # 数据文件目录
[mysql_cluster]
ndb-connectstring=192.168.143.110 # 数据文件目录
按顺序启动三个节点。
(1)启动管理节点
1)打开windows命令行,切换到c:\mysql,执行ndb_mgmd-f config.ini --configdir=C:\mysql\mysql-cluster。
(2)启动数据节点
1)在数据节点上执行 ndbd –initial
注意仅在第一次启动时带initial参数,以后再启动是执行ndbd就能够了。
另一个数据节点执行相同的操做
(3)启动SQL节点
在全部的数据节点都启动完之后,再启动SQL节点
1)在SQL节点上执行mysqld_safe--user=mysql
这个比较重要,我在网上看到的其余诸如servicemysqld start等指令,经验证都不能成功。
另一个数据节点也一样执行。
(4)从新打开一个windows命令行,切换到c:\mysql,执行ndb_mgm,进入管理节点客户端,执行show指令,能够查看当前集群的节点状况,更多指令能够经过指令help得到 。
(这个状态说明了有一个管理节点,2个数据节点,2个SQL节点,而且状态都是OK的,其中ID-2的数据节点为当前的工做节点)
(1)在节点1中新建数据库,数据表,并插入数据,检查节点2中是否同步。
(2)在节点1中删除该数据库,检查节点2中是否同步。
(1)中止节点1
(2)在节点2中新建数据库,数据表,并插入数据。
(3)启动节点1,检查新增的数据是否同步过来了。
(1)测试指令。
(2)重启节点1,检查工做节点是否能正常切换到节点2。
(3)重启节点2,工做节点应切回节点1。
(1)启动时,日志报错:[ERROR] Fatal error: Can't open and lock privilege tables: Table'mysql.user' doesn't exist
同时日志中也提示:“The error means mysqld does not have the access rights to thedirectory.”
若是没有提示,参照下一个问题。
问题缘由:MySQL Server访问的datadir权限不对
解决办法:若是datadir是/var/mysql-node/data,则执行以下命令:
# chown -R mysql :mysql /var/mysql-node
(2)启动时,日志报错:“Fatal error: Can't open and lock privilege tables: Table'mysql.host' doesn't exist”
问题缘由:datadir目录中没有Mysql Server须要的初始数据文件
解决办法:若是datadir是/var/mysql-node/data,则执行以下命令:
# mysql_install_db --datadir=/var/mysql-node/data–user=mysql
(3)启动时,日志报错:“error while loading shared libraries: libaio.so.1:can not open sharedobject file:No such file or directory”
问题缘由:这是由于系统没有装mysql的一个依赖
解决方法:去debian官网下载libaio.so的安装包,并安装,地址是:http://www.debian.org/distrib/
(4)启动时,发现启动成功了,可是日志有警告” [Warning] NDB : Tables not available after 15 seconds. Considerincreasing --ndb-wait-setup value “,而且在管理界面中,读取不到节点信息。
问题缘由:必需要把config.ini配置的全部数据节点启动后,才能启动SQL节点。
解决方法:把全部数据节点启动后,再启动SQL节点
(1)启动管理节点时,出现” Unable to connect with connect string: nodeid=0,localhost:1186
Retrying every 5 seconds. Attempts left: 2“
问题缘由:
1)ping不一样127.0.01的网络,或者1186端口被占用
2)端口被防火墙屏蔽
3)config.ini文件没有配置正确,或者config文件的路径没有设置正确
解决方法:逐项检查。
N/A