目录
一、canal 高可用集群架构原理
二、canal 高可用集群架构搭建
安装并启动zookeeper
安装kafka
安装canal admin并创建集群,
安装canal server
三、同步binlog 到kafka
创建instance
数据库准备
验证canal 同步binlog 到kakfa
介绍:
canal 模拟mysql slave原理,将自己伪装为slave,同步mysql master binlog。
1.Admin负责管理canal 集群配置信息,动态管理所有canal Server 配置信息;管理canal server 上的instance 队列;
2.Canal Server 创建Instance 队列,同步mysql binlog ,一个canal server 可以创建多个instance;server 采用主备模式部署,使用zk选主保证高可用。
3.instance队列 负责mysql数据库的binlog,一个instance 同步一个mysql 库的binlog,同步多个mysql binlog 需创建多个instance。
环境准备:win10,mysql ,jdk ,canal admin,canal server ,zookeeper,kafka;
canal 集群搭建还是比较容易上手的,没有难度。
1.从zookeeper 官网下载zookeeper-3.5.9-bin.tar.gz 并解压,运行bin目录下zkServer.cmd
1.从kakfa 官网下载 kafka_2.11-2.2.0.tgz解压,执行.\bin\windows\kafka-server-start.bat .\config\server.properties
2.创建binlog topic 执行创建topic 命令,然后查看topic已创建
.\windows\kafka-topics.bat --create --topic sync_demo_db_binlog_topic --partitions 5 --replication-factor 1 --bootstrap-server localhost:9092
.\windows\kafka-topics.bat --describe --topic sync_demo_db_binlog_topic --bootstrap-server localhost:9092
1.从官网下载canal.admin-1.1.5.tar.gz 并解压,因为admin 本身元数据存储在mysql,需要执行canal_manager.sql 创建库表,然后修改config/application.yaml 配置mysql 信息:
server:
port: 8089
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
spring.datasource:
address: 127.0.0.1:3306
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
2.点击 bin目录下startup.bat,启动admin,访问 http://localhost:8089/登录账号为admin/123456
3. 创建canal 集群
4.创建完之后,点击主配置,进去之后点击载入模板(重要);
5.修改如下配置,保存
kafka.bootstrap.servers = 127.0.0.1:9092
canal.serverMode=kafka
canal.mq.topic=sync_demo_db_binlog_topic
canal.zkServers=127.0.0.1:2181
1.下载canal.deployer-1.1.5.tar.gz 解压,删除canal.properties,修改canal-lcoal.properties为canal.properties。
添加如下配置,如果要部署主备架构,可以在另一台集群以同样方式部署deployer,修改下register ip,register.name;admin 地址需修改为admin所在机器地址。
# register ip 本机ip
canal.register.ip =127.0.0.1
# canal admin 的地址
canal.admin.manager = 127.0.0.1:8089
canal.admin.port = 11110
canal.admin.user = admin
canal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441
# admin auto register
canal.admin.register.auto = true
#创建的集群名
canal.admin.register.cluster =sync_demo_db_binlog
canal.admin.register.name = sync_demo_db_binlog-master
2.点击bin目录下startup.bat 启动canal server,admin查看server已经成功启动了
1.在admin平台,点击创建instance,设置instance名,配置binlog 的mysql 连接信息并保存
## mysql serverId ,保证和mysql 以及其他canal-server不冲突即可canal.instance.mysql.slaveId=1234 # position info,配置mysql信息canal.instance.master.address=127.0.0.1:3306
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.instance.connectionCharset = UTF-8
#监听word 库 下user表
canal.instance.filter.regex=world\\.user
2.保存之后查看instance正常运行了
1数据库设置权限
[mysqld]
#mysql 修改配置
log-bin=mysql-bin # 开启
binlogbinlog-format=ROW
# 选择 ROW 模式server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
#账号授权
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;FLUSH PRIVILEGES;
.数据库创建world库,user表
CREATE TABLE `user` (
`id` int NOT NULL,
`user_name` varchar(255) DEFAULT NULL,
`city` varchar(255) DEFAULT NULL,
`created_date` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.向user表插入一条记录
2.打开kafka 安装包,执行消费者命令,查看已经消费binlog消息
.\windows\kafka-console-consumer.bat --topic sync_demo_db_binlog_topic --from-beginning --bootstrap-server localhost:9092