单向 mysql:Otter跨机房数据同步( 三 )


node配置
首先cd NODE_HOME/conf
echo 1 > nid
node配置文件otter.properties(可以默认,不用做任何修改)如下:
[root@v-03-01-00223 conf]# cat otter.properties
# 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 pool size
otter.communication.pool.size = 10
## otter arbitrate & node connect manager config
otter.manager.address = 192.168.140.24:1099
启动node
cd NODE_HOME/bin
./startup.sh
[root@v-03-01-00223 node]# more node.log 
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=96m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
2018-07-03 15:13:09.364 [main] INFO com.alibaba.otter.node.deployer.OtterLauncher - INFO ## the otter server is running now ......
此时再查看manager控制台的机器管理,可以发现机器状态为已启动,如下:

单向 mysql:Otter跨机房数据同步

文章插图
 
manager/node都启动之后,就可以真正开始配置同步任务了 。
同步任务配置
分为下列几个步骤(不熟悉术语概念的建议回到页首重新review下):
1、添加canal
单向 mysql:Otter跨机房数据同步

文章插图
 

单向 mysql:Otter跨机房数据同步

文章插图
 
点位可以通过在主库执行show master status和select unix_timestamp()得到 。
2、添加数据源
设置主库和从库的数据源
单向 mysql:Otter跨机房数据同步

文章插图
 

单向 mysql:Otter跨机房数据同步

文章插图
 
3、添加同步表
单向 mysql:Otter跨机房数据同步

文章插图
 

单向 mysql:Otter跨机房数据同步

文章插图
 
4、添加channel
单向 mysql:Otter跨机房数据同步

文章插图
 
5、添加pipeline
pipeline里面主要选择节点和canal 。
6、添加映射关系
单向 mysql:Otter跨机房数据同步

文章插图
 

单向 mysql:Otter跨机房数据同步

文章插图
 
7、启动同步
单向 mysql:Otter跨机房数据同步

文章插图
 
注意:默认会同步ddl,对于分库分表同步到从库的时候,建议不要同步ddl以及跳过ddl 。
插入数据试试看吧 。。。。
otter同步异常问题排查与监控
笔者一开始启动后,确实报错了,如下:
单向 mysql:Otter跨机房数据同步

文章插图
 
TODO,等后续梳理确保都可重复执行之后,再补充 。
otter简单性能测试
创建了一个简单的表使用mysqlslap进行测试 。
注:我们因为环境受限,zk、manager、node、mysql主从均在一台服务器上,配置为16c/8GB阿里云服务器,无swap 。
CREATE TABLE `otter_test_table1` (
`id` int(11) NOT NULL,
`name` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
测试100w条插入
mysqlslap --defaults-file="/etc/my.cnf.57" --concurrency=50 --iterations=1 --create-schema=otter_test --query="insert into otter_test_table1 values(FLOOR(0 + (RAND() * 10000000)),'name93923') ON DUPLICATE KEY UPDATE name='wifeufwuwwu'" --number-of-queries=1000000 -uroot -p123456 -P3307 -h127.0.0.1
延迟、tps等如下:
单向 mysql:Otter跨机房数据同步

文章插图
 

单向 mysql:Otter跨机房数据同步

文章插图
 
可以看出后面基本上都在io等待了,一般来说数据库服务器io等待持续到10%之后,系统就很慢了,所以总体来说,如果不做太多的字段重命名、二次处理,otter性能本身还是不错的 。
otter高可用
对外开源部分HA这一块基本上没有比较完善的 。对于canal连接到db主从切换,可以参考:https://www.cnblogs.com/f-zhao/p/7681960.html,已经讲到位了 。如果是半同步模式或者基于GTID的话,没有必要回退60s 。


推荐阅读