MYSQL集群部署(三)--集群部署

什么是集群?


      为了减小数据中心结点压力和大数据量处理,采用把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.编程

 


集群环境规划



1、初步规划



按照上节的架构图,对我想要搭建的MYSQL集群环境作初步以下规划:windows

管理节点:                                 192.168.143.110bash

数据节点,SQL节点(0):192.168.143.240服务器

数据节点,SQL节点(1):192.168.143.241网络

 


2、选择操做系统



         在操做系统选择上面,我耽误了很长的时间,缘由主要是由于对vmware软件的不了解,和对软件的部署环境没有准确的认识。因此,在安装软件以前,先了解这个软件的版本能够部署的操做系统类型(包括厂家,硬件架构等)是很是重要的。

         最后,在不断的尝试的体验下,MYSQL集群主要能够部署在以下系统上:

其中Suse Linux Enterprise Server只提供了64位的版本。而vmware通常只提供32位的虚拟服务。(实际部署时,应该考虑suse)

         考虑到RedHat的升级比较繁琐,因此测试环境选择了Debian Linux。版本为6.0.

         DebianLinux 6.0下载地址为: http://www.debian.org/distrib/

         而由于硬件的限制,用于部署管理节点的电脑只能用现有的Windows系统。(顺便测试一下跨平台部署?)


3、选择软件


         结合软件版本以及其使用的操做系统版本。最终选择MySQL Cluster 7.3.3,下载地址:

http://dev.mysql.com/downloads/cluster/

        

4、最终方案



节点类型

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



部署环境



1、配置管理节点



         由于管理节点是部署在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        # 第三步中的配置文件的位置                                     


2、配置数据和SQL节点


        每一个节点的配置方法是一摸同样的,这里以其中一个为例。

         值得一提的是,只要是部署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            # 数据文件目录                                               


3、启动各个节点



         按顺序启动三个节点。

         (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)在节点1中新建数据库,数据表,并插入数据,检查节点2中是否同步。

(2)在节点1中删除该数据库,检查节点2中是否同步。



     2、异常环境测试



         (1)中止节点1

         (2)在节点2中新建数据库,数据表,并插入数据。

         (3)启动节点1,检查新增的数据是否同步过来了。



     3、管理节点测试



         (1)测试指令。

         (2)重启节点1,检查工做节点是否能正常切换到节点2。

         (3)重启节点2,工做节点应切回节点1。



问题和解决方案汇总



1、SQL结点的问题



(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节点

 


2、管理节点的问题



(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文件的路径没有设置正确

解决方法:逐项检查。



3、数据节点的问题



         N/A