Sharding-JDBC 系列专题 - 第九篇:高可用性与集群管理
Sharding-JDBC 系列专题 - 第九篇:高可用性与集群管理
本系列专题旨在帮助开发者全面掌握 Sharding-JDBC,一个轻量级的分布式数据库中间件。本篇作为系列的第九篇文章,将重点探讨 高可用性(High Availability, HA) 和 集群管理,包括数据库高可用方案、Sharding-JDBC 的故障切换机制、Sharding-Proxy 的集群部署,以及与 Apache ShardingSphere 生态的分布式治理功能(如 ZooKeeper 集成)。这些内容帮助开发者构建健壮的分布式数据库系统。需要图形化展示的部分将使用 Mermaid 语法绘制图表。
1. 高可用性概述
高可用性是指系统在面对故障(如数据库宕机、网络中断)时,能够快速恢复并继续提供服务。Sharding-JDBC 和 Sharding-Proxy 提供了多种机制支持高可用性,同时需要结合底层数据库的高可用方案(如 MySQL 主从复制、MHA)来实现。
1.1 高可用性目标
- 最小化宕机时间:通过故障切换和冗余设计,降低服务中断时间。
- 数据一致性:确保故障期间数据不丢失或不一致。
- 自动恢复:自动检测故障并切换到备用节点。
- 负载均衡:在高可用架构中优化资源利用。
1.2 高可用性组件
- 数据库层:MySQL 主从复制、MHA(MySQL Master High Availability)、MySQL Cluster。
- Sharding-JDBC:读写分离的从库切换、事务重试。
- Sharding-Proxy:多实例部署、负载均衡。
- 分布式治理:使用 ZooKeeper 或 etcd 实现配置同步和状态管理。
2. 数据库高可用方案
Sharding-JDBC 依赖底层数据库的高可用性,常见的 MySQL 高可用方案包括:
2.1 主从复制
- 原理:主库处理写操作,从库通过复制主库的二进制日志(binlog)保持数据同步。
- 配置:参考第四篇读写分离配置,主库
master_ds
,从库slave_ds_0
、slave_ds_1
。 - 高可用实现:
- 配置多个从库,分担读压力。
- 监控主从延迟,优化复制性能(如设置
sync_binlog=0
)。 - 从库故障时,Sharding-JDBC 自动切换到其他从库。
2.2 MHA(MySQL Master High Availability)
- 原理:MHA 监控主库状态,主库故障时自动将从库提升为主库。
- 部署:
- 安装 MHA Manager 和 Node。
- 配置主从复制和 MHA 脚本。
- 设置 VIP(虚拟 IP)或 DNS 切换。
- 与 Sharding-JDBC 集成:
- 更新 Sharding-JDBC 的数据源配置,指向新的主库。
- 使用动态数据源(如 Spring 的
AbstractRoutingDataSource
)实现无缝切换。
2.3 MySQL Cluster(NDB Cluster)
- 原理:多主架构,数据同步存储在多个节点,支持自动故障转移。
- 适用场景:对一致性和可用性要求极高的场景。
- 与 Sharding-JDBC:配置多个 MySQL Cluster 节点作为数据源,Sharding-JDBC 负责分片路由。
3. Sharding-JDBC 高可用机制
Sharding-JDBC 提供了多种机制支持高可用性,特别是在读写分离和分布式事务场景中。
3.1 读写分离故障切换
- 从库故障:Sharding-JDBC 检测从库不可用后,自动将读请求路由到其他从库或主库。
- 配置:
readwriteSplittingRule:dataSourceGroups:group0:writeDataSourceName: master_dsreadDataSourceNames:- slave_ds_0- slave_ds_1loadBalancerName: roundRobinloadBalancers:roundRobin:type: ROUND_ROBIN
- 优化:
- 配置健康检查,定期检测从库状态。
- 使用权重负载均衡,优先选择高性能从库:
loadBalancers:weight:type: WEIGHTprops:slave_ds_0: 0.7slave_ds_1: 0.3
3.2 分布式事务重试
- XA 事务:事务管理器(如 Atomikos)支持故障重试,确保事务提交。
- BASE 事务:Saga 模式通过补偿机制处理分片故障。
- 配置:
transactionRule:defaultType: XAproviderType: Atomikos
- 代码示例(重试逻辑):
import org.springframework.transaction.annotation.Transactional;@Service
public class OrderService {@Autowiredprivate JdbcTemplate jdbcTemplate;@Transactional(rollbackOn = Exception.class)public void createOrder(Long orderId, Long userId) {try {jdbcTemplate.update("INSERT INTO t_order (order_id, user_id, order_amount) VALUES (?, ?, ?)",orderId, userId, 99.99);} catch (SQLException e) {// 记录日志,触发重试或补偿throw new RuntimeException("Transaction failed", e);}}
}
3.3 动态数据源切换
- 场景:主库故障后,MHA 切换到新主库,Sharding-JDBC 需要更新数据源。
- 实现:使用 Spring 的动态数据源:
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public c
相关文章:
Sharding-JDBC 系列专题 - 第九篇:高可用性与集群管理
Sharding-JDBC 系列专题 - 第九篇:高可用性与集群管理 本系列专题旨在帮助开发者全面掌握 Sharding-JDBC,一个轻量级的分布式数据库中间件。本篇作为系列的第九篇文章,将重点探讨 高可用性(High Availability, HA) 和 集群管理,包括数据库高可用方案、Sharding-JDBC 的故…...
Node.js 学习入门指南
Node.js 学习入门指南 Node.js 是一种流行的开源、跨平台的 JavaScript 运行时环境,它使开发者能够在服务器端运行JavaScript代码。本篇文章旨在帮助初学者快速入门并掌握Node.js的基础知识和常用技巧。 一、什么是Node.js? 定义 Node.js 是一个基于…...
数智视融合驱动未来,Al+数字孪生重塑价值|2025袋鼠云春季数智发布会回顾
4月16日,袋鼠云成功举办了“做DataAI的长期主义者——2025年袋鼠云春季数智发布会”,从智能分析决策平台到AI大模型应用,从数字孪生中枢到AI增强型数字世界,勾勒出企业数智化转型的进化图谱,真正实现AI赋能企业业务&am…...
nfs服务原理、搭建手册、安全配置建议及异常定位手段
一、NFS服务原理 NFS(Network File System)是一种基于TCP/IP协议的网络文件共享系统,允许客户端像访问本地文件一样访问远程服务器上的共享目录。其核心原理依赖于RPC(Remote Procedure Call)机制,具体流程…...
第十三届蓝桥杯 2022 C/C++组 修剪灌木
目录 题目: 题目描述: 题目链接: 思路: 核心思路: 思路详解: 代码: 代码详解: 题目: 题目描述: 题目链接: P8781 [蓝桥杯 2022 省 B] 修…...
MySQL:数据库设计
目录 一、范式 二、第一范式 二、第二范式 三、第三范式 四、设计 (1)一对一关系 (2)一对多关系 (3)多对多关系 一、范式 数据库的范式是一种规则(规范),如果我们…...
OpenManus与OWL部署及体验报告
OpenManus与OWL对任务的执行结果均不及Manus;二者比较,Owl达成率更高;二者使用过程中均会消耗大量tokens,单个问题成本高。 一、部署 OpenManus:https://github.com/mannaandpoem/OpenManus.git OWL:https…...
【Pandas】pandas DataFrame pow
Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于执行 DataFrame 与另一个对象(如 DataFrame、Series 或标量)的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于执行 DataFrame 与另一个对象&…...
Red:1靶场环境部署及其渗透测试笔记(Vulnhub )
环境介绍: 靶机下载: https://download.vulnhub.com/red/Red.ova 本次实验的环境需要用到VirtualBox(桥接网卡),VMware(桥接网卡)两台虚拟机(网段都在192.168.152.0/24࿰…...
【多源01BFS】Codeforce:Three States
题干 翻译 给定一个 nm 的网格地图,包含以下元素: .:表示荒地(可以修建道路)。 #:表示岩石(不可通行)。 数字 1、2、3:分别表示三个国家的位置。 目标:将…...
在深度学习中FLOPs和GFLOPs的含义及区别
在深度学习中,FLOPs和GFLOPs是衡量计算性能的关键指标,但两者的定义和应用场景不同: 1. 定义与区别 • FLOPs(Floating-point Operations) 表示模型或算法执行时所需的浮点运算总次数,用于衡量模型的计算复…...
SpringBoot入门实战(项目搭建、配置、功能接口实现等一篇通关)
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 SpringBoot入门实战(项目搭建、配…...
昆仑万维开源SkyReels-V2,解锁无限时长电影级创作,总分83.9%登顶V-Bench榜单
昆仑万维开源了全球首个基于扩散强迫框架(Diffusion-forcing)的无限时长视频生成模型——SkyReels-V2。这一模型以总分83.9%的优异成绩登顶权威评测V-Bench1.0榜单,并在质量维度获得84.7%的评分,刷新了开源视频生成技术的天花板。…...
精选面试题
1、js中set和map的作用和区别? 在 JavaScript 中,Set 和 Map 是两种非常重要的集合类型 1、Set 是一种集合数据结构,用于存储唯一值。它类似于数组,但成员的值都是唯一的,没有重复的值。Set 中的值只能是唯一的,任何…...
【技术派后端篇】技术派中 Session/Cookie 与 JWT 身份验证技术的应用及实现解析
在现代Web应用开发中,身份验证是保障系统安全的重要环节。技术派在身份验证领域采用了多种技术方案,其中Session/Cookie和JWT(JSON Web Token)是两种常用的实现方式。本文将详细介绍这两种身份验证技术在技术派中的应用及具体实现…...
【CAPL实战:以太网】对IPv4报文的Payload部分进行分片并创建分片包
As we know,TCP/IP协议栈网络层接收到来自上层的数据时,并不是简单地添加报头发送出去,而是会受到来自网卡配置参数MTU的约束。也就是从网卡上发送出去的以太网帧报文的数据部分的长度不能大于MTU值。即网络层头部 + 有效载荷不能大于MTU。 所以网络层在发送上层的数据时,…...
Spring Security认证流程
认证是Spring Security的核心功能之一,Spring Security所提供的认证可以更好地保护系统的隐私数据与资源,只有当用户的身份合法后方可访问该系统的资源。Spring Security提供了默认的认证相关配置,开发者也可以根据自己实际的环境进行自定义身…...
Spring Security基础入门
本入门案例主要演示Spring Security在Spring Boot中的安全管理效果。为了更好地使用Spring Boot整合实现Spring Security安全管理功能,体现案例中Authentication(认证)和Authorization(授权)功能的实现,本案…...
Axure疑难杂症:母版菜单设置打开链接后菜单选中效果
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:菜单打开链接后子菜单选中效果 主要内容:母版设计、选中效果 应用场景:页面赋值 案例展示: 案例视频:...
4月份最新---Meta发明了一种很新的Transformer
在自然语言处理领域,当模型处理长上下文时,如何在纷繁的 Token 中精准捕捉关键信息、过滤无关干扰,始终是注意力机制优化的核心方向。标准多头注意力(Multi-Head Attention, MHA)通过查询 - 键 - 值(Q-K-V)的点积相似性计算注意力权重,虽能定位单个 Token 级别的语义关…...
Spring Boot知识点详解
打包部署 <!‐‐ 这个插件,可以将应用打包成一个可执行的jar包;‐‐> <build><plugins> <plugin> <groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐maven‐plugin</artifactId&g…...
基于 EFISH-SBC-RK3588 的无人机多光谱/红外热成像边缘计算方案
一、硬件架构设计 核心算力平台(EFISH-SBC-RK3588) 处理器性能:搭载 8 核 ARM 架构(4Cortex-A762.4GHz 4Cortex-A551.8GHz),集成 6 TOPS NPU 与 Mali-G610 GPU,支持多光谱图像实时融…...
字典与集合——测试界的黑话宝典与BUG追捕术
主题:“字典是测试工程师的暗号手册,集合是BUG的照妖镜” 一、今日目标 ✅ 掌握字典的「键值对暗号体系」与集合的「去重妖法」✅ 开发《测试工程师黑话词典》,让新人秒变老司机✅ 统计自动化测试结果中的高频BUG类型(附赠甩锅指…...
QT构建即时通讯应用--WebSocket全面解析与实战指南
概述 WebSocket协议因其低延迟和双向通信的能力而成为了现代Web和桌面应用程序的首选,Qt框架提供了强大的WebSocket支持,使得开发者可以轻松地集成这一技术到自己的项目中 WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。它允许服务器主动向客户端推…...
复杂性决策-思维训练
思维训练 1.模式识别 观察、复杂、不确定、波动、模糊 –找出必要和非必要因素 –识别重大威胁和机遇 2.系统分析 为复杂情景构建系统心智模型 利用模型识别模式做出预测,指定有效策略 3.心智敏锐度 利用不同层次的分析探索挑战的能力,对其他利益相关方在…...
缓存集群技术深度解析:从原理到实战
缓存集群技术深度解析:从原理到实战 一、缓存集群核心定位与架构选型 1. 集群模式核心价值 缓存集群通过数据分片、高可用保障、水平扩展解决单节点瓶颈,核心能力包括: 数据分片:将数据分散到多个节点,突破单节点内…...
Qt C++/Go/Python 面试题(持续更新)
目录 1、封装、继承、多态是什么? 2、final标识符的作用是什么? 3、介绍一下虚函数 4、介绍一下智能指针 5、介绍一下左值、右值、左值引用、右值引用 6、指针和引用有什么区别? 7、define和const的区别是什么? 8、C程序的…...
Spring Cloud Alibaba VS Spring Cloud
Spring Cloud Alibaba 与 Spring Cloud 组件对比 服务发现与注册中心 功能Spring CloudSpring Cloud Alibaba对比说明核心组件EurekaNacosNacos 支持动态配置管理、健康检查更灵活,且提供 DNS 服务发现能力。健康检查…...
containerd 配置代理
1.systemd unit file 为 containerd 服务创建一个 systemd 插入目录 mkdir /etc/systemd/system/containerd.service.d/创建名为 /etc/systemd/system/containerd.service.d/http-proxy.conf 的文件 添加 HTTP_PROXY 环境变量 [Service] Environment"HTTP_PROXYhttp:/…...
专家系统的基本概念解析——基于《人工智能原理与方法》的深度拓展
一、什么是专家系统 (一)基本思想与定义 1. 核心思想:知识与推理的分离 迄今为止,关于专家系统还没有一个公认的严格定义,一般认为: (1)它是一个智能程序系统; &…...
什么是公链?公链项目有哪些?公链项目开发
公链技术全景解析:定义、生态与开发指南(2025年深度版) 一、公链的本质与核心特征 1.1 公链的定义 公链(Public Blockchain)是一种完全开放、无需许可的区块链网络架构,其核心特征在于去中心化、透明…...
如何解析商品详情页面
解析商品详情页面是爬虫开发中的一个重要环节。由于商品详情页面通常包含丰富的信息,如商品名称、价格、描述、图片等,因此需要仔细分析页面结构并提取所需数据。以下是一个详细的步骤指南,展示如何使用 Java 和 Jsoup 解析商品详情页面。 一…...
Android 混合开发实战:统一 View 与 Compose 的浅色/深色主题方案
整个应用(包括 View 和 Compose 部分)的浅色/深色模式保持一致。以下是完整的解决方案: 全局配置方案 1. 基础主题设置 在 res/values/themes.xml 和 res/values-night/themes.xml 中定义统一的主题: <!-- values/themes.x…...
三国杀专业分析面板,立志成为桌游界的stockfish
三国杀专业分析面板 (SGSFish) GitHub仓库: 本项目是一个基于 Python 实现的三国杀专业分析面板,旨在模拟玩家决策过程,通过量化评估动作实体(卡牌/技能)的价值、考虑它们之间的相互影响(包括基于作用域的…...
解析 select 函数
解析 select 函数 select 函数是 Unix/Linux 系统中用于多路复用的系统调用,主要用于在多个文件描述符(file descriptors)上等待事件的发生。它允许程序同时监视多个 I/O 通道,并在任意一个通道准备好进行 I/O 操作时通知程序&am…...
对话模型和补全模型区别
对话模型和补全模型区别 什么是对话模型、补全模型 什么是 Completion 最基本地说,文本模型是一个经过训练的大型数学模型,旨在完成一项单一任务:预测下一个 token 或字符。这个过程被称为 completion,在您的旅程中您会经常遇到这个术语。 例如,当使用 completion 文本…...
计算机图形学实践:结合Qt和OpenGL实现绘制彩色三角形
以下是使用Qt和OpenGL实现绘制彩色三角形并添加颜色选择按钮的步骤: 一、创建OpenGL绘制组件 继承QOpenGLWidget实现自定义绘制类: // myopenglwidget.h #include <QOpenGLWidget> #include <QOpenGLFunctions_3_3_Core> #include <QO…...
十分钟应急响应——自定义工具链整合实战
核心思路 结合群联AI云防护的API和自定义脚本,实现攻击检测、节点切换、日志分析的端到端自动化。 技术实现步骤 1. 实时攻击检测脚本 使用Python监听群联系统日志,识别攻击特征: # monitor_attack.py import json import subprocess from…...
SpringCloud微服务架构设计与实践 - 面试实战
SpringCloud微服务架构设计与实践 - 面试实战 第一轮提问 面试官:马架构,请问在SpringCloud微服务架构中,如何实现服务注册与发现? 马架构:在SpringCloud中,Eureka是常用的服务注册与发现组件。服务提供…...
每日算法——快乐数、两数之和
202. 快乐数 class Solution { public:bool isHappy(int n) {unordered_set<int> result_set;while(true){int sum 0;while(n>0){sum (n%10)*(n%10);n/10;}if(sum1){return true;}else{if(result_set.find(sum) ! result_set.end()){return false;}result_set.inser…...
反射,枚举,lambda表达式
目录 反射枚举的使用Lambda表达式函数式接口语法Lambda表达式语法精简 变量捕获Lambda在集合List中的使用 反射 作用:在Java代码中,让一个对象认识到自己 比如一个类的名字,里面的方法,属性等 让程序运行的过程,某个对…...
matlab 绘图
1.三维绘图 % 原始数据(按行输入:x y z) data [1 2 3 ;5 56 234 ;32 34 67 1 2 5 ];% 提取坐标并生成网格(适用于surf函数的网格格式) x data(:,1); % X坐标(行数对应Y轴) y data…...
AI日报 - 2025年04月25日
🌟 今日概览(60秒速览) ▎🤖 AGI突破 | OpenAI o3模型展现行动能力,英国发布RepliBench评估AI自主复制风险,DeepMind CEO担忧AGI协调挑战。 模型能力向行动和自主性演进,安全与协调成为焦点。 ▎💼 商业动向…...
力扣面试150题--基本计算器
Day 31 题目描述 思路 (逆波兰表达式扩展) 初次思路:此题我遇到了几个难点 如何处理()如何处理-1和2-1中的负数还是减法问题 1-(-(12))如何处理多余的空格 我的做法如…...
各种各样的bug合集
一、连不上数据库db 1.可能是密码一大包东西不对; 2.可能是里面某个port和数据库不一样(针对于修改了数据库但是连不上的情况); 3.可能是git代码没拉对,再拉一下代码。❤ 二、没有这个包 可能是可以#注释掉。❤ …...
【25软考网工】第三章(3)虚拟局域网VLAN
一、虚拟局域网VLAN 1. VLAN基础 定义:根据管理功能、组织机构或应用类型对交换局域网进行分段而形成的逻辑网络。例如将大型网络划分为多个VLAN(如VLAN1-4)。 优势: 管理便利:便于对不同部门或功能进行分组管理安全隔…...
SFINAE(Substitution Failure Is Not An Error)
C 中的 SFINAE(替换失败并非错误) SFINAE(Substitution Failure Is Not An Error)是 C 模板元编程的核心机制之一,允许在编译时根据类型特性选择不同的模板实现。以下通过代码示例和底层原理,逐步解析 SFI…...
学习记录:DAY17
我的学习日志:前端开发练习 前言 只想畏缩在自己的床上,什么也不想干😰 我觉得有必要调整一下复习方针,不然容易白学。 我确实不太爱复习的人,尽量每天抽出时间来复习昨天的内容,周末总体复习一下一个星期…...
LibrePhotos本地部署打造个人云相册安全存储和分享家庭照片(1)
文章目录 前言1.关于LibrePhotos2.本地部署LibrePhotos3.LibrePhotos简单使用4. 安装内网穿透5.配置LibrePhotos公网地址6. 配置固定公网地址 前言 手机里塞满了珍贵回忆,却担心一不小心就被偷看?别怕,今天我就教你一个绝招——使用LibrePho…...
Android插拔U盘导致黑屏问题排查
问题现象: 车机大屏偶先插拔带音乐的U盘,导致车机系统短暂黑屏的情况。 日志中可以看到vold进程unmount了两次分区,一次是U盘分区,一次是/storage/emulated/0分区: I vold : Start killProcesses: /mnt/media_rw/…...