当前位置: 首页>后端>正文

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

centos7搭建canal集群版同步mysql数据,第1张

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

centos7搭建canal集群版同步mysql数据,第2张

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内容

centos7搭建canal集群版同步mysql数据,第3张
  • 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


centos7搭建canal集群版同步mysql数据,第4张

部署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信息


centos7搭建canal集群版同步mysql数据,第5张

点击主配置


centos7搭建canal集群版同步mysql数据,第6张

点击载入模板、暂时不用修改配置文件,点击保存即可
centos7搭建canal集群版同步mysql数据,第7张

启动server

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

在 Admin 上查看注册的 Canal Server。


centos7搭建canal集群版同步mysql数据,第8张

设置mysql同步mysql配置。

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

修改地方如下:


centos7搭建canal集群版同步mysql数据,第9张

centos7搭建canal集群版同步mysql数据,第10张

centos7搭建canal集群版同步mysql数据,第11张

点击保存。

在元数据库上创建canal_tsdb库。

创建 Instance

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


centos7搭建canal集群版同步mysql数据,第12张

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


centos7搭建canal集群版同步mysql数据,第13张

点击保存,查看Instance 日志,能正常读取到binlog以及偏移量为正常。
centos7搭建canal集群版同步mysql数据,第14张

部署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

https://www.xamrdz.com/backend/3ex1934986.html

相关文章: