otter 系列同步数据
前言
公司需要将云服务器的数据库备份到公司机房服务器。
我们都用得mysql数据库
otter 使用要求
博主只在mysql上使用,并不知道其他数据库是否可行。
机器上必须要有java。
模仿mysql主从库,所以在主库需要配置开始binlog、binlog为row模式,修改配置后重启mysql
[mysqld]
#log_bin
#开启binlog
log-bin = mysql-bin
#选择row模式
binlog-format = ROW
#服务Id 不能重复
server_id = 1
通过 SHOW VARIABLES LIKE 'log_bin';
查看是否开启log-bin 查询ON则已经开启
通过 show variables like '%binlog_format%';
查看日志模式是否row 查询row则日志默认row
一、otter 谁搞得,用来干什么
otter是阿里搞得用来干啥呢?
otter基于Canal(也是阿里搞得),获取数据库增量日志数据实现数据库同步。 otter也可以做全量同步和文件同步。涵盖的说就是可以做到异构库同步、单机房同步、异地机房同步、双向同步、文件同步。
otter 整体配置是有点繁琐复杂,配置好了使用就有点酸爽。
官方资料 Manager使用介绍
二、otter 都需要安装什么
- zookeeper 解决分布式状态调度的,允许多node节点之间协同工作. 下载地址
- canal 主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。Node集成了Canal所以安装otter不需要单独安装canal。 下载地址
- otter 典型管理系统架构,manager(web管理)+node(工作节点) 下载地址
- manager运行时推送同步配置到node节点
- node节点将同步状态反馈到manager上
如果是window上部署需要安装 aria2用来处理数据库日志文件下载
添加环境变量 Path=arial2安装目录
安装
切记如果是windows需要安装aria2并配置环境变量
zookeeper 安装
解压缩 进入 \zookeeper\conf 目录 复制 zoo_sample.cfg 改名 zoo.cfg
需要注意的几个配置
#数据目录
dataDir=E:\\otter\\zookeeper\\data
#日志目录
dataLogDir=E:\\otter\\zookeeper\\log
#服务监听端口 不配置默认是8080
admin.serverPort=9091
其他配置文件博主都保持默认即可
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=E:\\otter\\zookeeper\\data
dataLogDir=E:\\otter\\zookeeper\\log
# the port at which the clients will connect
clientPort=2181
admin.serverPort=9091
# the maximum number of client connections.
# increase this if you need to handle more clients
maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpHost=0.0.0.0
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true
audit.enable=true
修改完成配置文件后启动zookeeper
window直接运行 zkServer.
linux 执行 ./zkServer start (linux需要添加 start 参数。参数介绍 start 启动ZK服务;status 查看ZK服务状态;stop 停止ZK服务;restart 重启ZK服务;)
启动后检查zookeeper 是否正确启动。笔者在windows和linux启动都遇到 ZooKeeper audit is disabled 。
需要修改在配置文件中zoo.conf 添加 audit.enable=true 配置。再次启动
otter 安装( manager和node)
下载地址
这个地址包含 manager.deployer、node.deployer都需要下载安装。
在安装之前我们需要把otter的数据库搞到mysql里面。manager有很多配置,配置的存储通过mysql数据库。简单说我们给otter系统创建它自己的数据库。
阿里已经帮我们把数据库脚本写好了,我们执行sql完成创建表结构、导入管理员用户就可以了。
sql语句地址
sql官方下载地址需要墙
SQL 备份下载 CSDN 备份
SQL语句执行我在mysql8的版本中 报错,可以根据报错取消 NO_AUTO_CREATE_USER
SET sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
-- 去掉 NO_AUTO_CREATE_USER
SET sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
manager 安装
修改配置文件 \manager\conf\otter.properties
主要的的几个配置项
##otter manager domain name #如果127.0.0.1 只能本机访问,如果其他机器也需要访问,就改成本机实际Ip
otter.domainName = 127.0.0.1
##otter manager http port 如果修改改端口需要在jetty.xml 里面也修改
otter.port = 8080
##otter manager database config ,修改为正确数据库信息 ,,上面执行sql创建的数据库的连接地址和用户名密码
otter.database.driver.class.name = com.mysql.jdbc.Driver
otter.database.driver.url = jdbc:mysql://127.0.01:3306/ottermanager
otter.database.driver.username = root
otter.database.driver.password = hello
##default zookeeper address,修改为正确的地址,手动选择一个地域就近的zookeeper集群列表
otter.zookeeper.cluster.default = 127.0.0.1:2181
##default zookeeper session timeout = 90s
otter.zookeeper.sessionTimeout = 90000
实际中的我配置文件,注意 ip和数据库连接
## otter manager domain name
otter.domainName = ip
## otter manager http port
otter.port = 8080
## jetty web config xml
otter.jetty = jetty.xml
## otter manager database config
otter.database.driver.class.name = com.mysql.jdbc.Driver
otter.database.driver.url = jdbc:mysql://127.0.0.1:port/otter
otter.database.driver.username = x
otter.database.driver.password = x
## otter communication port
otter.communication.manager.port = 1099
## otter communication payload size (default = 8388608)
otter.communication.payload = 8388608
## otter communication pool size
otter.communication.pool.size = 10
## default zookeeper address
otter.zookeeper.cluster.default = 127.0.0.1:2181
## default zookeeper sesstion timeout = 60s
otter.zookeeper.sessionTimeout = 60000
## otter arbitrate connect manager config
otter.manager.address = ${otter.domainName}:${otter.communication.manager.port}
## should run in product mode , true/false
otter.manager.productionMode = true
## self-monitor enable or disable
otter.manager.monitor.self.enable = true
## self-montir interval , default 120s
otter.manager.monitor.self.interval = 120
## auto-recovery paused enable or disable
otter.manager.monitor.recovery.paused = true
# manager email user config
otter.manager.monitor.email.host = smtp.gmail.com
otter.manager.monitor.email.username =
otter.manager.monitor.email.password =
otter.manager.monitor.email.stmp.port = 465
修改完成后启动 bin\ startup
启动成功后 访问:http://127.0.0.1:8080/login.htm,初始密码为:admin/admin,即可完成登录. 目前:匿名用户只有只读查看的权限,登录为管理员才可以有操作权限
node 安装
到这一步已经成功了一半。
在安装 node之前我们先在otter中添加zookeeper。
-
浏览器中输入 ip:port 进入otter 配置页面。注意直接进入是以访客进入只有查看的功能,需要点击小门门,登录admin。进行配置。admin默认密码 admin。
-
添加zookeeper,集群名称可以填写方便自己记忆的。 zookeeper集群填写 部署 zookeeper 机器 ip:port; 记得必须有分号,点击保存。
配置otter中的node
node受ottermanager进行管理,所以先安装otter manager,完成manager安装后,需要在manager页面为node定义配置信息,并生一个唯一id
- 添加node,填写node配置。
- node机器名称填写自己方便记忆的名称、机器ip填写部署node机器IP、机器端口默认2088、下载端口默认9090、MBean端口默认2090 、zookeeper集群选择刚才配置的zookeeper,点击保存。
3.保存后注意这个序号,在下一步需要。
- 解压node文件 修改 conf/otter.properties 文件
主要更改 otter.nodeHome 改为node实际目录。
我的配置
# otter node root dir
#otter.nodeHome = ${user.dir}/../
otter.nodeHome = /tool/node
## 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
- 在node的conf目录下添加文件 nid 里面内容就是otter配置的序号。 ( linux直接在node目录下执行 echo 1 > /conf/nid )
- 启动node 运行 startup 。数秒后在otterWeb管理端就可以 node的状态是已启动。
至此,otter已经安装完成。接下来只需要在web管理端进行配置即可实现同步。
配置比较繁琐,并不会特别复杂,说下流程和几个关键名词解释
** otter名词解释:**
数据源:读取的源实例信息,和写入的目标实例信息
数据表:配置映射用的,用于配置,源实例,什么库,什么表,同步到目标什么库,什么表
canal:otter是做增量同步的,增量同步基于mysql的binlog日志,并且是row格式。这里需要配置你读取binlog的信息,和数据源里面的源实例信息可以说是同一个。
通道配置: otter采用一个实例一个通道方式。一个实例可以多个配置多个库
pipeline:主要核心功能如下
(1)选择你的canal配置,读取哪个实例的binlog。
(2)选择整个同步是在哪个节点上进行,例如我们部署了三个node节点,可以由node1进行读取的操作,可以由node2进行目标实例写入操作。也可以同时放到一个节点上。
(3)binlog位置,默认不写就读最新位置的。
(4)高级配置里面有是否跳过DDL,传输模式,负载均衡算法等,一般保持默认即可。
流程:
(1)新增数据源,一般最少配置2个,一个读取的源库,一个目标
(2)数据表,配置映射关系,从哪里同步到哪里。
(3)Canal,配置读取binlog的信息
上面步骤创建好后,我们就可以正式开始配置通道了
(4)创建通道
(5)创建pipeline
(6)创建表映射关系
(7)启动通道