VKRedis学习笔记

Posted Shi Peng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VKRedis学习笔记相关的知识,希望对你有一定的参考价值。

一、VKRedis都做了什么

1、全公司redis集群的监控和管理:

  • 客户端监控:客户端投递埋点信息到普罗米修斯
  • 服务端监控:通过抓取服务端核心指标,实时监控redis服务器运行情况
  • 告警:客户端和服务端的监控,会通过vkalert告警
  • 重点监控指标有:
    客户端慢查,大key,热key,异常信息上报
    服务端 info slowlog clusterInfo等信息抓取

2、对redis平台进行数据化运营:

  • 在管理后台上可动态修改配置

3、封装redis客户端Jedis,增加灾备方案:机房故障时,可双机房自动切换。

  • 基于jedis 2.9.3修改而来,100%兼容原版jedis,并提供spring-data-redis以及spring boot starter支持

4、redis多租户平台:把集群能合并的合并,目的是降成本。

二、VKRedis的系统架构

1、管理后台console的作用

  • mysql 管理后台展示相关数据 (配置)
  • es 数据大盘的展示
  • ldap 登录服务
  • eureka 新建应用时使用
  • paladin 为应用添加人员时,同步告警人使用
  • vkcat 链路追踪,故障定位,评估影响范围(vkcat挂掉对来务无影响)

2、API Server的作用

管理配置下发 & 监控指标上报

依赖:

  • mysql 读取配置使用
  • mq 客户端指标的流向
  • vkcat 链路追踪,故障定位,评估影响范围(vkcat挂掉对来务无影响)

3、Monitor的作用

拉取服务端redis cluster的指标

依赖:

  • mysql 获取需要监控的节点信息
  • elasticjob 分布式任务 若job 不可用 则monitor服务不可用 ,影响服务端指标展示和告警 zk
  • mq 服务端指标的流向 ,影响服务端指标展示和服务端告警
  • vkcat 链路追踪,故障定位,评估影响范围(vkcat挂掉对来务无影响)

4、consumer的作用

监控指标的消费

依赖:

  • es 指标的存储
  • mq 指标的来源 影响所有指标的展示和服务端指标的告警
  • vkalert 客户端指标告警的发送
  • vkcat 链路追踪,故障定位,评估影响范围(vkcat挂掉对来务无影响)

5、监控调用链

5.1、客户端监控指标收集调用链

5.2、服务端监控指标收集调用链

三、VKRedis都做了哪些监控

1、对VKRedis的代码模块api、console、monitor、consumer的监控

  • 主机监控
  • 进程监控
  • nginx access log 监控
  • 错误日志监控

2、对依赖服务的监控

1、VKDS

  • 错误SQL
  • 慢查3s
  • 配置加载异常

2、VKMQ

  • 消息积压 1000
  • 重试阈值 +100
  • 死信阈值 +100

3、ES

  • 慢查 100ms 记日志; 500 ms邮件;1s 短信
  • 磁盘大小
  • 批量写入拒绝检测
  • yellow状态检测
  • 磁盘空闲量检测
  • 查询拒绝检测
  • index拒绝检测
  • 查询队列检测
  • red状态检测
  • 节点上下线
  • 集群不可用

3、对Redis Cluster的监控

3.1、redis进程的cpu使用率

redis进程的cpu使用率 = (used_cpu_sys_now - used_cpu_sys_before) / (now - before)

其中:used_cpu_sys: 表示redis进程指令在核心态所消耗的cpu时间,该值为累计值(秒)

告警阈值:

  • 80%:短信;
  • 90%:电话

3.2、内存使用率

内存使用率 = used_memory / maxmemory

告警阈值:

  • 80%:短信;
  • 90%:电话

3.3、内存碎片率

内存碎片率 = used_memory_rss / used_memory

used_memory_rss:表示从操作系统上显示已经分配的内存总量

告警阈值:< 1 swap 报警

3.4、网络拥塞情况

redis网络入口流量字节数total_net_input_bytes
redis网络出口流量字节total_net_output_bytes

3.5、redis 当前的 ops

instantaneous_ops_per_sec:

告警阈值:

  • 2000 短信
  • 3000 电话

