canal 第6篇

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 建立链接,继续消费数据,整个过程自动完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值