第一部分 Redis功能及架构原理
一、Redis产品介绍
1、什么是Redis
云数据库Redis(TencentDB for Redis,CRedis)是腾讯云基于多年自身缓存业务技术沉淀和Redis类业务运营的需求,自研的一款高可用、高可靠的Redis服务平台。
在使用上,Redis兼容Redis协议,支持字符串、链表、集合、有序集合、哈希表等多种数据类型。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
二、Redis功能设计
1、节点通信
(1)Redis-Cluster使用Gossip协议进行信息交换。
①Gossip消息类型:
- meet:用于通知新节点加入;
- ping:检测节点是否在线和交换彼此状态信息;
- pong:响应ping、meet消息时正常通信;
- fail:判定节点下线时向集群内广播一个fail消息。
②去中心化: - 各节点都记录集群状态信息,通过特定规则挑选通信节点,实现最终一致性。
2、主从同步
(1)完整重同步:在主从的初次复制时,PSYNC命令表示完整重同步,其作用和SYNC命令作用相同,执行流程基本一致,都是通过生成完整的RDB文件发送到从服务器,然后发送复制缓冲区中的写命令来完成一次同步。
(2)部分重同步:主要作用于断线重连的情况,从服务器断线后重连到主服务器时,如果满足部分重同步的条件,那么主服务器只会发送从服务器在断线这段时间内的增量写命令,而不是进行一次完整重同步,从服务器也只需要接收增量的部分命令,执行之后就可以完成数据库状态的更新。
3、故障转移
(1)故障检测:
- 检测:各节点A发送ping消息,规定时间未返回pong消息的节点B视为疑似下线pfail;
- 广播:节点A通告其他节点,B节点状态标记为pfail;
-
判定:超过半数节点认为节点B为pfail,则B节点标记为fail,继续广播所有节点。
(2)节点选举:
- 拉票:从节点发现主节点fail,将在集群内发起升主节点请求;
- 投票:负责处理slot的主节点投票,票数过半数的从节点升主。
(3)故障转移: - 通告:向集群中广播一条pong消息通告升主;
- 接管:新的主节点轮询并接管所有slot处理。
【Tips】
①slot(插槽)是用于实现Redis中集群分片(Cluster Sharding)的一种机制。Redis集群是由多个节点组成的分布式系统,每个节点可以处理一部分数据,slot用来划分数据的单位,每个slot可以存储一个键值对。
4、读写分离
- 副本数(slave数)大于或等于1,可开启自动读写分离;
- 通过Proxy层实现自动读写分离;
-
开启读写分离Proxy将按照主节点只写,从节点平均分配读请求的方式来提供访问。
第二部分 Redis架构设计与部署
一、Redis架构
1、支撑服务
支撑服务是部署在TCE的支撑平台,大部分服务以容器形式运行,部分数据库、中间件等服务以物理机形式运行。
支撑服务整体是Region级服务,因此每个Region是独立部署,不存在跨Region部署的组件。
提供Redis控制台需要的后端接口以及CAPI3.0接口,其功能包含Redis的业务逻辑控制,并且对接外部依赖服务,例如计费、监控、网络等服务;同时提供租户端控制实例各种变更操作,例如创建、扩容、销毁等实例管理控制操作。
- Web:租户端控制台,提供控制台访问服务(Global级服务);
- Shark:租户端后台,与云平台集成,提供租户创建、管理实例的功能,通常查看Shark日志;
- CAPI:云API平台,提供云API服务,目前有2.0和3.0两个版本;
- DBOSS:租户端数据库运营支持系统;
- BARAD:云监控平台。
2、管控服务
管控服务是弹性缓存数据库服务的总称。管控服务部分服务部署在Underly CVM虚拟机,管控服务整体是Region级服务。
负责Redis实例的生命周期管理,提供运营运维端对Redis进行创建、CRedis管理控制删除扩缩容、备份、还原等功能。
- OPWEB:运营端控制台,提供系统及实例管理功能;
- OSS:CRedis运营支撑系统,CRedis操作接口,提供HTTP的操作接口;
- Monitor:CRedis监控采集模块,定期采集实例运行指标数据;
- Control Center(CC):CRedis管理调度模块,CRedis实例生命周期管理,负责主备切换/实例管理任务调度/资源管理等。
3、生产服务
生成服务是弹性缓存数据库CRedis生产节点的总称。生产服务是最终对外售卖的节点,CRedis生产节点也称为CRedis缓存数据库节点(也称为Cache节点)。
- Proxy:代理接入服务,实现请求路由功能,用于分发用户数据请求;
- edis:CRedis生产节点也称为Cache节点,提供CRedis实例生产服务,最终售卖节点;
- CCAgent(Control Center Agent):
Control Center的Agent节点,与Control Center通信,协同CC完成CRedis实例的生命周期管理、监控等。
二、Redis进程
1、管控节点
(1)standby_cc
进程检查方式:
ps -ef |gerp qds_center
监听端口:6000
(2)cc_monitor
进程检查方式:
ps -ef |gerp cc_monitor
(3)mul_server
进程检查方式:
ps -ef |gerp mul_server
监听端口:55100
2、cache节点
(1)cc_agent
进程检查方式:
ps -ef |gerp qds_center
监听端口:5000
(2)cc_monitor_agent
进程检查方式:
ps -ef |gerp monitor_center
监听端口:9881,9887
(3)mul_server_agent
进程检查方式:
ps -ef |gerp mul_monitor_center
(4)redis-server
进程检查方式:
ps -ef |gerp redis-server |gerp { app_id}
- 对于标准版实例,所有cache上的redis-server进程数之和=3+副本数,如:1副本的标准版实例,则对应的redis-server进程数=4。
- 对于集群版实例,所有cache上的redis-server进程数之和=分片数*(1+副本数)。
3、proxy节点
(1)cc_agent
进程检查方式:
ps -ef |gerp qds_center
监听端口:5000
(2)cc_monitor_agent
进程检查方式:
ps -ef |gerp monitor_center
监听端口:9881,9887
(3)mul_server_agent
进程检查方式:
ps -ef |gerp mul_monitor_center
(4)interface
进程检查方式:
ps -ef |gerp interface |gerp { app_id}
- 对于标准版实例,所有proxy上的interface进程数正常情况下固定为3个。
- 对于集群版实例,所有proxy上的interface进程数正常情况下为1.5*分片数 并向下取整。
第三部分 Redis使用
1、Redis创建实例时,支持开源格式类型的链接方式:
redis-cli -h IP地址 -p 端口 -a 密码
2、Redis提供全方位的监控数据和自定义告警功能,监控指标包括负载监控、访问统计和网络流量等。
3、Redis巡检
登录 newcc_<idc_id>查看相关数据
(1)查看机器状态
select * from interface_machine_t;
select * from redis_machine_t;
#state 0 表示增加的节点失败的节点;1 表示正常使用中的节点;2 表示删除但未删除成功的节点
(2)查看进程状态是否正常
select * from interface_proc_t;
select * from redis_procs_t;
#state 0 表示增加的节点失败的节点;1 表示正常使用中的节点;2 表示删除但未删除成功的节点
(3)检查CC流程日志,查看/data/log/redis/cc-debug.log是否有异常
备注:以上内容主要来自腾讯云课堂相关课程内容。