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节点集合,从中获取主节点信息。高可用集群示意图如下所示。


当Redis Sentinel监控数据主节点Down时,会对数据主节点进行客观下线的判断,确认主节点不可,则通知从节点中止复制主节点的操作。然后,选举一个Sentinel节点完成故障工作。
创建一个Redis集群服务
创建Redis集群的步骤如下所示。
tip
前提条件
Redis对应的集群插件根据项目需要安装配置,由项目管理员以上权限的成员在项目维度安装对应的operator,方可部署该operator集群。
(1) 用户点击[所有产品/中间件/应用],选择对应的集群项目,在应用页面找到Redis页签,点击<部署>按钮,进入Redis集群配置页面,弹框如下图所示。

(2) 填写数据库集群名称,配置集群实例资源,选择访问方式、集群模式,填写副本数,选择存储卷(支持rbd、NFS、local类型的存储),输入密码。
(3) 选择备份方式,支持FTP的方式(需提供FTP服务地址、用户名、密码)或rbd存储的方式(保证默认的rbd存储集群在[集群详情/集群存储]中配置了radosgw地址)备份。
(4) 单击<创建>,即可创建一个Redis集群。
配置Redis集群使用Cluster模式
用户配置Redis集群使用Cluster模式的操作步骤如下所示。
info
(1) 创建集群内访问的Redis Cluster。
(2) 修改Redis集群的configmap,修改Redis启动端口,配置如下图所示。

(3) 配置redis statefulset yaml文件,文件路径为[进入工作负载/有状态副本集/],然后选择标记Yaml文件。
(4) 在文件中增加hosteNetwork参数,配置如下图所示。

(5) 修改hostPort containerPort参数,与configmap里的端口配置一致。
(6) 增加redis REDIS_PORT,配置如下图所示。

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

查看集群
基础信息
点击展开详情,进入“基础信息”可以查看新创建的数据库集群的参数、资源配置、实例副本等信息。
info
存储
切换存储,可以查看当前存储卷配置,如下图所示。

Cephrbd和Glusterfs停止数据库集群后,可以扩容,用户可按需配置,拖动即可调整存储配置。
备份
数据库集群运行成功后,可以手动设置备份。
- 点击“手动备份”,进入备份配置弹框,输入备份名称,建立一个备份。redis集群目前仅支持全量备份。
- 点击“设置自动备份”。可以设置每周的某天某时间开始备份,会自动的全量备份数据。
- 支持对已有的备份进行“删除”操作,找到所要删除的备份,下拉右侧操作框点击删除,在弹出框中点击确定删除即可。
- 若因误操作或应用逻辑的bug导致业务数据的丢失,可以通过“回滚”操作恢复到某个备份的状态。回滚操作后可基于回滚后的数据继续做备份。
配置管理
配置管理可以修改 redis.conf
文件中内容,从而对该数据库集群进行调优,重新编辑配置文件后,系统将重启该集群的所有实例,将进行滚动升级。
访问方式
可以修改数据库访问方式,修改网络出口等。
访问方式下支持编辑开启只读地址,点击“编辑”按钮,勾选“开启只读地址”,开启只读地址后,使用只读地址执行读请求,可将所有的读请求分摊到所有备节点。
note
容器监控
监控pod实例的关键参数,包括CPU、内存、网络、硬盘相应信息。
性能监控
性能监控集成了grafana开源工具,将通过prometheus抓取的监控数据可视化地展示,方便用户查看集群运行状态,页面如下所示。
note

事件
切换事件可以查看集群创建过程中的事件,同时事件中将记录回滚、删除、扩容等操作。
删除集群
(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,并记录操作结果和日志。工作原理示意图如下所示。

创建Redis数据同步的操作步骤如下所示。
(1) 选择“数据同步”菜单项,进入数据同步配置页面。
(2) 单击<同步配置>按钮,进入到创建数据同步弹框,配置目标集群,访问目标集群密码,所需资源大小。
(3) 配置完成后,单击<确定>按钮,进入同步配置页面,如下图所示。配置同步页面如下图所示。

在数据同步页面,用户可以按照业务需要对同步配置进行操作,可执行的操作有:启动/停止数据同步、查看/删除数据同步以及查看Deployment资源。
Redis监控
平台支持Redis exporter,支持通过外部将数据源信息可视化为相应的图表,便于用户掌握集群的运行状态。