数据库中间件Mycat源码解析(四):Mycat的心跳管理

手把手调试AD9653的LVDS数据采集:从VIO抓波形到用F0/F8帧对齐的实战心得 本文详细介绍了AD9653高速ADC与Xilinx 7系列FPGA(如7z035)的LVDS数据采集调试实战经验。从硬件环境搭建、Vivado工具链配置到LVDS数据对齐技巧,重点分享了利用VIO抓取波形和使用F0/F8帧对齐的实用方法,帮助工程师快速解决高速数据采集系统中的信号完整性问题。 阅读详情

MyCat的服务端在启动时会执行node.startHeartbeat()去设置每个node的heartbeat的状态为DBHeartbeat.OK_STATUS,然后针对每个node节点启动一个线程去对对应的node发送heartbeat sql(比如select user())进行心跳检测。

private Runnable dataNodeHeartbeat() {
		return new Runnable() {
			@Override
			public void run() {
				timerExecutor.execute(new Runnable() {
					@Override
					public void run() {
						Map<String, PhysicalDBPool> nodes = config
								.getDataHosts();
						for (PhysicalDBPool node : nodes.values()) {
							node.doHeartbeat();
						}
					}
				});
			}
		};
	}

heatbeat类会调用heartbeat方法。

public void heartbeat() {
		final ReentrantLock lock = this.lock;
		lock.lock();
		try {
			//改变状态
			if (isChecking.compareAndSet(false, true)) {
				MySQLDetector detector = this.detector;
				if (detector == null || detector.isQuit()) {
					try {
						detector = new MySQLDetector(this);
						detector.heartbeat();
					} catch (Exception e) {
						LOGGER.warn(source.getConfig().toString(), e);
						setResult(ERROR_STATUS, detector, null);
						return;
					}
					this.detector = detector;
				} else {
					detector.heartbeat();
				}
			} else {
				MySQLDetector detector = this.detector;
				if (detector != null) {
					if (detector.isQuit()) {
						isChecking.compareAndSet(true, false);
					} else if (detector.isHeartbeatTimeout()) {
						setResult(TIMEOUT_STATUS, detector, null);
					}
				}
			}
		} finally {
			lock.unlock();
		}
	}
它会调用detector属性的heartbeat方法。

public void heartbeat() {
		lastSendQryTime = System.currentTimeMillis();
		MySQLDataSource ds = heartbeat.getSource();
		String databaseName = ds.getDbPool().getSchemas()[0];
		String[] fetchColms={};
		if (heartbeat.getSource().getHostConfig().isShowSlaveSql() ) {
			fetchColms=MYSQL_SLAVE_STAUTS_COLMS;
		}
		if (heartbeat.getSource().getHostConfig().isShowClusterSql() ) {
			fetchColms=MYSQL_CLUSTER_STAUTS_COLMS;
		}
		OneRawSQLQueryResultHandler resultHandler = new OneRawSQLQueryResultHandler( fetchColms, this);
		sqlJob = new SQLJob(heartbeat.getHeartbeatSQL(), databaseName, resultHandler, ds);
		sqlJob.run();
	}
它会获取数据源和数据库名,然后创建并注册一个OneRawSQLQueryResultHandler到sqlJob,再由这个job发送sql到数据库将结果取回交给注册的handler处理。

public boolean onRowData(String dataNode, byte[] rowData) {
		RowDataPacket rowDataPkg = new RowDataPacket(fieldCount);
		rowDataPkg.read(rowData);
		String variableName = "";
		String variableValue = "";
		//fieldcount为2可能是select x也可能是show create table命令
		if(fieldCount==2 && (fetchColPosMap.get("Variable_name")!=null || fetchColPosMap.get("Value")!=null)){
			Integer ind = fetchColPosMap.get("Variable_name");
			if (ind != null) {
				byte[] columnData = rowDataPkg.fieldValues.get(ind);
                String columnVal = columnData!=null?new String(columnData):null;
                variableName = columnVal;
            }
			ind = fetchColPosMap.get("Value");
			if (ind != null) {
				byte[] columnData = rowDataPkg.fieldValues.get(ind);
                String columnVal = columnData!=null?new String(columnData):null;
                variableValue = columnVal;
            }
            result.put(variableName, variableValue);
		}else{
			for (String fetchCol : fetchCols) {
				Integer ind = fetchColPosMap.get(fetchCol);
				if (ind != null) {
					byte[] columnData = rowDataPkg.fieldValues.get(ind);
	                String columnVal = columnData!=null?new String(columnData):null;
	                result.put(fetchCol, columnVal);
				} else {
					LOGGER.warn("cant't find column in sql query result " + fetchCol);
				}
			}
		}
		return false;
	}
