构建MySQL集群

MySQL集群作用:解决MySQL代理服务器的缺点单点故障数据备份


结构图如下:

使用6台RHEL6.4虚拟机,如图所示sqlA和sqlB作为SQL节点,ndbA和ndbB作为数据节点,mgmd作为管理节点,这5个节点构成MySQLCluster体系;而另一台虚拟机192.168.4.120作为MySQL测试客户机。


角色说明:

客户端(client)    :访问集群主机

管理集群的主机(mgmd):管理集群中所有主机,加载自己的主配置文件,设置集群中所有主机的角色

SQL结点(sql)      :供用户访问和执行SQL语句,存储表结构(2台以上)

数据结点(ndbd节点)  :存储表中的记录(2台以上)

MySQL集群提供三进程:

mgmd    管理进程      运行在管理机上    config.ini

mysqld   数据库服务     运行在sql节点上  /etc/my.cnf

ndbd   数据存储服务   运行在ndbd节点   /etc/my.cnf

1、公共配置(要保留RHEL自带的mysql-libs包)

A、关闭防火墙、selinux,停止mysql数据库服务,移走配置文件/etc/my.cnf

B、卸载冲突的软件包(所有节点)

# rpm -qa | grep -i mysql       //查看原有的mysql包

# yum -y remove .....

C、安装集群软件(所有节点)

# tar -xf MySQL-Cluster-gpl-7.3.3-1.el6.x86_64.rpm-bundle.tar

# rpm -Uvh MySQL-Cluster-*.rpm   //默认路径/var/lib/mysql

# rpm -qa | grep MySQL-Cluster

D、修改密码

# cat /root/.mysql_secret

# the root user at Tue Dec24 15:24:50 2013 (local time): Z3Qw2OWJ

# mysql -u root -p Z3Qw2OWJ

mysql> SET PASSWORD FOR ‘root‘@‘localhost‘=PASSWORD(‘123‘);

2、配置管理主机mgm

启动管理进程时,调用配置文件/etc/my-cluster.ini,知道集群中主机的角色(配置文件要自己编辑,不允许有空行)

# mkdir -p /var/log/mysql-cluster  //创建工作文件夹

# vim /etc/my-cluster.ini

[ndbd default]      //定义数据结点的公共配置                         NoOfReplicas=2     //指定一份数据备份几份(数据结点数或能被数据节点数整除)

DataMemory=80M      //数据内存(保存用户执行过的SQL语句和查询结果,通常是物理内存的1/3) IndexMemory=18M     //保存索引的内存                                   [ndb_mgmd]               //指定管理主机                           nodeid=1                //指定编号(管理标识),值不允许重复           hostname=192.168.4.100     //管理主机的IP                               datadir=/var/log/mysql-cluster  //路径在mgm上,用于存放集群中主机的信息,路径需自己创建   [ndbd]                  //指定数据结点1

nodeid =30                                                       hostname=192.168.4.30            //数据结点的IP                         Datadir=/var/lib/mysql-cluster/data  //路径在数据结点上要存在,该目录用于存放表中的记录   [ndbd]                     //指定数据结点2

nodeid =40                                                       hostname=192.168.4.40                                               Datadir=/var/lib/mysql-cluster/data                                     [mysqld]                   //指定sql结点1

nodeid =10                                                       hostname=192.168.4.10           //sql结点的IP                           [mysqld]                   //指定sql结点2                           nodeid =20                                                       hostname=192.168.4.20

3、配置数据结点ndb(在 .30 .40上操作)

1)创建存储表中记录的目录

# mkdir -p /var/lib/mysql-cluster/data

2)编辑配置文件/etc/my.cnf(与mysqld的主配置文件同名)

若原来已存在my.cnf文件,则先做改名

# mv /etc/my.cnf /etc/my.cnf.bak

# vi /etc/my.cnf                                                 [mysqld]                   //设置数据结点                         datadir=/var/lib/mysql-cluster/data //将记录存储在本机的哪个目录下,与管理主机上的设置一致 ndb-connectstring=192.168.4.100   //管理主机的IP

ndbcluster                  //指定运行的存储引擎

[mysql_cluster]              //设置管理集群的主机

ndb-connectstring=192.168.4.100   //管理主机的IP

4、配置SQL结点sql (在.10  .20上操作)

1)编辑配置文件/etc/my.cnf

# mv /etc/my.cnf /etc/my.cnf.bak

# vi /etc/my.cnf                                                   [mysqld]                      //设置sql结点

ndbcluster                    //指定表的存储引擎

default-storage-engine=ndbcluster

[mysql_cluster]                //设置管理集群的主机
ndb-connectstring=192.168.4.100     //管理主机的IP

5、启动(注意启动顺序)

*正确的启动顺序:管理节点 --> 数据节点 --> SQL节点。

*关闭顺序:    SQL节点 --> 数据节点 --> 管理节点。

*数据节点、SQL节点都正常运行后,理论上管理节点可关闭(无监控等任务的话)

1)启动管理进程

