MySQL数据库高可用方案
一.什么是高可用性:
高可用性=可靠性,它的本质就是通过技术和工具提高可靠性,尽可能长时间保持数据可用和系统运行,实现高可用性的原则,首先要消除单点故障,其次通过冗余机制实现快速恢复,还有就是实现容错。
二.我们在考虑数据库的高可用方案时,应该考虑几个方面:
1.若数据库发生了宕机或者意外中断等故障,能够尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的中断而中断
2.用作备份,只读副本等功能的非主流节点的数据应该和主节点的数据实时或者始终保持一致
3.当业务发生数据库切换的时候,切换前后的数据库的内容应该保持一致,不会因为数据缺失或者数据不一致而影响业务
三.高可用方案:
1.主从复制:详情参考https://www.cnblogs.com/xiuercui/p/13416638.html
2.半同步复制
3.MHA+多节点集群
MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。
- MHA Manager: 可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。
- MHA Node: 行在每台MySQL服务器上。
MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。
MHA Node运行在每台MySQL服务器上,主要作用是切换时处理二进制日志,确保切换尽量少丢数据。
MHA也可以扩展到如下的多节点集群:

优点:
- 可以进行故障的自动检测和转移;
- 可扩展性较好,可以根据需要扩展MySQL的节点数量和结构;
- MySQL发生不可用的概率相对更低
缺点:
- 逻辑较为复杂,发生故障后排查问题,定位问题更加困难;
- 数据一致性仍然靠原生半同步复制保证,仍然存在数据不一致的风险;
- 可能因为网络分区发生脑裂现象;
4.MGR
MySQL官方推荐的一款高可用集群方案MySQL Group Replication,基于Paxos协议的状态机复制,彻底解决了基于传统的异步复制和半同步复制中数据一致性问题无法保证的情况,也让MySQL数据库涉及的领域更广,打开互联网金融行业的大门。
MGR提供了高可用分布式MySQL数据库服务,它可以实现服务器自动故障转移,分布式容错能力,支持多主更新的架构,自动重配置()加入/移除节点,崩溃等),并且可以自动侦测和处理冲突。
MGR适用的场景包括:
(1)弹性复制:复制架构下,服务器的数量动态增加或缩减时,使影响降到最低。
(2)分片高可用:用户可以利用MGR实现单一分片的高可用,每个分片都具有一个复制组。
(3)主从复制的替代选择:可以使用单主模式避免发生冲突检测,以替代传统的主从复制。
下图为MGR的架构图:

下边分别介绍里边的内容:

MySQL Group Replication插件
该插件主要负责:
- 维护分布式执行内容
- 侦测和处理冲突
- 处理分布式集群的恢复(侦测成员的变化,在必要时作为贡献者提供数据,在必要时收集状态)
- 推送事务给其他组员
- 接受其他成员的事务并处理
- 决定事务最终的结果(提交/回滚)
5.zookeeper+proxy
Zookeeper使用分布式算法保证集群数据的一致性,使用zookeeper可以有效的保证proxy的高可用性,可以较好的避免网络分区现象的产生。

