otter 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统
工作原理:
原理描述:
1. 基于Canal开源产品,获取数据库增量日志数据。
2. 典型管理系统架构,manager(web管理)+node(工作节点)
a. manager运行时推送同步配置到node节点
b. node节点将同步状态反馈到manager上
3.基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.
本文档使用的组件版本:mysql5.7、jdk1.8.0_77、zookeeper3.9、otter4.2.18、aria2-1.36.0
相关主机信息:
角色 | 主机ip | 组件 |
---|---|---|
Otter manager | 172.17.6.4 | otter manager 、otter node、jdk 、zookeeper 、mysql |
otter node | 172.17.6.19 | otter node、jdk、zookeeper |
mysql (源)主机自建 | 172.17.6.47 | jdk、zookeeper 、mysql server |
mysql (目标)腾云 实例 | 172.17.6.16 | 无 |
1.安装zookeeper
#安装jdk
rpm -ivh jdk-8u301-linux-x64.rpm
#安装zookeeper
tar -zxf apache-zookeeper-3.9.1-bin.tar.gz
mv apache-zookeeper-3.9.1-bin /data/zookeeper
mkdir /data/zookeeper/data
cd /data/zookeeper/conf
mv zoo_sample.cfg zoo.cfg
#编辑配置文件:
vim zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
clientPort=2181
server.1=172.17.6.4:2888:3888
server.2=172.17.6.47:2888:3888
server.3=172.17.6.19:2888:3888
2.将配置复制到其他节点
mkdir -p /data/zookeeper/zkdata
mkdir -p /data/zookeeper/zklog
3.在每个节点生成节点id
#在172.17.6.4 节点操作
echo 1 > /data/zookeeper/zkdata/myid
#在172.17.6.19 节点操作
echo 2 > /data/zookeeper/zkdata/myid
#在172.17.6.47 节点操作
echo 3 > /data/zookeeper/zkdata/myid
4.启动
/bin/zkServer.sh start
1.下载地址:
https://github.com/alibaba/otter/releases/download/otter-4.2.18/manager.deployer-4.2.18.tar.gz
mkdir -p ./otter/manager
cd ./otter/manager
wget https://github.com/alibaba/otter/releases/download/otter-4.2.18/manager.deployer-4.2.18.tar.gz
tar zxf manager.deployer-4.2.18.tar.gz
略……
otter manager 需要mysql 的支持。
wget https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql
1)将初始化 manager 数据库
mysql >create database otter
mysql >use otter
mysql>source otter-manager-schema.sql
2)创建数据库用户
CREATE USER 'otter'@'%' IDENTIFIED BY '123456'; #安装时请修改密码
GRANT ALL ON otter.* TO 'otter'@'%';
flush privileges;
修改conf/otter.properties,修改如下信息:
otter.domainName = 62.234.27.223 #otter manager管理后台的域名或访问ip,页面跳转时会用这个值,为了方便访问,填写了公网IP
otter.port = 80 #otter manager管理后台的访问端口,默认为8080
otter.database.driver.class.name = com.mysql.jdbc.Driver
otter.database.driver.url = jdbc:mysql://172.17.6.4:3308/otter #otter数据库地址
otter.database.driver.username = otter #otter数据库账号
otter.database.driver.password = 123456 #otter数据库密码
otter.communication.manager.port = 1099 #otter通讯地址,默认可不改
otter.communication.pool.size = 10 #otter通讯连接池,默认可不改
otter.zookeeper.cluster.default = 172.17.6.4:2181,172.17.6.47:2181,172.17.6.19:2181 #zk连接地址
下载地址:https://github.com/alibaba/otter/releases/download/otter-4.2.18/node.deployer-4.2.18.tar.gz
mkdir -p /data/otter/node
tar -zxf node.deployer-4.2.18.tar.gz -C /data/otter/node
安装aria2c
node节点进行跨机房传输时,会使用到HTTP多线程传输技术,目前主要依赖了aria2c做为其下载客户端
aria2c下载地址:Releases · aria2/aria2 · GitHub
wget https://github.com/aria2/aria2/releases/download/release-1.36.0/aria2-1.36.0.tar.gz
tar zxvf aria2-1.36.0.tar.gz
cd aria2-1.36.0
./configure
make
cd src
cp aria2c /usr/local/bin
注意:编译aria2c 报错:
缺少 gcc11 的包 ,安装
yum install gcc-c++
执行make 时报错:
系统缺少依赖包,执行以下安装命令
yum install gcc gcc-c++ kernel-devel libgcrypt-devel libxml2-devel openssl-devel gettext-devel cppunit
访问 otter manager
3.1 添加zookeepr集群
注:zookeeper 集群地址以逗号分隔,以分号结束
3.2 添加node 节点
输入如下信息:
机器添加完成后,跳转到机器列表页面,获取对应的机器序号nid
将环境准备中添加机器后获取到的序号,保存到conf目录下的nid文件
例如:echo 3 > conf/nid修改conf/otter.properties,修改如下信息:
otter.manager.address = 172.17.6.4:1099 #修改为otter master地址
启动
./bin/startup.sh
出现如下日志表示启动成功
验证
配置一个otter同步任务,一般需要进行如下步骤:
1)配置数据源
a. 源库 :jdbc:mysql://172.17.6.47:3306
b. 目标库 例:jdbc:mysql://172.17.6.16:3306
2)配置数据表
a. 源数据表(db_test库的所有表):db_test.*
b. 目标数据表(db_test库的所有表):db_test.*
3)配置Canal
a. 源数据库Canal
b. 目标数据表Canal(主从单向同步不需要,双主双向同步需要)
4)配置Channel同步通道
5)配置Pipeline同步管道
a. 选择源库节点和目标库节点(可多节点选择)
b. 选择源库Canal
6)配置同步映射规则
a. 定义源表和目标表的同步关系
7)启动
1.添加数据源mysql 172.17.6.47
注:这里的用户名和密码为mysql root的账号和密码。
这里以同步db_test库为例
1)添加源库的表
2)添加目标库的表
添加db_test 库的 channel
位点信息为canal开始同步的位置,该信息可在mysql中使用如下语句获取:show master status\G;
点击同步管理 ,点击添加 ,新增channel
这里以单向同步db_test 库为例
输入Channel Name,同步一致性选择:基于当前日志更新,同步模式为:列记录模式,如果是主主双向同步模式,还需要开启数据一致性。
在Channel列表,点击刚才创建的Channel名字,进入Pipeline管理列表
点击“添加”按钮
5.6 配置同步映射规则
在Pipeline列表,点击刚才创建的Pipeline名字,进入映射关系列表
点击添加按钮,添加映射关系
5.7 启动同步
配置完映射规则,回到同步管理主页,点击启用即可开启同步。
查看同步状态
在源端写入一个新的表,并insert 1000万条数据
mysql -h 172.17.6.47 -u root -p
MySQL [(none)]> use db_test;
Database changed
MySQL [db_test]> CREATE TABLE IF NOT EXISTS user_info (
-> id INT PRIMARY KEY AUTO_INCREMENT,
-> name VARCHAR(50),
-> age INT,
-> salary DECIMAL
-> );
#创建一个存储过程,插入1万条数据
MySQL [db_test]> CREATE PROCEDURE Insertuser()
-> BEGIN
-> DECLARE i INT DEFAULT 1;
-> WHILE i <= 10000 DO
-> INSERT INTO user_info (id, name, age, salary) VALUES (i, CONCAT('John', i), 30, 5000);
-> SET i = i + 1;
-> END WHILE;
-> END //
MySQL [db_test]> DELIMITER ;
#执行存储过程
MySQL [db_test]> CALL Insertuser();
查看源端表的行数
登录目标数据库 172.17.6.16 进行验证
查看同步监控
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。