mysql5.7.25最强集群方案(附一键部署脚本)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 还记得我们之前部署mysql集群有多麻烦嘛?波哥来救你们啦!~

还记得我们之前部署mysql集群有多麻烦嘛?波哥来救你们啦!~


我已将项目上传到了我的github仓库中,大家可以点击仓库地址出现的连接登录查看相应的代码!如果觉得不错别忘了转发、点赞哦!


部署步骤:


git clone https://github.com/luckman666/deploy_mysql_cluster.git
cd deploy_mysql_cluster
# 编辑bash.config参数
chmod -R 755 .
./deploy_mysql_master.sh


以上几步就完成了一套多节点多主多从故障自动切换的mysql数据库集群。


使用及注意事项:


如果集群出现某一节点出现故障:

1、集群会立刻将其剔除集群,停止同步。

2、(主节点故障)keepalived两秒内会感知mysql故障,从集群中踢除本节点mysql,本节点降权并将VIP漂移至完好节点,整个集群继续提供服务。

3、(从节点故障)keepalived直接关闭该节点服务,将该节点剔除集群。


故障修复后加入集群方式:


恢复节点上执行此命令(注意修改参数):


docker run -d -p 3306:3306 -p 4444:4444 -p 4567:4567 -p 4568:4568 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC -e CLUSTER_JOIN=主节点主机名(mysql1) -e XTRABACKUP_PASSWORD=root -v /opt/mysql/data:/var/lib/mysql -v /opt/mysql/backup:/data -v /etc/localtime:/etc/localtime:ro -v /var/run/docker.sock:/var/run/docker.sock --privileged --name=本节点主机名(如:mysql2) --net=swarm_mysql docker.io/percona/percona-xtradb-cluster


同步完成后启动再keepalived


systemctl restart keepalived


检查keepalived启动状态


systemctl status keepalived


通过工具或者查看容器日志查看mysql运行是否良好!


设计这套mysql的集群方案主要是面向我司的账单系统。因为都是账单数据,对于数据的丢失的容忍度为0。所以采用多节点强制同步的PXC集群方式。部署采用docker方式,网络方案采用swarm的overlay网络,冗余策略是keepalived


大家可能对pxc集群方案略有陌生这里简单给大家介绍一下:


1、传统的Repliaction 集群方案(1主多从)

2、PXC 集群方案( Percona XtraDB Cluster 多主多从)


方案场景对比:

640.jpg


Repliaction 集群同步方式概览:

640.jpg


PXC 集群方案( Percona XtraDB Cluster )640.jpg


可以看到PXC是数据强一致性的集群,事务在所有集群节点要么同时提交,要么不提交。而Replication 采用异步复制,无法保证数据的一致性。

因为项目数据库是主要用来存储账单和钱款的,所以就采用了PXC的集群方式。


为什么用了swarm?


k8s确实强大但是只适合大规模集群,对于中小集群还是swarm最为合适。毕竟是docker亲生的儿子。各种角度都集成的比较好。所以在确定了mysql的集群方式为PXC后就选用了swarm来实现分布式管理(以后会单拿出一篇文章来专门写swarm)。


为什么是keepalived而不是haproxy?


因为是PXC方式,前端代码又没做读写分离,所以就采用了keepalived的方式来进行集群故障转移和反向代理工作,这样所有前端应用会使用集群中的其中一台mysql写入或读取数据。这样避免双向同步的损耗!

如果您的项目是读写分离的,那也可以用keepalived再绑定一个VIP然后放到另一个集群节点上提供读服务即可!


PS:

还有容器数据备份及集群调优会在以后的公众号中发布,希望大家持续关注哦!我会继续努力给大家提供技术干货和开发各种IT实用工具。不过千里之行始于足下,慢慢来吧!加油!

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
13天前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
38 3
|
13天前
|
消息中间件 分布式计算 关系型数据库
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
33 0
|
17天前
|
SQL 关系型数据库 MySQL
|
1月前
|
关系型数据库 MySQL 数据安全/隐私保护
docker应用部署---MySQL的部署配置
这篇文章介绍了如何使用Docker部署MySQL数据库,包括搜索和拉取MySQL镜像、创建容器并设置端口映射和目录映射、进入容器操作MySQL,以及如何使用外部机器连接容器中的MySQL。
docker应用部署---MySQL的部署配置
|
1月前
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
397 15
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
1月前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
243 14
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
16天前
|
关系型数据库 MySQL 数据库
使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
【10月更文挑战第1天】使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
42 3
|
16天前
|
关系型数据库 MySQL 数据库
使用Docker部署的MySQL数据库如何设置忽略表名大小写?
【10月更文挑战第1天】使用Docker部署的MySQL数据库如何设置忽略表名大小写?
46 1
|
1月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
1月前
|
SQL 关系型数据库 MySQL
MySQL数据库中给表添加字段并设置备注的脚本编写
通过上述步骤,你可以在MySQL数据库中给表成功添加新字段并为其设置备注。这样的操作对于保持数据库结构的清晰和最新非常重要,同时也帮助团队成员理解数据模型的变化和字段的具体含义。在实际操作中,记得调整脚本以适应具体的数据库和表名称,以及字段的详细规范。
48 8