优点:
- 较好的保证了整个系统的高可用性,包括proxy、MySQL;
- 扩展性较好,可以扩展为大规模集群;
缺点:
- 数据一致性仍然依赖于原生的mysql半同步复制;
- 引入zk,整个系统的逻辑变得更加复杂;
MySQL数据库高可用方案的更多相关文章
- MYSQL数据库高可用方案探究
MySQL作为最关键的应用数据存储中心,如何保证MySQL服务的可靠性和持续性,是我们不得不细致考虑的一个问题.当master宕机的时候,我们如何保证数据尽可能的不丢失,如何保证快速的获知master ...
- 美团点评MySQL数据库高可用架构从MMM到MHA+Zebra以及MHA+Proxy的演进
本文介绍最近几年美团点评MySQL数据库高可用架构的演进过程,以及我们在开源技术基础上做的一些创新.同时,也和业界其它方案进行综合对比,了解业界在高可用方面的进展,和未来我们的一些规划和展望. MMM ...
- Oracle和MySQL的高可用方案对比【转】
关于Oracle和MySQL的高可用方案,其实一直想要总结了,就会分为几个系列来简单说说.通过这样的对比,会对两种数据库架构设计上的细节差异有一个基本的认识.Oracle有一套很成熟的解决方案.用我在 ...
- MySQL MGR+ Consul之数据库高可用方案
背景说明: 基于目前存在很多MySQL数据库单点故障,传统的MHA,PXC等方案用VIP或者DNS切换的方式可以实现.基于数据库的数据强一致性考虑,采用MGR集群,采用consul服务注册发现 ...
- (转)mysql数据库高可用高扩展性架构方案实施
http://shanhu.blog.51cto.com/1293405/1212605-----mysql数据库高可用高扩展性架构方案实施
- 分布式数据存储 - MySQL主从复制高可用方案
前面几篇文章说道MySQL数据库的高可用方案主从复制.主从复制的延迟产生原因.延迟检测及延迟解决方案(并未从根本上解决),这种主从复制方案保证数据的冗余的同时可以做读写分离来分担系统压力但是并非是高可 ...
- docker搭建数据库高可用方案PXC
前言 本方案主要目的是学习, 该方案不太合适于企业项目 是什么? 白话点, 是个提供了必要环境的虚拟机(类似于java的导入部分包一样和c++的头文件差不多), 所以它比普通的VMWare或者Virt ...
- MySQL MMM高可用方案
200 ? "200px" : this.width)!important;} --> 介绍 本篇文章主要介绍搭建MMM方案以及MMM架构的原理.这里不介绍主从.主主的搭建方 ...
- MySQL数据库高可用集群搭建-PXC集群部署
Percona XtraDB Cluster(下文简称PXC集群)提供了MySQL高可用的一种实现方法.集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上. PXC原理描述: 分布式 ...
随机推荐
- 在flask中使用flask-migrate管理数据库
Flask-Migrate是一个为Flask应用处理SQLAlchemy数据库迁移的扩展,使得可以通过Flask的命令行接口或者Flask-Scripts对数据库进行操作. 安装 pip3 insta ...
- How to use the functions of apply and call
Although apply and call can implement same function. However, there is a litter different between ...
- 基于Three.js的全景---photo-sphere-viewer
以前公司其他几个前端做全景都是用软件生成,由于本人比较懒,不想去折腾那个软件,于是乎就有了下面的事...... 这个是基于three.js的全景插件 photo-sphere-viewer.js ...
- [USACO3.1]形成的区域(扫描线+离散化)
[USACO3.1]形成的区域(P6432) 日期:2020-05-31 目录 [USACO3.1]形成的区域(P6432) 一.题意分析 二.算法分析 1. 暴力 0). 初始状态(红点为原点) 1 ...
- bzoj3384[Usaco2004 Nov]Apple Catching 接苹果*&&bzoj1750[Usaco2005 qua]Apple Catching*
bzoj3384[Usaco2004 Nov]Apple Catching 接苹果 bzoj1750[Usaco2005 qua]Apple Catching 题意: 两棵树,每分钟会从其中一棵树上掉 ...
- 【一起学系列】之模板方法:写SSO我只要5分钟
意图 定义一个操作中的算法的骨架,将一些步骤延迟到子类中. Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 模板方法模式的诞生 模板方法模式为我们提供了一 ...
- 定时器之Timer
Timer中的TimerTask就是一个线程,可以一直执行下去的.可以使用Timer类的cancel方法来结束.-------------------------------------------- ...
- Java开发中的eclispe常用快捷键&全部快捷键
Java开发中的eclispe常用快捷键&全部快捷键 Ctrl+1 快速修复(经典快捷键)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ ...
- 遍历map的6种方式
1,平时开发中对map的使用很多,然后发现了很多map可能存在的各种问题:如HashMap 需要放置 1024 个元素,由于没有设置容量初始大小,随着元素不断增加,容量 7 次被迫扩大,resize ...
- Arrays.sort() ----- DualPivotQuicksort
Arrays.sort() ----- DualPivotQuicksort DualPivotQuicksort是Arrays.sort()对基本类型的排序算法,它不止使用了双轴快速排序,还使用了T ...