一种基于Kubernets的Redis主从集群自动化部署方案
技术领域
本发明公开一种基于Kubernets的Redis主从集群自动化部署方案,涉及集群部署技术领域。
背景技术
Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行,管理员可以加载一个微型服务,让规划器来找到合适的位置。
Helm是Kubernetes的一个包管理工具,用来简化Kubernetes应用的部署和管理。可以把Helm比作CentOS的yum工具。Helm有如下几个基本概念:
Chart:是Helm管理的安装包,里面包含需要部署的安装包资源。可以把Chart比作CentOS yum使用的rpm文件。每个Chart包含下面两部分:包的基本描述文件Chart.yaml;放在templates目录中的一个或多个Kubernetes manifest文件模板。
Release:是chart的部署实例,一个chart在一个Kubernetes集群上可以有多个release,即这个chart可以被安装多次。
Repository:chart的仓库,用于发布和存储char。
REmote DIctionary Server(Redis)是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是字符串(String),哈希(Map),列表(list),集合(sets)和有序集合(sorted sets)等类型。
Redis可以作为内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
Helm官方提供的Redis安装包,配置启动逻辑都写在了dockfile中,无法实现灵活部署的目的,而本发明提供一种基于Kubernets的Redis主从集群自动化部署方案,将部署启动逻辑放置在configmap中,使Redis主从集群的部署不在依赖于镜像版本,灵活扩张的同时,优化了启动逻辑,提高了集群的高可用性。
发明内容
本发明针对现有技术的问题,提供本发明公开一种基于Kubernets的Redis主从集群自动化部署方案,可以完成Redis主从集群自动化部署等操作,省去了人工部署的麻烦,更能避免人为失误,因此,极具推广价值。
本发明提出的具体方案是:
一种基于Kubernets的Redis主从集群自动化部署方案,redis的配置文件通过文件流的方式,传入Helm安装包中,并将Helm配置及启动逻辑部署在configmap中,
在redis-server-statefulset.yaml中,利用initContainers将各类启动脚本,挂载到容器所需pv中,各类启动脚本通过文件流的方式,写入到configmap中,initContainers通过command命令,启动启动脚本执行配置安装,
进行redis的主从节点pod及sentinel节点在Kubernets的部署。
所述的方法中redis的主从节点及sentinel节点的部署:redis的主节点pod安装Redis主节点组件,redis的从节点pod安装Redis从节点组件,
redis的sentinel节点安装sentinel组件。
所述的方法中启动脚本中包括集中shell脚本,initContainers通过command命令,开始执行redis-launcher.sh,集中shell脚本启动label-updater.sh脚本,完成podIP的打标签操作。
所述的方法中Redis集群首次创建时,判断是否有master标签的主节点pod存在,若无进行集群的master选举,打上master标签进行标志的主节点pod,启动主节点流程,其他pod为从节点pod启动从节点流程。
所述的方法中sentinel节点将主从节点信息写入到自身启动配置文件中,并启动promote.sh脚本,监控Redis集群主从节点情况。
所述的方法中Redis集群主节点pod宕机,sentinel节点启动promote.sh脚本,根据Redis集群中pod所打的标签,重新进行master选举,并重新为pod打上相应标签。
一种基于Kubernets的Redis,是将redis的配置文件通过文件流的方式,传入Helm安装包中,并将Helm的配置及启动逻辑部署在configmap中,
在redis-server-statefulset.yaml中,利用initContainers将各类启动脚本,挂载到容器所需pv中,各类启动脚本通过文件流的方式,写入到configmap中,initContainers通过command命令,启动启动脚本执行配置安装,
进行redis的主从节点pod及sentinel节点在Kubernets的部署。
所述的一种基于Kubernets的Redis中redis的主从节点及sentinel节点在Kubernets的部署:redis的主节点pod安装Redis主节点组件,redis的从节点pod安装Redis从节点组件,
redis的sentinel节点安装sentinel组件。
本发明的有益之处是:
本发明提供一种基于Kubernets的Redis主从集群自动化部署方案,能很好的解决Kubernets集群自动化部署Redis主从集群的问题,并将部署主要逻辑放在configmap中,保证了部署的灵活性;其次,本发明将redis的配置文件及通过文件流的方式,一次性传入Helm中,既保证了redis配置参数完整性,又可保证配置文件的易读可读性,一举两得;同时,本发明中挂载的各类启动脚本也是通过pv挂载的方式持久化到redis集群的各类pod中,因为同样采用文件流的方式写入,完整性和易读性都得到了有效保证;再次,本发明在容器安装过程中,启用initContainers技术,完成配置过程和启动过程分离的目的,不仅能实现集群的配置安装,还能保证容器日志的分隔,方便后续集群的运维工作;最后,本发明对redis的启动逻辑进行优化,保证了集群的高可用性。通过本发明,可以完成Redis主从集群自动化部署等操作,省去了人工部署的麻烦,更能避免人为失误,因此,极具推广价值。
附图说明
图1是本发明Redis主从集群结构示意图;
图2是本发明Redis主从集群的Chart包结构示意图;
图3是本发明Redis集群启动过程示意图。
具体实施方式
本发明提供一种基于Kubernets的Redis主从集群自动化部署方案,redis的配置文件通过文件流的方式,传入Helm安装包中,并将Helm配置及启动逻辑部署在configmap中,
在redis-server-statefulset.yaml中,利用initContainers将各类启动脚本,挂载到容器所需pv中,各类启动脚本通过文件流的方式,写入到configmap中,initContainers通过command命令,启动启动脚本执行配置安装,
进行redis的主从节点pod及sentinel节点在Kubernets的部署。
同时提供与上述方法相对应的一种基于Kubernets的Redis,是将redis的配置文件通过文件流的方式,传入Helm安装包中,并将Helm的配置及启动逻辑部署在configmap中,
在redis-server-statefulset.yaml中,利用initContainers将各类启动脚本,挂载到容器所需pv中,各类启动脚本通过文件流的方式,写入到configmap中,initContainers通过command命令,启动启动脚本执行配置安装,
进行redis的主从节点pod及sentinel节点在Kubernets的部署。
下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定。
本发明采用Redis主从集群模式,部署后通过Sentinel节点监控管理Redis集群。Redis集群由两类节点组组成,其中一类节点组安装Redis主节点或从节点组件,完成Redis集群的建立,提高并发访问能力;另一类节点组Sentinel节点组,仅安装Sentinel组件,实时监控集群,保证集群的高可用性,,参考图1。
利用本发明方法在redis的配置文件通过文件流的方式,传入Helm安装包中,Helm安装包结构可参考图2,并将Helm配置及启动逻辑部署在configmap中,
在redis-server-statefulset.yaml中,利用initContainers将各类启动脚本,挂载到容器所需pv中,各类启动脚本通过文件流的方式,写入到configmap中,保证了脚本完整性的同时,增强了脚本的可阅读性,并方便后续维护,主要代码如下:
上述过程中挂载的集中shell脚本,分别执行其逻辑,首先initContainers通过command命令,开始执行redis-launcher.sh,该脚本主要完成,启动label-updater.sh脚本,完成podIP的打标签操作,然后存放redis配置文件,获取statefuleset中写入的相关环境变量;判断redis当前节点属性,并分别执行相关属性的对应操作;关键代码如下:
进行redis的主从节点pod及sentinel节点在Kubernets的部署,
第一次redis集群创建时,脚本进行是否有原master节点脚本存在的判断,该判断标志在sentinel节点脚本执行时进行了写入,保证sentinel节点的正常启动以及集群的正常重启,若无已经打上master标签的pod,则会开始集群的master选举,可以默认第一个创建的pod为主节点,并打上master标签进行标志,然后启动主节点流程,其他pod启动从节点流程,参考图3,主要代码如下:
master pod和slave pod节点的操作中,都会对自身pod进行打标签操作,方便整个集群主从的规范,而sentinel节点则会将主从信息写入到自身启动配置文件中,并启动promote.sh脚本,方便监控集群主从存活情况,当主节点宕机,则会触发该脚本,根本集群中pod所打的标签,重新做master选举,并重新打上相应标签,同时会新增一个$REDIS_STATEFULSET_NAME的标签操作,为防止sentinel全部宕机无法启动做好准备,主要代码如下:
除上述过程,redis集群还可通过redis-rolebinding.yaml和redis-serviceaccount.yaml兼容需要权限认证的Kubernets集群系统等。
以上所述实施例仅是为充分说明本发明而所举的较佳的实施例,本发明的保护范围不限于此。本技术领域的技术人员在本发明基础上所作的等同替代或变换,均在本发明的保护范围之内。本发明的保护范围以权利要求书为准。