MySQL Cluster集群部署与配置

来源:互联网 发布:三国群英传2mac版 编辑:程序博客网 时间:2024/05/10 23:18

简介

MySQL集群是一种在无共享架构(SNA,ShareNothing Architecture)系统里应用内存数据库集群的技术。这种无共享的架构可以使得系统使用低廉的硬件获取高的可扩展性。

MySQL集群是一种分布式设计,目标是要达到没有任何单点故障点。因此,任何组成部分都应该拥有自己的内存和磁盘。任何共享存储方案如网络共享,网络文件系统和SAN设备是不推荐或不支持的。通过这种冗余设计,MySQL声称数据的可用度可以达到99.999%。

实际上,MySQL集群是把一个叫做NDB的内存集群存储引擎集成与标准的MySQL服务器集成。它包含一组计算机,每个都跑一个或者多个进程,这可能包括一个MySQL服务器,一个数据节点,一个管理服务器和一个专有的一个数据访问程序。它们之间的关系如下图所示:

 

存储引擎

MySQL Cluster 使用了一个专用的基于内存的存储引擎,这样做的好处是速度快, 没有磁盘I/O的瓶颈,但是由于是基于内存的,所以数据库的规模受系统总内存的限制,如果运行NDB的MySQL服务器一定要内存够大,比如4G, 8G, 甚至16G。NDB引擎是分布式的,它可以配置在多台服务器上来实现数据的可靠性和扩展性,理论上通过配置2台NDB的存储节点就能实现整个数据库集群的冗余性和解决单点故障问题。

该存储引擎有下列弊端:

l  基于内存,数据库的规模受集群总内存的大小限制

l  基于内存,断电后数据可能会有数据丢失,这点还需要通过测试验证。

l  多个节点通过网络实现通讯和数据同步、查询等操作,因此整体性受网络速度影响,

l  因此速度也比较慢

当然也有它的优点:

l  多个节点之间可以分布在不同的地理位置,因此也是一个实现分布式数据库的方案。

l  扩展性很好,增加节点即可实现数据库集群的扩展。

l  冗余性很好,多个节点上都有完整的数据库数据,因此任何一个节点宕机都不会造成服务中断。

l  实现高可用性的成本比较低,不像传统的高可用方案一样需要共享的存储设备和专用的软件才能实现,NDB 只要有足够的内存就能实现。

体系结构

MySQL Cluster 由3个不同功能的服务构成,每个服务由一个专用的守护进程提供,一项服务也叫做一个节点,下面来介绍每个节点的功能。

The management (MGM) node

管理节点,用来实现整个集群的管理,理论上一般只启动一个,而且宕机也不影响 cluster 的服务,这个进程只在cluster 启动以及节点加入集群时起作用,所以这个节点不是很需要冗余,理论上通过一台服务器提供服务就可以了。

通过 ndb_mgmd 命令启动,使用 config.ini 配置文件

bin/ndb_mgmd –f /var/lib/mysql-cluster/config.ini

Data node:

数据库节点,用来存储数据,可以和管理节点(MGM), 用户端节点(API) 可以处在不同的机器上,也可以在同一个机器上面,集群中至少要有一个DB节点,2个以上时就能实现集群的高可用保证,DB节点增加时,集群的处理速度会变慢。通过 ndbd 命令启动,第一次创建好cluster DB 节点时,需要使用 –init参数初始化。

例如: bin/ndbd –-initial

SQL node:

客户端节点,通过他实现 clusterDB 的访问,这个节点也就是普通的 mysqld 进程,需要在配置文件中配置ndbcluster 指令打开 NDB Cluster storage engine 存储引擎,增加 SQL节点会提高整个集群的并发访问速度和整体的吞吐量,该节点可以部署在Web应用服务器上,也可以部署在专用的服务器上,也开以和Data节点部署在同一台服务器上。

这3类节点可以分布在不同的主机上,比如 Data节点可以是多台专用的服务器,也可以每个Data都有一个SQL节点,当然也可以把SQL节点分布在Web前端的服务器上去,通常来说,SQL节点越多cluster的性能会越好。


部署配置方法

环境:

系统:centos 5.9 32位

内核:2.6.18-348.el5

MySQL Cluster:  mysql-cluster-gpl-7.2.10-linux2.6-i686.tar.gz

可以从http://mysql.mirror.kangaroot.net/Downloads/MySQL-Cluster-7.2/下载

 

节点配置情况:

MGM:192.168.207.129

NDBD1:192.168.207.130

NDBD2:192.168.207.131

