一、背景

使用CanalAdmin来搭建一个canal集群。

二、机器情况

服务名 机器ip 备注
canal admin 127.0.0.1:8089 canal admin 机器
canal server 1 127.0.0.1:11111 本地canal server机器
canal server 2 127.0.0.1:11113 本地canal server机器
zk 127.0.0.1:2181,
127.0.0.1:3181,
127.0.0.1:4181
本地zk集群
mysql 127.0.0.1:3306 本地mysql

三、实现步骤

1、下载canal admin

  1. # 下载
  2. $ wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.admin-1.1.5.tar.gz
  3. # 解压,解压会产生多个目录 bin、conf等,最好新建一个文件夹,然后在解压
  4. tar -zxvf canal.admin-1.1.5.tar.gz

2、配置canalAdmin

3、初始化canal admin数据库

4、启动canal admin

  1. bin/startup.sh

5、登录canal admin

6、新建集群

7、集群配置

多个canal server同一个 canal 配置。(此处主要配置的是 canal.properties)

  1. # 需要修改的配置项
  2. # zk 的地址需要指定
  3. canal.zkServers = 127.0.0.1:2181,127.0.0.1:3181,127.0.0.1:4181
  4. # tcp, kafka, rocketMQ, rabbitMQ
  5. canal.serverMode = tcp
  6. # 此配置需要修改成 default-instance
  7. canal.instance.global.spring.xml = classpath:spring/default-instance.xml
  8. # 这个不需要指定,在admin上手动添加
  9. canal.destinations =

8、canal server端配置

下载canal server

  1. $ wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.deployer-1.1.5.tar.gz

1、第一台canal server的配置

vim canal_local.properties

  1. # register ip
  2. # canal server注册到外部zookeeper、admin的ip信息
  3. canal.register.ip = 127.0.0.1
  4. # canal server 的端口
  5. canal.port = 11111
  6. # canal server 的metrics 端口
  7. canal.metrics.pull.port = 11112
  8. # canal admin config
  9. canal.admin.manager = 127.0.0.1:8089
  10. # admin端口,canal 1.1.4版本新增的能力,会在canal-server上提供远程管理操作,默认值11110
  11. canal.admin.port = 11110
  12. # canal admin 应用下 canal.adminUser 的值
  13. canal.admin.user = admin
  14. # canal admin 应用下 canal.adminPasswd 下的值,但是需要通过 select password('${canal.adminPasswd}')获取,需要去掉前面的*号
  15. canal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441
  16. # admin auto register
  17. # 是否开启自动注册模式
  18. canal.admin.register.auto = true
  19. # 可以指定默认注册的集群名,如果不指定,默认注册为单机模式,集群的名字需要在 canal admin上存在
  20. canal.admin.register.cluster = canal_local
  21. # 注册到 canal admin 上server的名字,唯一有意义即可
  22. canal.admin.register.name = canal_server_01

2、第二台canal server的配置

vim canal_local.properties

  1. # register ip
  2. # canal server注册到外部zookeeper、admin的ip信息
  3. canal.register.ip = 10.223.40.76
  4. # canal server 的端口
  5. canal.port = 11113
  6. # canal server 的metrics 端口
  7. canal.metrics.pull.port = 11114
  8. # canal admin config
  9. canal.admin.manager = 127.0.0.1:8089
  10. # admin端口,canal 1.1.4版本新增的能力,会在canal-server上提供远程管理操作,默认值11110
  11. canal.admin.port = 11110
  12. # canal admin 应用下 canal.adminUser 的值
  13. canal.admin.user = admin
  14. # canal admin 应用下 canal.adminPasswd 下的值,但是需要通过 select password('${canal.adminPasswd}')获取,需要去掉前面的*号
  15. canal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441
  16. # admin auto register
  17. # 是否开启自动注册模式
  18. canal.admin.register.auto = true
  19. # 可以指定默认注册的集群名,如果不指定,默认注册为单机模式,集群的名字需要在 canal admin上存在
  20. canal.admin.register.cluster = canal_local
  21. # 注册到 canal admin 上server的名字,唯一有意义即可
  22. canal.admin.register.name = canal_server_01

9、启动canal server

  1. bin/startup.sh local

本地启动 canal server 后,发现已经注册到 canal admin上了,这是因为canal.deployer里的配置文件canal_local.properties里的canal.admin.register.auto = true导致的。即上一步的配置。

10、在admin上配置一个instance

