PikiwiDB(Pika) 社区非常荣幸地宣布,我们的最新 v3.5.4 正式生产可用版本现已发布。

v3.5.4 解决了历史遗留的 bug,对 PikiwiDB(Pika) 的一些遗留 bug 进行修复和优化,旨在打造出一个高稳定性的版本。本次的重点优化主要包括,PikiwiDB(Pika)支持动态调整限速参数、增强 PikiwiDB(Pika) 的客观测性指标、 磁盘 IO 限速支持读限速及写限速等。

1 新特性

Pika 支持动态调整全量同步限速参数 rsync-timeout-ms 和 throttle-bytes-per-second

自 v3.5.0 版本开始,PikiwiDB(Pika) 服务摒弃了通过子进程内使用原来 rsync 工具进行主从全量同步的逻辑,在 PikiwiDB(Pika) 内部以线程方式【称作 rsync 线程】自行实现了新的全量同步逻辑,避免因为外部进程不可控引起的主从同步问题,根据 360 内部 Pika 线上大规模集群运维的经验,在 PikiwiDB(Pika) 主从进行全量同步的过程中,如果遇到某些不利的外部因素,如网络波动,硬件故障(如网卡降速导致的主从网卡速率不匹配)等,可能引起 rsync 线程请求持续超时(PikiwiDB(Pika) 内置 rsync 模块用于全量同步阶段的文件传输),且超时重试所发出的包可能引发更大的网络信道负担。此时对于运维人员来说,如果能动态调整 rsync 请求的超时时间和 rsync 传输的速率上限,不仅意味着对全量同步阶段控制粒度的进一步细化,更大大降低了在该场景下的运维处置难度。

关键PR:

https://github.com/OpenAtomFoundation/pika/pull/2633

将 info key space 1 的结果输出至 info all 并展示到监控界面中

PikiwiDB(Pika) 是通过 Info 命令采集数据至 Pika-Exporter,展示到 Grafana 界面上的,目前界面上部分数据是没有展示的,如 keys 的数量,本次将执行 info keyspace 的结果展示到监控界面,用户可以通过这个指标来查看存储的量级等。

关键PR:

https://github.com/OpenAtomFoundation/pika/pull/2603

Pika 磁盘IO 限速参数支持 OnlyRead、OnlyWrite、ReadAndWrite,默认支持OnlyWrite

自 3.5.0 版本开始,PikiwiDB(Pika) 服务可以通过调整 rate-limit 参数实现写限速,防止在网卡质量不高的情况下磁盘 IO 过重导致服务不可用,或者 binlog 阻塞的情况发生。360内部 Pika 线上大规模集群运维的经验,在 PikiwiDB(Pika) 实例的网卡较差情况下,也需要对读实例进行限速,本次修改支持读、写限速,默认是写限速,调整 config 配置中的 rate-limiter-mode 可以设置为读限速,或者同时读写限速。

关键PR:

https://github.com/OpenAtomFoundation/pika/pull/2599

2 改进列表

slotmigrate 添加 go test。

https://github.com/OpenAtomFoundation/pika/pull/2576

INFO 命令耗时优化,降低查磁盘频率,避免因为数据采集调用 info 命令时查磁盘太过频繁导致服务性能下降。

https://github.com/OpenAtomFoundation/pika/pull/2554

对五种基本数据类型命令增加 Redis tcl 测试。

https://github.com/OpenAtomFoundation/pika/pull/2527

3 Bug 修复

修复使用 Pika Exporter 时可能会出现 slots 分配不均衡的问题。

https://github.com/OpenAtomFoundation/pika/pull/2651

修复 Codis dashboard 不能正确更新 master 实例状态的问题。

https://github.com/OpenAtomFoundation/pika/pull/2650

修复 Redis 事务 binlog 解析失败导致的主从同步异常问题。

https://github.com/OpenAtomFoundation/pika/pull/2642

修复 Pika Expoter 启动时不带参数导致启动失败问题。

https://github.com/OpenAtomFoundation/pika/pull/2640

修复使用 Pika Operater 拉起集群 Codis-proxy panic 的问题。

https://github.com/OpenAtomFoundation/pika/pull/2633

修复 CI 编译出的二进制进行自动化测试时 cp 命令失败问题。

https://github.com/OpenAtomFoundation/pika/pull/2614

修复变量未初始化导致 cache 启动失败的问题。

https://github.com/OpenAtomFoundation/pika/pull/2613

修复 userpass 和 userblacklist 动态修改参数功能异常问题。

https://github.com/OpenAtomFoundation/pika/pull/2600

修复 scard sscan 结果不一致的问题。

https://github.com/OpenAtomFoundation/pika/pull/2596

修复当 max-rsync-parallel-num 大于4,slave 会在主从复制时 coredump 的问题。

https://github.com/OpenAtomFoundation/pika/pull/2595

调整不常用的线程池线程数,避免因为空跑导致性能损耗。

https://github.com/OpenAtomFoundation/pika/pull/2590

修复 Pika 事务边缘测试 case 不通过的问题。

https://github.com/OpenAtomFoundation/pika/pull/2586

将 cache-model 修改成 cache-mode。

https://github.com/OpenAtomFoundation/pika/pull/2585

修复使用 info keyspace 后,info all 死锁的问题。

https://github.com/OpenAtomFoundation/pika/pull/2584

修复因修改 zsetscorekey comparator impl 字典序比较熟顺序,导致 353 352极端场景不兼容的问题。

https://github.com/OpenAtomFoundation/pika/pull/2583

修复 compact 死锁的问题。

https://github.com/OpenAtomFoundation/pika/pull/2581

Slotmigrate 添加 go test。

https://github.com/OpenAtomFoundation/pika/pull/2576

更新 Pika Operater 使用的 pika 版本。

https://github.com/OpenAtomFoundation/pika/pull/2572

修复 config rewrite 后 blockcache 数值异常的问题。

https://github.com/OpenAtomFoundation/pika/pull/2561

修复 slotmigrate 动态修复后值错误的问题。

https://github.com/OpenAtomFoundation/pika/pull/2548

修复 spop 可能会出现主从数据不一致的问题。

https://github.com/OpenAtomFoundation/pika/pull/2541

修复 CloseFd(it->second[i]) 出现越界的问题。

https://github.com/OpenAtomFoundation/pika/pull/2539

修复 Flushall 和 FlushDB 死锁的隐患,并删除 FlushSubDB 接口。

https://github.com/OpenAtomFoundation/pika/pull/2533

增加参数控制是否清理 tcl 测试后产生的数据文件,防止废弃数据占据磁盘。

https://github.com/OpenAtomFoundation/pika/pull/2507

4 社区

PikiwiDB (Pika) 开源社区热烈欢迎您的参与和支持。如果您有任何问题、意见或建议,可通过以下渠道联系我们: