Otter实现mysql数据库指定多个表实时单向同步
背景
生产库接入太多应用程序,现需要搭建从库用于测试并数据分析,由于并发量大,mysql自带的主从同步存在瓶颈,主从同步延迟增大,因此通过otter的方案实现主从同步。
计划
192.168.101.244 部署otter-manager(jdk、zk、mysql、otter-manager、aria2c)
192.168.100.35 部署otter-node(jdk、aria2c 、otter-node)
192.168.101.177 生产库ehc
192.168.100.99 测试库ehc
安装jdk
安装zookeeper
安装otter manager
1.下载安装包
wget https://github.com/alibaba/otter/releases/download/otter-4.2.18/manager.deployer-4.2.18.tar.gz
2.下载数据库otter初始化脚本
3.导入otter初始化sql
4.创建数据库用户名和密码
CREATE USER 'otter'@'%' IDENTIFIED BY 'XXXXXXX';
GRANT ALL ON otter.* TO 'otter'@'%';
flush privileges;
5.创建otter manager目录并解压安装包
6.修改配置文件
vim otter.properties
7.启动服务,并查看日志
8.可以通过MobaXterm将服务器端口映射至本地
9.登录页面查看
默认账号密码:admin/admin
安装otter-node
1.下载otter-node
wget https://github.com/alibaba/otter/releases/download/otter-4.2.18/node.deployer-4.2.18.tar.gz
2.下载并安装aria2c
node节点进行跨机房传输时,会使用到HTTP多线程传输技术,目前主要依赖了aria2c做为其下载客户端
aria2c下载地址:https://github.com/aria2/aria2/releases
编译完成后,将对应的aria2c包加入到PATH路径即可(node和manager节点都需将编译好的aria2c保存至 /usr/local/bin)
otter node会受otter manager进行管理,所以需要预先安装otter manager
完成manager安装后,需要在manager页面为node定义配置信息,并生一个唯一id
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
3.配置zookeeper
4.配置node节点
根据创建的序列号,配置对应的nid
如法炮制,创建多个节点,并启动
开始同步服务配置
1.源库及目标库创建用户
【canal】
CREATE USER canal IDENTIFIED BY 'XXXXXXXX';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO 'canal'@'%';
flush privileges;
【otter】
grant all privileges on . to otter@'%' identified by 'XXXXXXXX';
flush privileges;
2.源库和目标库配置修改
vim /etc/my.cnf
开启bin log模式
log-bin=mysql-bin
binlog_format=row
如果mysql为多写模式,需要在每个写库配置自增主键的偏移量和步长,避免主键冲突,偏移量和步长根据写库数量做配置
例如myql双写模式场景下,MySQL-A配置如下
auto-increment-increment=2
auto-increment-offset=1
MySQL-B配置如下
auto-increment-increment=2
auto-increment-offset=2
3.创建数据源
源库:
目标库:
4.创建数据表配置
源库:
目的库:
报错:
由于想要同步的表较多,这边分两块加入
5.添加canal配置
6.创建channel
7.添加同步的源表和目标表
8.开启同步