SQL1:192.168.207.130

SQL2:192.168.207.131

注:因资源有限,所以把Data node 和SQL note配到了同一台机器上去了,

 

下面1-3步都是要再所有机器上做的,4以下的按照标题提示在相应的机器上做。

具体步骤:

1. 下载MySQL cluster最新版本7.2.10,解压移动至 /usr/local/mysql目录下

cd /usr/local/src/

wget http://mysql.mirror.kangaroot.net/Downloads/MySQL-Cluster-7.2/mysql-cluster-gpl-7.2.10-linux2.6-i686.tar.gz

tar xf mysql-cluster-gpl-7.2.10-linux2.6-i686.tar.gz

mv mysql-cluster-gpl-7.2.10-linux2.6-i686/usr/local/mysql

 

2. 添加mysql用户组及用户,修改相关目录权限

groupadd mysql

useradd mysql -g mysql

chown -R mysql:mysql /usr/local/mysql

 

3. 安装MySQL cluster

cd /usr/local/mysql

scripts/mysql_install_db --user=mysql

 

4. 配置管理节点

#创建目录

mkdir -p /var/lib/mysql-cluster

 

#修改配置文件

vim /var/lib/mysql-cluster/config.ini

 

#config.ini内容如下

[ndbd default]

 

NoOfReplicas=2

 

DataMemory=40M

 

IndexMemory=20M

 

[tcp default]

 

SendBufferMemory=2M

 

ReceiveBufferMemory=2M

 

[NDB_MGMD DEFAULT]

 

portNumber=1186

 

datadir=/var/lib/mysql-cluster

 

[ndb_mgmd]

 

id=1

 

hostname=192.168.207.129

 

[ndbd]

 

id=2

 

hostname=192.168.207.130

 

datadir=/usr/local/mysql/data

 

[ndbd]

 

id=3

 

hostname=192.168.207.131

 

datadir=/usr/local/mysql/data

 

[mysqld]

 

id=4

 

hostname=192.168.207.130

 

[mysqld]

 

id=5

 

hostname=192.168.207.131

 

[mysqld]

 

id=6

 

 

5. 配置数据节点和守护节点

#拷贝文件,创建相关目录

cp support-files/mysql.server/etc/init.d/mysqld

#新建logs日志目录

mkdir logs; chown mysql:mysql logs

# 修改配置文件

[mysqld]

 

ndbcluster

 

datadir=/usr/local/mysql/data

 

basedir=/usr/local/mysql

 

socket=/tmp/mysql.sock

 

slow_query_log=/var/local/mysql/logs/slow_query.log

 

max_connections= 100

 

ndb-connectstring=192.168.207.129

 

[mysql_cluster]

 

ndb-connectstring=192.168.207.129

 

6. 启动节点

启动需要按照如下顺序进行:Management Node > Data Node > SQL Node

 

6.1管理结点启动

/usr/local/mysql/bin/ndb_mgmd -f/var/lib/mysql-cluster/config.ini

其他操作:

# 查看是否有端口号为1186的监听端口

netstat –altpn

# 查看集群状态

/usr/local/mysql/bin/ndb_mgm -e show

# 管理节点检验

/usr/local/mysql/bin/ndb_mgm

# 管理节点关闭

/usr/local/mysql/bin/ndb_mgm -e shutdown

 

6.2数据节点启动

# 只是在第一次启动或在备份/恢复或配置变化后重启ndbd时,才加–initial参数!

/usr/local/mysql/bin/ndbd --initial

# 正常启动方式

/usr/local/mysql/bin/ndbd

 

6.3 SQL节点启动

service mysqld start

# sql 节点关闭

service mysql stop

# 检验mysql是否运行

/etc/rc.d/init.d/mysqld status

# 为sql指定密码

/usr/local/mysql/bin/mysqladmin -u rootpassword 'new-password'

/usr/local/mysql/bin/mysqladmin -u root -h'host' password 'new-password'

# 启动命令行窗口

/usr/local/mysql/bin/mysql -u root –p


6.4 如果节点都加入了管理节点,那么可显示如下:




验证MySQL Cluster功能

在192.168.207.130上:

/usr/local/mysql/bin/mysql

mysql> show databases;


mysql>use test;

mysql> create table jason(id int, namevarchar(20),birthday date)ENGINE=ndb;

mysql> Insert into jasonvalues(1,'Kate',19821212);


 

在192.168.207.131上:

/usr/local/mysql/bin/mysql

mysql> show databases;

mysql>use test;

由此可验证,MySQL Cluster配置成功