Mysql分布式集群部署---MySQL集群Cluster将数据分成多个片段,每个片段存储在不同的服务器上

1.1 目的

部署MysqlCluster集群环境

1.2 MySQL集群Cluster原理

1 数据分片

MySQL集群Cluster将数据分成多个片段,每个片段存储在不同的服务器上。这样可以将数据负载分散到多个服务器上,提高系统的性能和可扩展性。

2. 数据同步

MySQL集群Cluster使用多个服务器来存储数据,因此需要确保数据在不同的服务器之间同步。MySQL集群Cluster使用多种同步机制,如异步复制、半同步复制和全同步复制等,来确保数据的一致性和可靠性。

3. 负载均衡

MySQL集群Cluster使用负载均衡算法来分配客户端请求到不同的服务器上。这样可以避免单个服务器过载,提高系统的性能和可用性。

4. 自动故障转移

MySQL集群Cluster可以自动检测服务器的故障,并将故障服务器上的数据转移到其他服务器上。这样可以确保系统的高可用性和可靠性。

1.3 NDB引擎介绍

在MySQL实现集群Cluster架构中,存储节点使用的存储引擎为NDB引擎。NDB引擎是一种分布式的基于内存的引擎,因此作为MySQL集群Cluster架构中的存储节点,内存一定要足够大。
使用NDB引擎有以下优点:

1、基于内存存储,没有磁盘I/O瓶颈,速度快。
2、扩展性好,增加节点即可实现数据库集群Cluster的扩展。
3、冗余性好,单个节点故障,集群还可以提供服务。
同时,NDB引擎也有以下缺点:

1、由于存储基于内存,因此在设备断电后数据即丢失。
2、存储空间大小受内存大小限制。
3、多个节点分布式架构整体速度受会网络速度影响

1.4 InnoDB存储引擎

InnoDB是一种支持事务和行级锁的崇尚ACID特性的储存引擎。它是MySQL5.5版本后的默认引擎。InnoDB非常适合那些需要频繁进行更新操作的应用,比如在线事务处理系统(OLTP)。
使用InnoDB引擎有以下优点:

1、支持事务:InnoDB储存引擎具有事务处理的能力,能够保证数据的完整性和一致性。
2、行级锁:InnoDB通过行级锁来控制并发读写操作,提高了多用户环境下的并发性能。
3、外键约束:InnoDB支持外键约束,保证数据的完整性。
4、适合OLTP:InnoDB引擎特别适合处理大量的并发读写操作,如OLTP系统。
5、Crash Recovery:InnoDB具备崩溃恢复的功能,能够在异常退出后将数据恢复到一致的状态。
同时,InnoDB引擎也有以下缺点:

1、 读写效率较差。
2、 占用的数据空间相对较大。

1.5 MyISAM存储引擎

MyISAM是MySQL早期的默认储存引擎,它采用表级锁,适合处理大量的读操作。然而,它不支持事务和外键约束。
使用MyISAM引擎有以下优点:

1、表级锁:MyISAM采用表级锁,对于大量更新操作的并发性能较差。
2、不支持事务:MyISAM不支持事务处理,因此可能存在数据不一致的风险。
3、全文索引:MyISAM支持全文索引,适合处理搜索引擎和全文搜索等应用。
4、插入性能:MyISAM在插入性能方面较好,对于大量的插入操作,性能较高。

同时,MyISAM引擎也有以下缺点:

1、不支持事务的完整性和并发性。

1.6 引擎对比选择

InnoDB适用于大量的并发读写操作、需要事务处理和外键约束的应用;MyISAM适用于大量的读操作、不需要事务处理和外键约束的应用;NDB适用于高并发、实时性要求高的应用。

2. 部署程序

2.1 部署环境

服务器作用 服务器名 服务器IP 系统版本
管理节点 master 192.168.186.128 Centos7
数据节点 slave1 192.168.186.129 Centos7
SQL节点 slave2 192.168.186.130 Centos7
SQL节点 slave3 192.168.186.130 Centos7

2.2.1 修改四台主机名和添加hosts

