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学习笔记的主要内容,如果未能解决你的问题,请参考以下文章