如果客户端发送reload指令或stop指令到服务端就会修改hearbeat的状态为stop,停止进行心跳检测。




YOLOv11缝合改进Conv | SAConv在YOLOv11中的应用可切换空洞卷积与性能提升(附代码) 在本篇文章中,我们将深入探讨如何通过引入**SAConv**(Switchable Atrous Convolution,可切换空洞卷积)来优化YOLOv11网络结构,特别是在卷积操作方面的创新。我们会解析SAConv的核心原理和架构设计。 阅读详情

相关推荐

别再傻傻分不清!Synopsys DC综合中link/target/symbol/synthetic四大库的保姆级配置指南

本文详细解析了Synopsys DC综合中link_library、target_library、symbol_library和synthetic_library四大库的配置方法,帮助工程师避免常见错误。通过实战示例和调试技巧,指导如何正确设置工艺库与IP库,提升数字芯片设计效率。

weixin_42562079的博客 423

Mycat心跳机制梳理

本文重点梳理了一下Mycat心跳机制。

中间件兴趣圈 5798

Allegro17.4原理图-PCB双向联动技巧:从网表生成到同步高亮

本文深入解析了Cadence Allegro 17.4中原理图与PCB的深度双向联动技巧。核心在于通过精准的网表生成与管理、实时的跨窗口交互高亮与信号追踪,以及元件与封装的智能匹配更新,构建高效协同设计工作流。掌握这些技巧能显著提升高速、高密度电路设计的效率与准确性,实现从逻辑设计到物理实现的无缝衔接。

weixin_29178069的博客 358

mycat心跳检测mysql_MyCAT日志分析

MyCAT日志对于了解MyCAT的运行信息不可获取,譬如MyCAT是否采用读写分离,对于一个查询语句,MyCAT是怎样执行的,每个分片会分发到哪个节点上等等。默认是info级别,通过log4j.xml可将其设置debug级别,这样就可获得更多有关MyCAT运行的内部信息。下面通过对MyCAT的启动以及执行一个查询语句来分析MyCAT的运行流程。Here We Go!Mycat的启动日志输入如下:p...

weixin_33198642的博客 1051

国内合规开通ChatGPT Plus实操指南:银行卡绑卡与支付全解析

ChatGPT Plus 是 OpenAI 官方推出的高级订阅服务,基于 GPT-4o 多模态大模型提供语音交互、图像理解与长上下文处理能力。其核心使用前提在于完成合规的国际支付绑定,而非网络接入方式。技术原理上,OpenAI 采用 Stripe 支付网关进行风控校验,重点匹配银行跨境权限、卡片类型(仅支持 Visa/Mastercard/Amex 信用卡)、BIN 号段及地理位置一致性。该机制决定了95%的绑卡失败源于银行端配置缺失或卡片不兼容,而非网络问题。实际应用中,PayPal 作为中间支付层可显著

chuannaoxuan4674的博客 1935

ICESat-2数据下载及处理分析随笔

ICESat-2全称是Ice,Cloud and land Elevation Satellite -2。看名字我们能知道它的任务是测ice,cloud和land elevation,而且这是一个Satellite,是一颗卫星。那么这里我们就要分清ICESat-2和ATLAS的关系,ICESat-2是星载平台,是一个space observatory,ATLAS是这个星载平台上搭载的单光子激光雷达系统。

u011322358的博客 1万+

mycat 源码分析

