centos7搭建canal集群版同步mysql数据

image.png

Canal 最初只支持将数据从 MySQL 同步到 Kafka,RabbitMQ 等消息队列中,从 1.1.1 版本开始,Canal 实现了一个配套落地的模块 Canal Adapter,实现对 Canal Server 订阅的 binlog 消息进行消费,支持将数据输出至 HBase,MySQL,Elasticsearch等。

机器规划

IP地址 服务
192.168.1.151:3306 canal元数据库
192.168.1.154:3306 源数据库
192.168.1.151:3306 目标数据库
192.168.1.156 canal、canal server、canal adapter、zookeeper
192.168.1.155 canal、canal server、canal adapter、canal admin

准备工作

1、源库需要binlog以及binlog模式为ROW

image.png

2、部署zookeeper集群(192.168.1.156)

这里因机器限制,暂时部署zookeeper单节点,版本这里采用zookeeper-3.4.10。

tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/
mv /opt/zookeeper-3.4.10 /opt/zookeeper
mkdir /opt/zookeeper/{data,logs}
cd /opt/zookeeper/conf/
cp zoo_sample.cfg zoo.cfg

编辑zoo.cfg内容

image.png
  • tickTime:ZooKeeper使用的基本时间单位(毫秒)。 它用于做心跳,并且最小会话(session)超时将是tickTime的两倍。

  • initLimit:用于限制ZooKeeper服务器必须连接到Leader服务器的时间长度,有必要可以设置在一点点的时间长度。

  • syncLimit:服务器与领导者之间过时的距离。可以通过心跳检测机制,来检测机器的存活状态。如果Leader发出心跳包。在syncLimit之后,还没有从Folloer那里收到响应,那么就认为这个F已经不在线了.所以这个参数不移设置过大。

  • dataDir:配置存储内存数据库快照的位置以及数据库更新的事务日志。

  • clientPort:侦听客户端连接的端口

创建myid,注明上面zoo.cfg中的server.x中的x

echo "1" > ../data/myid

配置环境变量

vim /etc/profile
#添加以下代码
export ZOOKEEPER_HOME=/opt/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH
#执行初始化环境变量系统变量文件
source /etc/profile

启动zookeeper

/opt/zookeeper/bin/zkServer.sh start

部署canal Admin(192.168.1.155)

mkdir /opt/canal/{admin,server,adapter}
wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.admin-1.1.5.tar.gz
tar -xzvf canal.admin-1.1.5.tar.gz -C /opt/canal/admin

初始化 Canal Admin 元数据库

将解压后的压缩包conf里面的canal_manager.sql挪到元数据库那台机器后,进行导入。

Canal Admin 配置文件

修改配置文件:vim /opt/canal/admin/conf/application.yml

server:
  port: 8089
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

spring.datasource:
  address: 192.168.1.151: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
  hikari:
    maximum-pool-size: 30
    minimum-idle: 1

canal:
  adminUser: admin
  adminPasswd: admin

启动 Canal Admin

/opt/canal/admin/bin/startup.sh

浏览器输入192.168.1.155:8089,访问管理界面,默认账号:admin,密码 :123456


image.png

部署canal server(192.168.1.155、192.168.1.156)

wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.deployer-1.1.5.tar.gz
tar -zxvf canal.deployer-1.1.5.tar.gz -C /opt/canal/server

因为是使用canal Admin集群部署的,所以server节点只需要配置Admin的信息即可;统一的配置文件是由Admin界面管理,编辑 /opt/canal/server/conf/canal_local.properties 文件
server 1的配置文件

# register ip
canal.register.ip = 192.168.1.155
# canal admin config
canal.admin.manager = 192.168.1.155: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 = canal-cluster-1
canal.admin.register.name = canal-server-1

server 2的配置文件

# register ip
canal.register.ip = 192.168.1.156
# canal admin config
canal.admin.manager = 192.168.1.155: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 = canal-cluster-1
canal.admin.register.name = canal-server-2

Canal Admin 创建集群

进入admin管理界面,新建集群,配置zookeeper信息