#关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
#关闭selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
#时间同步
yum install ntpdate -y
ntpdate time.windows.com
hostnamectl set-hostname master && bash   #192.168.186.128上操作
hostnamectl set-hostname slave1 && bash   #192.168.186.129上操作
hostnamectl set-hostname slave2 && bash   #192.168.186.130上操作
hostnamectl set-hostname slave3 && bash   #192.168.186.131上操作
#四台服务器同时添加内容
cat >> /etc/hosts << EOF
192.168.186.128 master
192.168.186.129 slave1
192.168.186.130 slave2
192.168.186.131 slave3
EOF
#所有机器上都操作
ssh-keygen -t rsa #一路回车,不输入密码
###把本地的ssh公钥文件安装到远程主机对应的账户
for i in master slave1 slave2  slave3;do ssh-copy-id -i .ssh/id_rsa.pub $i ;done

2.3 管理节点部署

2.3.1 管理节点原理

顾名思义,管理节点用来对其它节点进行管理。实际操作中,是通过对一个叫做config.ini的配置文件进行维护而起到管理的作用。该文件可以用来配置有多少需要维护的副本、需要在每个数据节点上为数据和索引分配多少内存、数据节点的位置、在每个数据节点上保存数据的磁盘位置、SQL节点的位置等信息。管理节点只能有一个,配置要求不高。

#关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
#关闭selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
#时间同步
yum install ntpdate -y
ntpdate time.windows.com
mkdir -p /var/log/mysql-cluster
mkdir -p /etc/mysql-cluster
mkdir -p /usr/local/mysql && cd /usr/local/mysql #上传安装包到此路径下
wget https://downloads.mysql.com/archives/get/p/14/file/mysql-cluster-8.0.25-linux-glibc2.12-x86_64.tar.gz --no-check-certificate
tar -zxvf mysql-cluster-8.0.25-linux-glibc2.12-x86_64.tar.gz #解压
mv mysql-cluster-8.0.25-linux-glibc2.12-x86_64 mysql-cluster #重命名
touch /etc/mysql-cluster/config.inicat > /etc/mysql-cluster/config.ini << EOF
[ndbd default]
#数据写入数量。1表示一份,1个数据节点
NoOfReplicas=1[ndb_mgmd]
nodeid=1
#管理结点的日志
datadir=/var/log/mysql-cluster
#管理结点的IP地址。本机IP
HostName=192.168.186.128###### data node options:           #存储结点
[ndbd]
HostName=192.168.186.129
DataDir=/data/mysql
#mysql数据存储路径
nodeid=2# SQL node options:                 #关于SQL结点
[mysqld]
HostName=192.168.186.130
nodeid=3[mysqld]
HostName=192.168.186.131
nodeid=4
EOF
#初始化管理节点
/usr/local/mysql/mysql-cluster/bin/ndb_mgmd -f /etc/mysql-cluster/config.ini
#查看集群状态
/usr/local/mysql/mysql-cluster/bin/ndb_mgm
ndb_mgm> show
#发现管理节点已经启动,当数据节点以及SQL节点未启动时显示的是not connected。

在这里插入图片描述

2.4 数据节点部署

2.4.1 数据节点原理

用来存放Cluster里面的数据,可以有多个数据节点。每个数据节点可以有多个镜像节点。任何一个数据节点发生故障,只要它的镜像节点正常,Cluster就可以正常运行。
这3种逻辑上不同的节点物理上可以存放在不同的服务器上,也可以在同一台 服务器上。通过架构中各个节点的介绍,可以总结一下MySQL Cluter的访问过程:前台应用利用一定的负载均衡算法将对数据库的访问分散到不同的SQL节点上,然后SQL节点对数据节点进行数据访问并从数据节点返回结果,最后SQL节点将收到的结果返给前台应用。而管理节点并不参与访问过长,它只用来对SQL节点和数据节点进行配置管理。

