canal部署
⼀. 系统要求
a. windos或者Linux
b. jdk版本1.6以上
c. mysql 5.6以上
d. canal 版本最好是1.1.3的
⼆. 初始化mysql
a. 当前的canal开源版本⽀持5.7及以下的版本(阿⾥内部mysql 5.7.13, 5.6.10, mysql 5.5.18和5.1.40/48),ps. mysql4.x版本没有经过严格测试,理论上是可以兼容
b. canal的原理是基于mysql binlog技术,所以这⾥⼀定需要开启mysql的binlog写⼊功能,并且配置binlog模式为row.
[mysqld]
log-bin=mysql-bin #添加这⼀⾏就ok
沈培艺女儿binlog-format=ROW #选择row模式
server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复
数据库重启后, 简单测试myf配置是否⽣效:
mysql> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
c. canal的原理是模拟⾃⼰为mysql slave,所以这⾥⼀定需要做为mysql slave的相关权限
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;
针对已有的账户可通过grants查询权限:
show grants for 'canal'
其他场景的使⽤
基于canal的docker模式快速启动,参考:
如何将canal链接aliyun rds,参考:
如果将canal消息直接投递给kafka/RocketMQ,参考:
启动步骤:
1. 下载canal
直接下载
wget github/alibaba/canal/releases/download/canal-1.0.17/canal.deployer-1.0.
or
⾃⼰编译
git clone git@github:alibaba/canal.git
cd canal;
mvn clean install -st.skip -Denv=release
编译完成后,会在根⽬录下产⽣target/canal.deployer-$
2. 解压缩
mkdir /tmp/canal
tar zxvf canal.deployer-$ -C /tmp/canal
解压完成后,进⼊/tmp/canal⽬录,可以看到如下结构:
drwxr-xr-x 2 jianghang jianghang 136 2013-02-05 21:51 bin
drwxr-xr-x 4 jianghang jianghang 160 2013-02-05 21:51 conf
中秋节画报简单又漂亮
drwxr-xr-x 2 jianghang jianghang 1.3K 2013-02-05 21:51 lib
drwxr-xr-x 2 jianghang jianghang 48 2013-02-05 21:29 logs
应⽤参数:
vi conf/example/instance.properties
>>>>>>>>>####
## mysql serverId
sql.slaveId = 1234
#position info,需要改成⾃⼰的数据库信息 canal.instance.master.address = 127.0.0.1:3306 canal.instance.master.journal.name = canal.instance.master.position = canal.instance.master.timestamp =
#canal.instance.standby.address = #canal.instance.standby.journal.name = #canal.instance.standby.position = #canal.instance.standby.timestamp =
#username/password,需要改成⾃⼰的数据库信息 canal.instance.dbUsername = canal
canal.instance.dbPassword = canal canal.instance.defaultDatabaseName = tionCharset = UTF-8
#table regex canal. = .*\\..*
>>>>>>>>>####
说明:
tionCharset 代表数据库的编码⽅式对应到java中的编码类型,⽐如UTF-8,GBK , ISO-8859-1
如果系统是1个cpu,需要将canal.instance.parser.parallel设置为false
4. 准备启动
sh bin/startup.sh
5. 查看⽇志
vi logs/canal/canal.log
2013-02-05 22:45:27.967 [main] INFO canal.deployer.CanalLauncher - ## start the canal server.
2013-02-05 22:45:28.113 [main] INFO canal.deployer.CanalController - ## start the canal server[10.1.29.120:11111]
2013-02-05 22:45:28.210 [main] INFO canal.deployer.CanalLauncher - ## the canal server is running now ......
具体instance的⽇志:
vi logs/example/example.log
2013-02-05 22:50:45.636 [main] INFO i.spring.support.PropertyPlaceholderConfigurer - Loading properties file from class path resource [canal.properties]
2013-02-05 22:50:45.641 [main] INFO i.spring.support.PropertyPlaceholderConfigurer - Loading properties file from class path resource [example/instance.properties]
2013-02-05 22:50:45.803 [main] INFO canal.instance.spring.CanalInstanceWithSpring - start CannalInstance for 1-example
2013-02-05 22:50:45.810 [main] INFO canal.instance.spring.CanalInstanceWithSpring -
6. 关闭
sh bin/stop.sh
⼏点注意:
1. linux启动完成后,会在bin⽬录下⽣成canal.pid,stop.sh会读取canal.pid进⾏进程关闭
2. startup.sh默认读取系统环境变量中的which java获得JAVA执⾏路径,需要设置PATH=$JAVA_HOME/bin环境变量
-------------
windows启动:(windows⽀持相对⽐较弱)
startup.bat
windows停⽌:直接关闭终端即可
配置
介绍配置之前,先了解下canal的配置加载⽅式:
canal配置⽅式有两种:
1. ManagerCanalInstanceGenerator:基于manager管理的配置⽅式,⽬前alibaba内部配置使⽤这种⽅式。⼤家可以实现CanalConfigClient,连接各⾃的管理系统,即可完
成接⼊。
2. SpringCanalInstanceGenerator:基于本地spring xml的配置⽅式,⽬前开源版本已经⾃带该功能所有代码,建议使⽤
Spring配置
spring配置的原理是将整个配置抽象为两部分:
xxxx.properties (每个instance通道都有各⾃⼀份定义,因为每个mysql的ip,帐号,密码等信息不会相同)
通过spring的PropertyPlaceholderConfigurer通过机制将其融合,⽣成⼀份instance实例对象,每个instance对应的组件都是相互独⽴的,互不影响
properties配置⽂件
properties配置分为两部分:
canal.properties (系统根配置⽂件)
instance.properties (instance级别的配置⽂件,每个instance⼀份)
canal.properties介绍:
canal配置主要分为两部分定义:
1. instance列表定义 (列出当前server上有多少个instance,每个instance的加载⽅式是spring/manager等) 参数名字参数说明默认值
canal.destinations当前server上部署的
instance列表⽆
canal.auto.scan 开启instance⾃动扫描
如果配置为
true,f.dir⽬录
下的instance配置变化
会⾃动触发:
a. instance⽬录新增:
触发instance配置载
⼊,lazy为true时则⾃动
启动
b. instance⽬录删除:
卸载对应instance配
置,如已启动则进⾏关
闭
c. instance.properties⽂
件变化:reload
instance配置,如已启
动⾃动进⾏重启操作
配置windows update失败true
canal.auto.scan.interval instance⾃动扫描的间
隔时间,单位秒
5
canal.de全局配置加载⽅式spring canal.instance.global.lazy全局lazy模式false canal.instance.global.manager.address全局的manager配置⽅
式的链接信息
⽆
canal.instance.l全局的spring配置⽅式
的组件⽂件classpath:l
(spring⽬录相对于f.dir)
de ample.lazy l .....instance级别的配置定
义,如有配置,会⾃动
覆盖全局配置定义模式
命名规则:
canal.instance. {name}.xxx
⽆
canal.instance.l v1.0.25版本新增,全局的
tsdb配置⽅式的组件⽂
件
classpath:spring/tsdb/h2-
于f.dir)
2. common参数定义,⽐如可以将instance.properties的公⽤参数,抽取放置到这⾥,这样每个instance启动的时候就可以共享. 【instance.properties配置定义优先级⾼于canal.properties】
参数名字参数说明默认值
canal.id每个canal server实例的唯⼀标识,暂
⽆实际意义
1
canal.ip canal server绑定的本地IP信息,如果
不配置,默认选择⼀个本机IP进⾏启
动服务
⽆
canal.port canal server提供socket服务的端⼝11111
canal.zkServers canal server链接zookeeper集的链
接信息
例⼦:
10.20.144.22:2181,10.20.144.51:2181
⽆
新频率,单位毫秒
1000
de canal内存store中数据缓存模式
1. ITEMSIZE : 根据buffer.size进⾏限
制,只限制记录的数量
2. MEMSIZE : 根据buffer.size
* unit的⼤⼩,限制缓存记
录的⼤⼩
MEMSIZE
buffer.size canal内存store中可缓存buffer记录
数,需要为2的指数
16384
unit 内存记录的单位⼤⼩,默认1KB,和buffer.size组合决定最终的内存使⽤⼤
⼩
1024
ansactionn.size 最⼤事务完整解析的长度⽀持
超过该长度后,⼀个事务可能会被拆
分成多次提交到canal store中,⽆法保
证事务的完整可见性
1024
canal.instance.fallbackIntervalInSeconds canal发⽣mysql切换时,在新的mysql
库上查binlog时需要往前查的时
间,单位秒
说明:mysql主备库可能存在解析延迟
或者时钟不统⼀,需要回退⼀段时
间,保证数据不丢
60
canal.able是否开启⼼跳检查false
精英律师演员表canal.instance.detecting.sql⼼跳检查sql insert into retl.xdual values(1,now()) on duplicate key update x=now() canal.instance.detecting.interval.time⼼跳检查频率,单位秒3
canal.threshold⼼跳检查失败重试次数3
canal.instance.detecting.heartbeatHaEnable ⼼跳检查失败后,是否开启⾃动mysql
⾃动切换
说明:⽐如⼼跳检查失败超过阀值
后,如果该配置为true,canal就会⾃
动链到mysql备库获取binlog数据
false
iveBufferSize⽹络链接参
数,SocketOptions.SO_RCVBUF
16384
canal.instancework.sendBufferSize⽹络链接参
数,SocketOptions.SO_SNDBUF
16384
canal.instancework.soTimeout⽹络链接参
儿童节祝福语给小朋友数,SocketOptions.SO_TIMEOUT
芬兰现全红彩虹30
canal.instance.filter.druid.ddl是否使⽤druid处理所有的ddl解析来获
取库和表名
true canal.instance.filter.query.dcl是否忽略dcl语句false
canal.instance.filter.query.dml 是否忽略dml语句
(mysql5.6之后,在row模式下每条
DML语句也会记录SQL到binlog中,可
参考)
false
canal.instance.filter.query.ddl是否忽略ddl语句false
canal.instance. 是否忽略binlog表结构获取失败的异常
(主要解决回溯binlog时,对应表已被删
除或者表结构和binlog不⼀致的情况)
false
canal.ws 是否dml的数据变更事件
(主要针对⽤户只订阅ddl/dcl的操作)
false
canal. 是否忽略事务头和尾,⽐如针对写⼊
kakfa的消息时,不需要写⼊TransactionBegin/Transactionend事
件
false
canal.instance.binlog.format⽀持的binlog format格式列表
(otter会有⽀持format格式限制)
ROW,STATEMENT,MIXED
canal.instance.binlog.image⽀持的binlog image格式列表
(otter会有⽀持format格式限制)
FULL,MINIMAL,NOBLOB
ddl.isolation ddl语句是否单独⼀个batch返回
(⽐如下游dml/ddl如果做batch内⽆序
并发处理,会导致结构不⼀致)
false
canal.instance.parser.parallel 是否开启binlog并⾏解析模式
(串⾏解析资源占⽤少,但性能有瓶颈,
并⾏解析可以提升近2.5倍+)
true
canal.instance.parser.parallelBufferSize binlog并⾏解析的异步ringbuffer队列
(必须为2的指数)
256
canal.able是否开启tablemeta的tsdb能⼒true
canal.instance.tsdb.dir主要针对l时对应h2⽂件的
存放⽬录,默认为conf/xx/h2.mv.db
${canal.file.data.dir:../conf}/${canal.instance.destination:}
canal.instance.tsdb.url jdbc url的配置
(h2的地址为默认值,如果是mysql需
要⾃⾏定义)
jdbc:h2:${canal.instance.tsdb.dir}/h2;CACHE_SIZE=1000;MODE=MYSQL;
canal.instance.tsdb.dbUsername jdbc url的配置
(h2的地址为默认值,如果是mysql需
要⾃⾏定义)
canal
canal.instance.tsdb.dbPassword jdbc url的配置
(h2的地址为默认值,如果是mysql需
要⾃⾏定义)
canal
canal.instance.rds.accesskey aliyun账号的ak信息 (如果不需要在本
地binlog超过18⼩时被清理后⾃动下载
oss上的binlog,可以忽略该值)
⽆
canal.instance.rds.secretkey aliyun账号的sk信息
(如果不需要在本地binlog超过18⼩时
被清理后⾃动下载oss上的binlog,可
以忽略该值)
⽆
instance.properties介绍:
a. 在canal.properties定义了canal.destinations后,需要在f.dir对应的⽬录下建⽴同名的⽂件⽐如:
canal.destinations = example1,example2
这时需要创建example1和example2两个⽬录,每个⽬录⾥各⾃有⼀份instance.properties.
ps. canal⾃带了⼀份instance.properties demo,可直接复制conf/example⽬录进⾏配置修改
cp -R example example1/
cp -R example example2/
b. 如果canal.properties未定义instance列表,但开启了canal.auto.scan时
server第⼀次启动时,会⾃动扫描conf⽬录下,将⽂件名做为instance name,启动对应的instance server运⾏过程中,会根据canal.auto.scan.interval定义的频率,进⾏扫描
1. 发现⽬录有新增,启动新的instance
2. 发现⽬录有删除,关闭⽼的instance
3. 发现对应⽬录的instance.properties有变化,重启instance
⼀个标准的conf⽬录结果:
jianghang@jianghang-laptop:~/work/canal/deployer/target/canal$ ls -l conf/
总⽤量 8
-rwxrwxrwx 1 jianghang jianghang 1677 2013-03-19 15:03 canal.properties ##系统配置
drwxr-xr-x 2 jianghang jianghang 88 2013-03-19 15:03 example ## instance配置
-rwxrwxrwx 1 jianghang jianghang 1840 2013-03-19 15:l ## ⽇志⽂件
drwxr-xr-x 2 jianghang jianghang 168 2013-03-19 17:04 spring ## spring instance莫把呢
instance.properties参数列表:
参数名字参数说明默认值
sql.slaveId mysql集配置中的serverId概念,需
要保证和当前mysql集中id唯⼀
(v1.1.x版本之后canal会⾃动⽣成,
不需要⼿⼯指定)
⽆
canal.instance.master.address mysql主库链接地址127.0.0.1:3306 canal.instance.master.journal.name mysql主库链接时起始的binlog⽂件⽆
canal.instance.master.position mysql主库链接时起始的binlog偏移
量
⽆
canal.instance.master.timestamp mysql主库链接时起始的binlog的时
间戳
⽆
idon是否启⽤mysql gtid的订阅模式false canal.id mysql主库链接时对应的gtid位点⽆canal.instance.dbUsername mysql数据库帐号canal canal.instance.dbPassword mysql数据库密码canal canal.instance.defaultDatabaseName mysql链接时默认schema
tionCharset mysql 数据解析编码UTF-8
canal. mysql 数据解析关注的表,Perl正则
表达式.
多个正则之间以逗号(,)分隔,转义符
需要双斜杠(\\)
常见例⼦:
1. 所有表:.* or .*\\..*
2. canal schema下所有表:
canal\\..*
3. canal下的以canal打头的表:
canal\\.canal.*
4. canal schema下的⼀张表:
canal\\.test1
5. 多个规则组合使⽤:
canal\\..*,st2 (逗
号分隔)
.
*\\..*
canal.instance. mysql 数据解析表的⿊名单,表达式
规则见⽩名单的规则⽆
canal.instance.rds.instanceId aliyun rds对应的实例id信息
(如果不需要在本地binlog超过18⼩时
被清理后⾃动下载oss上的binlog,
可以忽略该值)
⽆
⼏点说明:
1. mysql链接时的起始位置
canal.instance.master.journal.name + canal.instance.master.position : 精确指定⼀个binlog位点,进⾏启动
canal.instance.master.timestamp : 指定⼀个时间戳,canal会⾃动遍历mysql binlog,到对应时间戳的binlog位点后,进⾏启动不指定任何信息:默认从当前数据库的位点,进⾏启动。(show master status)
2. mysql解析关注表定义
标准的Perl正则,注意转义时需要双斜杠:\\
本文发布于:2024-12-29 23:53:05,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
- 上一篇: IIS部署网站后,无法正常访问网站问题
- 下一篇: Windows10永久关闭自动更新的方法
发布评论