canal集群部署

canal组件:

  • canal-admin:canal控制台,可以统一管理canal服务
  • canal-deployer:也是canal-server:canal的一个节点服务
  • canal-instance: canal-server中的一个处理实例,可以处理不同的业务逻辑。

安装canal-admin

1、创建canal_manager库

根据canal-admin conf文件夹下canal_manager.sql文件创建数据库

2、修改application.yml配置文件

修改 address、database、username、password 四个参数
server:
  port: 8089
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

spring.datasource:
  address: 127.0.0.1:63306
  database: canal_manager
  username: root
  password: 123456
  driver-class-name: com.mysql.jdbc.Driver
  url: jdbc:mysql://${spring.datasource.address}/${spring.datasource.database}?useUnicode=true&characterEncoding=UTF-8&useSSL=false
  hikari:
    maximum-pool-size: 30
    minimum-idle: 1

canal:
  adminUser: admin
  adminPasswd: admin

3、部署项目并启动

项目放到服务器上,进入bin目录
使用sudo chmod 777 ./startup.sh sudo chmod 777 ./stop.sh 命令添加权限
./startup.sh启动项目
127.0.0.1:8089访问项目

4、添加集群

需要集群信息和zookeeper地址
如果要多个canal集群共用zookeeper
xshell链接zookeeper,进入bin目录,执行./zkCli.sh
ls -w / 查看根目录节点名称
create /canal-master-order-dev "canal-master-order-dev" 创建目录
配置集群地址: 10.1.8.100:2181/canal-master-order-dev

5、修改默认配置(通用的canal.properties)

载入模板配置,和默认的canal.properties一致
主要修改以下配置:
canal.zkServers zk的ip:2181 如果有路径,也要加上路径
配置zookeeper集群地址:canal.instance.global.spring.xml 改为classpath:spring/default-instance.xml
配置canalserver类型:canal.serverMode = rocketMQ # tcp, kafka, rocketMQ, rabbitMQ
配置instance名称:canal.destinations
配置mq密码:canal.aliyun.accessKey(如果没有账号密码,可以不填)
配置mq账号:canal.aliyun.secretKey
配置mq信息
### Canal 集群配置与使用指南 Canal 是阿里巴巴开源的一个用于增量数据订阅和消费的组件,广泛用于数据库增量日志的解析和订阅场景。其核心原理是模拟 MySQL 的 Slave 协议,连接 MySQL 主库并读取其 binlog 日志,从而实现数据的增量订阅与消费。 在高可用(HA)集群模式下,Canal 依赖 Zookeeper 进行分布式协调和状态管理。通过 Zookeeper,Canal Server 和 Canal Adapter 能够实现故障转移和负载均衡,确保服务的高可用性[^1]。 #### 1. 环境准备 在搭建 Canal 集群之前,需要准备好以下环境和组件: - **MySQL 数据库**:确保 MySQL 已启用 binlog,并配置为 `ROW` 模式。此外,建议创建一个专门用于 Canal 的 MySQL 用户,并授予相应的权限: ```sql GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%' IDENTIFIED BY 'canal'; ``` - **Zookeeper 集群**:Canal 依赖 Zookeeper 实现 HA 高可用性,建议部署一个 Zookeeper 集群以确保可靠性。Zookeeper 的安装和配置可以参考相关文档。 - **JDK 环境**:Canal 需要 Java 环境支持,建议使用 JDK 1.7 或更高版本。 #### 2. Canal Admin 安装与配置 Canal Admin 是 Canal 的管理模块,用于管理 Canal Server 的实例配置、权限控制等。以下是安装步骤: - **下载并解压安装包**: ```bash wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.admin-1.1.5.tar.gz mkdir -p /software/canal-admin tar -xzvf canal.admin-1.1.5.tar.gz -C /software/canal-admin ``` - **初始化元数据库**:Canal Admin 需要一个数据库来存储元数据信息,建议使用 MySQL 数据库,并按照 Canal 的要求初始化表结构。 - **配置文件修改**:在 `application.properties` 文件中配置数据库连接信息、Zookeeper 地址等: ``` canal.zkServers=10.20.144.51:2181 canal.instance.global.spring.xml = classpath:spring/default-instance.xml ``` #### 3. Canal Server 配置 Canal Server 是 Canal 的核心组件,负责与 MySQL 进行交互,解析 binlog 日志。配置步骤如下: - **修改 `canal.properties` 文件**:配置 Zookeeper 地址、实例名称、日志级别等参数。 ``` canal.zkServers=10.20.144.51:2181 canal.instance.example.master.address=127.0.0.1:3306 canal.instance.example.dbUsername=canal canal.instance.example.dbPassword=canal ``` - **配置实例文件**:每个 Canal 实例对应一个 MySQL 数据库实例,实例的配置文件通常位于 `conf/example/` 目录下。可以根据实际需求修改 `instance.properties` 文件中的参数。 #### 4. 启动与验证 - **启动 Canal Admin**:进入 `/software/canal-admin/bin` 目录,执行启动脚本: ```bash ./startup.sh ``` - **启动 Canal Server**:进入 Canal Server 的安装目录,执行启动脚本: ```bash ./bin/startup.sh ``` - **验证 Canal 服务**:通过访问 Canal Admin 的 Web 界面,查看 Canal Server 的状态是否正常。同时,可以通过编写简单的 Canal Client 程序来订阅和消费 binlog 数据。 #### 5. Canal Client 使用 Canal Client 是 Canal 的消费者,负责订阅并消费 Canal Server 推送的 binlog 数据。以下是一个简单的 Canal Client 示例代码: ```java import com.alibaba.otter.canal.client.CanalConnector; import com.alibaba.otter.canal.client.CanalConnectors; import com.alibaba.otter.canal.protocol.CanalEntry; import com.alibaba.otter.canal.protocol.Message; public class SimpleCanalClient { public static void main(String[] args) { // 创建连接器 CanalConnector connector = CanalConnectors.newSingleConnector("127.0.0.1", 11111, "", ""); try { // 连接 Canal Server connector.connect(); // 订阅所有表 connector.subscribe(".*\\..*"); while (true) { // 获取消息 Message message = connector.getWithoutAck(100); long batchId = message.getId(); if (batchId == -1 || message.getEntries().size() == 0) { continue; } // 处理消息 for (CanalEntry.Entry entry : message.getEntries()) { if (entry.getEntryType() == CanalEntry.EntryType.ROWDATA) { CanalEntry.RowChange rowChange = CanalEntry.RowChange.parseFrom(entry.getStoreValue()); System.out.println(rowChange); } } // 确认消息 connector.ack(batchId); } } finally { // 关闭连接 connector.disconnect(); } } } ``` #### 6. 高可用性配置 在 HA 集群模式下,Canal Server 和 Canal Adapter 依赖 Zookeeper 实现高可用性。通过 Zookeeper,多个 Canal Server 实例可以共同工作,确保在某个节点故障时,其他节点能够接管任务,保证服务的连续性。[^1] 此外,Canal 支持将解析后的数据推送到多种消息中间件,如 Kafka、RocketMQ 和 RabbitMQ,进一步增强了系统的可扩展性和可靠性。[^5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值