Skip to main content

Redis集群

Redis是一个开源(BSD许可)的内存数据结构存储系统,它可以用作数据库、缓存和消息中间件。支持多种类型的数据结构,如字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets)与范围查询,bitmaps,hyperloglogs 和 地理空间(geospatial)索引半径查询。Redis内置了复制(replication),LUA脚本(Lua scripting),LRU驱动事件(LRU eviction),事务(transactions)和不同级别的磁盘持久化(persistence),并通过Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(high availability)。集群版本v4.0.10。

Redis Sentine

Redis Sentinel是一个分布式架构,包含若干个Sentinel节点和Redis数据节点,每个Sentinel节点会对数据节点和其余Sentinel节点进行监控。当发现节点不可达时,会对节点做下线标识。如果被标识的是主节点,还会选择和其他Sentinel节点进行“协商”,当大多数的Sentinel节点都认为主节点不可达时,他们会选举出一个Sentinel节点来完成自动故障转移工作,包括实现数据从节点晋升为数据主节点,并维护后续正确的主从关系等。同时将这个变化通知给Redis应用方。整个过程完全自动,不需要人工介入,所以可以很好解决Redis的高可用问题。

在Redis Sentinel结构中,客户端在初始化的时候连接的是Sentinel节点集合,从中获取主节点信息。高可用集群示意图如下所示。

test
test

当Redis Sentinel监控数据主节点Down时,会对数据主节点进行客观下线的判断,确认主节点不可,则通知从节点中止复制主节点的操作。然后,选举一个Sentinel节点完成故障工作。

创建一个Redis集群服务

创建Redis集群的步骤如下所示。

tip

前提条件

Redis对应的集群插件根据项目需要安装配置,由项目管理员以上权限的成员在项目维度安装对应的operator,方可部署该operator集群。

(1) 用户点击[所有产品/中间件/应用],选择对应的集群项目,在应用页面找到Redis页签,点击<部署>按钮,进入Redis集群配置页面,弹框如下图所示。

test

(2) 填写数据库集群名称,配置集群实例资源,选择访问方式、集群模式,填写副本数,选择存储卷(支持rbd、NFS、local类型的存储),输入密码。

(3) 选择备份方式,支持FTP的方式(需提供FTP服务地址、用户名、密码)或rbd存储的方式(保证默认的rbd存储集群在[集群详情/集群存储]中配置了radosgw地址)备份。

(4) 单击<创建>,即可创建一个Redis集群。

配置Redis集群使用Cluster模式

用户配置Redis集群使用Cluster模式的操作步骤如下所示。

