基于MGR高可用异地多活方案

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

一.概述
主要目的实现MySQL高可用解决方案,实现异地多活。
二.实现构思
_1

基于MGR实现高可用异地多活
首先要基于位置信息进行分片,例如华北 华中,华南,程序层要进行ip过滤和判断,
针对不同的ip 写入到不同的分片集合中,每张表需要有一个地理位置字段。
例如获得ip为华北,
Create table xx(
id int,
Name varchar(111),
Position int)
华北 表示为0
华中表示为1
华南表示为2
根据Position 字段进行分片。
其次可以根据时间维度或者用户id,或者其他分片规则进行二次分片。
要具备二次分片的能力

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

三.故障处理

_2

假设 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.瓶颈在于网络,可以同城,不建议跨城。

目录
相关文章
|
缓存 NoSQL 网络安全
基于Redis6.2.6版本部署Redis Cluster集群
基于Redis6.2.6版本部署Redis Cluster集群 文章目录 基于Redis6.2.6版本部署Redis Cluster集群 1.Redis6.2.6简介以及环境规划 2.二进制安装Redis程序 2.1.二进制安装redis6.2.6 2.2.创建Reids Cluster集群目录 3.配置Redis Cluster三主三从交叉复制集群 3.1.准备六个节点的redis配置文件 3.2.将六个节点全部启动 3.3.配置集群节点之间相互发现 3.4.为集群中的充当Master的节点分配槽位 3.5.配置三主三从交叉复制模式 4.快速搭建Redis Cluster集群
3113 1
基于Redis6.2.6版本部署Redis Cluster集群
|
8月前
|
JavaScript Linux iOS开发
零代码零基础!小红书MCP全自动化运营【保姆级安装教程】
小红书MCP是一款开箱即用的自动化运营工具,支持登录、发图文/视频、评论互动等。无需源码编译或Docker,下载预编译安装包即可快速部署,兼容Windows/macOS/Linux。配合Cursor编辑器,通过自然语言指令即可完成全部操作,新手10分钟上手。
9339 0
|
canal 关系型数据库 MySQL
数据同步神器-Canal
Canal是阿里巴巴开源的MySQL增量日志解析工具,通过模拟MySQL主从复制机制,实时捕获数据库变更,实现数据同步至Kafka、Elasticsearch等系统,广泛应用于数据同步、监控、备份与迁移场景。
8318 5
|
供应链 前端开发 BI
如何开发一套进销存系统?(附架构图+流程图+代码参考)
本文详解了企业进销存系统的核心功能、业务流程及开发关键技术,帮助企业提升库存管理、销售追踪与采购效率,降低运营成本,并提供实用开发技巧与优化方案。
|
Linux API
Linux下载工具wget与curl
`wget` 是一个用于从网络下载文件的命令行工具,支持HTTP、HTTPS和FTP协议。它能自动处理下载中断,并支持递归下载网站内容。基本用法:`wget URL`,可指定文件名(`-O`)、保存目录(`-P`),还支持断点续传(`-c`)、限速(`--limit-rate`)和递归下载(`-r`)。相比之下,`curl` 更侧重于发送各种HTTP请求(如GET、POST),并支持文件上传、自定义请求头和cookie等功能。
981 10
|
容灾 Cloud Native 关系型数据库
实现MySQL异地多活场景
现代化互联网企业面临的最大威胁是意外导致的数据丢失或不可用。为应对这一挑战,企业通常采用“主从高可用”架构,但单一机房内的高可用仍存风险。真正的高可用需通过“跨机房容灾”或“异地容灾”实现。异地容灾将服务器部署在不同地域的机房中,确保一处受灾时,其他机房能迅速接管业务。更进一步的“异地多活”方案则让各节点同步处理业务流量,确保数据一致性,提高资源利用率。NineData 提供了实现这一方案的强大工具。
759 0
|
JSON JavaScript 关系型数据库
|
存储 算法 C++
详解C++中的STL(标准模板库)容器
【4月更文挑战第30天】C++ STL容器包括序列容器(如`vector`、`list`、`deque`、`forward_list`、`array`和`string`)、关联容器(如`set`、`multiset`、`map`和`multimap`)和容器适配器(如`stack`、`queue`和`priority_queue`)。它们为动态数组、链表、栈、队列、集合和映射等数据结构提供了高效实现。选择合适的容器类型可优化性能,满足不同编程需求。
1030 1
|
Ubuntu Linux
百度搜索:蓝易云【Ubuntu、CentOS修改时区、设置24小时时间格式教程。】
时区和时间格式是操作系统中的两个重要设置,本文将介绍如何在Ubuntu和CentOS操作系统中修改时区和设置24小时时间格式。
2702 0