搭建MySQL-Cluster集群架构

实验需求:部署MySQL集群,减少数据库单点故障。

实验方案:准备5台服务器,mgmd(192.168.100.1)作为管理节点,sqlA(192.168.100.2)和sqlB(192.168.100.3)作为SQL节点,ndbA(192.168.100.4)和ndbB(192.168.100.5)作为数据节点,这5个节点构成MySQL Cluster体系

实施过程:

一.公共配置

1.所有节点上安装MySQL集群软件

1.1所有节点卸载冲突包

官方提供的MySQL-Cluster相关软件包已集成数据库服务端/客户端程序,因此可直接用来替换普通的MySQL服务端/客户端程序。如果已安装有普通版的mysql-server、mysql、MySQL-server、MySQL-client包,请先将其卸载(若没有则忽略):

# service  mysql  stop

# chkconfig  mysql   off

# rpm -e  --nodeps  MySQL-server   MySQL-client MySQL-shared MySQL-embedded MySQL-test MySQL-devel

1.2清理残余配置文件

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

useradd    mysql

1.3 所有节点安装MySQL-Cluster相关软件包

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

MySQL-Cluster-shared-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-shared-compat-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-server-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-client-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-test-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-devel-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-embedded-gpl-7.3.3-1.el6.x86_64.rpm

rpm -Uvh MySQL-Cluster-*.rpm

2.在SQL节点(sqlA、sqlB)服务器上,修改MySQL数据库的root密码

3.SQL节点添加授权数据库用户,方便客户端访问

mysql>grant all on*.*to‘root‘@‘192.168.100.%‘identifiedby‘123456‘;

二.配置管理节点 mgmd (192.168.100.1)

1.创建工作文件夹

# mkdir -p /var/log/mysql-cluster

2.创建配置文件

[ndbd default]:为所有的数据节点指定默认配置。

[ndbd]:指定某一个数据节点的配置。

[ndb_mgmd default]:为所有的管理节点指定默认配置。

[ndb_mgmd]:指定某一个管理节点的配置。

[mysqld default]:为所有的SQL节点指定默认配置。

[mysqld]:指定某一个SQL节点的配置。

# vim /etc/config.ini

[ndbd default]

NoOfReplicas=2//保留2份数据拷贝

DataMemory=80M                                 //数据缓存大小

IndexMemory=18M                             //索引缓存大小

[ndb_mgmd]

nodeid=1//第1个管理节点的ID号

hostname=192.168.100.1//此管理节点的地址

datadir=/var/log/mysql-cluster             //此管理节点的工作目录

[mysqld]

nodeid=2//第1个SQL节点的ID号

hostname=192.168.100.2                    //第1个SQL节点的地址

[mysqld]

nodeid=3//第2个SQL节点的ID号

hostname=192.168.100.3                  //第2个SQL节点的地址

[ndbd]

nodeid=4//第1个数据节点的ID号

hostname=192.168.100.4               //第1个数据节点的地址

datadir=/mysql-cluster/data           //第1个数据节点的工作目录,需创建

[ndbd]

nodeid=5//第2个数据节点的ID号

hostname=192.168.100.5//第2个数据节点的地址

datadir=/mysql-cluster/data         //第2个数据节点的工作目录,需创建

三.配置数据节点 ndbA(192.168.100.4) 、ndbB (192.168.100.5)

1.创建工作文件夹

# mkdir -p /mysql-cluster/data

2.创建配置文件

# vim /etc/my.cnf

[mysqld]

datadir=/mysql-cluster/data                //指定数据存储目录

ndb-connectstring=192.168.100.1             //要连接的管理服务器的IP地址

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

[mysql_cluster]                              //集群连接配置段

ndb-connectstring=192.168.100.1

四.配置SQL节点sqlA(192.168.100.2) 、sqlB (192.168.100.3)

在MySQL-Cluster集群环境中,若某个数据库未采用ndbcluster引擎(而是InnoDB、MyISAM等其他引擎),则当更新数据库表时,可能无法同步到其他节点。

# vim /etc/my.cnf

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

default-storage-engine=ndbcluster             //设置默认存储引擎

[mysql_cluster]                                //集群连接配置段

ndb-connectstring=192.168.100.1

五.启动MySQL集群

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

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

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

1.启动管理节点mgmd

# ndb_mgmd -f /etc/config.ini         //启动管理节点,-f指定集群配置文件

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

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

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