# ndb_mgmd -f /etc/my-cluster.ini --nodaemon    //启动管理进程脚本

# pgrep mgmd          //查看进程是否开启,可用pkill -9 mgmd 结束管理进程

# ndb_mgm            //执行登录管理界面的脚本                        ndb_mgm>show        //查看集群信息

# netstat -atunp | grep ndb

tcp   0  0 0.0.0.0:1186    0.0.0.0:*  LISTEN   4965/ndb_mgmd

设置为开机自启动

#vim /etc/rc.local

ndb_mgmd -f /etc/my-cluster.ini  --nodaemon

关于管理节点的启动,有以下几个需要注意的地方:

ndb_mgmd 默认以后台模式运行(--daemon),调试过程中可添加选项--nodaemon来禁用后台模式;

ndb_mgmd 初次启动成功以后,会自动保存集群配置,以后再启动时会忽略-f指定的配置文件,除非添加--inital选项(比如向集群中添加新的节点时,就应该重新初始化)。

2)启动数据结点进程

MySQL Cluster数据节点的对应服务程序为ndbd(单线程的)、ndbmtd(多线程的),首次启动或重新初始化时加 --initial选项,以后不用加。

# ndbd --initial-start      //启动数据结点进程

# pgrep ndbd             //查看进程,可用pkill -9 ndbd 结束管理进程

# vim /etc/rc.local        //设置为开机自启动

ndbd

3)启动sql结点的数据库服务进程

# pgrep mysqld

# pkill -9 mysql

# service mysql start

# chkconfig mysql on

检查sql节点默认存储引擎,确保已支持ndbcluster且作为默认存储引擎:

# mysql -u root -p123456  //本机帐号登录

mysql> show engines\G;

Engine: ndbcluster

Support: DEFAULT

管理节点查看集群状态

#ndb_mgm          //进入群集管理环境

ndb_mgm> show         //若能看到如下信息就说明集群创建成功

Cluster Configuration

---------------------

[ndbd(NDB)]  2node(s)

id=30 @192.168.4.30  (mysql-5.6.14 ndb-7.3.3, starting, Nodegroup:0)

id=40 @192.168.4.40  (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0, *)

[ndb_mgmd(MGM)] 1 node(s)

id=1  @192.168.4.100  (mysql-5.6.14 ndb-7.3.3)

[mysqld(API)]   2node(s)

id=10 @192.168.4.10  (mysql-5.6.14 ndb-7.3.3)

id=20 @192.168.4.20  (mysql-5.6.14 ndb-7.3.3)

 

6、sql结点授权客户端用户(两点节点都要)

mysql>grant all on *.* to [email protected]‘192.168.4.%‘ identified by ‘123‘;

7、MySQL集群的高可用性测试(验证集群)

**如果默认引擎未设为ndbcluster,则建表操作末尾需手工指定存储引擎**

**不能自动切换两个节点→mysql-mmm 解决**

1)数据同步(自动备份)测试

客户端登录 mysql节点.10 和.20 ( .10和.20的数据会同步)

# mysql -h192.168.4.10 -uroot -p123

mysql> create database ndb;

mysql> use ndb;

mysql> create table ndb01(idint);

mysql> insert into ndb01values(100);

mysql> select * from ndb01;

+------+

| id  |

+------+

| 100 |

| 100 |

从客户机访问20,确认结果(能看到从10上所建的库、表、表记录)

# mysql -h192.168.4.20 -uroot-p123

2)高可用性测试(单点故障)(关闭一台数据节点)

**只要还有一台数据节点可用,MYSQL数据库整体就仍然可用**

关闭数据节点.30上的ndbd进程:

# pkill -9 ndbd

# netstat -antup | grep ndbd  //确认

ndb_mgm> show   //此时从管理节点上查看集群状态,会发现ndbA已断开连接

id=30 (not connected, acceptingconnect from 192.168.4.30)

然后从客户机访问sqlA或sqlB,仍然可读、写数据库。

验证故障恢复过程

重新启动.30上的ndbd服务进程,稍待片刻后强制关闭.40上的ndbd服务进程。然后再次访问.30或.40节点,查询ndb01表的记录,发现与前面添加的结果一致:

以上测试成立说明:因故障中断的数据节点(.30)恢复后,会立即从正常的数据节点(.40)同步数据,确保数据一致性。


3)高可用性测试(关闭一台SQL节点)

这个比较好理解:当MySQL集群内有多个SQL节点时,只要有一台SQL节点可用,就可以通过它来访问MySQL数据库中保存的表数据。

比如说,关闭sqlA、sqlB中的任何一台以后,还可以通过另外一台来访问mydb库

完毕!

时间: 2024-10-28 22:13:00

构建MySQL集群的相关文章

Linux下构建MySQL集群

