Mysql集群方案简介
Mysql集群方案简介
集群的好处
- 高可用性:故障检测及迁移,多节点备份。
- 可伸缩性:新增数据库节点便利,方便扩容。
- 负载均衡:切换某服务访问某节点,分摊单个节点的数据库压力。
集群要考虑的风险
- 网络分裂:群集还可能由于网络故障而拆分为多个部分,每部分内的节点相互连接,但各部分之间的节点失去连接。
- 脑裂:导致数据库节点彼此独立运行的集群故障称为“脑裂”。这种情况可能导致数据不一致,并且无法修复,例如当两个数据库节点独立更新同一表上的同一行时。
大致有6种方案
- mysql官方提供的方案
- MySQL Replication
- MySQL Fabirc
- MySQL Cluster
- 第三方方案
- MMM (Master Replication Manager for MySQL)
- 依托硬件的方案
- 心跳检测+SAN共享存储
- 心跳检测+DRDB磁盘复制
mysql官方提供的方案
方案1:MySQL Replication
mysql复制(MySQL Replication),是mysql自带的功能。
主从复制是通过重放binlog实现主库数据的异步复制。即当主库执行了一条sql命令,那么在从库同样的执行一遍,从而达到主从复制的效果。
MySQL Replication是一主多从
的结构,主要目的是实现数据的多点备份(没有故障自动转移和负载均衡)。
相比于单个的mysql,一主多从下的优势如下:
1.读写分离,负载均衡
如果让后台读操作连接从数据库,让写操作连接主数据库,能起到读写分离的作用,这个时候多个从数据库可以做负载均衡。
2.热备份
可以在某个从数据库中暂时中断复制进程,来备份数据,从而不影响主数据的对外服务(如果在master上执行backup,需要让master处于readonly状态,这也意味这所有的write请求需要阻塞)。
就各个集群方案来说,其优势为:
- 主从复制是mysql自带的,无需借助第三方。
- 数据被删除,可以从binlog日志中恢复。
- 配置较为简单方便。
其劣势为:
- 从库要从binlog获取数据并重放,这肯定与主库写入数据存在
时间延迟
,因此从库的数据总是要滞后主库。 - 对主库与从库之间的网络延迟要求较高,若
网络延迟
太高,将加重上述的滞后,造成最终数据的不一致。 单点故障问题
:单一的主节点挂了,将不能对外提供写服务。
方案2:MySQL Fabirc
mysql官方提供的,这是在MySQL Replication的基础上,增加了故障检测与转移,自动数据分片
功能。
不过依旧是一主多从
的结构
MySQL Fabirc只有一个主节点,区别是当该主节点挂了以后,会从从节点中选择一个来当主节点
。
就各个集群方案来说,其优势为:
- mysql官方提供的工具,无需第三方插件。
- 数据被删除,可以从binlog日志中恢复。
单点故障问题
:主节点挂了以后,能够自动从从节点中选择一个来当主节点,不影响持续对外提供写服务。
其劣势为:
- 从库要从binlog获取数据并重放,这肯定与主库写入数据存在时间延迟,因此从库的数据总是要滞后主库。
- 对主库与从库之间的网络延迟要求较高,若网络延迟太高,将加重上述的滞后,造成最终数据的不一致。
事务及查询只支持在同一个分片内,事务中更新的数据不能跨分片,查询语句返回的数据也不能跨分片
。- 节点故障恢复30秒或更长(采用InnoDB存储引擎的都这样)。
分片
:分片可以简单定义为将大数据库分布到多个物理节点上的一个分区方案。每一个分区包含数据库的某一部分,称为一个片
分区
:分区则是把一张表的数据分成 N 多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上。
方案3:MySQL Cluster
mysql官方提供的,多主多从结构
就各个集群方案来说,其优势为:
- mysql官方提供的工具,无需第三方插件。
多个主节点,没有单点故障的问题,节点故障恢复通常小于1秒
。- 负载均衡优秀,可同时用于读操作、写操作都都密集的应用,也可以使用SQL和NOSQL接口访问数据。
- 高可用性和可伸缩性
- 可以自动切分数据,方便数据库的水平拓展
- 能跨节点冗余数据(其数据集并不是存储某个特定的MySQL实例上,而是被分布在多个Data Nodes中,即一个table的数据可能被分散在多个物理节点上,任何数据都会在多个Data Nodes上冗余备份。任何一个数据变更操作,都将在一组Data Nodes上同步,以保证数据的一致性)。
其劣势为:
架构模式和原理很复杂
。只能使用存储引擎 NDB ,与平常使用的InnoDB 有很多明显的差距,可能会导致日常开发出现意外,
。- 表现在以下三点
- 事务(其事务隔离级别只支持Read Committed,即一个事务在提交前,查询不到在事务内所做的修改)
- 外键(虽然最新的NDB 存储引擎已经支持外键,但性能有问题,因为外键所关联的记录可能在别的分片节点)
- 表限制
- 表现在以下三点
对节点之间的内部互联网络带宽要求高
- 作为分布式的数据库系统,各个节点之间存在大量的数据通讯,比如所有访问都是需要经过超过一个节点(至少有一个 SQL Node和一个 NDB Node)才能完成。
对内存要求大
- Data Node数据会被尽量放在内存中,对内存要求大,而且重启的时候,数据节点将数据load到内存需要很长时间。
第三方方案
方案4:MMM (Master Replication Manager for MySQL)
MMM是在MySQL Replication的基础上,对其进行优化。
MMM(Master Replication Manager for MySQL)是双主多从结构
这是Google的开源项目,使用Perl语言来对MySQL Replication做扩展,提供一套支持双主故障切换
和双主日常管理的脚本程序
,主要用来监控mysql主主复制并做失败转移
。
注意:这里的双主节点,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热。
就各个集群方案来说,其优势为:
- 自动的主主Failover切换,一般3s以内切换备机。
- 多个从节点读的负载均衡。
其劣势为:
- 无法完全保证数据的一致性。如主1挂了,MMM monitor已经切换到主2上来了,而若此时双主复制中,主2数据落后于主1(即还未完全复制完毕),那么此时的主2已经成为主节点,对外提供写服务,从而导致数据不一。
- 由于是使用虚拟IP浮动技术,类似Keepalived,故RIP(真实IP)要和VIP(虚拟IP)在同一网段。如果是在不同网段也可以,需要用到虚拟路由技术。但是绝对要在同一个IDC机房,不可跨IDC机房组建集群。
依托硬件的方案
方案5:心跳检测+SAN共享存储
SAN:共享存储,主库从库用的一个存储。SAN的概念是允许存储设施和解决器(服务器)之间建立直接的高速连接,通过这种连接实现数据的集中式存储。
就各个集群方案来说,其优势为:
- 保证数据的强一致性;
- 与mysql解耦,不会由于mysql的逻辑错误发生数据不一致的情况;
其劣势为:
- SAN价格昂贵;
方案6:心跳检测+DRDB磁盘复制
DRDB:这是linux内核板块实现的快级别的同步复制技术。
通过各主机之间的网络,复制对方磁盘的内容。
当客户将数据写入本地磁盘时,还会将数据发送到网络中另一台主机的磁盘上,这样的本地主机(主节点)与远程主机(备节点)的数据即可以保证明时同步。
就各个集群方案来说,其优势为:
- 相比于SAN储存网络,价格低廉;
- 保证数据的强一致性;
- 与mysql解耦,不会由于mysql的逻辑错误发生数据不一致的情况;
其劣势为:
- 对io性能影响较大;
- 从库不提供读操作;
Mysql集群方案简介相关推荐
- MySQL 集群方案介绍
mysql集群方案这里介绍2种,PXC 和 Replication. 大型互联网程序用户群体庞大,所以架构设计单节点数据库已经无法满足需求.大家也深有体会,有一万人在学校网站查成绩或是选课的时候网站时 ...
- mysql集群方案参考
集群的好处 高可用性:故障检测及迁移,多节点备份. 可伸缩性:新增数据库节点便利,方便扩容. 负载均衡:切换某服务访问某节点,分摊单个节点的数据库压力. 集群要考虑的风险 网络分裂:群集还可能由于网络 ...
- 阿里巴巴mysql集群方案_云原生下,如何实现高可用的MySQL?
简介: MySQL 作为当前比较受欢迎的关系型数据库(RDS),在云原生浪潮中仍然面临诸多挑战.如何用 Cloud Native 的设计原则,通过沙箱隔离.计算和数据的完全分离,实现低成本.可扩展.高 ...
- mysql集群方案PXC_【Mysql】MySQL集群方案之PXC(percona xtradb cluster)
Mysql PXC介绍 在传统的Mysql主从架构上,采用的Replaction是异步复制方式,这种方式会存在数据弱一致性的问题,数据写入主库之后因为网络及复制的延迟从库不能马上获取刚刚插入的数据,同 ...
- mysql集群方案对比_MySQL云原生方案在携程开发测试场景中的实践
一.背景与使用场景 随着Kubernetes平台在容器云计算领域的一统天下,云原生 (Cloud Native) 一词也被提的越来越频繁.各类应用纷纷走上了容器化.云原生化的道路,无状态服务应用在Ku ...
- mysql集群方案,保准看明白!
回答 一共五种 (一)String 这个其实没啥好说的,最常规的set/get操作,value可以是String也可以是数字.一般做一些复杂的计数功能的缓存. (二)list 使用List的数据结构, ...
- 原理竟然是这!mysql集群方案pxc
前言 大厂面试真题向来是求职者的最佳练兵场,华为在Java开发工程师招聘中有哪些技术性考察和倾向?那今天咱就给大家分享一下近期的华为5面面经! 注:以下所分享的华为面试问题,相关的答案我也整理出来了, ...
- MySQL常用集群方案
了解 MySQL 集群之前,先看看单节点数据库的弊病: 大型互联网程序用户群体庞大,所以架构需要特殊设计. 单节点数据库无法满足大并发时性能上的要求. 单节点的数据库没有冗余设计,无法满足高可用. 单 ...
- MySQL高集群方案
刚入职到公司就有幸参与MySQL集群方案的调研工作.经过将近一个月的调研基本了解了一些常用的集群方案,在此总结下并分享给大家. MySQL支持多种高可用环境的搭建,很难说哪一个是完美的解决方案,只能结 ...
- 后端搭建MySQL_Docker前后端分离实战之搭建MYSQL集群
这门慕课实战对想了解Docker的人很有帮助.感谢神思者l大佬 renren-fast 后台:SpringBoot+SSM+Shiro+swagger(API调试)+Redis+JWT(单点登录) L ...
最新文章
- SQL函数设计——临时表的使用
- 免费数学神器有了手机版,再复杂的公式,拍照就能转成LaTeX
- SAP RM07扩展
- Android jdwp 自动断开,开启debug调试模式,进入不了,等一会就闪退了!!!!
- Python3 获取当前路径,当前文件名,当前文件名路径、指定import的文件路径、程序路径
- 小程序统一服务消息_微信团队发布小程序模板消息能力调整通知:小程序订阅消息接口正式上线...
- 新人如何适应自己的领导
- 制作抽签器用html,利用几何画板制作随机抽签器
- 2022-2028年中国飞机电子飞行包(EFB)行业市场竞争状况及发展趋向分析报告
- 运动目标检测_帧差法
- 用户画像、用户分群、用户分层,到底有啥区别?
- 打造私人搜书系统之系统设计
- 远程登陆服务器跑深度学习程序
- Hadoop基本命令(记一次Hadoop课后实验)
- 解决windows10 时间轴灰色的活动历史记录无法删除的问题
- 在ROS中使用USB网络摄像头传输图像
- 计算机低级格式化,低级格式化,教您硬盘怎么低级格式化
- shiro for example: not eligible for auto-proxying
- 大学教务人员管理系统(C++实现)
- 洛谷P2598 [ZJOI2009]狼和羊的故事