Skip to content

主备实现原理

house edited this page Dec 30, 2021 · 17 revisions

架构

  1. Pod分布在不同的物理机,每个Pod包含redis-docker(2POD)或sentinel-docker(3POD)
  2. 应用只需要配置redis VIP(ClusterIP)访问Redis集群
  3. redis/sentinel在容器起来时执行deploy程序初始化加入集群
  4. 采用kubernetes有状态副本集,启动顺序遵顺,Pod有序启动,Sentinel启动后Redis容器启动
  5. 调度尽量打散,可支持SSD可选,IO可控制

几点注意:

  • 前段请求路由不引入代理而只由service根据readniess判断master info是否为master自主进行切换
  • 客户端连接只配置vip地址,没有使用传统的sentinel连接方式是因为在实际线上运维过程中sentinel全挂而主备节点IP也发生变化的情况下客户端watch机制会丢失真正的master节点地址信息而无法自愈,只能通过重新应用主动去拉取配置

deploy实现逻辑

  • redis容器需要等待sentinel容器副本集全部起来启动,对空的sentinel进行注册
  • 对于非空注册信息的sentinel,如果注册信息异常,redis容器启动的时候redis deploy那么会清空sentinel的信息进行新注册,如果是ok的注册信息那么deploy会找到master节点作为slave加入
  • 当遇到灾难性主备节点同时挂的情况,第一个启动的master节点会拉取远端的备份数据加载启动
  • sentinel单点故障的时候会从其他sentinel获取master节点信息注册,而所有sentinel故障时会判断master节点是否存在而注册


关于扩缩容

由于Redis的配置项均是可以动态修改,那么扩缩容(maxmemory)以及其他配置均可以通过td-redis-operator config set进行设置同时变更配置文件configmap来持久化得修改
Clone this wiki locally