#关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
#关闭selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
#时间同步
yum install ntpdate -y
ntpdate time.windows.com
mkdir -p /usr/local/mysql && cd /usr/local/mysql
wget https://downloads.mysql.com/archives/get/p/14/file/mysql-cluster-8.0.25-linux-glibc2.12-x86_64.tar.gz --no-check-certificate
tar -zxvf mysql-cluster-8.0.25-linux-glibc2.12-x86_64.tar.gz #解压
mv mysql-cluster-8.0.25-linux-glibc2.12-x86_64 mysql-cluster #重命名
useradd -M -s /sbin/nologin mysql
mkdir -p /etc/mysql
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql/
cat > /etc/my.cnf << EOF[mysqld]
#mysql数据存储路径
datadir=/data/mysql
#启动ndb引擎       
ndbcluster
#管理节点IP地址
ndb-connectstring=192.168.186.128[mysql_cluster]
#管理节点IP地址
ndb-connectstring=192.168.186.128
EOF
#启动数据节点
/usr/local/mysql/mysql-cluster/bin/ndbd –initial

在这里插入图片描述

#检查数据节点是否启动
/usr/local/mysql/mysql-cluster/bin/ndb_mgm
ndb_mgm> show

在这里插入图片描述

2.5 SQL节点部署(2台 SQL服务器同样的部署方式)

SQL节点可以理解为应用和数据节点之间的一个桥梁。应用不能直接访问数据节点,只能先访问SQL节点,然后SQL节点再去访问数据节点来返回数据。Cluster中可以有多个SQL节点,通过每个SQL节点查询到的数据都是一直的,通常来说,SQL节点越多,分配到每个SQL节点的负载就越少,系统的整体性能就越好。

#关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
#关闭selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
#时间同步
yum install ntpdate -y
ntpdate time.windows.com
mkdir -p /usr/local/mysql
mkdir -p /etc/mysql
mkdir -p /data/mysql && cd /usr/local/mysql
wget https://downloads.mysql.com/archives/get/p/14/file/mysql-cluster-8.0.25-linux-glibc2.12-x86_64.tar.gz --no-check-certificate
tar -zxvf mysql-cluster-8.0.25-linux-glibc2.12-x86_64.tar.gz #解压
mv mysql-cluster-8.0.25-linux-glibc2.12-x86_64 mysql-cluster #重命名chown -R mysql:mysql /data/mysql/
useradd -M -s /sbin/nologin mysql
#创建SQL节点配置文件
cat > /etc/my.cnf << EOF[mysqld]
user=mysql
#启动ndb引擎
ndbcluster
#管理节点IP地址
ndb-connectstring=192.168.186.128[mysql_cluster]
#管理节点IP地址
ndb-connectstring=192.168.186.128
EOF
#配置mysql服务
cp /usr/local/mysql/mysql-cluster/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
#编辑mysqld服务
vim /etc/init.d/mysqld

在这里插入图片描述

#图片中的代码如下:
# Set some defaults
mysqld_pid_file_path=
if test -z "$basedir"
thenbasedir=/usr/local/mysql/mysql-clusterbindir=/usr/local/mysql/mysql-cluster/binif test -z "$datadir"thendatadir=/data/mysqlfisbindir=/usr/local/mysql/mysql-cluster/binlibexecdir=/usr/local/mysql/mysql-cluster/bin
elsebindir="$basedir/bin"if test -z "$datadir"thendatadir="$basedir/data"fisbindir="$basedir/sbin"libexecdir="$basedir/libexec"
fi
#初始化mysql数据库
cd /usr/local/mysql/mysql-cluster/bin
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/mysql-cluster --datadir=/data/mysql/

在这里插入图片描述

#启动mysql
systemctl daemon-reload
systemctl start mysqld
systemctl enable  mysqld#两台SQL节点操作相同。
#检查SQL节点是否启动
/usr/local/mysql/mysql-cluster/bin/ndb_mgm
ndb_mgm> show

#2台 SQL服务器同样的部署后,截图如下:
在这里插入图片描述

cp /usr/local/mysql/mysql-cluster/support-files/mysql.server /etc/init.d/mysqld
ln -s /usr/local/tools/mysql/bin/mysql /usr/bin
#登录数据库
mysql -uroot -p  #初始化时候的密码
alter user user() identified by "Mysql@123";   #修改为新的密码
flush privileges;

3. 验证集群

