一、如何实现可视化工具方便redis操作管理
如果基于redis,如何设计一款工具,方便redis安装、使用、运维、告警、迁移的问题?需要从下面几个方面进行考虑:
1.方便申请 2.方便安装 3.方便使用 4.进行告警 5.自动运维 6.方便数据迁移 7.弹性伸缩
也即需要实现上面的这些功能。
二、开源项目CacheCloud
基于上面的这些功能:搜狐开源的CacheCloud实现了上面的这些功能:
官方的功能架构图
CacheCloud功能架构
根据提供的功能,它分为两部分:
服务端CacheCloud:方便运维、申请、告警、数据迁移、扩缩容
客户端cachecloud-client:方便业务系统调用使用,同时对redis的相关api进行了封装和jedis数据指标上报。
CacheCloud界面
分为后台管理、我的工单、应用列表
1)后台管理:
2)我的工单:
申请工单前需要在后台管理的用户管理里面添加好用户信息。
3)应用列表:
用户可以创建工单,工单中包含的功能:申请应用、导入应用、数据清理、下线应用、数据迁移、诊断应用、键值分析(bigkey的问题等)、扩缩容、修改应用配置、修改报警、数据分析清理等。
三、相关操作过程
1.启动项目
我们可以看到有四个定时任务执行比较频繁:
taskExecuteJob InstanceAlertValueJob BrevitySchedulerJob DispatcherBrevityScheduleJob
其中
TaskExecuteJob是执行taskQueue中的任务 InstanceAlertValueJob是监控所有Redis上一分钟状态 BrevitySchedulerJob则维护全量定时任务逻辑,维护节点和机器 DispatcherBrevityScheduleJob 获取短频任务bean,然后执行定时任务转发, 其核心实现asyncSubTaskIds,执行相关数据的采集上报和统计
其中我们可以看到与诊断、监控告警的代码很多,主要这方面的指标信息比较多。可以从数据库看到定时任务执行的频率:
从这里可以看到相关task执行的频率:
2.执行工单申请
我们可以在我的申请中,申请一个redis应用的工单
3.执行工单审批
工单申请后,会在后台管理的审批列表中,看到对应的审批信息:
后台用户审批通过后,即可进行部署:
审批的过程中,会生成部署预览,生成成功后,即可进行部署,如果当前的申请不满足条件,则可以进行驳回。此时会调用doAddAppDeployTask执行部署。部署的过程:
1.保存应用信息 2.获取Redis版本信息 3.根据应用类型获取部署拓扑信息,部署对应的task,此时会根据task类型会先获取应用信息, 然后生成并保存taskqueue,新增审批信息审核记录
其中部署对应的task类型:
redis cluster sentinel + redis standalone twemproxy + redis sentinel + pika twemproxy + pika
此时定时任务task已经保存到了数据库表task_queue表中,因此只需要执行task即可。而触发task_queue中task执行的则是taskExecuteJob。从数据库中可以看到taskExecuteJob的执行频率是非常频繁的,每10秒钟会触发一下。
4.taskExecuteJob执行taskQueue触发
在com.sohu.cache.task.impl.TaskServiceImpl#executeTask这个方法,我们可以看到具体任务的执行情况。执行的过程如下:
获取具体的队列task,进行判空和状态 更新task队列任务执行的情况为running 更新task队列任务执行的相关机器ip和端口信息 获取具体任务 任务步骤,比如redis集群,则会获取RedisClusterAppDeployTask的steps 设置task步骤信息放入到数据库 准备 执行任务 如果执行任务出现异常,则将执行状态设置为中断 否则说明当前的任务执行成功
部署完成后,发送消息。
5.诊断和监控定时任务
其中我们可以看到与诊断、监控告警的代码很多,主要这方面的指标信息比较多。
诊断信息:
扫描键 键内存诊断 空闲键扫描 热点键诊断 删除键 集群槽分析 数据分析清理
相关指标:
相关指标图
com.sohu.cache.schedule.jobs.InstanceAlertValueJob监控上一分钟的数据信息:
全部和特殊实例报警配置 查询应用报警配置 所有实例信息 取上1分钟Redis实例统计信息 检测所有配置 更新配置最后检测时间 发送邮件
检测所有配置的过程:
单个实例的统计信息 判断是不是特殊实例 是否进入检测周期 枚举检测 策略检测 获取基准数据 开始检测
可以看到检测的策略:
可以看到相关指标图的信息在代码上都有体现。
这里有一个重要方法:
com.sohu.cache.alert.strategy.AlertConfigStrategy#isCompareLongRight
主要的com.sohu.cache.schedule.brevity.DispatcherBrevityScheduleJob采集统计的监控任务是job触发的BrevityScheduleType:
redis基本信息采集 redis慢查询采集 redis延迟事件采集 机器信息采集 机器监控报警任务 机器nmon数据采集
同时可以在界面上点击页面进行检测信息提交。
6.统计信息分为三类
全局统计、server端统计、client端统计。
7.扩缩容和redis数据迁移
四、接入客户端cacheCloudClient
可以看到官方提供了cachecloudClient项目,可以在业务系统中进行引入,此时可以愉快的使用cachecloud提供的redis的便利操作了。
cachecloudclient的相关模块:
- cachecloud-client-redis:jedis客户端构建器;
- cachecloud-client-redisson:redisson客户端构建器;
- cachecloud-client-lettuce:lettuce客户端构建器;
- cachecloud-jedis: 原生jedis封装,增加支持redis集群部署Pipeline操作的PipelineCluster,支持双机房部署的CrossRoomCluster;依赖cachecloud-client-spectator模块,对jedis命令执行进行埋点,采集命令调用次数、耗时和异常等指标进行上报;
- cachecloud-client-spectator:jedis指标收集和上报模块,及其他工具类