info

  • 节点配置要求:由于deploy采用hostNetwork模式,而最小的[Redis Cluster]需要3主3从6个节点,必须要求slave节点大于等于6台。
  • 网络要求:保证每台Redis服务部署节点redis端口上下行放开。
  • 考虑到k8s集群后期可能部署多套对外提供服务的[Redis Cluster]集群,Redis健康检查服务将被禁用(9121端口)。
  • (1) 创建集群内访问的Redis Cluster。

    (2) 修改Redis集群的configmap,修改Redis启动端口,配置如下图所示。

    test

    (3) 配置redis statefulset yaml文件,文件路径为[进入工作负载/有状态副本集/],然后选择标记Yaml文件。

    (4) 在文件中增加hosteNetwork参数,配置如下图所示。

    test

    (5) 修改hostPort containerPort参数,与configmap里的端口配置一致。

    (6) 增加redis REDIS_PORT,配置如下图所示。

    test

    (7) 文件修改完成后,保存退出;删除Redis Pod重新创建测试。

    test

    查看集群

    基础信息

    点击展开详情,进入“基础信息”可以查看新创建的数据库集群的参数、资源配置、实例副本等信息。

    info

  • 参数:用户名和密码,可以修改密码。
  • 资源配置:可以修改数据库实例配置,这里是一个容器的配置,总配置=资源配置*实例副本数。
  • 实例副本:可修改容器实例的副本数,可查看节点的容器名和挂载路径。一般容器实例数多于1时,数据库可用性更高,推荐实例数为3。
  • 存储

    切换存储,可以查看当前存储卷配置,如下图所示。

    test

    Cephrbd和Glusterfs停止数据库集群后,可以扩容,用户可按需配置,拖动即可调整存储配置。

    备份

    数据库集群运行成功后,可以手动设置备份。

    • 点击“手动备份”,进入备份配置弹框,输入备份名称,建立一个备份。redis集群目前仅支持全量备份。
    • 点击“设置自动备份”。可以设置每周的某天某时间开始备份,会自动的全量备份数据。
    • 支持对已有的备份进行“删除”操作,找到所要删除的备份,下拉右侧操作框点击删除,在弹出框中点击确定删除即可。
    • 若因误操作或应用逻辑的bug导致业务数据的丢失,可以通过“回滚”操作恢复到某个备份的状态。回滚操作后可基于回滚后的数据继续做备份。

    配置管理

    配置管理可以修改 redis.conf文件中内容,从而对该数据库集群进行调优,重新编辑配置文件后,系统将重启该集群的所有实例,将进行滚动升级。

    访问方式

    可以修改数据库访问方式,修改网络出口等。

    访问方式下支持编辑开启只读地址,点击“编辑”按钮,勾选“开启只读地址”,开启只读地址后,使用只读地址执行读请求,可将所有的读请求分摊到所有备节点。

    note

  • 集群中备节点为只读节点,务必使用只读地址执行读请求,系统可将所有的读请求分摊到所有备节点。建议使用可读可写地址执行写请求。
  • 容器监控

    监控pod实例的关键参数,包括CPU、内存、网络、硬盘相应信息。

    性能监控

    性能监控集成了grafana开源工具,将通过prometheus抓取的监控数据可视化地展示,方便用户查看集群运行状态,页面如下所示。

    note

  • 用户在配置middleware-monitor插件时,需要选择有域名的网络出口。
  • 如果用户本地没有做域名解析,则需要把域名信息配置到本地hosts文件中,才可实现IP地址的解析。
  • 如果用户使用证书方式去访问集群,需要单独对证书进行信任操作,才可实现数据正常的访问。
  • test

    事件

    切换事件可以查看集群创建过程中的事件,同时事件中将记录回滚、删除、扩容等操作。

    删除集群

    (1) 点击集群名称链接,进入集群详情页。

    (2) 点击右上角“其他操作/删除”操作,删除集群。

    重启集群

    (1) 点击集群名称链接,进入集群详情页。

    (2) 点击右上角“其他操作/重启”操作,重启集群。

    停止/启动

    (1) 点击集群名称链接,进入集群详情页。

    (2) 集群运行状态,点击右上角“其他操作/停止”操作,停止集群。

    (3) 集群停止状态,点击右上角“其他操作/启动”操作,启动集群。

    数据同步

    Redis集群跨区高可用实现了源集群和目标集群数据同步、不同版本的redis集群间数据的同步等多种场景下数据的同步。其工作原理如下所示:

    在Kubernetes中,存在指定PV无法与其他Pod共享的情况,在Redis Master和各个Redis Slave对应的Pod中启动一个Agent进程,负责与各个Pod中的Redis Master或者Redis Slave共享PV的数据。

    Agent对外暴露Restful API,在外部可以通过调用Restful API可以实现Redis Maste和各个Redis Slave的数据文件的备份和恢复。

    外部我们通过Kubernetes CRD实现,分别定义Backup和Restore两种资源对象,并通过两种Controller实现二者的业务逻辑,通过创建两种资源对象分别触发备份和恢复,结果和日志分别记录在两种资源对象实例的对应属性上;

    Backup Controller调用Master Pod中Agent提供的Restful API实现数据文件的备份,并记录操作结果和日志。

    Restore Controller调用Master和Slave对应的所有Pod中的Agent进程提供Restful API实现数据数据文件的恢复,重建这些Pod,并记录操作结果和日志。工作原理示意图如下所示。

    test

    创建Redis数据同步的操作步骤如下所示。

    (1) 选择“数据同步”菜单项,进入数据同步配置页面。

    (2) 单击<同步配置>按钮,进入到创建数据同步弹框,配置目标集群,访问目标集群密码,所需资源大小。

    (3) 配置完成后,单击<确定>按钮,进入同步配置页面,如下图所示。配置同步页面如下图所示。

    test

    在数据同步页面,用户可以按照业务需要对同步配置进行操作,可执行的操作有:启动/停止数据同步、查看/删除数据同步以及查看Deployment资源。

    Redis监控

    平台支持Redis exporter,支持通过外部将数据源信息可视化为相应的图表,便于用户掌握集群的运行状态。