[数据库]---mysql数据库 使用binlog+canal或binlake进行数据库的复制

前言

在进行冷热分离的时候,需要将数据实时的复制在历史数据库中,我们使用的是binlog+canal的思想,将每次数据库数据的变更转换成消息发出来,然后再操作这些消息达到数据复制的
在京东,实现同样功能的组件,叫binlake
接下来详细说下:

1.Binlog

mysql有多种日志,常见的有:

  1. 错误日志(ErrorLog)
  2. 更新日志(UpdateLog)
  3. 二进制日志(Binlog)
  4. 查询日志(QueryLog)
  5. 慢查询日志(SlowQueryLog)

Binlog可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,此外Binlog是事务安全型的。
Binlog一般作用是可以用于实时备份,与master/slave主从复制结合。

2.Canal

Canal是应阿里巴巴存在杭州和美国的双机房部署,存在跨机房同步的业务需求而提出的。
Canal作为阿里巴巴提供的开源的数据抽取项目,能够做到实时抽取,原理就是伪装成mysql从节点,读取mysql的binlog,生成消息,客户端订阅这些数据变更消息,处理并存储
github : https://github.com/alibaba/canal

3.Binlake

BinLake坚持技术和资源共享的原则,为京东商城各个业务部门提供统一的资源和技术服务,各个业务部门通过使用BinLake服务,避免的重复投入人力对同一项技术进行研究,避免了各个部门为了满足同一种业务需求而重复申请资源,进而避免的资源浪费,避免的各个业务部门重复投入人力和物力进行数据库日志采集、管理、分发、订阅系统的运维。

Binlake架构图:在这里插入图片描述

1.BinLake总共包括三大服务组件:

1.1 Wave服务

Wave服务完成实际的数据库Binary Log的持续采集、管理和分发写入到下游的消息发布和订阅系统中。在BinLake集群中会存在N个Wave服务,这些Wave服务共同组成一个无状态集群。

1.2 Tower服务

Tower服务是整个BinLake的管理中心,提供BinLake接入服务的申请、完成Wave服务、数据源、接入应用的管理。当用户申请接入到BinLake中时,会登录到Tower服务提供的申请界面,填写申请接入BinLake的应用信息、数据源信息和Topic信息,Tower服务会按照用户提供的信息做如下判断,并完成用户接入申请,接入流程如下:

在这里插入图片描述
如果不同申请者申请相同数据源的数据采集,由Tower管理端依据其申请的采集规则(如指定表,指定库),如果规则相同,默认复用相同规则的Topic,也可强制生成新的Topic进行订阅。

1.3 Judge服务

Judge服务主要完成两个功能:Wave节点监控信息采集和loadBalance决策。
Wave节点监控信息采集:
通过在各个Wave服务节点部署agent采集各个Wave服务节点上的监控信息,包括:服务器的内存使用、系统负载、CPU负载、网络负载、JVM的堆内存使用、GC信息、每个Wave服务中的instance个数等,采集到的所有这些信息都会在后续的loadBalance中作为基础metics,参与到最终的loadBalance决策中。
loadBalance决策:
新应用接入到BinLake时,若需要采集的数据源在BinLake现有的数据源池中不存在,则需要针对于新的数据源在相应的Wave服务上创建对应的instance(数据源与instance是1对1的关系)。那么在创建instance的时候,就需要选在在哪个Wave服务上创建。这时就会请求Judge服务提供的loadBalance决策接口,若Judge服务中没有配置loadBalance plugin,则会返回一个随机的Wave服务节点的IP,那么就会在该随机的Wave服务上创建instance;若配置了loadBalance的plugin,则从Judge服务提供的loadBalance决策接口获得建议Wave服务节点,并从该节点创建新的instance。

2.BinLake依赖于两大外部服务:

2.1 ZooKeeper

BinLake使用zookeeper服务进行Wave无状态集群的管理、状态同步和消息通知等,包括:
【1】Instance的自动化创建与初始化
【2】Instance的HA
【3】数据源offset实时追踪
【4】binlog分发失败重试
【5】数据源切换自适配
【6】Tower元数据管理
【7】instance消息通知

2.2 消息发布与订阅系统

