-
背景
部分redis采用自建,主要是因为一些创新项目前期成本考虑,不需要高配置的硬件和软件,所以采用了自建的redis,就可以保证在很低廉的硬件配置上跑多个创新项目,同时venus-redis包括主从模式,集群模式和哨兵模式;另外一点考虑,自建redis缺乏一些自动化运维的能力,比如慢查询实时抓取和告警,对redis实例本身的监控告警等等;所以决定对redis-6.2.6的源代码做小部分修改,定制化为自研的venus-redis服务端,全面兼容标准redis和redis协议;
-
思路分解
venus-redis一样支持三种模式,包括主从,集群和哨兵;同时可以和标准版的redis兼容使用,比如我们采用主从模式,master-redis部署我们自研的redis系统,并且enable慢查询实时抓取以及告警功能,而从redis可以采用标准的redis也可以采用venus-redis部署;
对于标准redis的慢查询,内存中通过一个双向链表保存一定量的慢查询日志,数量是有限的,只能通过命令去获取这些慢查询,经我们改造后的redis,可以将全量redis的慢查询持久化到MYSQL,便于问题追溯,我们记录的主要数据结构和数据模型为:
在持久化慢查询日志的时候,我们采用了SystemV的异步队列作为IPC,队列的消费者线程同样是跑在redis进程内部的(为了简化部署)。
同时,我们也实现了扩展的redis命令:
- 能够将慢日志持久化到数据库的开关,默认是关闭的;
- 命令行从数据库获取慢查询日志列表,最大一次性获取50条;
- 获取SystemV消息队列的状态数据;
实例管理方面,我们也做了一些工作,我们在标准的redis配置文件中,扩展了配置,Redis启动的时候会自动进行初始化和注册,对同一个redis集群的所有实例进行统一监控和管理;
venus-redis实例会启动内定时心跳流程,将自己的状态更新到数据库。
性能和稳定性方面,通过redis自带的benchmark压测,稳定性保持良好,并且性能基本上没有影响;目前我们在生产上做小范围验证;监控方面,如果发现venus-redis失去心跳和慢查询都将实时的推送微信群进行告警;
客户端和Redis集群的视图;
缓存服务端主从视图;
Redis服务端监控数据
抓取的慢查询,慢查询的判断标准(时间)可配置;
生产验证,我们按照以下部署方案实施验证,包括三个sentienl,两个redis实例;
通过telnet到主redis,执行以下命令验证慢查询持久化功能:
1. 设置慢查询的判断时间;(Redis标准命令)
2. 通过打开持久化开关
3. 通过查询命令验证慢日志入库
4. 通过消息队列查询命令验证消息队列工作正常;
5. 查看数据库写入是否正常;
以下是venus-redis心跳功能验证;
-
相关代码
Venus-Redis:venus-redis-6.2.6