前言

最近公司用到Canal来做从MySQL到Tidb的数据同步,用到HA模式Canal,记录一下HA模式的工作原理。

Canal的架构模式

Canal是利用binlog日志来做数据同步,canal伪装成从节点从主节点dump binlog日志,所以canal分为server和client,server负责dump binlog日志,client负责处理binlog日志(比如入库)。

Canal客户端HA模式运行原理

Canal的HA模式是需要zk来保证,zk用来保存canal客户端的一些元数据,例如服务端节点信息(\otter\canal\cluster )、运行的服务节点信息(\otter\canal\destinations\{自定义分区}\running)、客户端节点信息(\otter\canal\destinations\{自定义分区}\cluster)、客户端拦截器配置信息(\otter\canal\destinations\{自定义分区}\1001\filter)、客户端binlog同步节点信息(\otter\canal\destinations\{自定义分区}\1001\cursor)、运行的客户端信息(\otter\canal\destinations\{自定义分区}\1001\running)

HA模式Canal客户端启动时,首先链接zk,在zk上注册客户端节点(\otter\canal\destinations\{自定义分区}\1001\running)服务,当没有客户端注册时则注册成功,已有客户端注册时则当前客户端进入静默状态(线程挂起),然后监听前一个客户端在zk注册节点变化,当前一个客户端退出(在zk上的注册节点信息发生变化)则通知所有静默状态的服务端进行zk服务注册,当有一个客户端注册成功时其他客户端则再此进入静默状态并且进行zk注册节点监听。

当客户端再zk上成功注册服务时,其他客户端会再次进入静默状态,进入静默状态核心思想是使用JUC下的AQS,详细如下:

Canal学习笔记(客户端)的更多相关文章

  1. MongoDB学习笔记~客户端命令行的使用

    回到目录 当我们从MongoDB网站下载安装包之后,它会伴随有一系列的工具,服务器程序mongod是我们耳熟能详的了,客户端mongo和性能检测mongostat我们可能就没有用过了,今天主要是介绍一 ...

  2. Canal学习笔记(服务端)

    canal服务端 canal服务端有两种运行模式,一种单机模式,一种HA运行模式(zk保证) 单机模式:同步的binlog节点信息保存在本地(/conf/{自定义分区文件夹}/),meta.dat H ...

  3. redis学习笔记——客户端

    Redis服务器是典型的一对多服务器程序:一个服务器可以与多个客户端建立网络连接,每个客户端可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令请求,并向客户端返回命令回复. 对于每个与服务 ...

  4. SuperSocket 学习笔记-客户端

    客户端: 定义 private AsyncTcpSession client; 初始化 client = new AsyncTcpSession(); client.Connected += Clie ...

  5. Metasploit学习笔记——客户端渗透攻击

    1.浏览器渗透攻击实例——MS11-050安全漏洞 示例代码如下 msf > use windows/browser/ms11_050_mshtml_cobjectelement msf exp ...

  6. MongoDB学习笔记系列

    回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...

  7. MongoDB学习笔记系列~目录

    MongoDB学习笔记~环境搭建 (2015-03-30 10:34) MongoDB学习笔记~MongoDBRepository仓储的实现 (2015-04-08 12:00) MongoDB学习笔 ...

  8. Dynamic CRM 2013学习笔记(十)客户端几种查询数据方式比较

    我们经常要在客户端进行数据查询,下面分别比较常用的几种查询方式:XMLHttpRequest, SDK.JQuery, SDK.Rest. XMLHttpRequest是最基本的调用方式,JQuery ...

  9. [Firefly引擎][学习笔记四][已完结]服务器端与客户端的通讯

    原地址:http://www.9miao.com/question-15-54981.html 传送门:学习笔记一学习笔记二学习笔记三 前言:学习笔记三是模块封装,这个在持续开发中会不断更新, 因为写 ...

随机推荐

  1. python 修改的函数装饰器

    把好的代码记录下来 方便以后学习 修改的函数参数装饰器 from functools import wraps import time import logging def warn(timeout) ...

  2. UNIX 系统下退出 git commit 编辑器

    如果是 Emacs 编辑器,输入 Ctrl X + Ctrl S(保存),再输入Ctrl X + Ctrl C(退出) 如果是VIM编辑器,输入 ESC + :wq UNIX 系统默认打开的是 Ema ...

  3. Module 的语法

    模块功能主要由两个命令构成:export和import.export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能. 一个模块就是一个独立的文件.该文件内部的所有变量,外部无法 ...

  4. js如何实现重载

    所谓重载,就是一组相同的函数名,有不同个数的参数,在使用时调用一个函数名,传入不同参数,根据你的参数个数,来决定使用不同的函数!但是我们知道js中是没有重载的,因为后定义的函数会覆盖前面的同名函数,但 ...

  5. web安全之机器学习入门——3.1 KNN/k近邻

    目录 sklearn.neighbors.NearestNeighbors 参数/方法 基础用法 用于监督学习 检测异常操作(一) 检测异常操作(二) 检测rootkit 检测webshell skl ...

  6. expdp/impdp数据泵用法

    --创建目录映射别名 create directory JHRA as 'C:\DataBaseBak\hra_dev\JHRA' --导出数据 expdp JHRA/JHRA@hra_dev dir ...

  7. Django高级实战 开发企业级问答网站完整

    资源获取链接点击这里 Django高级实战 开发企业级问答网站 从实际需求分析开始,实现当今主流知识问答应用的功能,包括动态.文章.问答.私信.消息通知.搜索.个人中心,打造企业级知识问答网站,由此全 ...

  8. Spring+MVC Controller层接收App端请求的中文参数乱码问题。

    在正文之前,说明下Filter的作用: 过滤器顾名思义就是进行过滤的,可以实现代码的定向执行和预处理.通俗点说法filter相当于加油站,request是条路,response是条路,目的地是serv ...

  9. Context 解析

    ·  ContextWrapper比较有意思,其在SDK中的说明为“Proxying implementation ofContext that simply delegates all of its ...

  10. 移动端各种滚动场景需求的插件better-scroll

    移动端各种滚动场景需求的插件: 文档地址: better-scroll:https://ustbhuangyi.github.io/better-scroll/doc/zh-hans/#better- ...