前两天开发那边的负责人跑来征询我的意见,说想去掉ORACLE数据库。我说随便呀,对我来说用啥数据库都无所谓。
因为对系统宕机时间有要求,MYSQL这边的我给了基于NDB的集群方案,Postgresql则是greenplum的方案。想让开发自己摸摸,然后我再教他们开发。。
先发个NDB的文档。
实验环境: Centos6.5 minimal 64位系统
服务器IP:
10.90.9.156 管理节点
10.90.9.177 存储结点1
10.90.9.180 存储结点2
10.90.9.165 sql接入节点1
10.90.9.167 sql接入节点2
包版本:
MySQL Cluster:mysql-cluster-gpl-7.5.10-linux-glibc2.12-x86_64.tar.gz
官网下载地址
https://dev.mysql.com/downloads/cluster/
MySQL Cluster集群搭建
一、卸载系统自带的mysql所有组件(所有机器,除了客户机)
yum -y remove mysql*
rpm -qa | grep mysql
rpm -e --nodeps xxxxx
rm -rf /var/lib/mysql/
rm -rf /etc/my.cnf
rm -rf /etc/init.d/mysqld
vim /etc/profile 删除与mysql相关内容
chkconfig --list | grep mysql
chkconfig --del mysqld
二、安装配置管理节点(MGM)
1、创建目录,上传二进制包到/usr/local/mysql目录解压
mkdir -p /usr/local/mysql
cd /usr/local/mysql
tar -zxvf mysql-cluster-gpl-7.5.10-linux-glibc2.12-x86_64.tar.gz
mv mysql-cluster-gpl-7.3.26-linux-glibc2.12-x86_64 mysql-cluster
2、创建管理节点日志目录、配置文件目录
mkdir -p /var/log/mysql-cluster
mkdir -p /etc/mysql-cluster
3、创建配置文件
vi /etc/mysql-cluster/config.ini
[ndbd default]
NoOfReplicas=2 #数据写入数量。2表示两份,2个数据节点
DataMemory=800M #配置数据存储可使用的内存
IndexMemory=180M #索引给100M
[ndb_mgmd]
nodeid=1
datadir=/var/log/mysql-cluster #管理结点的日志
HostName=10.90.9.156 #管理结点的IP地址。本机IP
data node options: #存储结点
[ndbd]
HostName=10.90.9.177
DataDir=/data/mysql #mysql数据存储路径
nodeid=2
[ndbd]
HostName=10.90.9.180
DataDir=/data/mysql #mysql数据存储路径
nodeid=3
SQL node options: #关于SQL结点
[mysqld]
HostName=10.90.9.165
nodeid=4
[mysqld]
HostName=10.90.9.167
nodeid=5
4、初始化管理节点
/usr/local/mysql/mysql-cluster/bin/ndb_mgmd -f /etc/mysql-cluster/config.ini
5、查看集群状态
/usr/local/mysql/mysql-cluster/bin/ndb_mgm
ndb_mgm> show
从图中可以看到,除了管理节点,别的数据节点和SQL节点还没有连接上,我们还没配置。
三、安装配置数据节点(NDB)
两台数据节点(10.90.9.177、10.90.9.180)一样的配置
1、创建目录,上传二进制包到/usr/local/mysql目录解压
mkdir -p /usr/local/mysql
cd /usr/local/mysql
tar -zxvf mysql-cluster-gpl-7.5.10-linux-glibc2.12-x86_64.tar.gz
mv mysql-cluster-gpl-7.3.26-linux-glibc2.12-x86_64 mysql-cluster
2、创建mysql运行用户
useradd -M -s /sbin/nologin mysql
3、创建mysql数据目录、配置文件目录并授权
mkdir -p /etc/mysql
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql/
4、创建数据节点配置文件
vi /etc/mysql/my.cnf
[mysqld]
datadir=/data/mysql #mysql数据存储路径
ndbcluster #启动ndb引擎
ndb-connectstring=10.90.9.156 #管理节点IP地址
[mysql_cluster]
ndb-connectstring=10.90.9.156 #管理节点IP地址
5、启动数据节点服务
/usr/local/mysql/mysql-cluster/bin/ndbd --initial
POINin.png
四、安装配置SQL节点
两台SQL节点(10.90.9.165、10.90.9.167)一样的配置
1、创建目录,上传二进制包到/usr/local/mysql目录解压
mkdir -p /usr/local/mysql
cd /usr/local/mysql
tar -zxvf mysql-cluster-gpl-7.5.10-linux-glibc2.12-x86_64.tar.gz
mv mysql-cluster-gpl-7.3.26-linux-glibc2.12-x86_64 mysql-cluster
2、创建mysql运行用户
useradd -M -s /sbin/nologin mysql
3、创建mysql数据目录、配置文件目录并授权
mkdir -p /etc/mysql
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql/
4、创建SQL节点配置文件
vi /etc/mysql/my.cnf
[mysqld]
ndbcluster #启动ndb引擎
ndb-connectstring=10.90.9.156 #管理节点IP地址
[mysql_cluster]
ndb-connectstring=10.90.9.156 #管理节点IP地址
5、配置mysql服务
cp /usr/local/mysql/mysql-cluster/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
vi /etc/init.d/mysqld
POIBsU.png
6、初始化mysql数据库
/usr/local/mysql/mysql-cluster/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/mysql-cluster --datadir=/data/mysql/
vi /etc/init.d/mysqld
修改basedir和datadir参数
报错,缺少依赖,我们yum装一下
yum -y install perl
再重新初始化一下
又报错了,还是缺少依赖,再装呗
yum -y install numactl
再来重启初始化一次,正常了
还需要yum-y install autoconf
7、启动SQL节点(和正常启动mysql数据库一样)
service mysqld start
MySQL Cluster管理节点查看
/usr/local/mysql/mysql-cluster/bin/ndb_mgm
ndb_mgm> show
SQL节点设置mysql密码并授权客户端可以登录
SQL节点1:(密码123456)
/usr/local/mysql/mysql-cluster/bin/mysqladmin -u root password
/usr/local/mysql/mysql-cluster/bin/mysql -u root -p123456
mysql> grant all on . to [email protected]‘%‘ identified by ‘123456‘;
mysql> flush privileges;
SQL节点2:(密码123456)
/usr/local/mysql/mysql-cluster/bin/mysqladmin -u root password
/usr/local/mysql/mysql-cluster/bin/mysql -u root -p123456
mysql> grant all on . to [email protected]‘%‘ identified by ‘123456‘;
mysql> flush privileges;
MySQL Cluster测试
测试一:先用客户端登录任意一台SQL节点,然后创建库,插入数据,查看两台SQL节点是否会自动同步
客户端登录117SQL节点,创建数据:
mysql -u cluster -p123456 -h 10.90.9.165
mysql> create database BB;
mysql> use BB;
mysql> create table test2(id int)ENGINE=NDB;
mysql> insert into test2 values(33333);
客户端退出117SQL节点,登录118SQL节点查看数据是否同步:
mysql -u cluster -p123456 -h 10.90.9.167
mysql> select * from BB.test2;
POILWt.png
测试二:关闭117SQL节点,然后使用客户端登录118SQL节点,创建数据,创建完成数据之后,重新启动117SQL节点,查看117SQL节点是否能同步118SQL节点新创建的数据
关闭117SQL节点:
service mysqld stop
客户端登录118SQL节点创建数据:
mysql -u cluster -p123456 -h 10.90.9.167
mysql> create database db;
mysql> use db;
mysql> create table test(id int) engine=ndb;
mysql> insert into test values(1000);
重新启动117SQL节点:
service mysqld start
客户端登录117SQL节点查看在118SQL节点上创建的数据是否能同步过来:
mysql -u cluster -p123456 -h 10.90.9.165
mysql> show databases;
mysql> select * from db.test;
POopwQ.png
MySQL Cluster集群启动和关闭顺序
请严格按照次序启动和关闭集群
启动:
管理结点服务->数据结点服务->sql结点服务
管理节点
/usr/local/mysql/mysql-cluster/bin/ndb_mgmd -f /etc/mysql-cluster/config.ini
数据节点
/usr/local/mysql/mysql-cluster/bin/ndbd
SQL节点
service mysqld start
关闭:
关闭管理结点服务,关闭管理结点服务后,nbdb数据结点服务会自动关闭->手动把sql结点服务关了。
说明:
首次启动数据节点时,有带上参数–initial,这是初始化参数,在以后的启动过程中,则不能添加该参数,否则ndbd程序会清除在之前建立的所有用于恢复的数据文件和日志文件