元月's blog 元月's blog
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多

元月

临渊羡鱼,不如退而结网
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多
  • Redis

  • Nginx

  • Kafka

  • Shardingsphere

  • Otter

    • otter快速开始
      • otter同步实战
      • otter二次开发-支持分库分表
      • otter二次开发-支持按目标端主键索引Load数据
    • nexus

    • 中间件
    • Otter
    元月
    2024-03-13
    目录

    otter快速开始

    # 一、otter简介

    otter是一个分布式数据库同步系统. 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库.

    image-20240311095131594

    原理描述:

    1. 基于Canal开源产品,获取数据库增量日志数据。 什么是Canal, 请点击 (opens new window)

    2. 典型管理系统架构,manager(web管理)+node(工作节点)

      a. manager运行时推送同步配置到node节点

      b. node节点将同步状态反馈到manager上

    3. 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.

    参考:otter wiki (opens new window)、otter github (opens new window)

    # 二、otter服务启动

    # 2.1、源码下载编译
    git clone https://github.com/alibaba/otter.git
    #使用otter最近的一个tag: otter-4.2.18
    git checkout otter-4.2.18
    
    1
    2
    3

    目录结构如下

    image-20240313204218833

    # 2.2、otter-manager启动

    step0:初始化otter-manager数据库

    文件路径: otter\manager\deployer\src\main\resources\sql\otter-manager-schema.sql

    step1:配置修改

    更改文件otter\manager\deployer\src\main\resources\otter.properties的mysql和zk配置

    ## otter manager database config
    otter.database.driver.class.name = com.mysql.jdbc.Driver
    otter.database.driver.url = jdbc:mysql://mysql:3306/otter?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true
    otter.database.driver.username = root
    otter.database.driver.password = ******
    
    ## default zookeeper address
    otter.zookeeper.cluster.default = zk:2181
    ## default zookeeper sesstion timeout = 60s
    otter.zookeeper.sessionTimeout = 60000
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    step2:启动项目

    otter-manager启动类otter\manager\deployer\src\main\java\com\alibaba\otter\manager\deployer\OtterManagerLauncher.java

    step3:查看日志

    tail logs/manager.log
    
    1

    step4:验证

    访问: http://127.0.0.1:8080/,出现otter的页面,即代表启动成功

    image-20240309180032365

    点击右上角登录,初始密码为:admin/admin,即可完成登录. 目前:匿名用户只有只读查看的权限,登录为管理员才可以有操作权限

    参考:Manager_QuickStart (opens new window)

    # 2.3、otter-node启动

    step1: 在manager页面为node定义配置信息,并生一个唯一id.

    a. 首先访问manager页面的机器管理页面,点击添加机器按钮(需要提前配置zk)

    image-20240311110247665 几点说明:

    • 机器名称:可以随意定义,方便自己记忆即可
    • 机器ip:对应node节点将要部署的机器ip,如果有多ip时,可选择其中一个ip进行暴露. (此ip是整个集群通讯的入口,实际情况千万别使用127.0.0.1,否则多个机器的node节点会无法识别)
    • 机器端口:对应node节点将要部署时启动的数据通讯端口,建议值:2088
    • 下载端口:对应node节点将要部署时启动的数据下载端口,建议值:9090
    • 外部ip :对应node节点将要部署的机器ip,存在的一个外部ip,允许通讯的时候走公网处理。
    • zookeeper集群:为提升通讯效率,不同机房的机器可选择就近的zookeeper集群.

    node这种设计,是为解决单机部署多实例而设计的,允许单机多node指定不同的端口

    b. 机器添加完成后,跳转到机器列表页面,获取对应的机器序号nid

    image-20240311110320315

    step2:配置修改

    更改文件otter\node\deployer\src\main\resources\otter.properties的otter-manager配置(默认127.0.0.1:1099)

    # otter node root dir
    otter.nodeHome = ${user.dir}/../
    
    ## otter node dir
    otter.htdocs.dir = ${otter.nodeHome}/htdocs
    otter.download.dir = ${otter.nodeHome}/download
    otter.extend.dir= ${otter.nodeHome}/extend
    
    ## default zookeeper sesstion timeout = 60s
    otter.zookeeper.sessionTimeout = 60000
    
    ## otter communication payload size (default = 8388608)
    otter.communication.payload = 8388608
    
    ## otter communication pool size
    otter.communication.pool.size = 10
    
    ## otter arbitrate & node connect manager config
    otter.manager.address = 127.0.0.1:1099
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

    step3:启动项目

    otter-node启动类otter\node\deployer\src\main\java\com\alibaba\otter\node\deployer\OtterLauncher.java

    step4:增加vm option -Dnid=1(step1生成的node id)

    image-20240311110921827

    如果nid不存在,会出现 nid:1 in manager[127.0.0.1:1099]is not found!问题

    step5:查看日志

    tail logs/node/node.log
    
    1

    step6:验证

    查看对应的节点状态,如果变为了已启动,代表已经正常启动。(ps,如果是未启动,会是一个红色高亮)

    image-20240311111749180

    参考:Node_QuickStart (opens new window)

    # 三、FAQ

    # 3.1、Cannot resolve com.oracle:ojdbc6:11.1.0.7.0

    image-20240309162600676

    问题原因:

    maven的中央仓库中没有这个资源,只能通过配置本地库才能加载到项目中

    解决方式:

    下载ojdbc6.jar到本地或切换到ojdbc6.jar目录下( otter\lib)执行下面命令

    mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.1.0.7.0 -Dpackaging=jar -Dfile=ojdbc6.jar -DgeneratePom=true
    
    1

    image-20240309162743393

    在本地仓库下会看到生成了相应的文件

    image-20240309162832373

    # 3.2、otter-node启动时报错: nid is not set

    问题原因:

    启动时未指定nid

    解决方式:

    增加vm option -Dnid=1

    image-20240311110921827

    # 3.3、otter不支持xa事务

    问题原因:

    otter目前对xa事务不支持,会导致挂起,复现步骤如下:

    1. 初始化记录

      insert into testotter1.`t_user`(name,tenant_id) values("元月1",2);
      
      1
    2. 执行xa事务

      xa start "mysql_xa_1";
      update testotter1.t_user set name='元月2' where id=1;
      xa end "mysql_xa_1";
      xa prepare "mysql_xa_1";
      xa commit "mysql_xa_1";
      
      #回滚
      xa rollback "mysql_xa_1";
      
      1
      2
      3
      4
      5
      6
      7
      8
    3. 可以看到channel挂起,报错日志如下

    image-20240313112806562

    解决方法一:

    参考github提交进行改造:支持MySQL5.7的XACommit/XARollback (opens new window)

    对otter改造支持xa事务,需要考虑的东西比较多,不仅仅是otter的改造,还需要考虑其它组件是否支持xa事务,比如常用的在线变更大表工具gh-ost,它是不支持xa事务的

    解决方法二: 跳过xa报错

    在枚举类otter\shared\etl\src\main\java\com\alibaba\otter\shared\etl\model\EventType.java下增加枚举

    XACOMMIT("XA"),
    
    XAROLLBACK("XR"),
    
    1
    2
    3

    这种方式只是跳过xa报错,如果xa事务回滚,会导致数据不一致

    #otter#数据库
    设计改造篇-多租户隔离方案
    otter同步实战

    ← 设计改造篇-多租户隔离方案 otter同步实战→

    最近更新
    01
    otter二次开发-支持按目标端主键索引Load数据
    08-03
    02
    mvnw简介
    06-21
    03
    gor流量复制工具
    06-03
    更多文章>
    Theme by Vdoing | Copyright © 2022-2024 元月 | 粤ICP备2022071877号-1
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式