canal 第6篇

本文介绍了Canal在不使用Zookeeper时的运行情况,以及在需要高可用(HA)时如何配置Zookeeper。详细步骤包括:搭建3节点Zookeeper集群、2节点Canal服务端及1个Mysql节点,下载并解压Canal,配置canal.properties和instance.properties,特别是设置Zookeeper地址和Canal实例名。启动服务后,Canalserver和client会抢占Zookeeper的running节点以确保只有一个在运行。当Canalserver节点故障时,HA切换会在Zookeeper中自动完成,客户端无需干预,确保数据消费的连续性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

canal如果不实现HA,也可以运行,此时不需要zookeeper。如果canal 需要实现HA,需要依赖zookeeper,核心配置如:canal.zkServers = master:2181,slave1:2181,slave2:2181

Canal Server+Canal Client HA
Canal server 和 client 端的高可用方案依赖 zookeeper, 启动 canal server 和 client 的时候
都会 zookeeper 读取信息. Canal 在 zookeeper 存储的数据结构如下
:/otter
└── canal
└── destinations
└── example # canal 实例名称
├── 1001 # canal client 信息
│ ├── cursor # 当前消费的 mysql binlog 位点
│ ├── filter # binlog 过滤条件
│ └── running # 当前正在运行的 canal client 服务器
├── cluster # canal server 列表
│ └── 10.93.61.86:11111
└── running # 当前正在运行的 canal server 服务器
Canal server 和 client 启动的时候都会去抢占 zk 对应的 running 节点, 保证只有一个
server 和 client 在运行, 而 server 和 client 的高可用切换也是基于监听 running 节点进行的.

1.机器准备
3 个节点 Zookeeper 集群:master,slave1,slave2
2 个节点 Canal 服务端节点:master,slave1
Mysql 节点:slave2
2.下载 canal
下载地址:https://github.com/alibaba/canal/releases/tag/canal-1.1.2
3.解压缩
mkdir /home/hadoop/app/canal-ha
tar zxvf canal.deployer-1.1.2.tar.gz -C /home/hadoop/app/canal-ha
解压完成后,进入 /home/hadoop/app/canal 目录,可以看到如下结构

4.修改配置文件
1)cd conf ,修改 canal.properties
#zk 集群地址
canal.zkServers = master:2181,slave1:2181,slave2:2181
#全局的 spring 配置方式的组件文件
canal.instance.global.spring.xml = classpath:spring/default-instance.xml

图解:把上面注释掉
备注:
default-instance.xml 介绍:store 选择了内存模式,其余的 parser/sink 依赖的位点管理选择了持久化模式,目前持久化的方式主要是写入 zookeeper,保证数据集群共享.
特点:支持 HA
场景:生产环境,集群化部署.

2)修改 instance.properties
#canal 伪装的 mysql slave 的编号,不能与 mysql 数据库与其他的 slave 重复
canal.instance.mysql.slaveId=1234(两台 canal 不能一样)

要监听的数据库的地址和端口号

canal.instance.master.address=slave1:3306

username/password

canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
5.另外一台 canal server 配置
配置同上。
注意:
两台机器上的instance目录的名字需要保证完全一致,HA模式是依赖于instance name
进行管理,同时必须都选择 default-instance.xml 配置.

6.启动相关服务
1)启动 Zookeeper 服务
runRemoteCmd.sh “/home/hadoop/app/zookeeper/bin/zkServer.sh start” all
2)启动 Canal 服务(两个 canal 同时启动)
两个节点分别执行如下命令启动 canal 服务:
bin/startup.sh
启动后,你可以查看 logs/example/example.log,只会看到一台机器上出现了启动成功的日志。

查看一下 zookeeper 中的节点信息,也可以知道当前工作的节点。

3)客户端链接消费数据
可以直接指定 zookeeper 地址和 instance name,canal client 会自动从 zookeeper 中的 running

节点,获取当前服务的工作节点,然后与其建立链接:连接成功后,canal server 会记录当前正在工作的 canal client 信息,比如客户端 ip,链接的
端口信息等.

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

图解:修改数据库,运行程序测试下

这里有个报错:找不到positon,之前做过测试,zookeeper将上面的删掉,重新启动就好了

4)canal HA 测试
重启 master 节点 canal 服务
bin/stop.sh

图解:停止canal后,看到程序先显示 canal not run ,再显示 连接上了

此时 slave1 节点会立马启动 example instance,提供新的数据服务,Zookeeper 可以看到 slave1信息。

与此同时,客户端也会随着 canal server 的切换,通过获取 zookeeper 中的最新地址,与新
的 canal server 建立链接,继续消费数据,整个过程自动完成。

### 阿里巴巴 Canal MySQL Binlog 同步工具使用指南 #### 一、环境准备 为了确保 Canal 能够正常工作,需先确认 MySQL 已经开启了二进制日志记录功能并设置了唯一的 `server-id` 。这通常是在 MySQL 的配置文件 my.cnf 中完成设置[^1]。 ```ini [mysqld] server-id = 1 log-bin = mysql-bin binlog-format = ROW ``` #### 二、安装部署Canal Server 下载对应版本的 Canal 安装包后解压至指定目录下,在 conf/example/instance.properties 文件内修改目标数据库连接信息等参数。启动服务前还需调整 canal-server.conf 下的一些全局属性来适应具体应用场景需求。 #### 三、运行模式介绍 Canal 支持多种不同的运行方式,包括单机版、集群版以及 Docker 版本。对于初次使用者来说推荐采用最简单的单机模式进行测试验证;而对于生产环境中则建议考虑更为稳定可靠的集群架构方案以保障高可用性。 #### 四、数据解析流程说明 当 Canal 成功连上 MySQL 实例之后会模拟成为其下游节点之一,并通过发送特定命令请求获取最新的变更事件流。这些原始字节序列会被逐步转换成易于理解的对象结构供后续处理模块调用分析[^3]。 #### 五、应用案例分享 借助于强大的插件机制,Canal 不仅可以满足基本的数据复制迁移任务之外还能配合其他第三方软件共同打造更加复杂的企业级解决方案。比如利用 canal2sql 自动生成 SQL 语句辅助开发人员快速定位问题所在位置;亦或是结合 Otter 构建跨平台间无缝衔接的信息交换桥梁等等[^4]。 ```python import com.alibaba.otter.canal.client.CanalConnector; import com.alibaba.otter.canal.protocol.position.EntryPosition; public class SimpleCanalClient { public static void main(String[] args) throws Exception { // 创建链接对象 CanalConnector connector = ... ; try{ EntryPosition position = null; while(true){ // 获取最新位点 position = connector.getLatestEntryPosition(); // 处理接收到的消息... } }finally{ connector.disconnect(); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值