构建MySQL集群 一.目标 1.安装MySQL-Cluster相关软件包. 2.依次配置管理/数据/SQL节点. 3.启动并测试MySQL-Cluster集群架构. 二.方案 使用6台RHEL 6.5虚拟机,如图所示.其中sql1和sql2作为SQL节点,ndb1和ndb2作为数据节点,mgmsvr作为管理节点,这5个节点构成MySQL Cluster体系:而另一台虚拟机192.168.4.1作为测试客户机. 构成MySQL集群体系的5个节点应安装Cluster版的MySQL相关软件包:测试用

drbd+corosync+pacemaker构建高可用MySQL集群

一.drbd简介 drbd全称Distributed Replicated Block Device,为分布式复制块设备,基于软件实现的,不共享任何东西的,通过复制的方式构建镜像模式工作的磁盘,类似于raid1,但不同于raid的是,drbd实现了跨主机镜像块数据.drbd工作原理:由工作于内核层次的drbd,将要写入本地磁盘的数据镜像一份发往本地网卡,由本地网卡发往另一台drbd主机的本地磁盘存储.因此,drbd的两个主机的,磁盘存储一模一样,从而实现分布式复制块设备的实现.drbd进程对磁盘

Docker compose v3版本构建跨主机容器编排构建wordpress集群

在Docker 1.13版本之后,可以说Docker 对于compose容器调度编排实现了飞跃,可以使得在编排容器的时候可以结合Docker swarm集群和跨主机通讯的概念.在Docker swarm 的基础之上引入stack对service镜像管理和编排.下面我们实战一下用之前构建wordpress集群来测试一下: 环境要求: 1.存在了Docker swarm集群: [[email protected] ~]# docker node ls ID                      

MySQL集群(一)之主从复制

我们要学习的就是MySQL Replication 回到顶部(go to top) 一.配置mysql主从模式的原因 1)Mysql内建的复制功能是构建大型.高性能应用程序的基础.在实际企业应用环境当中,单台mysql数据库是不足以满足日后业务需求的. 譬如当服务器发生故障,而没有备份服务器来提供服务时,业务就必须得停止,这样会对企业带来巨大的损失.2)为了提高数据库服务器的稳定性,加快数据处理的效率,保护数据免受意外的损失,我们采用mysql的主从复制方式,分离对数据库的查询和更新操作,使用从

MySQL集群(二)之主主复制

前面介绍了主从复制,这一篇我将介绍的是主主复制,其实听名字就可以知道,主主复制其实就是两台服务器互为主节点与从节点.接下来我将详细的给大家介绍,怎么去配置主主复制! 一.主从复制中的问题 1.1.从节点占用了主节点的自增id 环境: 主节点:zyhserver1=1.0.0.3 从节点:udzyh1=1.0.0.5 第一步:我们在主节点中创建一个数据库db_love_1,在创建一个表tb_love(里面有id自增和name属性). create database db_love_1; use d

mysql 集群+主从同步

SQL节点: 给上层应用层提供sql访问. 管理节点(MGM):  管理整个集群. 启动,关闭集群. 通过ndb_mgmd命令启动集群 存储/数据节点: 保存cluster中的数据.  数据节点,可以提供副本.实现数据冗余. NDB引擎:是一种 "内存中"的存储引擎 , 它具有可用性高和数据一致性好的特点. 缺陷 基于内存,数据库的规模受集群总内存的大小限制 基于内存,断电后数据可能会有数据丢失,这点还需要通过测试验证. 多个节点通过网络实现通讯和数据同步.查询等操作,因此整体性受网络

项目进阶 之 集群环境搭建(三)多管理节点MySQL集群

上次的博文项目进阶 之 集群环境搭建(二)MySQL集群中,我们搭建了一个基础的MySQL集群,这篇博客咱们继续讲解MySQL集群的相关内容,同时针对上一篇遗留的问题提出一个解决方案. 1.单管理节点MySQL集群和多管理节点MySQL集群 上一篇的博客中,我们搭建的MySQL集群架构中,只存在一个管理节点,这样搭建的集群可以用如下所示的结构表示. 仔细分析上图就会发现,上图所示的单管理节点MySQL集群存在当唯一的管理节点由于网络.断电.压力过大等各种原因宕机后,数据节点和SQL节点将会各自为

mycat实现简单的mysql集群负载均衡

什么是mycat呢? 简单理解为一个MySQL中间件,它支持分流.基于心跳的自动故障切换,支持读写分离,支持mysql主从,基于Nio管理线程的高并发- 详见官网:http://www.mycat.io/ 为什么需要mysql集群? 一个庞大的分布式系统的性能瓶颈中,最脆弱的就是连接,一个是客户端与后端的连接,另一个是后端与数据库的连接,说白了就是发送端请求太多,接收端能够的接收和处理的请求并不多,在客户端与后端中可以利用类似nginx的负载均衡解决,而在后端与数据库中可以利用类似mycat的负

windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)

本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分布式架构:下面将先给出整个架构的核心节点简介,希望各位多多点赞: . 架构设计图展示 . nginx+iis构建服务集群 . redis存储分布式共享的session及共享session运作流程 . redis主从配置及Sentinel管理多个Redis集群 . 定时框架Task.MainForm提