#192.168.5.130上执行
mysql -uroot -pMysql@123   #利用修改后的密码登录
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| ndbinfo            |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.11 sec)mysql> create database mqq;
Query OK, 1 row affected (0.17 sec)mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mqq                |
| mysql              |
| ndbinfo            |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)mysql> 

192.168.5.131上验证

mysql -uroot -pMysql@123  #利用修改后的密码登录
mysql> show databases;

在这里插入图片描述
可以看到数据完成同步。
至此MysqlCluster集群部署完成

4. 集群命令操作

4.1 管理节点操作

管理节点关闭(关闭管理节点后会一起关闭数据节点)

/usr/local/mysql/mysql-cluster/bin/ndb_mgm -e shutdownrm /usr/local/mysql/mysql-cluster/ndb_1_config.bin.1 #如果集群配置有更新了

4.2 数据节点操作

数据节点(NDB)关闭

cd /usr/local/mysql/mysql-cluster/bin
./ndbd stop

4.3 SQL节点操作

SQL节点关闭

systemctl stop mysqld

参考地址:https://blog.csdn.net/hanyuce/article/details/134684116?app_version=6.2.2&code=app_1562916241&csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22134684116%22%2C%22source%22%3A%22qq_14910065%22%7D&uLinkId=usr1mkqgl919blen&utm_source=app

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/198101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++--运算符重载

1.重载的运算符 (1).重载运算符函数的参数数量与该运算符作用的运算对象数量一样多。 (2).除了重载的函数调用运算符operator()之外&#xff0c;其他重载运算符不能含有默认实参。 (3).对一个重载的运算符&#xff0c;其优先级和结合律与对应的内置运算符保持一致。 (4).当一个…

2022年全国大学生数据分析大赛医药电商销售数据分析求解全过程论文及程序

2022年全国大学生数据分析大赛 医药电商销售数据分析 原题再现&#xff1a; 问题背景   20 世纪 90 年代是电子数据交换时代&#xff0c;中国电子商务开始起步并初见雏形&#xff0c;随后 Web 技术爆炸式成长使电子商务处于蓬勃发展阶段&#xff0c;目前互联网信息碎片化以…

css实现正六边形嵌套圆心

要实现一个正六边形嵌套圆心&#xff0c;可以使用CSS的::before和::after伪元素以及border-radius属性。以下是具体的解析和代码&#xff1a; 使用::before和::after伪元素创建正六边形。设置正六边形的背景色。使用border-radius属性使正六边形的内角为60度。在正六边形内部创…

【matlab程序】matlab画子图的多种样式

【matlab程序】matlab画子图的多种样式

【漏洞复现】速达软件存在任意文件上传

漏洞描述 速达软件全系产品存在任意文件上传漏洞,未经身份认证的攻击者可以通过此漏洞上传恶意后门文件,执行任意指令,造成服务器失陷 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、…

fastadmin列表头部按钮批量上传视频

上传界面通过layui生成 index.html <a href="{:url(video/piliangadd)}" class="btn btn-success btn-piliangadd btn-dialog {:$auth->check(video/piliangadd)?:hide}" title="批量上传" ><i class="fa fa-plus">…

flask之邮件发送

一、安装Flask-Mail扩展 pip install Flask-Mail二、配置Flask-Mail 格式&#xff1a;app.config[参数]值 三、实现方法 3.1、Mail类 常用类方法 3.2、Message类&#xff0c;它封装了一封电子邮件。构造函数参数如下&#xff1a; flask-mail.Message(subject, recipient…

【产品经理】业务问题的诊断:由简入繁,渐进成长

产品的价值在于解决了用户的问题。业务问题的诊断&#xff0c;发现用户的真实问题&#xff0c;拨云见日。 产品的价值在于解决了一定范围的问题&#xff0c;让整体的业务运转、参与角色都能收到因为产品的贡献而产生的价值或便利。微信解决了熟人之间的沟通问题&#xff0c;支付…

【React + Typescript】使用WebPack包管理、各种扩展插件组成的初始模板,开源协议:CC-BY-4.0

