千家信息网

MySQL集群搭建实现高可用

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,MySQL集群搭建实现高可用MySQL集群概述和安装环境MySQL Cluster是MySQL适合于分布式计算环境的高实用、高冗余版本。Cluster的汉语是"集群"的意思。它采用了NDB Clust
千家信息网最后更新 2026年11月01日MySQL集群搭建实现高可用

MySQL集群搭建实现高可用


MySQL集群概述和安装环境

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

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

mysql 集群架构

















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

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

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


在我们做的实验中mysql cluster集群各机器角色如下分配:

mysql 管理结点:xuegod63.cn IP:192.168.1.63 (安装server、client)

mysql 数据结点:xuegod64.cn IP:192.168.1.64 (安装server、client)

mysql 数据结点:xuegod65.cn IP:192.168.1.65 (安装server、client)

msyql SQL结点:xuegod66.cn IP:192.168.1.66 (安装server、client)

msyql SQL结点:xuegod67.cn IP:192.168.1.67 (安装server、client)


Mysql cluster的下载地址:https://dev.mysql.com/downloads/cluster/


环境清理以及安装

这一部分虽然是初始过程但是比较复杂,请大家耐心配置。

所有主机上执行下面内容:

首先我们要清除旧版本,然后安装mysql cluster,最后是文件权限管理。

1.mysql旧版本清除

首先使用如下命令来清理之前操作系统自带的mysql安装:

yum -y remove mysql

yum -y remove maridb*(centos7)

然后使用如下命令:

rpm -qa | grep mysql

rpm -qa | grep maridb

对于找到的2个剩余mysql包,请按照如下的命令格式予以删除:

rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64

最后删掉下列文件:

