otter wiki:https://github.com/alibaba/otter/wiki
1、源码编译找不到jtester包
git clone https://github.com/alibaba/otter.git
cd otter/lib
./install.sh (安装jtester,若没有权限执行chmod +x install.sh)
cd ..
mvn clean install -Dmaven.test.skip -Denv=release
2、node部署依赖aria2
aria2的安装依赖本机的gcc版本,可升级gcc再安装最新aria2,也可以使用低版本aria2。
当前gcc是4.4.7,采用低版本aria2:
wget https://ayera.dl.sourceforge.net/project/aria2/stable/aria2-1.16.4/aria2-1.16.4.tar.gz
tar -xzf aria2-1.16.4.tar.gz
cd aria2-1.16.4
./configure
make & make install
3、分库分表自增id问题
在分库分表情况下,把多表合成一个大表,如果用自增id作为主键,则会出现数据覆盖情况。因为otter以主键生成新sql插入目标数据库。
解决办法:在pipeline设置同步字段时候去掉id,再表新增其他字段作为主键,例如orderId/userId
4、全量同步数据
4.1、在源DB创建retl库,执行source otter-system-ddl-mysql.sql
4.2、对source端的用户授与retl这个数据库的select权限
4.3、执行 insert into retl.retl_buffer(ID,TABLE_ID, FULL_NAME,TYPE,PK_DATA,GMT_CREATE,GMT_MODIFIED) (select null,0,'数据库名称.表名称','U',主键名称,now(),now() from 数据库名称.表名称);
4.4、两种方式插入需要同步数据:一指定table-id(就是manager中表配置的序号)而full-name置null、二使用full-name(schemaName.tableName)而table-id置0
5、数据库主备切换问题
如果MySQL使用VIP是去HA,当MYSQL发生主从切换的时候,canal会可能会报错,因为和备机上的binlog和position对不上。
canal v1.1.0已支持gtid模式订阅
6、同步延迟问题
6.1、批量改表可能产生上g的binlog,导致延迟
6.2、数据库QPS>3000,otter同步数据会出现延迟
6.3、同个node节点上的pipeline延迟会相互影响
6.4、单个pipeline能够同步的数据最高不超过25万/秒
7、