CacheCloud学习

简介: CacheCloud作为一款可视化方便管理redis的开源软件,可以方便redis集群的管理、开发、监控、运维管理,下面就CacheCloud的代码进行一些整理和学习

一、如何实现可视化工具方便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指标收集和上报模块,及其他工具类
目录
相关文章
|
消息中间件 SQL 存储
超详细的RabbitMQ入门,看这篇就够了!
RabbitMQ入门,看这篇就够了
223036 69
|
Java
http访问springboot接口出现401 、403、 Forbidden 错误解决方法
http访问springboot接口出现401 、403、 Forbidden 错误解决方法
3938 0
|
自然语言处理 Docker 容器
elasticsearch-analysis-ik分词器下载与安装
elasticsearch-analysis-ik分词器下载与安装
4311 0
elasticsearch-analysis-ik分词器下载与安装
|
5月前
|
运维 监控 Linux
Linux中收集【系统】和【硬件】信息的30个常用命令总结
本文系统梳理30个Linux运维核心命令,涵盖系统信息(如`uname`、`hostname`)、硬件诊断(如`lscpu`、`smartctl`)及日志监控(如`dmesg`、`journalctl`)等全场景需求,助力高效排查故障、优化性能与实现自动化运维。
988 2
|
NoSQL 关系型数据库 MySQL
Redis私有云平台-Cachecloud安装和部署手册
Redis私有云平台-Cachecloud安装和部署手册
|
11月前
|
应用服务中间件 Linux 网络安全
使用Nginx免费版与Keepalived实现高可用性High Availablity方案
本文介绍了如何使用Nginx免费版与Keepalived实现高可用性(HA)方案,涵盖环境搭建、Keepalived安装配置、版本升级及主从模式设置。通过虚拟机测试,结合CentOS与宝塔,详细说明VIP配置与服务启动流程,助你构建稳定可靠的Web高可用架构。
|
12月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mysqldump备份MySQL
本文介绍了 MySQL 自带的逻辑备份工具 mysqldump 的使用方法。通过 mysqldump,可以将数据库中的数据转换为对应的 SQL 插入语句,便于备份和还原。文章详细说明了如何备份所有数据库、指定数据库及特定表,排除某些表不备份的操作,以及删除数据库后如何通过备份文件恢复数据。同时提供了视频讲解和具体命令示例,帮助用户更好地理解和应用该工具。
1183 5
|
Kubernetes 应用服务中间件 nginx
二进制安装Kubernetes(k8s)v1.32.0
本指南提供了一个详细的步骤,用于在Linux系统上通过二进制文件安装Kubernetes(k8s)v1.32.0,支持IPv4+IPv6双栈。具体步骤包括环境准备、系统配置、组件安装和配置等。
5074 11
|
消息中间件 存储 监控
RabbitMQ 队列之战:Classic 和 Quorum 的性能洞察
RabbitMQ 是一个功能强大的消息代理,用于分布式应用程序间的通信。它通过队列临时存储消息,支持异步通信和解耦。经典队列适合高吞吐量和低延迟场景,而仲裁队列则提供高可用性和容错能力,适用于关键任务系统。选择哪种队列取决于性能、持久性和容错性的需求。
1183 6
|
消息中间件 Java 测试技术
消息中间件RabbitMQ---SpringBoot整合RabbitMQ【三】
这篇文章是关于如何在SpringBoot应用中整合RabbitMQ的消息中间件。内容包括了在SpringBoot项目中添加RabbitMQ的依赖、配置文件设置、启动类注解,以及如何通过单元测试来创建交换器、队列、绑定,并发送和接收消息。文章还介绍了如何配置消息转换器以支持对象的序列化和反序列化,以及如何使用注解`@RabbitListener`来接收消息。
消息中间件RabbitMQ---SpringBoot整合RabbitMQ【三】