MySQLCluster部署配置文档
本文借鉴了网上其他人的文章,由于大家关于mysql cluster的文章基本都差了不多,这里我也就不写从哪里引用的了。
环境
OS版本:CentOS 6.3 Final
MySQL 版本:MySQL Server 5.1.73-3
MySQL Cluster版本(应采用NDB7.x版本,别的版本不支持不重启动态就能增加数据节点):MySQL Cluster 7.3.4-1
一、MySQLCluster 概述
核心的基本概念
1.1设计目标
1、没有单点失败;
2、部署“内存中”的数据库;
3、不能共享任何东西,如网络文件系统或SAN等。
将标准的MySQL Server和NDB引擎集成在一起。MySQL Cluster等于标准的MySQL Server+NDB。数据存在数据节点,所有MySQL Cluster都能访问。存储在数据节点里面的数据可以镜像。MySQL Cluster里面的节点指一个进程。不是指一台机器,一台机器上可以装多个节点。
1.2 三种节点:
管理节点(MGM node):管理其他节点的节点。必须先于其他节点启动。ndb_mgmd;
数据节点:存储数据的节点。多个复本保证高可用性。Ndbd;
SQL节点:访问数据的节点。是一个标准的MySQL Server,不过带了支持NDB引擎的选项。mysqld带--ndbcluster和--ndb-connectstring选项。
实际上是一个API节点,就是用NDB的API实现了对数据的访问。
要实现冗余,必须是多个数据节点和多个SQL节点。也高度推荐多个管理节点。MySQL Cluster认为数据节点在处理器、内存空间、带宽上应是同质的。另外,所有Cluster里面的配置放在一个配置文件里面以方便单点配置。
管理节点管理这个配置和cluster的日志。每个节点都从管理节点处获得这个配置。当数据节点发生某个事件时,它将信息传给管理节点,管理节点写日志。可以有两种类型的Client:
标准的MySQL Client: Connector/J5.0.6及之后的版本可以用jdbc:mysql:loadbalance://URLs来实现透明的负载均衡。
管理Client:连接管理节点,下发管理指令如启动关闭节点等。这样的client比如ndb_mgm是用MGMAPI(C语言API)实现的。
*下文中如果单独提到节点,都是指数据节点。
1.3节点、节点组、复本、分区
节点组内的一个数据节点存储了分区的复本,一个分区指派给一个节点组。每个数据节点应该位于单个机器上。节点组包含一个或多个节点,可以存储多个分区。一个cluster里面的节点组数不是配置的,是复本个数(可配置NoOfReplicas)和数据节点个数的函数。
节点组数=总的节点数/复本个数
分区是指cluster存储的一部分数据。数据节点越多,分区就越多。通常情况下,MySQL Cluster自动将NDB表分区。每一个节点组里面,分区的复本数=组内节点数。
每个节点组内至少需要1台机器是活的,才能保证整个系统可用。如果是2台机器,复本个数配置为2,那么就只有1个节点组,包含这2台机器,其中1个坏了,另一台仍可用。
2MySQL Cluster 多台机器How-To
二、规划
机器尽量使用IP,不需要不必要的服务,只要网络通就可以了。至少百兆网络,推荐千兆网络。尽量在子网里面运行。在SQL节点上,要装MySQL Server。管理节点和数据节点可以不用装MySQL Server。可以采用RPM包安装,对于MySQL Cluster,需要如下3个rpm包:
ServerRPM: 安装MySQL Server,也可以再装MySQL Client RPM;
ClusterStorage Engine:带有ndbd,装在数据节点上;
ClusterStorage Engine Management RPM:带有ndb_mgmd,装在管理节点上;
另外,最好再装NDB Cluster-Storage engine basic tools RPM:包含ndb_mgm;
NDBCluster-Storage engine extra tools RPM:包含一些测试和监控工具。注意:所有RPM的cluster版本号应该一致。
三、安装
安装数据节点前要做的事情(假设是YUM安装版本):
shell>group add mysql
shell>useradd -g mysql mysql
shell> yum install mysql*
shell> cd /root/MySQL_Cluster
shell> yum install MySQL-Cluster-*
安装后,在/usr/sbin目录下会产生ndbd文件。
四、配置
每个节点需要1个配置文件。其中每个数据节点或SQL节点需要1个my.cnf文件。里面包含2类信息:
1类信息定义如何去找管理节点。
1类信息定义启用NDB引擎
管理节点需要1个config.ini文件,定义复本个数、为每个数据节点开多少内存、哪里去找数据节点、数据存在数据节点的什么地方、哪里去找SQL节点。
配置数据节点和SQL节点:my.cnf文件应位于/etc目录,文件内容非常简单:
#mysqld进程的选项:
[mysqld]
ndbcluster # run NDB storage engine
ndb-connectstring=172.16.7.99 # 本地管理服务器的IP地址
#ndbd进程的选项
[mysql_cluster]
ndb-connectstring=172.16.7.99 #本地管理服务器的IP地址
一旦按照上述配置启动mysqld,将不能进行create table或altert table操作,必须启动cluster之后才能进行。
配置管理节点:建一个目录放config.ini文件。
shell>cd /home/mysql
shell>vi config.ini
#所有数据节点上影响ndbd进程的选项:
[ndbddefault]
NoOfReplicas=2 # 副本的个数
DataMemory=80M # 分配多少内存给数据存储
IndexMemory=18M # 分配多少内存给目录存储
# 这里的数据内存和目录内存的配置我们可以使用
# 默认数值,自从“world”数据库仅仅占用了500
# KB的内存之后,这些默认配置足够进行集群的安装。
#TCP/IP 选项:
[tcpdefault]
portnumber=2202 # 默认配置;默认配置;除非你要是用其它的端口
# 并且这个端口在集群中所有其它的主机上都没有
# 被占用。
#注意: It is recommended that youdo not specify the p
Ort
# number at all and allow the default value to be used instead
#Management process options:
[ndb_mgmd]
hostname=172.16.7.99 # 管理节点的IP或主机名
datadir=/home/mysql/mysql-cluster # 管理节点存放日志的目录
#Options for data node "A":
[ndbd]
# (one [ndbd] section per data node)
hostname=172.16.7.94 # IP或主机名
datadir=/usr/local/mysql/data #数据节点存放数据的目录
#Options for data node "B":
#[ndbd]
#hostname=192.168.0.40 # Hostname or IP address
#datadir=/usr/local/mysql/data # Directory for this data node's data files
#SQL node options:
[mysqld]
hostname=172.16.7.96 # Hostname or IP address
# (additional mysqld connections can be
# specified for this node for various
# purposes such as running ndb_restore)
[mysqld]
hostname=172.16.7.98 # Hostname or IP address
# (additional mysqld connections can be
# specified for this node for various
# purposes such as running ndb_restore)
缺省的cluster管理节点端口是1186,缺省的数据节点的端口是2202。
五、启动
先启动管理节点、再启动数据节点、最后启动SQL节点。
启动管理节点:
shell>ndb_mgmd -f /home/mysql/mysql-cluster/config.ini
启动数据节点:
shell>ndbd
启动SQL节点:
shell>service mysqld start
或者
shell>/etc/init.d/mysqld start
查看启动状态
shell>ndb_mgm
--NDB Cluster -- Management Client –
ndb_mgm>SHOW
......
倒数据时要转换为NDB引擎,应用程序访问的应该是SQL节点。
六、关闭和重启
关闭Cluster在管理节点上执行:
shell>ndb_mgm -e shutdown
将安全的关闭管理节点和数据节点。SQL节点可以用mysqladmin shutdown或别的方式关闭。
重启Cluster在管理节点上执行:
shell>ndb_mgmd -f /home/mysql/mysql-cluster/config.ini
在数据节点上执行:
shell>ndbd
在SQL节点上执行:
shell>mysqld_safe &