Druid 源码学习 Druid SQL 解析器的解析过程 Druid SQL 解析器的解析过程 参考URL: https://segmentfault.com/a/1190000008120254 [推荐]Druid SqlParser理解及使用入门 参考URL: https://www.cnblogs.com/lay2017/p/9840394.html public class Parser...

西京刀客 1834

AUTOSAR进阶图解==>AUTOSAR_SWS_CANNetworkManagement

本文介绍了AUTOSAR架构中的CAN网络管理(CanNm)模块,主要内容包括: 模块概述:CanNm是协调CAN网络节点状态转换的基础组件,采用去中心化设计,通过周期性发送网络管理PDU保持网络活跃状态,支持网络唤醒、睡眠和部分网络功能。 架构设计:CanNm位于AUTOSAR中间层,连接上层通信管理器(ComM)和底层CAN接口(CanIf),包含状态管理、PDU处理和定时器管理等子组件。 状态机设计:定义了三种主要模式(总线睡眠、准备睡眠和网络模式)及其转换逻辑,网络模式又包含重复消息、正常操作和准备

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 2040

MyCAT2的主从配置

MyCAT2的主从配置

qq_52183856的博客 225

CEEMDAN算法及其应用

本博文主要介绍CEEMDAN算法的原理及其在信号去噪方面的应用

总结论文中的算法并给出论文的复现代码 6万+

Unity 之jenkins自动打包

1.Jenkins 是什么? jenkins官方网址:https://www.jenkins.io/zh/ Jenkins是一款开源 CI&CD(持续集成&持续部署) 软件,用于自动化各种任务,包括构建、测试和部署软件。 简易安装:Jenkins 是一个基于 Java 的独立程序,可以立即运行,包含 Windows、Mac OS X 和其他类 Unix 操作系统。Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。 插件扩展:通过更新中心中的

TxNet 2132

Mycat

Mycat官网:http://www.mycat.io/ mycat踩过的坑: 1.垮库join,2个表以上不支持 2.垮库join和排序,导致oom数据量不大 3.不支持高级语法 4.jdbc跨异构库不稳定 5.心跳不稳定 6.主从读写分离,有时路由不准确,应该路由到从表 7.读写分离,主从偶尔心跳检测不稳定...

BOUBING112的专栏 360

【AI智能体】Claude Code 核心记忆文件 CLAUDE.md实战操作详解

Claude Code 核心记忆文件 CLAUDE.md实战操作详解

congge 5457

【亲测免费】MyCAT 数据库中间件安装及使用教程:从入门到精通

MyCAT 是一款开源的数据库中间件,被誉为"企业级大型数据库集群"解决方案,它能够替代 MySQL 并支持事务和 ACID 特性,可作为企业数据库的 MySQL 集群使用,甚至能替代昂贵的 Oracle 集群。作为一款新型数据库中间件,MyCAT 融合了内存缓存技术、NoSQL 技术和 HDFS 大数据,是传统数据库与新型分布式数据仓库的结合体。 ## 📋 准备工作:环境要求与依赖 在开始

gitblog_00863的博客 857

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

MyCAT 源码分析

《MyCAT源码阅读指南》摘要:MyCAT作为分布式数据库中间件,其源码阅读价值体现在:1)深入理解分库分表、读写分离等核心机制;2)学习SQL解析、路由优化等关键技术实现;3)掌握复杂系统架构设计。核心模块包括SQL解析(Druid实现)、路由计算、配置管理、NIO通信及心跳高可用机制。建议采用分模块调试法,从简单SQL跟踪入手,结合官方文档理解设计思想。需注意处理异步编程、第三方库依赖等挑战,通过断点调试观察执行流程。

油墨香^-^的博客 481

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

MySQL 高可用:mysql+mycat实现数据库分片(分库分表)

什么是MYCAT: 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品 一个新颖的数据库中间件产品    Mycat关键...

6万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

数据库中间件Mycat源码解析(一):初识Mycat