目前BinLake可以无缝集成JMQ和Kafka,从而进行消息的发布和订阅管理。instance采集到的BinLog Event会发布到JMQ或者Kafka的Topic中,实际的业务应用只需要订阅和消费对应的topic,既可以实时的获得BinLog Event,并在后续的业务逻辑中对获得的Binlog Event进行处理即可。

BinLake部署拓扑

在BinLake服务实际部署时,其拓扑结构如下:
在这里插入图片描述
对上述部署拓扑图说明如下:

(1)一台Tower服务器:用于用户元数据、过滤规则、应用和订阅信息管理

(2)2N+1台ZooKeeper服务器:用于构建一个zookeeper集群,从而进行Wave集群管理和消息通知等

(3)一台Judge服务器:用户采集负载信息,并提供负载均衡建议决策。其中负载信息的采集是通过部署在各个Wave服务器上的Judge-Agent进程定期推送给Judge服务的

(4)N台Wave服务器:构成Wave集群。每台Wave服务器上部署两种服务:

【1】Wave服务:用于数据库binary log的采集并分发给下游MQ集群(Kafka或者JMQ)

【2】Judge-Agent服务:用于定期采集Wave服务器的系统以及Wave服务的负载和监控信息,并调用Judge服务提供的Restful接口,推送给Judge服务

(5)N台已经存在的线上MySQL服务器:不属于BinLake提供的服务器,是使用的已经存在的MySQL服务器,作为BinLake的数据源

(6)N台已经存在的MQ服务器:不属于BinLake提供的服务器,是已经存在的MQ服务器,处于Wave服务的下游,Wave服务会将采集到的Bianry Log Events分发给MQ集群中的Topic

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

加密算法概念简介--MD5、SHA、DES、3DES、AES、RSA、ECC

MD5MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字&…

MAC下配置ZSH

MAC下面的终端是神器。而且苹果非常贴心的为我们准备好了ZSH。 可惜ZSH不是很好用,需要配合一些插件和模板:oh-my-zsh将bash切换为zsh chsh -s /bin/zsh其实还可以用which来定位(特别是ubuntu的童鞋) chsh -s which zsh 直接用zsh…

搭建: canal部署与实例运行

搭建: canal部署与实例运行 数据库读log同步用 详见下面

MAC下使用OpenSSL生成私钥和公钥

MAC OS自带了OpenSSL,直接在命令行里使用OPENSSL就可以。打开命令行工具,然后输入 openssl打开openssl,接着只要三句命令就可以搞定。1、打开Terminal--cd 到指定文件夹,如桌面Mac:~/Desktop $ openssl2、第一句命令:生成私钥&…

idea插件开发(01)---最简单的helloworld版,不需要知道原理,先跟我做一个最简单的弹框插件

前言 用了那么多idea插件,也想自己做一个插件,下面就是入门版本 你不需要先知道所有的概念,先跟着我的步骤做一个小;例子,后面再说原理 相关概念看后面一篇 本次以windos系统为例 开始 1.你得安装一个环境,供idea插件的开发使用 下载地址: https://www.jetbrains.com/idea/…

苹果封装的对称加密和非对称加密API

一、信息摘要算法5&#xff1a;MD51.系统库位置&#xff1a;<CommonCrypto/CommonHMAC.h>。2.非加密算法&#xff0c;属于哈希散列&#xff0c;不可逆&#xff0c;用于检验数据完整性。二、安全散列(哈希)算法SHA&#xff1a; 1.包含的散列算法&#xff1a;SHA-1&#xf…

RSA算法原理

一、RSA算法数论&#xff1a;将两个大素数相乘十分容易&#xff0c;但是想要对其乘积进行因式分解却极其困难&#xff0c;因此可以将乘积公开作为加密密钥。二、RSA算法涉及三个参数&#xff0c;n、e1、e2。三、公私钥生成过程1、首先&#xff0c;需要两个大质数&#xff0c;p和…

idea插件开发(02)---相关概念介绍

上一篇已经介绍了idea插件开发最简单的一个例子 本篇来说说相关概念,部分概念是网上抄的,网友的不同说法,但大致都是同一个意思 1.idea介绍 idea整个组件结构是基于PicoContainer的,他是一个嵌入式的Ioc容器,有点像Spring的容器 我们做的idea插件,作为扩展功能组件,可以添加到…

ECC椭圆曲线加密算法原理

