-
Notifications
You must be signed in to change notification settings - Fork 93
集群实现原理
gaoshengL edited this page Jan 5, 2022
·
16 revisions
架构释义:
- 整个部署形态遵从Redis Cluster集群拓扑并引入Predixy作为集群的代理层
- Redis Cluster的group对应一个statfulset,比如XX-0,那么group中的主备将名为XX-0-0和XX-0-1,而在CR对象中的status会动态记录对应group对应的槽位
- Redis实例的底层存储是可选的,结合storageclass可以接入本地盘(empty dir)或者ceph(pvc)等
- 每个Redis Pod具备sidecar exporter镜像,可以流畅接入prometheus
Redis Cluster CR定义示例
apiVersion: cache.tongdun.net/v1alpha1
kind: RedisCluster
metadata:
name: redis-cluster-rat
namespace: redis-cluster
spec:
app: cluster-rat
capacity: 32768
dc: hz
env: production
image: tongduncloud/redis-cluster:0.2
monitorimage: tongduncloud/redis-exporter:1.0
netmode: ClusterIP
proxyimage: tongduncloud/predixy:1.0
proxysecret: abc
realname: dba
secret: abc
size: 3
storageclass: ""
vip: ""
集群的组织过程完全有Operator负责,整个流程是将运维部署过程编码化
以下是几个关键步骤:
- 前台服务通过用户键入的存储大小计算group数量以及单节点的maxmemroy
- 根据group数量创建sts的过程中,会等待所有(group数量*2)的Redis Pod正常提供服务后,此时Pod均是独立且不存在角色,此时调用cluster创建API命令组织X-N-0成为集群
- X-N-1作为slave分别加入集群中对应的group中
集群扩容是个复杂的过程一方面扩容分为横向扩容和纵向扩容,另一方面作为在线扩容如何对线上的影响最小化也是需要考虑的
1. 纵向扩容
- 纵向扩容对在线服务影响是最小的,只有存储需求大小未超过当前group数量*32G(单节点存储上限)即实施纵向扩容
- 只要被Opertor识别为纵向扩容需求,那么计算好单节点新容量,将通过config set和configmap更新持久化
2. 横向扩容
- 当存储寻求超过当前group数量*32G,那么将进入横向扩容逻辑
- 计算好需要新增的group数量,创建对应的statefulset,并依次加入集群后,通过Rebalance来达到数据均衡
- 数据平衡好后新的slot信息将会被记录到CR对象的status中
处理流程
- 单点故障的发生的时候,故障节点将被识别而删除
- 对于group中新创建的Redis实例将被识别出对应sts对应的group将其与对应group当前的master建立主从同步