React Typescript Webpack 模板 模板展示项目结构使用的部分扩展包页面配置代码Layout 公共容器组件路由Jspackage.json 开源模板下载TIP 模板展示 项目结构 使用的部分扩展包 &#x1f4c2; System ├── &#x1f4c2; Plugin │ ├── &#x1f4c4; file-loader | 在处…

idea连接mysql详细讲解

IDEA连接mysql又报错&#xff01;Server returns invalid timezone. Go to Advanced tab and set serverTimezone prope 前进的道路充满荆棘。 错误界面 IDEA连接mysql&#xff0c;地址&#xff0c;用户名&#xff0c;密码&#xff0c;数据库名&#xff0c;全都配置好了&…

Mybatis异常org.apache.ibatis.binding.BindingException: Parameter “xxx“ not found

问题1: 可能是 mybatis 的xml&#xff0c;对应的mapper接口缺少Param注解&#xff0c;或者Param注解的value与xml的不一致 切记只要参数不是一个集合类型向下图或者多个参数值就要加Param注解 问题2: mybatis的xml&#xff0c;存在多余的注释。注释中包含#{}、${}。注释掉的代…

行云海CMS SQL注入漏洞复现

0x01 产品简介 行云海cms是完全开源的一套CMS内容管理系统,简洁,易用,安全,稳定,免费。 0x02 漏洞概述 行云海cms中ThinkPHP在处理order by排序时可利用key构造SQL语句进行注入,LtController.class.php中发现传入了orderby未进行过滤导致sql注入。攻击者除了可以利用 SQL 注入…

数字艺术语言processing初步

文章目录 示例程序刷新逻辑二维对象 Processing是专门用于艺术设计的编程语言&#xff0c;可以实现非常炫酷的图形和功能&#xff0c;比如下面这张联合国用的图就是用Processing编写的&#xff0c;本文简要介绍以下Processing&#xff0c;并列出其二维对象。 示例程序 第一步&…

删除PPT文件的备注内容

解决方案的工作经常汇报以及经常做ppt的回报工作&#xff0c;但是删除备注很痛苦。 在网上或者拿历史的ppt文件修改后&#xff0c;需要删除ppt备注内容以及删除ppt个人文件信息的办法&#xff1a; 现象&#xff1a;很多备注信息&#xff0c;需要删除 解决办法一、 文件--信息-…

Linux Docker 图形化工具 Portainer远程访问

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 结束语 前言 Portainer是一个轻量级的容器管理工具&#xff0c;可以通过Web界面对Docker容器进行管理和监控。它提供了…

nodejs微信小程序+python+PHP就业求职招聘信息平台的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

ffmpeg编译支持AVS3编解码

libuavs3d ffmpeg的官方源码中已经支持了libuavs3d解码器的接口&#xff08;libavcodec/libuavs3d.c中定义&#xff09;&#xff0c;因此如果需要编译ffmpeg支持libuavs3d解码器&#xff0c;只需要安装libuavs3d.so以及开启ffmpeg的编译选项即可。 安装libuavs3d解码器 #代码仓…

小程序开发

1.准备工作 1.注册公众平台账号&#xff08;免费&#xff09;2.下载小程序开发工具&#xff08;免费&#xff09; 2.开发步骤 1.第一个小程序 1.小程序的AppID相当于小程序平台的一个身份证&#xff0c;这里使用的是测试号&#xff08;注意区别于服务号或订阅号的AppID&#xf…

学习前端都需要学什么?

前端开发是一门需要掌握多种技术和工具的综合性学科。作为一名合格的前端开发者&#xff0c;需要具备以下几方面的知识和技能&#xff1a; HTML&#xff1a;HTML 是构建网页的基础&#xff0c;是前端开发的第一步。需要掌握各种 HTML 标签的使用和语义化的编写方式&#xff0c…

本地快速部署Apache服务器并使用内网穿透实现远程访问

Apache服务安装配置与结合内网穿透实现公网访问 文章目录 Apache服务安装配置与结合内网穿透实现公网访问前言1.Apache服务安装配置1.1 进入官网下载安装包1.2 Apache服务配置 2.安装cpolar内网穿透2.1 注册cpolar账号2.2 下载cpolar客户端 3. 获取远程桌面公网地址3.1 登录cpo…