可以使用 admin 上的 载入模板来实现。

  1. # mysql集群配置中的serverId概念,需要保证和当前mysql集群中id唯一 (v1.1.x版本之后canal会自动生成,不需要手工指定)
  2. # canal.instance.mysql.slaveId=0
  3. # mysql主库链接地址
  4. canal.instance.master.address=127.0.0.1:3306
  5. # mysql主库链接时起始的binlog文件
  6. canal.instance.master.journal.name=
  7. # mysql主库链接时起始的binlog偏移量
  8. canal.instance.master.position=
  9. # mysql主库链接时起始的binlog的时间戳
  10. canal.instance.master.timestamp=
  11. # mysql数据库帐号(此处的用户名和密码为 安装canal#mysql配置相关#创建canal用户 这一步创建的用户名和密码)
  12. canal.instance.dbUsername=canal
  13. # mysql数据库密码
  14. canal.instance.dbPassword=canal
  15. # mysql 数据解析编码
  16. canal.instance.connectionCharset = UTF-8
  17. # mysql 数据解析关注的表,Perl正则表达式,即我们需要关注那些库和那些表的binlog数据,也可以在canal client api中手动覆盖
  18. canal.instance.filter.regex=.*\\..*
  19. # table black regex
  20. # mysql 数据解析表的黑名单,表达式规则见白名单的规则
  21. canal.instance.filter.black.regex=mysql\\.slave_.*

11、查看那个canal server是正在运行中的

四、注意事项

1、集群模式下,canal.properties中的canal.instance.global.spring.xml 的值必须是 classpath:spring/default-instance.xml。主配置下,也需要指定zk的地址,不需要指定canal.destinations的值。

2、本地的canal.deployer 使用的配置文件是canal_local.properties,建议写最小的配置,其余的在admin上统一维护。

3、本地canal.deployer的启动采用 bin/startup.sh local即带上 local参数。

  1. cd /Users/huan/soft/canal/ha-deployer/deployper02
  2. bin/startup.sh local

4、集群模式下,虽然有多个canal server,但是只有一个是处于active状态,客户端连接的canal server是自动连接active状态的canal server。

  • 可以在zookeeper上通过如下命令查看。
  1. get /otter/canal/destinations/{instance的名字}/running
  2. {"active":true,"address":"127.0.0.1:11111"}
  • 也可以在多个canal server下的logs目录下,看instance的日志(eg: logs/customer/customer.log),只会看到一台机器上出现了启动成功的日志。

5、数据消费成功后,canal server会在zookeeper中记录下当前最后一次消费成功的binlog位点. (下次你重启client时,会从这最后一个位点继续进行消费)

  1. get /otter/canal/destinations/{instance的名字}/1001/cursor
  2. {"@type":"com.alibaba.otter.canal.protocol.position.LogPosition","identity":{"slaveId":-1,"sourceAddress":{"address":"localhost","port":3306}},"postion":{"gtid":"","included":false,"journalName":"mysql-bin.000016","position":123620,"serverId":1,"timestamp":1622699246000}}

6、canal client也支持HA,同时启动2个一样的客户端,只有一个可以消费到数据。

五、参考链接

1、https://github.com/alibaba/canal/wiki/Canal-Admin-QuickStart

2、https://github.com/alibaba/canal/wiki/AdminGuide

3、https://github.com/alibaba/canal/wiki/Canal-Admin-Guide

4、https://github.com/alibaba/canal/wiki/Canal-Admin-ServerGuide

