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

来源:互联网 发布:魔秀做主题软件图标 编辑:程序博客网 时间:2024/06/09 16:58

什么是集群?


      为了减少数据中心结点压力和大数据量处理,采用把MySQL分布部署的方法,一个或多个application对应一个MySQL数据库。把几个MySQL数据库公用的数据做出共享数据,存在数据结点里面。其他不共享的数据还维持在各自分布的MySQL数据库本身中。结构如下图:

上图是一个标准的MYSQL集群架构图,如图所示,一个MYSQL可以包含四个部分:Client/APIs、SQL Nodes、DataNodes和NDBManagement Server。

1)SQL Node:分布式数据库。包括自身数据和查询中心结点数据.

         2)Client/APIs:数据库访问接口,我们通常使用的是mysqld,但在不同的场合,结合不同的编程语言、技术,他会表现成不同的形式,有可能是个命令行界面,当然也有可能是个网页。

3)数据结点(Datanode):集群共享数据(内存中).

4)管理服务器(ManagementServer–ndb_mgmd):集群管理SQL node,Data node.

 


集群环境规划



一、初步规划



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

管理节点:                                 192.168.143.110

数据节点,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        # 第三步中的配置文件的位置                                    


二、配置数据和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            #数据文件目录                                               


三、启动各个节点



         按顺序启动三个节点。

         (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。



问题和解决方案汇总



一、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节点

 


二、管理节点的问题



(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