若希望每次开机后自动运行ndb_mgmd,可将上述启动操作写入到/etc/rc.local配置文件内,例如:

# vim /etc/rc.local

....

ndb_mgmd -f /etc/config.ini

启动完成后可查看监听状态:

# netstat -tuanlp | grep ndb

确认自动保存的集群配置数据:

# ls -lh /usr/mysql-cluster/ndb_1_config.bin.1

-rw-r--r--.1 root root 4.1K 12月 2417:52/usr/mysql-cluster/ndb_1_config.bin.1

查看日志文件相关数据:

# ls /var/log/mysql-cluster/

ndb_1_cluster.log ndb_1_out.log ndb_1.pid

2.启动数据节点ndbA、ndbB

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

# ndbd --initial         //启动数据节点

在ndbA和ndbB服务器上,修改/etc/rc.local配置文件,以便每次开机后能自动启动数据节点服务:

# vim /etc/rc.local

....

ndbd

3.启动SQL节点sqlA、sqlB

对于MySQL Cluster的SQL节点来说,对应的服务程序就是mysqld,正常通过mysql脚本重新启动服务就可以了。

# service mysql restart

# chkconfig mysql on

4.在管理节点mgmd上查看群集状态

直接执行ndb_mgm可进入群集管理环境:

# ndb_mgm

ndb_mgm>

进入ndb_mgm> 环境后,执行SHOW可查看当前各节点的状态,确保本例中的5个节点都已经成功连接;

ndb_mgm> SHOW

六.MySQL集群的高可用性测试

1.数据同步测试

从客户机访问sqlA,执行写数据库、表相关操作:

# mysql -u root -p -h 192.168.100.2

mysql> create database mycluster;

mysql> create table mycluster.a(id int(3));

mysql> insert into mycluster.a values(123),(456);       //插入测试记录

然后从客户机访问sqlB,确认结果(能看到从sqlA上所建的库、表、表记录):

# mysql -u root -p -h 192.168.100.3

mysql> select * from mycluster.a;        //查看表记录也一致

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

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

# killall -9 ndbd                     //暴力结束ndbd进程

# netstat -tulanp | grep ndbd             //确认已结束

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

ndb_mgm> show

然后从客户机访问sqlA或sqlB,仍然可读、写数据库。比如可向mycluster.a表中再添加一条记录:

mysql> insert into mycluster.a values(789);       //添加一条表记录

以上测试成立说明:只要还有一台数据节点可用,MYSQL数据库整体就仍然可用。

接下来可进一步验证故障恢复过程 —— 重新启动ndbA上的ndbd服务进程,稍待片刻后强制关闭ndbB上的ndbd服务进程。然后再次访问sqlA或sqlB节点,查询mycluster.a表的记录,发现与前面添加的结果一致:

mysql> select * from mycluster.a;                      //确认结果

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

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

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

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

搭建MySQL-Cluster集群架构

时间: 2024-09-29 00:59:43

搭建MySQL-Cluster集群架构的相关文章

MySQL集群---②Windows平台搭建MySQL CLUSTER集群

本文将通过两台电脑来简单介绍一下Windows平台如何搭建MySQL集群. MySQL集群支持多台电脑,本文搭建的MySQL集群以两台机子为例,其中一台(IP为192.168.24.33)部署管理节点.数据节点和SQL节点,另一台(IP为192.168.24.82)部署数据节点和SQL节点. 实际应用中,不要将管理节点跟数据节点部署到一台机子上,因为如果数据节点宕机会导致管理节点不可用,同时整个MySQL群集也就都不可用了.所以一个MySQL群集理想情况下至少有三台服务器,将管理节点单独放到一台

centos7搭建ELK Cluster集群日志分析平台(三)

续  centos7搭建ELK Cluster集群日志分析平台(一) 续  centos7搭建ELK Cluster集群日志分析平台(二) 已经安装好elasticsearch 5.4集群和logstash 5.4 安装kibana步骤 1.下载安装Kibana  ~]#wget https://artifacts.elastic.co/downloads/kibana/kibana-5.4.0-x86_64.rpm 如果链接失效,官网下载:https://www.elastic.co/down

centos7搭建ELK Cluster集群日志分析平台(二)