CanalAdmin搭建Canal Server集群的更多相关文章

  1. spring boot 2.0.3+spring cloud (Finchley)1、搭建服务注册和发现组件Eureka 以及构建高可用Eureka Server集群

    一 .搭建Eureka 编写Eureka Server 由于有多个spring boot项目,采用maven多module的结构,项目结构如下: 新建一个maven主工程,在主maven的pom文件中 ...

  2. Linux下搭建Lotus Domino集群

    Linux下搭建Lotus Domino 集群 本文内容是Linux平台下Lotus Domino服务器部署案例(http://chenguang.blog.51cto.com/350944/1334 ...

  3. (2-2)SpringCloud-服务注册到Eureka Server集群并消费

    服务注册到Eureka Server集群 在(2-1)SpringCloue-Eureka实现高可用注册中心中我们搭建好了高可用的Eureka注册中心,下面我们要把服务注册到Eureka Server ...

  4. 虚拟机搭建Zookeeper服务器集群完整笔记

    虚拟机搭建Zookeeper服务器集群完整笔记 本笔记主要记录自己搭建Zookeeper服务器的全过程,默认已经安装部署好Centos7. 一.虚拟机下Centos无法联网解决方案 1.首先调整虚拟机 ...

  5. Storm环境搭建(分布式集群)

    作为流计算的开篇,笔者首先给出storm的安装和部署,storm的第二篇,笔者将详细的介绍storm的工作原理.下边直接上干货,跟笔者的步伐一块儿安装storm. 原文链接:Storm环境搭建(分布式 ...

  6. 搭建zookeeper+kafka集群

      搭建zookeeper+kafka集群 一.环境及准备 集群环境:   软件版本: 部署前操作: 关闭防火墙,关闭selinux(生产环境按需关闭或打开) 同步服务器时间,选择公网ntpd服务器或 ...

  7. centos7搭建ELK Cluster集群日志分析平台(三):Kibana

    续  centos7搭建ELK Cluster集群日志分析平台(一) 续  centos7搭建ELK Cluster集群日志分析平台(二) 已经安装好elasticsearch 5.4集群和logst ...

  8. 【精】搭建redis cluster集群,JedisCluster带密码访问【解决当中各种坑】!

    转: [精]搭建redis cluster集群,JedisCluster带密码访问[解决当中各种坑]! 2017年05月09日 00:13:18 冉椿林博客 阅读数:18208  版权声明:本文为博主 ...

  9. hadoop搭建伪分布式集群(centos7+hadoop-3.1.0/2.7.7)

    目录: Hadoop三种安装模式 搭建伪分布式集群准备条件 第一部分 安装前部署 1.查看虚拟机版本2.查看IP地址3.修改主机名为hadoop4.修改 /etc/hosts5.关闭防火墙6.关闭SE ...

随机推荐

  1. 完蛋,公司被一条 update 语句干趴了!

    大家好,我是小林. 昨晚在群划水的时候,看到有位读者说了这么一件事. 在这里插入图片描述 大概就是,在线上执行一条 update 语句修改数据库数据的时候,where 条件没有带上索引,导致业务直接崩 ...

  2. Excel导入保存附件和解析数据

    Excel导入保存附件和解析数据 一,前端上传附件的组件 1.先给一个下载模板的按钮 // 下载Excel模板 downLoadExcel: function () { window.open(GLO ...

  3. MongoDB索引的简单理解

    目录 MongoDB索引 1.语法准备 2.数据准备: 3.索引 3.1 唯一索引 3.2 单键索引 3.3 多键索引 3.4 复合索引 3.5 交叉索引 3.6 部分索引 3.7覆盖索引 3.8 全 ...

  4. 创建一个People类型,有年龄、工资、性别三个属性。 定义一个方法叫做找对象,找对象方法传过来一个人;

    创建一个People类型,有年龄.工资.性别三个属性. 定义一个方法叫做找对象,找对象方法传过来一个人: 首先如果性别相同,就输出"我不是同性恋", 如果对方是男的,年龄小于28, ...

  5. Sonarqube C# 配置资料整理

    c#配置方式: http://www.cnblogs.com/CoderAyu/p/9416376.html http://www.cnblogs.com/jingridong/p/6513884.h ...

  6. 在 Docker 的 CentOS7 镜像 中安装 mysql

    在 Docker 的 CentOS7 镜像 中安装 mysql 本来以为是个很简单的过程居然折腾了这么久,之前部署云服务器时也没有好好地记录,因此记录下. 特别提醒:本文的操作环境是在 Docker ...

  7. 集合Collection ----Set集合

    set系列集合:添加的元素是 无序,不重复,无索引的 ----HashSet: 无序,不重复,无索引 ------LinkHashSet<>:有序不重复无索引(添加顺序) ----Tree ...

  8. CodeForce-799C Fountains (记忆化DP)

    Fountains CodeForces - 799C 某土豪想要造两座喷泉.现在有 n 个造喷泉的方案,我们已知每个方案的价格以及美观度.有两种合法的货币:金币和钻石.这两种货币之间不能以任何方式转 ...

  9. CodeForce-791B Bear and Friendship Condition(并查集)

    Bear Limak examines a social network. Its main functionality is that two members can become friends ...

  10. 手机UI自动化之显示点触位置(触摸轨迹)

    上期回顾:Airtest源码分析--Android屏幕截图方式 不管是用Appium还是Airtest,或是其他手机UI自动化工具,你是不是经常遇到这种情况,代码明明执行了click或swipe,怎么 ...