Mycat是国内一款基于阿里Cobar的面向企业级应用开发的数据中间件,社区较为活跃,它有很多非常实用的特性,比如融合了内存缓存技术,NoSQL技术和传统关系型数据库技术,它拥有心跳管理功能能完成中间件与数据库之间保活的任务,它实现了负载均衡使资源能够得到充分使用,它既能适应传统应用开发中对数据库的需求又能适应当前比较火的大数据开发对数据库的需求等等。部分公司实用它替代了昂贵的oracle数据库集

flashflight的专栏 1003

Mycat架构与源码精析之一“整体架构”

很久没更新博客啦!^-^ 由于个人兴趣,最近研究了下Mycat这个中间件,通读了1.5.2版本的源码。所谓独乐乐不如众乐乐,笔者打算把其中的收获全部分享给大家。所以,近期将会有一系列关于Mycat的博客更新,涵盖Mycat的架构和源码的分析,并重点指出其中设计精要的地方,大家记得关注哦。 这是系列第一篇,介绍Mycat的整体架构。 开局一张图(此图来源于网络): 从上...

888

MySQL分布式集群之MyCAT

本文转自系列文章,感谢原作者: MySQL分布式集群之MyCAT(一)简介(修正) :http://blog.itpub.net/29510932/viewspace-1664499/ MySQL分布式集群之MyCAT(二)schema详解(修正):http://blog.itpub.net/29510932/viewspace-1667814/ MySQL分布式集群之MyCAT(三)rul

木生的博客 3568

MyCat - 使用篇(5)

作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!

smart_an的专栏 1073

MyCat - 源代码篇(1)

作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!进入了源代码篇,我们先从整体入手,之后拿一个简单流程前端连接建立与认证作为例子,理清代码思路和设计模式。然后,针对每一个重点模块进行分析。

smart_an的专栏 1242

探索未来数据库新边界:Mycat 1.6 - 开源分布式数据库中间件的终极指南

Mycat 1.6 作为一款高性能开源分布式数据库中间件,正在重新定义企业级数据管理的未来。它通过透明化的分布式处理能力,让传统数据库获得弹性扩展、高可用架构和负载均衡的核心优势,成为中小微企业数字化转型的关键基础设施。 ## 🚀 为什么选择 Mycat 1.6?核心优势解析 在数据爆炸的时代,单一数据库往往面临性能瓶颈和扩展性难题。Mycat 1.6 凭借以下特性成为理想解决方案: -

gitblog_00039的博客 450

MyCat:第九章:总结,超通俗解析CountDownLatch用法和源码

·一个新颖的数据库中间件产品支持mysql集群,或者mariadb cluster,提供高可用性数据分片集群。你可以像使用mysql一样使用mycat。对于开发人员来说根本感觉不到mycat的存在。 Mycat支持的数据库 Mycat的分片策略 概念说明 逻辑库(schema) : 前面一节讲了数据库中间件,通常对实际应用来说,并不需要知道中间件的存在,业务开发人员只需要知道数据库的概念,所以数据库中间件可以被看做是一个或多个数据库集群构成的逻辑库。 逻辑表(table): 既然有逻辑库,那么就会

m0_64867220的博客 138

mycat

Mycat目录说明 bin:启动目录 conf:配置文件目录 server.xml:是Mycat服务器参数调整和用户授权的配置文件 schema.xml:是逻辑库定义和表以及分片定义的配置文件 rule.xml: 是分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下,配置文件修改需要重启MyCAT log4j.xml: 日志存放在logs/log中,每天...

xyz的博客 233

mycat快速体验(转)

横空出世的MyCat截至到2015年4月,保守估计已经有超过60个项目在使用,主要应用在电信领域、互联网项目,大部分是交易和管理系统,少量是信息系统。比较大的系统中,数据规模单表单月30亿。本人也初步尝鲜,体验了一把,见以下描述,供大家参考。 MyCAT 是使用 JAVA 语言进行编写开发,使用前需要先安装 JAVA 运行环境(JRE),由于 MyCAT 中使用 了 JDK7...

WGH100817的博客 184
上一篇: 数据库中间件Mycat源码解析(三):Mycat的SQL解析和路由
下一篇: 开发一款开源爬虫框架系列(一):分析nutch,scrapy的爬虫设计
闲庭细步
博客等级 码龄18年 304粉丝 86原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值