续  centos7搭建ELK Cluster集群日志分析平台(一) 已经安装完Elasticsearch 5.4 集群. 安装Logstash步骤 1. 安装Java 8 官方说明:需要安装Java 8 ,不支持Java 9... //自行安装,略过 2. 安装Logstash 可以同elasticsearch一样建立repo文件通过yum安装,也可以去官网直接下载rpm包进行本地安装:   ~]# rpm -ivh logstash-5.4.0.rpm  //这里直接下载好进行本地安装 3.

Mysql Cluster集群配置详解

一. MySQL集群简介 MySQL群集技术在分布式系统中为MySQL数据提供了冗余特性,增强了安全性,使得单个MySQL服务器故障不会对系统产生巨大的负面效应,系统的稳定性得到保障.MySQL群集需要有一组计算机,每台计算机的角色可能是不一样的.MySQL群集中有三种节点:管理节点.数据节点和SQL节点.群集中的某计算机可能是某一种节点,也可能是两种或三种节点的集合.这三种节点只是在逻辑上的划分,所以它们不一定和物理计算机是一一对应的关系. 管理节点(也可以称管理服务器)主要负责管理数据节点和

基于MMM搭建MySQL Replication集群高可用架构

MMM介绍 MMM是Multi-Master Replication Manager for MySQL的缩写,它是MySQL提供的一个多主复制管理器,其核心是使用perl语言编写的一组脚本.实际上MMM是比较早期甚至有点老的一种用于构建高可用MySQL架构的方式,但因其还有一定的应用场景,所以本文将会演示一下如何搭建一个MMM架构. MMM 由两个组件组成: monitor:监控集群内数据库的状态,在出现异常时发布切换命令,一般和数据库分开部署 agent:运行在每个 MySQL 服务器上的代

centos7 mysql cluster集群搭建基于docker

1.准备 mn:集群管理服务器用于管理集群的其他节点.我们可以从管理节点创建和配置集群上的新节点.重新启动.删除或备份节点. db2/db3:这是节点间同步和数据复制的过程发生的层. db4/db5:应用程序使用的接口服务器连接到数据库集群. [[email protected] ~]# docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

Step By Step 搭建 MySql MHA 集群

关于MHA ?? MHA(Master High Availability)是一款开源的mysql高可用程序,目前在mysql高可用方面是一个相对成熟的解决方案.MHA 搭建的前提是MySQL集群中已经搭建了MySql Replication环境,有了Master/Slave节点.MHA的主要作用就是监测到Master节点故障时会提升主从复制环境中拥有最新数据的Slave节点成为新的master节点.同时,在切换master期间,MHA会通过从其他的Slave节点来获取额外的信息来避免一致性的问

社交网站部署——Nginx服务器+PHP服务器搭建+MySQL主从集群

案例概述 某公司的社交网站采用PHP语言开发,为了管理PHP程序员开发的代码,上级领导要求搭建SVN服务器进行版本控制.社交网站的第一个版本部署在LNMP平台之上,前端为Nginx服务器,通过fastcgi协议访问后端的PHP服务器.为了保证数据安全,要求搭建MySQL数据库主从集群. 社交网站项目包含用户的相册功能,允许用户上传照片,上传照片需要使用共享存储来存放.针对共享存储可用的开源方案有很多,如MFS.FastDFS 等.公司决定使用MFS分布式文件系统来实现,并将MFS挂载在PHP服务

使用MySQL-Cluster搭建MySQL数据库集群

1.MySQL集群的作用: - 解决访问节点的单点故障 - 数据存储节点的单点故障 - 解决数据存储节点数据备份问题 2.集群: 使用一组服务器提供相同的服务 3.关于MySQL-Cluster: MySQL官方提供的集群版本 已集成标准版MySQL程序,可独立安装使用 采用NDB(Network DataBase)引擎 假定每个节点都有独立内存.硬盘 利用廉价硬件减少整个数据库的单点故障 4.集群中服务器的角色 - 数据节点:ndbd(单线程) ndb_mtd(多线程)   存储数据的(表里的

实战Mariadb galera Cluster集群架构

Mariadb galera Cluster安装:操作系统:Centos7.4版本集群数量:3个节点主机信息: 192.168.153.142 node1 selinux=disabled firewalld关闭192.168.153.143 node2 selinux=disabled firewalld关闭192.168.153.144 node3 selinux=disabled firewalld关闭搭建步骤1.主机之间互相解析:三台节点都要执行vim /etc/hosts192.168