MySQL Cluster安装
一、概述
MySQL Cluster 是MySQL 适合于分布式计算环境的高实用、可拓展、高性能、高冗余版本,其研发设计的初衷就是要满足许多行业里的最严酷应用要求,这些应用中经常要求数据库运行的可 靠性要达到99.999%。MySQL Cluster允许在无共享的系统中部署“内存中”数据库集群,通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组 件有自己的内存和磁盘,不存在单点故障。
实际上,MySQL集群是把一个叫做NDB的内存集群存储引擎集成与标准的MySQL服务器集成。它包含一组计算机,每个都跑一个或者多个进程,这可能包括一个MySQL服务器,一个数据节点,一个管理服务器和一个专有的一个数据访问程序。
MySQL Cluster能够使用多种故障切换和负载平衡选项配置NDB存储引擎,但在Cluster 级别上的存储引擎上做这个最简单。以下为MySQL集群结构关系图,
MySQL从结构看,由3类节点(计算机或进程)组成,分别是:
管理节点:用于给整个集群其他节点提供配置、管理、仲裁等功能。理论上通过一台服务器提供服务就可以了。
数据节点:MySQL Cluster的核心,存储数据、日志,提供数据的各种管理服务。2个以上 时就能实现集群的高可用保证,DB节点增加时,集群的处理速度会变慢。
SQL节点(API):用于访问MySQL Cluster数据,提供对外应用服务。增加 API 节点会提高整个集群的并发访问速度和整体的吞吐量,该节点 可以部署在Web应用服务器上,也可以部署在专用的服务器上,也开以和DB部署在 同一台服务器上。
NDB引擎
MySQL Cluster 使用了一个专用的基于内存的存储引擎——NDB引擎,这样做的好处是速度快, 没有磁盘I/O的瓶颈,但是由于是基于内存的,所以数据库的规模受系统总内存的限制, 如果运行NDB的MySQL服务器一定要内存够大,比如4G, 8G, 甚至16G。NDB引擎是分布式的,它可以配置在多台服务器上来实现数据的可靠性和扩展性,理论上 通过配置2台NDB的存储节点就能实现整个数据库集群的冗余性和解决单点故障问题。
缺陷
- 基于内存,数据库的规模受集群总内存的大小限制
- 基于内存,断电后数据可能会有数据丢失,这点还需要通过测试验证。
- 多个节点通过网络实现通讯和数据同步、查询等操作,因此整体性受网络速度影响,因此速度也比较慢
优点
- 多个节点之间可以分布在不同的地理位置,因此也是一个实现分布式数据库的方案。
- 扩展性很好,增加节点即可实现数据库集群的扩展。
- 冗余性很好,多个节点上都有完整的数据库数据,因此任何一个节点宕机都不会造成服务中断。
实现高可用性的成本比较低,不象传统的高可用方案一样需要共享的存储设备和专用的软件才能实现,NDB 只要有足够的内存就能实现。
我们搭建一个最简化的MySQL Cluster系统,配置方法中的所有命令都是以root账户运行。这个MySQL Cluster包含一个管理结点、两个数据结点、两个SQL结点,这五个结点会分别安装在4个服务器上,服务器的名称和IP如下所示:
名称 |
IP |
管理节点 |
192.168.0.35 |
数据节点一 |
192.168.0.37 |
数据节点二 |
192.168.0.38 |
SQL节点一 |
192.168.0.35 |
SQL节点二 |
192.168.0.36 |
管理节点、数据节点、SQL节点的进程不冲突,也可以放在同一台服务器上。这里我们的管理节点和一个SQL节点放在了一起。操作系统版本centOS 6.5 。
二、安装
- 下载MySQL Cluster
下载地址 http://dev.mysql.com/downloads/cluster/ , 选择当前GA版本的前一个版本 7.3.12,下载mysql-cluster-gpl-7.3.12-linux-glibc2.5-x86_64.tar.gz
2. 安装MySQL Cluster
首先,更改selinux设置并关闭操作系统防火墙
vi /etc/sysconfig/selinux
SELINUX=disabled
chkconfig iptables off
chkconfig ip6tables off
然后,卸载系统已经存在的mysql
查看已经安装的mysql
rpm -qa|grep mysql
卸载对应的mysql组件, mysqlxxx 代表查看的mysql组件
rpm -e mysqlxxx --nodeps
建立mysql安装文件存放的目录,并将下载好的mysql-cluster-gpl-7.3.12-linux-glibc2.5-x86_64.tar.gz 复制到此目录下
mkdir -p /u01/soft
解压缩mysql-cluster
tar zxvf mysql-cluster-gpl-7.3.12-linux-glibc2.5-x86_64.tar.gz
将其移至/usr/local/mysql
mv mysql-cluster-gpl-7.3.12-linux-glibc2.5-x86_64 /usr/local/mysql
创建用户群
groupadd mysql
创建用户
useradd -g mysql mysql
cd /usr/local/mysql
赋权
chown -R root *
chown -R mysql data
chgrp -R mysql *
mkdir -p /u01/backup/mysql/log
chown -R mysql /u01/backup/mysql
安装依赖
yum -y install libaio*
安装mysql
scripts/mysql_install_db --user=mysql
innodb较完整安装脚本如下:
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data --pid-file=/data/mysql/data/mysql.pid --tmpdir=/tmp
3. 配置管理节点
vi /u01/backup/mysql/cluster/config.ini
内容如下:
[NDBD DEFAULT]
#每个数据节点的镜像数量
NoOfReplicas=1
#每个数据节点中给数据分配的内存
DataMemory=500M
#每个数据节点中给索引分配的内存
IndexMemory=300M
MaxNoOfTables=1024
MaxNoOfAttributes=5000000
MaxNoOfOrderedIndexes=10000
#配置管理节点
[NDB_MGMD]
NodeId=1
hostname=192.168.0.35
#管理节点数据(日志)目录
datadir=/u01/backup/mysql/cluster/
#数据节点配置
[NDBD]
NodeId=2
hostname=192.168.0.37
#数据节点目录
datadir=/u01/backup/mysql/data/
[NDBD]
NodeId=3
hostname=192.168.0.38
datadir=/u01/backup/mysql/data/
#SQL节点目录
[MYSQLD]
NodeId=4
hostname=192.168.0.35
[MYSQLD]
NodeId=5
hostname=192.168.0.36
配置管理节点的启停服务
vi /etc/init.d/ndb_mgmd
#!/bin/sh
#
# rhnsd: Starts the Unbreakable Linux Network Daemon
#
# chkconfig: 345 99 10
# description: This is a daemon which handles the task of connecting \
# periodically to the Unbreakable Linux Network servers to \
# check for updates, notifications and perform system \
# monitoring tasks according to the service level that \
# this server is subscribed for
#
# processname: rhnsd
# pidfile: /var/run/rhnsd.pid
#
MYSQL_HOME=/usr/local/mysql
CONF_HOME=/u01/backup/mysql/cluster
export MYSQL_HOME CONF_HOME
case $1 in
'start')
cd $MYSQL_HOME/bin
./ndb_mgmd -f $CONF_HOME/config.ini &
;;
'stop')
cd $MYSQL_HOME/bin
./ndb_mgm -e shutdown &
;;
'status')
cd $MYSQL_HOME/bin
./ndb_mgm -e show &
;;
*)
echo "usage: $0 {start|stop}"
exit
;;
esac
#
exit
赋权
chmod +x /etc/init.d/ndb_mgmd
注册服务
chkconfig --add ndb_mgmd
调用服务示例
service ndb_mgmd start | stop | status
4. 配置数据节点和SQL节点
mysql服务启动时会默认加载/etc/my.cnf作为其配置文件,修改my.cnf
vi /etc/my.cnf
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8
socket=/tmp/mysql.sock
[mysqld]
basedir=/usr/local/mysql
datadir=/u01/backup/mysql/data
user=mysql
log-error=/u01/backup/mysql/log/error.log
character-set-server=utf8
collation-server=utf8_general_ci
ndbcluster
ndb-connectstring=192.168.0.35
[mysql_cluster]
ndb-connectstring=192.168.0.35
SQL 节点需要制作mysqld的启动服务
cd /usr/local/mysql
复制mysqld的服务
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
注册服务
chkconfig --add mysqld
调用服务示例
service mysqld start | stop | status
5. 启动群集
Mysql cluster需要各个节点进行启动后方能够工作,节点的启动顺序为:管理节点à 数据节点à SQL节点。关闭顺序为先关闭SQL节点,然后关闭管理节点(数据节点会由管理节点关闭)。
首先,在192.168.0.35上启动管理节点,群集节点有调整情况下需要加 --initial
service ndb_mgmd start
其次,在 192.168.0.37、192.168.0.38分别启动数据节点,请注意数据节点第一次启动时需带上 --initial 参数,后续启动则不要加此参数
cd /usr/local/bin
./ndbd --initial
最后,在 192.168.0.35、192.168.0.36分别启动SQL节点
service mysqld start
启动后可以用下述命令查看集群状况
service ndb_mgmd status
6. 测试群集
在 192.168.0.35 的SQL节点上用客户端 建立 d1 数据库 及表 t1, 并插入一条数据。特别注意,建表时需要制定使用ndbcluster引擎,如下红色字体。
cd /usr/local/mysql/bin
./mysql –u root
create database d1;
use d1;
create table t1 (id int(11) not null, name varchar(32) not null, primary key (id)) ENGINE=ndbcluster DEFAULT CHARSET=utf8;
insert into t1 values(1,'jacky');
然后在 192.168.0.36 上查询
cd /usr/local/mysql/bin
./mysql –u root
select * from d1.t1 ;
其它,改密码并赋予其它客户端相关权限
set password = password('xxx');
grant all privileges on *.* to [email protected]'%' identified by 'xxx';
7. 关闭群集
在 192.168.0.35、192.168.0.36分别停止SQL节点服务
service mysqld stop
在 192.168.0.35管理节点上停止集群服务
service ndb_mgmd stop