Skip to content
wenchao.meng edited this page Mar 1, 2019 · 6 revisions

基本概念

名词解释

  • Redis Master: 主Redis,提供写、读功能
  • Redis Slave: 从Redis,只读
  • Active keeper: 数据中继层
  • Backup keeper: Active keeper 的备份,保证Keeper可用性
  • 主机房: 有且仅有一个主机房配置。主机房中应配置有Redis Master一台,Keeper两台以及若干Redis Slave。
  • 从机房: 可以有多个从机房配置。从机房中应配置有Keeper两个以及若干Redis Slave。
  • Cluster: Redis集群。
  • Shard: 一个Cluster下可以有多个shard(分片),每一个shard至少需要包含最小的完整跨机房主从结构

总体设计

总体设计图

角色概述

Console

Console主要功能:

  1. 负责整个系统元信息的管理,比如cluster、shard、redis、keeper
  2. DR切换,提供操作界面和API执行DR切换功能
  3. 整个系统监控、报警

Keeper

Keeper主要实现Redis协议,向Redis Master请求数据,并且将数据传播至Slave,用于用磁盘缓存redis复制日志以及RDB数据。
如果本地数据文件可用,Keeper会尽量复用本地的RDB和日志数据,避免向Redis Master请求RDB,可以保持Redis Master的稳定性。

Keeper Container

Keeper Container是Keeper的容器,主要提供增加、查询、删除keeper等功能。一个Keeper Container内部可以放置多个Keeper

Meta Server

Meta Server主要有两部分功能:

  1. 和Console交互,抓取在Console配置的Meta信息;当Console配置信息变化时,Meta Server负责执行这部分变化。
  2. 管理单机房内的所有keeper、Redis的 状态,并对异常状态进行纠正:
    • Redis Master变化时,将Active Keeper指向对应Redis Master
    • 当Keeper挂掉时,进行Keeper的主从切换

Zookeeper

每个机房部署一套zookeeper集群,功能:

  1. Keeper的Active选举
  2. Meta Server的Leader选举

Sentinel

Sentinel负责Redis自身的高可用。

Sentinel与Meta Server的关联:

  1. Sentinel负责Redis的高可用,Meta Server负责Keeper的高可用
  2. Redis进行了主从切换后, Meta Server会自动调整Keeper的状态,保证Keeper可以正确的连接Redis Master

具体模块功能与设计

Console

  • Console多机房部署
  • 每个机房分为主备
    • leader通过zookeeper进行选举,可以进行自动主备切换
    • 可以通过:http://ip:port/health 进行状态查看
      • leader对应页面返回码: 200
      • 非leader对应页面返回码: 404
      • 负载均衡层部署nginx,配置健康监测页面实现用户访问后端server的自动切换
    • DR切换在leader上进行
    • 用户正常访问指定在某一特定机房
      • 出问题时将域名切换到其它机房
  • 多机房之间选举出global leader,用于做一些定时任务
    • 主要为了避免任务重复做多次
  • 底层状态存储依赖MySQL
    • MySQL要做到多机房之间的高可用(DBA负责),真正机房故障时可以将DB切换至其它机房访问

Meta Server

功能介绍

  • Keeper active/backup选举

    Keeper启动后,会在Zookeeper上注册相应的节点,Meta Server监控Keeper的注册路径,当keeper增加、挂掉时,选举出合适的active角色,保证数据复制的高可用。

  • Keeper变更

    用户在Console端配置新的keeper的信息后,Meta Server通过两个渠道获取此变化:

    1. Console会调用Meta Server的接口,告知Meta Server信息的变化。
    2. Meta Server定期向Console拉取元信息,和本地元信息进行比较,获取配置变化。

    Meta Server获取变化后,,在相应的Keeper Container上增加、删除对应的keeper

高可用

  • 请求处理

    业务http请求到达任一Meta Server都可以工作。

    如果请求的Cluster是当前节点负责的cluster,则当前节点直接处理;如果不是,则Meta Server直接将请求转发至正确的节点,并将结果返回用户端。

  • slot(槽)

    Meta Server集群默认有256个槽,每个特定的Cluster会落入某个槽中,每个槽会而且只会被一个Meta Server负责管理。所有Meta Server管理整体256个槽。

  • Meta Server Leader

    在多个Meta Server中,会选出特定的Meta Server作为Leader,用来负责整个Meta Server集群的负载均衡以及高可用。如果Leader挂掉,集群会选出另外的Leader作为替代。

  • 负载均衡

    Leader会定期调整每个Meta Server负责的Slot,保证所有Meta Server之间负载均衡

  • 高可用

    当某一个Meta Server挂掉后,Meta Server Leader会将其所负责的slots转移到其它Meta server。

KeeperContainer

  • 提供Rest API供Meta Server调用,可以增加、删除Keeper

Keeper

Keeper实现Redis协议,从Redis Master获取数据,并且将获取的数据复制到Slave。

keeper提供部分Redis命令:

  • info
    和Redis的info命令类似,查询当前server服务情况
  • psync
    和Redis的psync命令类似,用于Redis从keeper复制数据
  • role
    和Redis的role命令类似