比特币使用椭圆曲线算法生成公钥和私钥&#xff0c;选择的是secp256k1曲线。与RSA&#xff08;Ron Rivest&#xff0c;Adi Shamir&#xff0c;Len Adleman三位天才的名字&#xff09;一样&#xff0c;ECC&#xff08;Elliptic Curves Cryptography&#xff0c;椭圆曲线加密&…

mysql报错 DuplicateKeyException分析与解决

在做数据库同步的时候,发现一个错误,mysql报错如下: org.springframework.dao.DuplicateKeyException: ### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:XXX ### The error may involve com.jd.medicine.b2…

[运维]---linux机器一般监控用到的概念记录

发布在linux上的机器,一般我们需要监测各项数据来证实服务器是没问题的, 如果出现问题,我们也可以通过以下指标找到问题的方向 容器指标硬件指标磁盘指标系统指标网络指标 容器指标 线程数 -当前容器内线程总数&#xff08;平均到每个核的线程数&#xff09;进程数 -当前容器…

SHA算法原理

一、SHA1算法简介 安全哈希算法&#xff08;Secure Hash Algorithm&#xff09;主要适用于数字签名标准&#xff08;Digital Signature Standard DSS&#xff09;里面定义的数字签名算法&#xff08;Digital Signature Algorithm DSA&#xff09;。对于长度小于2^64位的消息&am…

[数据库]---mysql 插入sql之 INSERT INTO和INSERT IGNORE INTO和REPLACE INTO和ON DUPLICATE KEY UPDATE比较应用

mysql插入一条数据方式有四种,接下来逐个说明验证: 前提: 有一个表,作为本次测试: CREATE TABLE zs_test (id int(11) NOT NULL AUTO_INCREMENT,order_id int(11) DEFAULT NULL,name varchar(255) DEFAULT NULL,PRIMARY KEY (id),UNIQUE KEY order_id_index (order_id) ) EN…

DES加密算法原理

一、DES算法理论 本世纪五十年代以来&#xff0c;密码学研究领域出现了最具代表性的两大成就。其中之一就是1971年美国学者塔奇曼 &#xff08;Tuchman&#xff09;和麦耶&#xff08;Meyer&#xff09;根据信息论创始人香农&#xff08;Shannon&#xff09;提出的「多重加密有…

[python]---从java到python(01)---基础与入门上手

前言 我本是java派的,已经有几年了,直接也接触过其他语言,比如从最早的汇编语言到高级语言始祖的C; 但是近来越发觉得python很火,现在以我的视角开始写入门python基础,算是入坑了; 我的计划是这个系列要更契合那些有java基础的同胞们,用你们已有的java基础,用对比的方式,更快的…

AES加密算法原理

一、摘要 AES&#xff08;The Advanced Encryption Standard&#xff09;是美国国家标准与技术研究所用于加密电子数据的规范&#xff0c;在2002年5月26日建立。它被预期能成为人们公认的加密包括金融、电信和政府数字信息的方法。AES 是一个新的可以用于保护电子数据的加密算法…

java获取本机ipv4,并使用Google Guava 缓存

java写个util,获取本机ip,并使用Google Guava 缓存起来 四个方法: 获取本机ipv4ip转16进制16进制转ip校验ip 首先,Google Guava使用的maven配置 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version&g…

OpenSSL库概述

一、背景技术SSL是Secure Sockets Layer&#xff08;安全套接层协议&#xff09;的缩写&#xff0c;可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时&#xff0c;提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户…

短信微信等消息发送系统的架构设计

消息发送系统 项目中的一种做法,简化总结如下 1.对外暴露接口1,供业务方调用 2.接口2的实现就是同步发送各种消息,比如发短信,发微信等,但不保证 3.对外暴露接口2,供业务方调用 4.接口2内部实现,也是发送消息,但是是通过mq解耦的 4.1.业务方调用接口2后,接口2的实现将会发送一…

大数运算库简介

一、技术背景在网络安全技术领域中各种加密解密算法的软件实现上始终有一个共同的问题就是如何在普通的 PC 机上实现大数的运算。我们日常生活中所应用的 PC 机内部字长多是32 位或 64 位&#xff0c;但是在各种加密解密的算法中为了达到一定的安全强度&#xff0c;都是要求在1…