此处将以Alibaba canal([https://github.com/alibaba/canal])为例,说明Canal的使用,Canal作为数据库数据异步实时同步利器,为分库分表条件下数据一致性维护启到重要作用。
流程图
Canal可以实时异步监听多Master数据库数据变化,并异步将数据同步到给其他应用,这些应用不仅可以使ES集群,也可以是其他相关应用。
配置
以canal 1.1.4版本为例,支持mysql最新版本8.x,解压后分别配置如下
配置canal.properties文件:
(1)canal.zkServers 配置zookeeper集群地址;
(2)canal.ip配置为本机的host实际IP地址;
(3)canal.register.ip配置为本机的host实际IP地址;
(4)canal.destinations配置为数据库分片数,可以通过拷贝其中source目录进行类似配置:
- 执行命令 cp -r source sharding1
- canal.destinations=source,sharding1,sharding2,shardingn
(5)网络配置
- canal.instance.network.receiveBufferSize=65536
- canal.instance.network.sendBufferSize=65536
(6)配置集群支持
- canal.instance.global.sprint.xml=casspath:spring/default-instance.xml 其他注释掉
配置intance.properties文件:
分别进入source,sharding1,sharding2文件目录,找到旗下此文件,以下以source文件为例:
- canal.instance.master.address=master1:3306
- canal.instance.dbUsername=canal
- canal.instance.dbPassword=canal
进入sharding1目录,是种配置master的slave权限,配置如下,其他类似:
- canal.instance.master.address=master2:3306
- canal.instance.dbUsername=canal
- canal.instance.dbPassword=canal
注意,配置时候需要提前在master数据库,需创建一个具有slave权限的canal用户,并设置相应的密码canal,如下通过canal账户登录mysql验证是否授slave权限;
- canal账户
已授权
mysql>show grants for canal;
+----------------------------------------------------------------------------------+
| Grants for canal@% |
+----------------------------------------------------------------------------------+
| GRANT SELECT,REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO `canal`@`%` |
+----------------------------------------------------------------------------------+
1 row in set (0.00 sec)
- canal账户未授权
mysql>show grants for canal;
+-----------------------------------------------------------------------------------+
| Grants for canal@% |
+-----------------------------------------------------------------------------------+
| GRANT RELOAD,PROCESS,FILE,SHOW DATABASES,REPLICATION CLIENT ON *.* TO `canal`@`%` |
| GRANT ALL PRIVILEGES ON `db_name` TO `canal`@`%` WITH GRANT OPTION |
+-----------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
启动
进入bin目录执行命令,可以在命令里面修改JVM参数。
./startup.sh
验证
使用canal用户或所有权用户登录到master数据库,执行命令
show processlist
如果能够正常常看到Dump进程(command部分),则说明配置成功。
mysql>show processlist;
+----------------------------------------------------------------------------------------------------------------------------------+
| Id | User | Host | db | command | Time | State | Info|
+----------------------------------------------------------------------------------------------------------------------------------+
| 128x | canal | 192.168..:15752 | NULL | Binlog Dump | 20210123 | Master has send binlog to slave;waiting for more updates | NULL |
+----------------------------------------------------------------------------------------------------------------------------------+
问题处理
如果发现canal和应用之间连接报错等问题,可以采取以下步骤进行处理。
(1)停止连接canal的应用,停止canal中间件;
(2)通过zkCli.sh进入zookeeper控制台,删除deleteall /otter
(3) 重启canal中间件,重启应用服务。