一.概述

主要目的实现MySQL高可用解决方案,实现异地多活。

二.实现构思

基于MGR实现高可用异地多活

首先要基于位置信息进行分片,例如华北 华中,华南,程序层要进行ip过滤和判断,

针对不同的ip 写入到不同的分片集合中,每张表需要有一个地理位置字段。

例如获得ip为华北,

Create table xx(

id int,

Name varchar(111),

Position int)

华北 表示为0

华中表示为1

华南表示为2

根据Position 字段进行分片。

其次可以根据时间维度或者用户id,或者其他分片规则进行二次分片。

要具备二次分片的能力

每个分片节点需要提供2个slave。用于分担读请求的压力。

三.故障处理

假设 NODE1节点故障

首先NODE1节点下面的slave 停止工作,

此前通过DNS记录把NODE1的ip在指向相近的节点为NODE2

NODE2节点提供本身的华中的读写请求,并再次同时也接管了NODE1的读写请求。

实现方式 基于consul的提供服务发现和健康检查,并提供DNS切换的功能。

NODE1 故障后的恢复

首先提供最近的节点NODE2节点进行基于binlog的恢复。等数据追平,在进行slave1和slave2的数据同步,等全部同步完成后在对外提供服务。

假设 NODE2的binlog已经清理,

首先通过NODE2的slave1或者slave2上获取一份全备在NODE1节点进行恢复。

等待恢复后,则通过主从的方式把数据追平。然后在添加到MGR集群环境中。

等待数据追平,在挂着NODE1下面的slave1和slave2 等待数据追平后在提供服务

NODE1和NODE2同时故障

整个集群会停止服务,MGR集群则无法继续工作。并触发s1级别告警。

修复方法 首先修复NODE2 然后在修复NODE1

可参考NODE1故障恢复方案进行恢复

四 难点

1.首先需要中间件要支持MGR,并支持二次分片

2.需要提供全局自增id,实现。每次insert 首先要获得一个全局的自增id,避免分片的合并造成的主键冲突,和产生自增锁

3.基于consul的dns的重新指向,或者使用其他的dns api服务通过脚本来实现,但需要实现分布式的健康检查和监控。

4.目前MGR并不成熟 需要等待官方成熟的MGR 可提供生产环境,预计今年的下半年。

5.瓶颈在于网络,可以同城,不建议跨城。

mysql异地多活方案_基于MGR高可用异地多活方案-阿里云开发者社区相关推荐

  1. mysql数据漂移_数据库漂移-和数据库漂移相关的内容-阿里云开发者社区

    MySQL双主一致性架构优化 | 架构师之路 一.双主保证高可用 MySQL数据库集群常使用一主多从,主从同步,读写分离的方式来扩充数据库的读性能,保证读库的高可用,但此时写库仍然是单点. 在一个My ...

  2. 图论 物联网_图论算法-和图论算法相关的内容-阿里云开发者社区

    数学建模需掌握的知识总纲 数学建模需要掌握许多知识,这里我列出总纲: 学建模中的算法 穷举法 神经网络 模拟退火 遗传算法 图论算法 蒙特卡洛算法 所需基础知识 高等数学 线性代数(矩阵加减乘除) 概 ...

  3. mysql双主数据一致性_MySQL双主一致性架构优化 | 架构师之路-阿里云开发者社区...

    一.双主保证高可用 MySQL数据库集群常使用一主多从,主从同步,读写分离的方式来扩充数据库的读性能,保证读库的高可用,但此时写库仍然是单点. 在一个MySQL数据库集群中可以设置两个主库,并设置双向 ...

  4. lua mysql 事务_为什么在 Redis 实现 Lua 脚本事务?-阿里云开发者社区

    在刚过去的几个月中,我一直在构思并尝试在 redis 中实现 lua 脚本的事务功能.没有多少人理解我的想法,所以我将通过一些历史为大家做下解释. MySQL 与 Postgres 在 1998-20 ...

  5. mysql 分区表 限制_Mysql分区表使用的一些限制和需要注意的地方-阿里云开发者社区...

    mysql分区策略都基于两个非常重要的假设:查询都能够过滤(prunning)掉很多额外的分区.分区本身并不会带来很多额外的代价.而事实证明,这两个假设在某些场景下会有问题.下面介绍一些可能会遇到的问 ...

  6. mysql导出入数据库报错_mysql数据库导出导入数据库的搜索结果-阿里云开发者社区...

    mysql 数据库导入\导出(总结备忘) 数据库的基本导入\导出的命令 是 mysqldump 和 source 在linux下直接用命令行操作就可以 在windows下 一般情况下有两种方法一个也是 ...

  7. 揭秘python的5种最佳调试方法_揭秘 IPython 的 5 种最佳调试方法-阿里云开发者社区...

    云栖号:https://yqh.aliyun.com 第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策! 一个好的集成开发环境(IDE)附带的调试器是 ...

  8. mysql 3种报错_MySQL读取Binlog日志常见的3种错误-阿里云开发者社区

    MySQL读取Binlog日志常见的3种错误 mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8mb4' 当我们在my. ...

  9. 什么叫有效物理网卡_如何区分虚拟网卡和物理网卡?-阿里云开发者社区

    一.什么是物理网卡和虚拟网卡? 图示如下:红色部分包含VMWare的为虚拟网卡. 通常,我们部署VMWare虚拟机.VMSphere虚拟集群.XenCenter虚拟集群是都会涉及虚拟网卡. 二.辨别物 ...

最新文章

  1. 微信十年,张小龙下一步要干什么?
  2. linux文件I/O操作
  3. lol服务器显示未知错误,运行英雄联盟出现未知错误的处理方法
  4. 细说Asp.net的IP地址屏蔽功能设计
  5. Linux/Unix环境下的make和makefile详解
  6. pytorch学习之路
  7. 协议森林13 9527 (DNS协议)
  8. 筒仓计算表格_身份反模式:联邦筒仓和意大利面条身份
  9. php mysql插入多个列_php mysql插入多条记录
  10. 【数据结构笔记42】哈希表应用:文件中单词词频统计
  11. 1. Symfony 2 --- 简介
  12. [APIO2014]
  13. 贪吃蛇小游戏(基于Python)
  14. java青蛙跳井_数学运算归纳
  15. MySQL 2021 个税计算公式,自定义函数
  16. 各种透明玻璃厚度测量双边对射厚度测量精密测量厂家
  17. 农场周围的道路c语言编程,[蓝桥杯][2013年第四届真题]农场阳光 (C语言)
  18. Ext4分区不能mound的问题修复
  19. Java 首字母大写高效方法
  20. 2023年全国最新工会考试精选真题及答案37

热门文章

  1. HTTP协议header中Content-Disposition中文文件名乱码
  2. 循环神经网络——RNN的训练算法:BPTT
  3. C语言char指针的使用
  4. JVM宋红康(二): JVM与Java体系结构
  5. 逻辑回归函数求导过程
  6. 左值/右值/左值引用/右值引用/move的用法介绍
  7. C++ 取代switch的三种方法
  8. 连接不上sa数据库的几种解决方案
  9. 分析筛选网站关键词的方法
  10. Windows App开发之经常使用控件与应用栏