Canal & Otter 的一些注意事项和最佳实践

1,canal和otter由于是java开发的,运行在windows和linux上都可以

2,为了使用otter必须要canal的支持,otter作为canal的消费方,当然也可以单独使用canal,如果你有消费mysql binlog的需求

3,canal有几种运行方式,生产环境中推荐使用zookeeper的持久化方式,对应的spring配置文件为:default-instance.xml

4,运行otter需要aria2的支持,windows和linux都有对应的版本

centos5,安装aria2的解决办法:

wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm rpm -Uvh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm yum -y install aria2

5,canal在otter中只支持嵌入的方式,通过管理界面配置就好,不需要再手动控制canal,canal是通过线程的方式运行在node节点

6,canal用的zookeeper和node-manager用的zookeeper可以用同一个,数据不会冲突,但是至少要3台机器做集群来HA,也可以利用zookeeper的observer特性构成读镜像来提升性能

7,otter只支持ROW模式的数据同步,其他两种模式不支持

8,源库只支持mysql,目标库支持mysql和oracle

9,同步的表必须要有主键,无主键表update会是一个全表扫描,效率比较差),就是全字段匹配,如果出现重复记录的话,同步会导致数据错乱

10,支持部分ddl同步  (支持create table / drop table / alter table / truncate table / rename table / create index / drop index,其他类型的暂不支持,比如grant,create user,trigger等等),同时ddl语句不支持幂等性操作,所以出现重复同步时,会导致同步挂起,可通过配置高级参数:跳过ddl异常,来解决这个问题.

11,不支持带外键的记录同步.  (数据载入算法会打算事务,进行并行处理,会导致外键约束无法满足)

12,数据库上trigger配置慎重.  (比如源库,有一张A表配置了trigger,将A表上的变化记录到B表中,而B表也需要同步。如果目标库也有这trigger,在同步时会插入一次A表,2次B表,因为A表的同步插入也会触发trigger插入一次B表,所以有2次B表同步.)

13,2个manager,可以部署2个manager,manager之间本身没有通信,而是通过zk和数据库,配置node的时候需要知道manager,可以指定其中一个即可,数据会反应到数据库和zk中,但是当这个manager挂了,新配置的node信息就不能反馈到另外一个manager上,所以最佳实践是指定所有的manage

14,https的支持,otter用的是jetty,修改下jetty.xml,改成https的方式就好,同时要修改otter.properties中的otter.domainName参数,谁知道生成的菜单变成了类似https/auto_keeper_clusters_list.htm,由于菜单是公用的,找到navigation.vm,修改url链接就好了,然而在登录的时候又粗线问题了,后台验证成功后,跳转的url连接又不对,后来发现otter用的是webx的框架,找到了uris.xml,找到serverURI节点,把前面的http://去掉就可以了

15,禁止匿名访问,本来是想通过filter的方式来实现,但是发现session中怎么也取不到登录后的信息,发现webx框架自己实现了session,已经无解了,通过查看manager的配置文件发现了webx.xml这个好东西,发现urlAnalyze节点里配置了权限相关,愉快的解决了

需要的软件及脚本下载:

http://pan.baidu.com/s/1o6s14Ie

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

MySQL如何实时同步数据到ES?试试这款阿里开源的神器

摘要mall项目中的商品搜索功能,一直都没有做实时数据同步。最近发现阿里巴巴开源的canal可以把MySQL中的数据实时同步到Elasticsearch中,能很好地解决数据同步问题。今天我们来讲讲canal的使用,希望对大家有所帮助!canal简介canal主要用途是对MySQL数据库增量日志进行解析,提供增量数据的订阅和消

Canal简介及配置说明

1.简介canal是纯Java开发的,基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql。原理相对比较简单:1.1.canal模拟mysqlslave的交互协议,伪装自己为mysqlslave,向mysqlmaster发送dump协议2.2.mysqlmaster收到dump请