一.什么是高可用性:

  高可用性=可靠性,它的本质就是通过技术和工具提高可靠性,尽可能长时间保持数据可用和系统运行,实现高可用性的原则,首先要消除单点故障,其次通过冗余机制实现快速恢复,还有就是实现容错。

二.我们在考虑数据库的高可用方案时,应该考虑几个方面:

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的高可用性,可以较好的避免网络分区现象的产生。

优点:

  1. 较好的保证了整个系统的高可用性,包括proxy、MySQL;
  2. 扩展性较好,可以扩展为大规模集群;

缺点:

  1. 数据一致性仍然依赖于原生的mysql半同步复制;
  2. 引入zk,整个系统的逻辑变得更加复杂;

MySQL数据库高可用方案的更多相关文章

  1. MYSQL数据库高可用方案探究

    MySQL作为最关键的应用数据存储中心,如何保证MySQL服务的可靠性和持续性,是我们不得不细致考虑的一个问题.当master宕机的时候,我们如何保证数据尽可能的不丢失,如何保证快速的获知master ...

  2. 美团点评MySQL数据库高可用架构从MMM到MHA+Zebra以及MHA+Proxy的演进

    本文介绍最近几年美团点评MySQL数据库高可用架构的演进过程,以及我们在开源技术基础上做的一些创新.同时,也和业界其它方案进行综合对比,了解业界在高可用方面的进展,和未来我们的一些规划和展望. MMM ...

  3. Oracle和MySQL的高可用方案对比【转】

    关于Oracle和MySQL的高可用方案,其实一直想要总结了,就会分为几个系列来简单说说.通过这样的对比,会对两种数据库架构设计上的细节差异有一个基本的认识.Oracle有一套很成熟的解决方案.用我在 ...

  4. MySQL MGR+ Consul之数据库高可用方案

    背景说明:     基于目前存在很多MySQL数据库单点故障,传统的MHA,PXC等方案用VIP或者DNS切换的方式可以实现.基于数据库的数据强一致性考虑,采用MGR集群,采用consul服务注册发现 ...

  5. (转)mysql数据库高可用高扩展性架构方案实施

    http://shanhu.blog.51cto.com/1293405/1212605-----mysql数据库高可用高扩展性架构方案实施

  6. 分布式数据存储 - MySQL主从复制高可用方案

    前面几篇文章说道MySQL数据库的高可用方案主从复制.主从复制的延迟产生原因.延迟检测及延迟解决方案(并未从根本上解决),这种主从复制方案保证数据的冗余的同时可以做读写分离来分担系统压力但是并非是高可 ...

  7. docker搭建数据库高可用方案PXC

    前言 本方案主要目的是学习, 该方案不太合适于企业项目 是什么? 白话点, 是个提供了必要环境的虚拟机(类似于java的导入部分包一样和c++的头文件差不多), 所以它比普通的VMWare或者Virt ...

  8. MySQL MMM高可用方案

    200 ? "200px" : this.width)!important;} --> 介绍 本篇文章主要介绍搭建MMM方案以及MMM架构的原理.这里不介绍主从.主主的搭建方 ...

  9. MySQL数据库高可用集群搭建-PXC集群部署

    Percona XtraDB Cluster(下文简称PXC集群)提供了MySQL高可用的一种实现方法.集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上. PXC原理描述: 分布式 ...

随机推荐

  1. 在flask中使用flask-migrate管理数据库

    Flask-Migrate是一个为Flask应用处理SQLAlchemy数据库迁移的扩展,使得可以通过Flask的命令行接口或者Flask-Scripts对数据库进行操作. 安装 pip3 insta ...

  2. Django之重写用户模型

    django——重写用户模型 Django内建的User模型可能不适合某些类型的项目.例如,在某些网站上使用邮件地址而不是用户名作为身份的标识可能更合理. 1.修改配置文件,覆盖默认的User模型 D ...

  3. unity-Timeline实践

    前言 建议入门方式(基本的手册知识了解之后):官方Demo TimelineInputDemo 自定义轨迹 CustomTrack Signal 标记 创建Emitter 和 Receiver 引用: ...

  4. bzoj4459[Jsoi2013]丢番图

    bzoj4459[Jsoi2013]丢番图 题意: 丢番图方程:1/x+1/y=1/n(x,y,n∈N+) ,给定n,求出关于n的丢番图方程有多少组解.n≤10^14. 题解: 通分得yn+xn=xy ...

  5. 通过实现网站访问计数器带你理解 轻量级锁CAS原理,还学不会算我输!!!

    一.实现网站访问计数器 1.线程不安全的做法 1.1.代码 package com.chentongwei.concurrency; import static java.lang.Thread.sl ...

  6. js用正则表达式查找中文

    var content = "awfjawf测试wfewef"; var ret = /\p{Unified_Ideograph}+/u.exec(content);

  7. 全卷积神经网络FCN详解(附带Tensorflow详解代码实现)

    一.导论 在图像语义分割领域,困扰了计算机科学家很多年的一个问题则是我们如何才能将我们感兴趣的对象和不感兴趣的对象分别分割开来呢?比如我们有一只小猫的图片,怎样才能够通过计算机自己对图像进行识别达到将 ...

  8. LQB2013A04倒置的标签

    这个题,一开始犯了一个很幼稚的错误 贴贴代码 #include<iostream> #include<stdio.h> #include<stdlib.h> #in ...

  9. c++ string 类型 大小写转换 

    还是用以前的库函数就行的,toupper(int c)小写变大写和tolower(int c)大写变小写 可以直接这么干 string s = "ABCDEFG"; for( in ...

  10. springboot 使用 dev tool 导致 CastException

    1.背景 项目使用了 Spring + shiro 实现 权限控制, 使用AOP 对 每个 Controller 进行 log 记录时,需要从 shiro 中 获取 username字段, 问题就这样 ...