image.png

点击主配置


image.png

点击载入模板、暂时不用修改配置文件,点击保存即可
image.png

启动server

/opt/canal/server/bin/startup.sh local

在 Admin 上查看注册的 Canal Server。


image.png

设置mysql同步mysql配置。

server 默认情况下把源库对表结构修改的记录存储在本地 H2 数据库中,当 server 主备切换后会导致新的 server 无法正常同步数据,因此修改 TSDB 的设置将外部 MySQL 数据库作为 server 存储表结构变更信息的库。在admin界面选择相对应的集群,修改配置文件。

修改地方如下:


image.png

image.png

image.png

点击保存。

在元数据库上创建canal_tsdb库。

创建 Instance

在 Instance 管理界面,点击新建 Instance


image.png

点击载入模板后,修改以下信息


image.png

点击保存,查看Instance 日志,能正常读取到binlog以及偏移量为正常。
image.png

部署canal adapter(192.168.1.155、192.168.1.156)

wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.adapter-1.1.5.tar.gz
tar -zxvf canal.adapter-1.1.5.tar.gz -C /opt/canal/adapter

server 只支持将数据输出到消息队列中,因此需要额外部署 Adapter 订阅 server 中的消息,然后写入目标 MySQL。编辑/opt/canal/adapter/conf/application.yml

server:
  port: 8081
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
    default-property-inclusion: non_null

canal.conf:
  mode: tcp #tcp kafka rocketMQ rabbitMQ
  flatMessage: true
  zookeeperHosts:
  syncBatchSize: 1000
  retries: 0
  timeout:
  accessKey:
  secretKey:
  consumerProperties:
    # canal tcp consumer
    #canal.tcp.server.host: 127.0.0.1:11111
    canal.tcp.server.host:
    canal.tcp.zookeeper.hosts: 192.168.1.156:2181  #zookeeper地址
    canal.tcp.batch.size: 500
    canal.tcp.username:
    canal.tcp.password:
    # kafka consumer
    kafka.bootstrap.servers: 127.0.0.1:9092
    kafka.enable.auto.commit: false
    kafka.auto.commit.interval.ms: 1000
    kafka.auto.offset.reset: latest
    kafka.request.timeout.ms: 40000
    kafka.session.timeout.ms: 30000
    kafka.isolation.level: read_committed
    kafka.max.poll.records: 1000
    # rocketMQ consumer
    rocketmq.namespace:
    rocketmq.namesrv.addr: 127.0.0.1:9876
    rocketmq.batch.size: 1000
    rocketmq.enable.message.trace: false
    rocketmq.customized.trace.topic:
    rocketmq.access.channel:
    rocketmq.subscribe.filter:
    # rabbitMQ consumer
    rabbitmq.host:
    rabbitmq.virtual.host:
    rabbitmq.username:
    rabbitmq.password:
    rabbitmq.resource.ownerId:

#源库信息
  srcDataSources:
    defaultDS:
      url: jdbc:mysql://192.168.1.154:3306/data?useUnicode=true
      username: root
      password: 123456

#目标库信息
  canalAdapters:
  - instance: data_test01 # canal instance Name or mq topic name
    groups:
    - groupId: g1
      outerAdapters:
      - name: rdb
        key: mysql1
        properties:
          jdbc.driverClassName: com.mysql.jdbc.Driver
          jdbc.url: jdbc:mysql://192.168.1.151:3306/data?useUnicode=true
          jdbc.username: root
          jdbc.password: 123456

配置rdb目录里面的文件

mv /opt/canal/adapter/conf/rdb/my_user.yml /opt/canal/adapter/conf/rdb/date_test01.yml
#配置文件如下
dataSourceKey: defaultDS
destination: data_test01
groupId: g1
outerAdapterKey: mysql1
concurrent: true
dbMapping:
  database: data
  table: test01
  targetTable: test01
  targetPk:
    id: id
  mapAll: true
  mirrorDb: true

启动 Adapter

/opt/canal/adapter/bin/startup.sh
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容