docker容器中Canal的安装配置和redis的回收策略

1、mysql主服务器的配置

1.1 进入mysql中检查binlog是否开启

show VARIABLES like 'log_%'

 1.2 在mysql中创建用户canal

        分别运算下列语句

create user 'canal'@'%' IDENTIFIED with mysql_native_password by 'canal';

grant SELECT, REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'canal'@'%';

FLUSH PRIVILEGES;

2、安装Canal的docker容器

2.1 查询镜像

[root@localhost ~]# docker search canal

 2.2 拉取镜像

[root@localhost ~]# docker pull  docker.io/canal/canal-server

 2.3 配置文件

  • 在/usr/local/文件目录下创建software/canal/conf文件目录

[root@localhost local ]# mkdir -p software/cancl/conf

  • 复制Canal文件中的文件到当前cancl/conf文件夹下
cp canal:/home/admin/canal-server/conf/canal.properties  /usr/local/software/canal/conf

cp canal:/home/admin/canal-server/conf/instance.properties  /usr/local/software/canal/conf
  • 修改文件权限

[root@localhost conf]# chmod 777 *.properties

  •  查询mysql主服务器容器的IP地址

[root@localhost conf]# docker inspect mysql_3306 |grep IPA
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.2",

  •  查询mysql主服务的状态

//进入MySQL容器

[root@localhost conf]# docker exec -it mysql_3306 bash

//启动MySQL
bash-4.4# mysql -uroot -p123

//查看状态

mysql> show master status;

  •  修改instance.properties 配置文件
5 # enable gtid use true/false
  6 canal.instance.gtidon=false
  7 
  8 # position info
  9 canal.instance.master.address=172.17.0.2:3306  #mysql容器的IP地址和端口号
 10 canal.instance.master.journal.name=mysql-bin.000006 #数据库状态的File值
 11 canal.instance.master.position=3771971 #数据库状态的Position值
 12 canal.instance.master.timestamp=
 13 canal.instance.master.gtid=
 14 

 32 # username/password
 33 canal.instance.dbUsername=root   #数据库登录用户名
 34 canal.instance.dbPassword=123    #数据库登录密码
 35 canal.instance.connectionCharset = UTF-8
 36 # enable druid Decrypt database password
 37 canal.instance.enableDruid=false
 38 #canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GC    Mo2/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ==


 2.4创建Canal的docker容器

[root@localhost conf]# docker run -itd  --name canal  -p 11111:11111 --privileged=true  
-v /usr/local/software/canal/conf/instance.properties:/home/admin/canal-server/conf/example/instance.properties  
-v  /usr/local/software/canal/conf/canal.properties:/home/admin/canal-server/conf/example/canal.properties    
canal/canal-server
f9e8a8c5c661401826d6b12916442b45198560210dd4d5121054dd82da2b6a61

-v /usr/local/software/canal/conf/instance.properties:/home/admin/canal-server/conf/example/instance.properties   前面时自己创建的conf文件目录中的instance.properties的地址  后面时canal文件中的instance.properties地址

3、测试代码

Canal官网:ClientExample · alibaba/canal Wiki · GitHub (kgithub.com)

 

 3.1 在springboot项目中导入Canal依赖

<dependency>
    <groupId>com.alibaba.otter</groupId>
    <artifactId>canal.client</artifactId>
    <version>1.1.0</version>
</dependency>

3.2 测试代码

将官网中的ClientSample代码复制到项目中

 将代码做一些修改

  final InetSocketAddress HOST = new InetSocketAddress("192.168.121.128",11111);
        CanalConnector connector = CanalConnectors.newSingleConnector(HOST, "example", "", "");
        int batchSize = 1000;
        int emptyCount = 0;

4、redis的回收策略

        redis的回收机制有两种方式,一是清除过期的键对象,二是内存到达上限触发内存淘汰策略。

4.1 清除过期的键对象

        redis所有的key都设置了过期属性,redis保存了大量的key,要精准保证每个键的过期删除机制太消耗CPU,这对单线程的redis来说付出的代价比较大,因此Redis采用惰性删除定时任务删除机制实现过期键的内存回收。

- 惰性删除:惰性删除用于当客户端读取带有超时属性的键时,如果已经超过键设置的过期时间,会执行删除操作并返回空,这种策略是出于节省CPU成本考虑,不需要单独维护TTL链表来处理过期键的删除。但是单独用这种方式存在内存泄露的问题,当过期键一直没有访问将无法得到及时删除,从而导致内存不能及时释放。正因为如此,Redis还提供另一种定时任务删除机制作为惰性删除的补充。
- 定时任务删除:Redis内部维护一个定时任务,默认每秒运行10次(通过配置hz控制)。定时任务中删除过期键逻辑采用了自适应算法,根据键的过期比例,使用快慢两种速率模式回收键。

4.2淘汰策略

当Redis所用内存达到上限时会触发相应的淘汰策略,redis默认的淘汰策略为noeviction。

  1. volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰。
  2. volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰。
  3. volatile-random:从已设置过期时间的数据集中任意选择数据淘汰。
  4. volatile-lfu:从已设置过期时间的数据集挑选使用频率最低的数据淘汰。
  5. allkeys-lru:从数据集中挑选最近最少使用的数据淘汰
  6. allkeys-lfu:从数据集中挑选使用频率最低的数据淘汰。
  7. allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
  8. no-enviction(驱逐):禁止驱逐数据,这也是默认策略。意思是当内存不足以容纳新入数据时,新写入操作就会报错,请求可以继续进行,线上任务也不能持续进行,采用no-enviction策略可以保证数据不被丢失

(9条消息) 超全详解Redis(8种)数据淘汰策略_redis淘汰策略_Adam`南帝·梁的博客-CSDN博客Redis内存回收策略 - 简书 (jianshu.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值