3.6、节点进程是否存活

连续3次 电话告警(每次间隔多久?)

3.7、连接数使用率

connected_clients_ratio = connected_clients/maxclients * 100

告警阈值:

  • 80%:短信;
  • 90%:电话

3.8、拒绝的连接数增量

rejected_connections

3.9、已创建连接的数量

total_connections_received 已创建连接的数量:如果新创建连接过多,过度地创建和销毁连接对性能有影响,说明短连接严重或连接池使用有问题

3.10、redis实例包含的键个数

keyspace_keys redis实例包含的键个数: 单实例键个数过大,可能导致过期键的回收不及时

3.11、请求键的命中率

keyspace_hit_ratio = keyspace_hits/(keyspace_hits+keyspace_misses)

告警阈值:连续三次小于50

3.12、最近一次Fork操作阻塞redis进程的耗时数

latest_fork_usec = 最近一次Fork操作阻塞redis进程的耗时数,单位微秒

告警阈值:>10ms 短信

3.13、最近一次rdb持久化是否成功

0:短信报警

3.14、最近一次aof持久化是否成功

0:短信报警

3.15、最近一次创建 AOF 文件是否成功

0:短信报警

3.16、疑似故障slot数

告警阈值:>0 短信

redis-cluster把所有的物理节点映射到[0-16383]slot上
例如有3台redis,分别给他们分配slot:

3.17、故障slot数

告警阈值:>0 电话

3.18、slave 与master 的同步状态

slave 与master 的同步状态 master_link_status_int

告警阈值:0 电话

3.19、集群健康状态

集群健康状态,如果当前redis发现有failed的slots,默认为把自己cluster_state从ok个性为fail

告警阈值:0 短信

4、Redis客户端的监控

4.1、慢查slow log

2ms : 短信告警

4.2、exception

短信告警

4.3、大key

超过1M,短信告警

四、VKRedis多租户专项

1、多租户专项都干了什么

  • 合并线上小集群,降低成本
  • redis 集群平台化管理
  • redis 使用治理,规范使用

2、怎样判定各端是否需要对集群进行合并

1、根据各端 redis的内存使用情况ops情况的峰值,再预留出50%的buffer(即把峰值*2),从而得出实际需要的容量。

2、单节点 按可支撑”5G 内存、4W ops“,根据上一步的容量计算出集群需要的节点数。

3、接入计划

教师端先试用:

  • 先接入一个简单的项目
  • 其余在4月份全部接入完成

4、集群合并迁移方案

4.1、业务端要做的

梳理redis的使用key场景:

  • 能明确key规则的,教师端进行梳理(包括过期时间)
  • 老工程共用集群的情况下,需要将key复制成多份

key的梳理,分这么几类:

1)按用途分:

  • 仅作为临时缓存
  • 作为长期持久化存储

2)按前缀分:

  • 带固定前缀
  • 无前缀(老项目)

3)业务端梳理redis使用量

  • 内存使用量预估
  • 峰值ops 预估、应用单节点峰值ops预估、ops 限流阈值

4.2、迁移步骤

1、数据迁移:根据key规则迁移数据
2、业务迁移:业务重新发布,上线vkredis 多租户版。预发验证通过后,若原集群数据变化较大,可考虑再迁移一次数据后发布正式环境。【此处是否考虑redis双写】

4.3、多租户迁移风险

1、数据迁移不保证数据一致性,迁移过程中原集群的写操作不保证同步到新集群(这是为啥?因为不支持双写?)
2、迁移前后,应用使用不同的集群,而且key名称变化,目前没有灰度方案。
业务可提前接入多租户客户端,在不开启namespace(key前缀)的情况下充分验证,正式上线前也需要在预发环境验证通过
3、异常回滚:在不回拷数据的情况下,回滚后原集群将丢失接入多租户后新写入的数据

【这样看风险很大啊!是否还有其他办法?】

以上是关于VKRedis学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

java学习笔记 --- IO

Hadoop学习笔记—19.Flume框架学习

React学习笔记1

峰值增益大于11db怎么看

PLSQL Developer学习笔记

Input专题讲解-简单介绍Input相关课程流程图笔记