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

怼烎@ 2022-09-18 14:58 963阅读 0赞

什么是集群?

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

SouthEast

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

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

  1. 2Client/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

二、选择操作系统

  1. 在操作系统选择上面,我耽误了很长的时间,原因主要是因为对vmware软件的不了解,和对软件的部署环境没有准确的认识。所以,在安装软件之前,先了解这个软件的版本可以部署的操作系统类型(包括厂家,硬件架构等)是非常重要的。
  2. 最后,在不断的尝试的体验下,MYSQL集群主要可以部署在如下系统上:

SouthEast 1

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

  1. 考虑到RedHat的升级比较繁琐,所以测试环境选择了Debian Linux。版本为6.0.
  2. DebianLinux 6.0下载地址为: http://www.debian.org/distrib/
  3. 而因为硬件的限制,用于部署管理节点的电脑只能用现有的Windows系统。(顺便测试一下跨平台部署?)

三、选择软件

  1. 结合软件版本以及其使用的操作系统版本。最终选择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

部署环境

一、配置管理节点

  1. 因为管理节点是部署在Windows上的,先下载windows版的安装文件,默认安装在C:\\,安装完后,C:\\ProgramFiles\\下会多出Mysql的文件夹,文件夹内容如下:

SouthEast 2

(1)在C:\根目录下新建mysql文件夹,然后在集中新建bin和mysql-cluster文件夹,在新建的bin文件夹中再新建cluster-logs文件夹。

  1. 2)在bin文件夹中,新建2个文件config.inimy.ini,并且把C:\\ProgramFiles\\MySQL\\MySQL Cluster 7.3\\bin下的ndb\_mgm.exendb\_mgmd.exe拷过来。
  2. 做完前两步后,C:/mysql下的目录架构应该是这样的:
  3. ![SouthEast 3][]![SouthEast 4][]
  4. 注意,(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

  1. \#For DataMemory and IndexMemory, we have used the
  2. \# default values.Since the "world" database takes up
  3. \#only about 500KB, this should be more than enough for
  4. \#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,

  1. \#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节点

  1. 每个节点的配置方法是一摸一样的,这里以其中一个为例。
  2. 值得一提的是,只要是部署mysql集群,就只用到mysql-cluster这一个安装包,不需要单独安装mysql database
  3. 1)将从网上下载的安装包mysql-cluster\-gpl-7.3.3-debian6.0-i686.deb FTP上传到目录上。执行指令安装.
  4. 指令:dpkg i mysql-cluster-gpl-7.3.3-debian6.0-i686.deb
  5. 2)安装后在/opt下会出现mysql文件夹,切换到安装根目录:
  6. 指令:cd /opt/mysql/server-5.6/
  7. ![SouthEast 5][]

(3)新建mysql和mysql用户组

  1. 指令:groupadd mysql
  2. 指令:useradd mysql -g mysql

(4)新建数据目录

  1. 指令:mkdir /var/mysql-node
  2. 指令:mkdir /var/mysql-node/data \# 这个数据目录一定要和config.ini中配置的一致

(5)配置目录权限

  1. 指令:chown R mysql:mysql /opt/mysql
  2. 指令:chown R mysql:mysql/var/mysql-node

SouthEast 6

(6)执行mysql默认数据初始化

  1. 指令:./scripts/mysql\_install\_db--user=mysql --datadir=/var/mysql-node/data
  2. 这步结束后/var/mysql-node/data下会有mysql,ndbinfo, performance\_schema, test等文件。

SouthEast 7

(7)配置环境变量

  1. 为了操作方便,我们通常会把/opt/mysql/server-5.6/bin下的ndbd,mysqld拷贝到/etc/bin下面,同样也可以把/opt/mysql/server-5.6/bin加到PATH里,我采用了后者。Debian默认的shellbash
  2. 第一种指令:cp support-files/mysql.server /etc/init.d/mysqld
  3. 第二种指令:declare -x PATH="$PATH:/opt/mysql/server-5.6/bin"

SouthEast 8

8)修改配置文件

  1. 指令:cp support-files/my.cnf /etc/my.cnf \#如果没有,自己新建一个
  2. 指令:vi /etc/my.cnf
  3. 在标签项\[mysqld\]的末尾增加:

Ndbcluster #存储引擎,MYSQL集群只支持这个引擎

ndb-connectstring=192.168.143.110 # 管理节点的IP

datadir=/var/mysql-node/data # 数据文件目录

[mysql_cluster]

ndb-connectstring=192.168.143.110 # 数据文件目录

三、启动各个节点

  1. 按顺序启动三个节点。
  2. 1)启动管理节点

1)打开windows命令行,切换到c:\mysql,执行ndb_mgmd-f config.ini —configdir=C:\mysql\mysql-cluster。

SouthEast 9

(2)启动数据节点

  1. 1)在数据节点上执行 ndbd initial
  2. 注意仅在第一次启动时带initial参数,之后再启动是执行ndbd就可以了。

另外一个数据节点执行相同的操作

SouthEast 10

(3)启动SQL节点

  1. 在所有的数据节点都启动完以后,再启动SQL节点
  2. 1)在SQL节点上执行mysqld\_safe--user=mysql
  3. 这个比较重要,我在网上看到的其他诸如servicemysqld start等指令,经验证都不能成功。
  4. 另外一个数据节点也同样执行。

SouthEast 11

(4)重新打开一个windows命令行,切换到c:\mysql,执行ndb_mgm,进入管理节点客户端,执行show指令,可以查看当前集群的节点情况,更多指令可以通过指令help获得 。

SouthEast 12

(这个状态说明了有一个管理节点,2个数据节点,2个SQL节点,并且状态都是OK的,其中ID-2的数据节点为当前的工作节点)

环境测试

一、正常环境测试

  1. 1)在节点1中新建数据库,数据表,并插入数据,检查节点2中是否同步。

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

二、异常环境测试

  1. 1)停止节点1
  2. 2)在节点2中新建数据库,数据表,并插入数据。
  3. 3)启动节点1,检查新增的数据是否同步过来了。

三、管理节点测试

  1. 1)测试指令。
  2. 2)重启节点1,检查工作节点是否能正常切换到节点2
  3. 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文件的路径没有设置正确

解决方法:逐项检查。

三、数据节点的问题

  1. N/A

发表评论

表情:
评论列表 (有 0 条评论,963人围观)

还没有评论,来说两句吧...

相关阅读