rm -rf /var/lib/mysql/*

rm -rf /etc/my.cnf

rm -rf /etc/init.d/mysqld

vim /etc/profile 删除与mysql相关内容

2. mysql cluster 7.5版本安装

2.1上传并安装最新的EPEL源 和 mysql社区版源安装包

[root@xuegod63 ~]# rpm -ihv epel-release-7-10.noarch.rpm

[root@xuegod63 ~]# rpm -ihv mysql57-community-release-el7-11.noarch.rpm


2.2开启mysql cluster 源

[root@xuegod63 ~]# sed -i "55s/0/1/g" /etc/yum.repos.d/mysql-community.repo


2.3刷新yum源缓存

[root@xuegod63 ~]# yum clean all && yum list


2.4安装解决Cluster的依赖包

[root@xuegod63 ~]# yum install -y perl perl-Class-MethodMaker perl-DBI libaio numactl


2.5安装Mysql Cluster

[root@xuegod63 ~]# yum install -y mysql-cluster-community-server


2.6查看安装路径

[root@xuegod63 ~]# rpm -ql mysql-cluster-community-server

其他4台主机上重复2.1-2.5的步骤


3.数据节点主机都要安装数据节点的相关包(2台)

[root@xuegod64 ~]# yum install -y mysql-cluster-community-data-node

[root@xuegod65 ~]# yum install -y mysql-cluster-community-data-node

4. 管理节点安装management管理包

[root@xuegod63~]# yum -y install mysql-cluster-community-management-server


5.创建文件夹

管理节点创建配置目录:

[root@xuegod63~]# mkdir -p /usr/mysql-cluster/


搭建mysql集群

1.1 各个机器上的配置


我们先将需求配置到各台机器上

1.xuegod63创建管理节点上配置文件


[root@xuegod63 ~]vim /usr/mysql-cluster/config.ini #写入以下内容

[ndbd default]

NoOfReplicas=2 #数据写入数量。2表示两份

DataMemory=200M #配置数据存储可使用的内存

IndexMemory=100M #索引给100M

[ndb_mgmd]

nodeid=1

datadir=/var/lib/mysql #管理结点的日志

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

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

[ndbd]

HostName=192.168.1.64

DataDir=/var/lib/mysql #mysql数据存储路径

nodeid=2

[ndbd]

HostName=192.168.1.65

DataDir=/var/lib/mysql #mysql数据存储路径

nodeid=3

# SQL node options: #关于SQL结点

[mysqld]

HostName=192.168.1.66

nodeid=4

[mysqld]

HostName=192.168.1.67

nodeid=5

在这个文件里,分别给五个节点分配了ID,这有利于更好的管理和区分各个节点。当然,要是不指定,MySQL也会动态分配一个

2.xuegod64、xuegod65数据节点

[root@xuegod64 /]# vim /etc/my.cnf #请配置xuegod65一样

[root@xuegod65 /]# vim /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql #mysql数据存储路径

ndbcluster #启>动ndb引擎

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

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

[mysql_cluster]

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


3. SQL节点配置文档:

[root@xuegod66~]#vim /etc/my.cnf #请配置xuegod67一样

[root@xuegod67~]#vim /etc/my.cnf

[mysqld]

ndbcluster #启动ndb引擎

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

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

[mysql_cluster]

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

说明:数据节点和SQL结点配置文件区别 ,就多一行

数据结点有:datadir=/var/lib/mysql #mysql数据存储路径。

而SQL节点上没有。

1.2 MySQL Cluster启动

初次启动命令以及用户密码更改调整:(请严格按照次序启动)

先启动:管理结点服务->数据结点服务->sql结点服务

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

执行初次启动前请先确认 将两台机器的防火墙关闭(service iptables stop 或者 设定 防火墙端口可通,两个端口即通讯端口1186、数据端口3306 )





  1. xuegod63上启动管理结点命令

[root@xuegod67 ~]#ndb_mgmd --ndb_nodeid=1 --initial -f /usr/mysql-cluster/config.ini

#尽量不要把 管理结点、 数据结点、存储结点 配置在同一台机子上,否则一个挂了,就全挂了。


查看端口号:

[root@xuegod63~]# netstat -antup | grep 1186

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

tcp 0 0 127.0.0.1:1186 127.0.0.1:60324 ESTABLISHED 7057/ndb_mgmd

tcp 0 0 127.0.0.1:60324 127.0.0.1:1186 ESTABLISHED 7057/ndb_mgmd


2. xuegod64和xuegod65启动数据节点服务

[root@xuegod68 ~]# ndbd --initial

[ndbd] INFO -- Angel connected to '10.10.10.67: 1186'

[ndbd] INFO -- Angel allocated nodeid: 2

[root@xuegod69 ~]# ndbd --initial

[ndbd] INFO -- Angel connected to '10.10.10.67: 1186'

[ndbd] INFO -- Angel allocated nodeid: 3


3. xuegod66、xuegod67启动SQL结点服务

[root@xuegod66~]#systemctl start mysqld

[root@xuegod66 ~]#systemctl start mysqld


4. 查看mysql 集群状态:

[root@xuegod67 ~]#ndb_mgm

ndb_mgm> show

Cluster Configuration

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

[ndbd(NDB)] 2 node(s)

id=2 @192.168.1.64 (mysql-5.7.22 ndb-7.5.10, Nodegroup: 0, *)

id=3 @192.168.1.65 (mysql-5.7.22 ndb-7.5.10, Nodegroup: 0)


[ndb_mgmd(MGM)] 1 node(s)

id=1 @192.168.1.63 (mysql-5.7.22 ndb-7.5.10)


[mysqld(API)] 2 node(s)

id=4 @192.168.1.66 (mysql-5.7.22 ndb-7.5.10)

id=5 @192.168.1.67 (mysql-5.7.22 ndb-7.5.10)


5. 数据同步实验测试

我们就需要在此之前改一下两台机器mysql的密码。

查看mysql root用户密码 注意:我们只需修改sql节点的密码

[root@xuegod66 ~]# grep password /var/log/mysqld.log

2018-07-02T16:01:46.008448Z 1 [Note] A temporary password is generated for root@localhost: lCUouyg(k2?F


在my.cnf文件中mysqld下面添加 validate-password=off

重启mysql

[root@xuegod66 ~]# systemctl restart mysqld

[root@xuegod66 ~]# mysql -u root -p'lCUouyg(k2?F'

mysql: [Warning] Using a password on the command line interface can be insecure.

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 6

Server version: 5.7.22-ndb-7.5.10-cluster-gpl


Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> set password for 'root'@'localhost'=password('123456');

mysql> grant all privileges on *.* to cluster@"%"identified by "123456"; #授权

mysql> flush privileges;

另一台sql节点也是一样操作


6. 模拟外部机器的一个客户端插入数据:

mysql -ucluster -p123456 -h 192.168.1.66

注意:创建表的时候使用ndb引擎

mysql> create database db;

mysql> use db;

mysql> create table test(id int) engine=ndb;

mysql> insert into test values(1000);

mysql> select * from test;


登陆另一台sql节点查看

mysql -ucluster -p123456 -h 192.168.1.67

mysql> use db;

mysql> select * from test;


停掉一个sql节点测试

[root@xuegod66 ~]# mysqladmin -uroot -p123456 shutdown

ndb_mgm> show 查看状态

Connected to Management Server at: localhost:1186

Cluster Configuration

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

[ndbd(NDB)] 2 node(s)

id=2 @192.168.1.64 (mysql-5.7.22 ndb-7.5.10, Nodegroup: 0, *)

id=3 @192.168.1.65 (mysql-5.7.22 ndb-7.5.10, Nodegroup: 0)


[ndb_mgmd(MGM)] 1 node(s)

id=1 @192.168.1.63 (mysql-5.7.22 ndb-7.5.10)


[mysqld(API)] 2 node(s)

id=4 (not connected, accepting connect from 192.168.1.66)

id=5 @192.168.1.67 (mysql-5.7.22 ndb-7.5.10) #发现少了一个sql 节点


7. 关闭服务

关闭mysql集群顺序: 关闭管理节点服务-》 关闭管理节点时,数据结点服务自动关闭 -》 需要手动关闭SQL结点服务


关闭mysql的管理节点

[root@xuegod63 /] # ndb_mgm

-- NDB Cluster -- Management Client -

ndb_mgm> shutdown

Node 2: Cluster shutdown initiated

Node 3: Cluster shutdown initiated

Node 2: Node shutdown completed.

Node 3: Node shutdown completed.

3 NDB Cluster node(s) have shutdown.

Disconnecting to allow management server to shutdown.


ndb_mgm> exit

ps -axu | grep ndbd #查看不到,说明数据节点已经被关


手动关闭SQL节点服务···

Xuegod66和xuegod67上,手动关闭SQL节点服务

[root@xuegod66 ~]# mysqladmin -uroot -p123456 shutdown

[root@xuegod67 ~]# mysqladmin -uroot -p123456 shutdown


或者:方法二 kill掉

[root@xuegod66 ~]# ps -axu | grep mysql

[root@xuegod66 ~]# kill -9 7617

[root@xuegod66 ~]# kill -9 7743

[root@xuegod66~]# ps -axu | grep mysql #xuegod67同样kill掉

8. 总结

再次启动,mysql集群启动:

[root@xuegod63 /]# ndb_mgmd --ndb_nodeid=1 --initial -f /usr/mysql-cluster/config.ini

[root@xuegod64/]#ndbd

[root@xuegod65 /]#ndbd

[root@xuegod66 /]# systemctl restart mysqld

[root@xuegod67 /]# systemctl restart mysqld



查看mysql 集群状态:

[root@xuegod63 ~]# ndb_mgm

-- NDB Cluster -- Management Client --

ndb_mgm> show

Cluster Configuration

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

[ndbd(NDB)] 2 node(s)

id=2 @10.10.10.68 (mysql-5.7.20 ndb-7.5.8, Nodegroup: 0, *)

id=3 @10.10.10.69 (mysql-5.7.20 ndb-7.5.8, Nodegroup: 0)


[ndb_mgmd(MGM)] 1 node(s)

id=1 @10.10.10.67 (mysql-5.7.20 ndb-7.5.8)


[mysqld(API)] 2 node(s)

id=4 @10.10.10.70 (mysql-5.7.20 ndb-7.5.8)

id=5 @10.10.10.71 (mysql-5.7.20 ndb-7.5.8)

节点 数据 结点 管理 服务 集群 配置 存储 文件 命令 地址 机器 路径 密码 引擎 手动 版本 端口 内存 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 华服互联网科技靠谱吗 互联网科技财经 互联网是不是新科技 网络科技有限互联网 互联网科技开发公司 九亚互联网科技 佰商互联网科技有限公司 博兴的互联网电子科技公司 互联网科技公司需要的职位 青岛科技大学互联网大赛研究生 互联网科技人工智能实验室 朱啸虎曾投资哪些互联网科技企业 互联网科技如何创业 国大互联网教育科技有限公司薪资 互联网第三次科技革命特征 城市宝互联网科技有限公司 互联网科技股为什么大涨 风投北京互联网科技 扫呗互联网科技有限公司 互联网科技创新方面的资料 新华互联网科技学院 智能科技公司是互联网公司吗 互联网科技公司发展 互联网 新科技 互联网科技股有哪些 深圳育鹏互联网科技有限公司招聘 西安小鹰速贷互联网科技有限公司 恒生互联网科技业指数调整周期 陕西九四连强互联网科技有限公司 每日互联网科技新闻
0