天天看点

mysql cluster noofreplicas,Mysql Cluster集群搭建

本文源链接地址:https:www.93bok.com

实验环境: Centos6.5 minimal 64位系统

服务器IP:

192.168.1.113(客户端)

192.168.1.114(管理节点)

192.168.1.115(数据节点1)

192.168.1.116(数据节点2)

192.168.1.117(SQL节点1)

192.168.1.118(SQL节点2)

包版本:

MySQL Cluster:mysql-cluster-gpl-7.3.19-linux-glibc2.12-x86_64.tar.gz

实验拓扑:

mysql cluster noofreplicas,Mysql Cluster集群搭建

MySQL集群概述

MySQL Cluster是MySQL适合于分布式计算环境的高实用、高冗余版本。Cluster的汉语是“集群”的意思。它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器。

MySQL Cluster 是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的 Cluster 。通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件有自己的内存和磁盘,不存在单点故障。

MySQL集群架构

mysql cluster noofreplicas,Mysql Cluster集群搭建

1)SQL节点: 给上层应用层提供sql访问。

2)管理节点(MGM): 管理整个集群。 启动,关闭集群。 通过ndb_mgmd命令启动集群

3)存储/数据节点: 保存cluster中的数据。 数据节点,可以提供副本。实现数据冗余。

4)NDB引擎:是一种 “内存中”的存储引擎 , 它具有可用性高和数据一致性好的特点。

NDB引擎介绍

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

缺陷:

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

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

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

优点:

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

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

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

官网下载地址

https://dev.mysql.com/downloads/cluster/

mysql cluster noofreplicas,Mysql 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.3.19-linux-glibc2.12-x86_64.tar.gz

mv mysql-cluster-gpl-7.3.19-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=80M #配置数据存储可使用的内存

IndexMemory=18M #索引给100M

[ndb_mgmd]

nodeid=1

datadir=/var/log/mysql-cluster #管理结点的日志

HostName=192.168.1.114 #管理结点的IP地址。本机IP

###### data node options: #存储结点

[ndbd]

HostName=192.168.1.115

DataDir=/data/mysql #mysql数据存储路径

nodeid=2

[ndbd]

HostName=192.168.1.116

DataDir=/data/mysql #mysql数据存储路径

nodeid=3

# SQL node options: #关于SQL结点

[mysqld]

HostName=192.168.1.117

nodeid=4

[mysqld]

HostName=192.168.1.118

nodeid=5

4、初始化管理节点

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

mysql cluster noofreplicas,Mysql Cluster集群搭建

5、查看集群状态

/usr/local/mysql/mysql-cluster/bin/ndb_mgm

ndb_mgm> show

mysql cluster noofreplicas,Mysql Cluster集群搭建

从图中可以看到,除了管理节点,别的数据节点和SQL节点还没有连接上,我们还没配置。

三、安装配置数据节点(NDB)

两台数据节点(192.168.1.115、192.168.1.116)一样的配置

1、创建目录,上传二进制包到/usr/local/mysql目录解压

mkdir -p /usr/local/mysql

cd /usr/local/mysql

tar -zxvf mysql-cluster-gpl-7.3.19-linux-glibc2.12-x86_64.tar.gz

mv mysql-cluster-gpl-7.3.19-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=192.168.1.114 #管理节点IP地址

[mysql_cluster]

ndb-connectstring=192.168.1.114 #管理节点IP地址

5、启动数据节点服务

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

mysql cluster noofreplicas,Mysql Cluster集群搭建

四、安装配置SQL节点

两台SQL节点(192.168.1.117、192.168.1.118)一样的配置

1、创建目录,上传二进制包到/usr/local/mysql目录解压

mkdir -p /usr/local/mysql

cd /usr/local/mysql

tar -zxvf mysql-cluster-gpl-7.3.19-linux-glibc2.12-x86_64.tar.gz

mv mysql-cluster-gpl-7.3.19-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=192.168.1.114 #管理节点IP地址

[mysql_cluster]

ndb-connectstring=192.168.1.114 #管理节点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

mysql cluster noofreplicas,Mysql Cluster集群搭建

6、初始化mysql数据库

/usr/local/mysql/mysql-cluster/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/mysql-cluster --datadir=/data/mysql/

mysql cluster noofreplicas,Mysql Cluster集群搭建

报错,缺少依赖,我们yum装一下

yum -y install perl

再重新初始化一下

mysql cluster noofreplicas,Mysql Cluster集群搭建

又报错了,还是缺少依赖,再装呗

yum -y install numactl

再来重启初始化一次,正常了

mysql cluster noofreplicas,Mysql Cluster集群搭建

7、启动SQL节点(和正常启动mysql数据库一样)

service mysqld start

mysql cluster noofreplicas,Mysql Cluster集群搭建

MySQL Cluster管理节点查看

/usr/local/mysql/mysql-cluster/bin/ndb_mgm

ndb_mgm> show

mysql cluster noofreplicas,Mysql Cluster集群搭建

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 192.168.1.117

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 192.168.1.118

mysql> select * from BB.test2;

mysql cluster noofreplicas,Mysql Cluster集群搭建

测试二:关闭117SQL节点,然后使用客户端登录118SQL节点,创建数据,创建完成数据之后,重新启动117SQL节点,查看117SQL节点是否能同步118SQL节点新创建的数据

关闭117SQL节点:

service mysqld stop

客户端登录118SQL节点创建数据:

mysql -u cluster -p123456 -h 192.168.1.118

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 192.168.1.117

mysql> show databases;

mysql cluster noofreplicas,Mysql Cluster集群搭建

mysql> select * from db.test;

mysql cluster noofreplicas,Mysql Cluster集群搭建

MySQL Cluster集群启动和关闭顺序

请严格按照次序启动和关闭集群

启动:

管理结点服务->数据结点服务->sql结点服务

关闭:

关闭管理结点服务,关闭管理结点服务后,nbdb数据结点服务会自动关闭->手动把sql结点服务关了。

说明:

首次启动数据节点时,有带上参数--initial,这是初始化参数,在以后的启动过程中,则不能添加该参数,否则ndbd程序会清除在之前建立的所有用于恢复的数据文件和日志文件

笔者留下的一个天坑

由于我能力以及时间有限,在搭建过程中,发现了一个问题,这个搭建过程我是全部的防火墙都关闭了,因为我发现,如果所有服务器的防火墙都开启,即使我把MySQL Cluster集群所需要的3306和1186端口开放了,搭建还是不成功,比如下图,SQL节点怎么都是not connected,但是只要把防火墙关闭,瞬间就连接上了,哈哈,算是留下的一个坑吧,如果有大神看到这篇文章,且,知道该怎么解决,并,愿意把解决方案告诉我的,可以在网站的《关于》一栏,加一下我微信或Q群,小的在此感激不尽

mysql cluster noofreplicas,Mysql Cluster集群搭建