首页> 中国专利> 一种基于saltstack的Redis键值管理系统及方法

一种基于saltstack的Redis键值管理系统及方法

摘要

本发明公开了一种基于saltstack的Redis键值管理系统及方法,该系统包括管理节点、数据库节点和存储节点;数据库节点:运行Redis主从集群的节点;Redis主库和Redis从库服务器需要部署saltstack客户端;存储节点:存储Redis键值数据,便于进行Redis键值恢复操作,部署saltstack客户端;管理节点:存储Redis主从集群元信息、键值备份元信息、存储节点元信息和数据库节点元信息,部署Web应用服务和saltstack管理端;通过saltstack管理端发送相应的指令到存储节点的saltstack客户端,实现传输键值备份文件,从而简化备份和恢复操作。本发明支持单个或者多个键值的查看、备份、删除和恢复操作。操作简单,在平台界面填写少量信息,即可一键操作。操作安全可靠,提升工作效率,降低人工维护成本。

著录项

  • 公开/公告号CN107688611A

    专利类型发明专利

  • 公开/公告日2018-02-13

    原文格式PDF

  • 申请/专利权人 杭州铭师堂教育科技发展有限公司;

    申请/专利号CN201710655955.4

  • 发明设计人 顾伟涛;于伟;

    申请日2017-08-03

  • 分类号

  • 代理机构杭州求是专利事务所有限公司;

  • 代理人刘静

  • 地址 310019 浙江省杭州市江干区九盛路9号A15幢5楼507室

  • 入库时间 2023-06-19 04:31:42

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-08-12

    专利权的转移 IPC(主分类):G06F16/28 专利号:ZL2017106559554 登记生效日:20220729 变更事项:专利权人 变更前权利人:杭州铭师堂教育科技发展有限公司 变更后权利人:杭州铭师堂数字科技有限公司 变更事项:地址 变更前权利人:310019 浙江省杭州市江干区九盛路9号A15幢5楼507室 变更后权利人:310000 浙江省杭州市拱墅区祥园路108号1幢8层801室

    专利申请权、专利权的转移

  • 2020-02-28

    授权

    授权

  • 2018-03-13

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20170803

    实质审查的生效

  • 2018-02-13

    公开

    公开

说明书

技术领域

本发明属于计算机技术领域,应用于Redis数据库的应用场景,主要针对单个或者多个键值的查看、备份、删除和恢复等管理,简化操作流程,大大提升操作效率。

背景技术

对于互联网公司而言,Redis数据库作为缓存和高性能存储方案,应用越来越广泛,由于业务不同,对Redis的操作需求也千差万别,对于单个或者多个键值的操作,也日渐增多,但是,现有Redis键值管理方案存在如下缺点:

1)一般是针对所有键值的操作,对单个或者多个键值的支持不够有好。

2)操作效率低下,需要较多的人力成本。

3)操作风险较大,并且无法做到恢复。

发明内容

本发明的目的在于针对现有技术的不足,提供一种基于saltstack的Redis键值管理系统及方法,基于saltstack可以方便地获取到Redis主从集群的元信息,以及管理备份文件,方便备份和恢复操作。

本发明的目的是通过以下技术方案来实现的:一种基于saltstack的Redis键值管理系统,该系统包括管理节点、数据库节点和存储节点;

数据库节点:运行Redis主从集群的节点,每个Redis主从集群包括一个Redis主库和一个或者多个Redis从库;不同的Redis主从集群端口不同,同一个Redis主从集群的主库和从库端口一致;Redis主库和Redis从库服务器需要部署saltstack客户端,用于接收saltstack管理端发送的指令和完成相应的操作;将数据库节点的主机名和IP记录到数据库节点元信息中;

存储节点:存储Redis键值数据,便于进行Redis键值恢复操作,存储节点需要部署saltstack客户端,用于接收saltstack管理端发送的指令和完成相应的操作;将存储节点的主机名、IP、存储路径记录到存储节点元信息中;

管理节点:存储所有元信息,包括Redis主从集群元信息、键值备份元信息、存储节点元信息和数据库节点元信息;同时,在管理节点上部署Web应用服务和saltstack管理端;通过saltstack管理端发送相应的指令到数据库节点的saltstack客户端,可以收集Redis主从集群元信息;通过saltstack管理端发送相应的指令到存储节点的saltstack客户端,可以实现传输键值备份文件,从而简化备份和恢复操作;Web应用服务可以实现平台化管理,简化Redis键值管理。

进一步地,所述管理节点包括平台化管理模块、元信息管理模块、键值查看模块、键值备份模块、键值删除模块、存储管理模块和键值恢复模块;

所述平台化管理模块,需要传入参数为:端口号、键值名和键值类型;键值类型表示键值名的类型,包括前缀和全称两种,如果是前缀,表示键值名是某些键值的打头部分,如果是全称,表示键值名是一个具体的键值,默认类型是前缀;在管理节点上,部署Web应用服务,提供一个Web界面,提供查看、备份、删除和恢复四个选项,分别调用键值查看模块、键值备份模块、键值删除模块和键值恢复模块;

所述元信息管理模块,需要传入参数为:数据库节点元信息、存储节点元信息;在管理节点上,通过saltstack接口,首先把所有的saltstack客户端注册到saltstack管理端,然后,获取到所有数据库节点上的Redis进程信息,得到每个Redis数据库端口号、密码,记录每个Redis数据库的端口号、IP、密码到Redis主从集群元信息中;在存储管理模块执行结束后,得到键值备份文件名,解析所述键值备份文件名得到Redis端口号、键值名和日期,记录所述端口号、键值名、键值备份文件名和日期到键值备份元信息;如果数据库节点或者存储节点发生变更,人工修改数据库节点元信息或者存储节点元信息;

所述键值备份模块,需要传入的参数:端口号、键值名、键值类型;在管理节点上,部署PHP环境以及Redis驱动;根据传入的端口号查询Redis主从集群元信息,随机选择一个所述端口号相关的Redis数据库IP以及对应的密码,根据所述Redis数据库IP、端口号和密码,建立PHP和Redis的连接;根据传入的键值名、键值类型,进行键值匹配操作,实现指定键值的备份;本模块执行成功后,返回键值备份文件名;

所述键值查看模块,需要传入的参数:端口号、键值名、键值类型;包括查看键值的个数以及部分键值,方便管理员了解键值名相关的信息;在管理节点上,根据所述端口号,查询所述Redis主从集群元信息,随机得到一个所述端口号对应的Redis数据库的IP和密码,建立PHP和Redis的连接,根据键值名、键值类型,执行如下操作:如果键值类型是全称,那么调用Redis自身接口SCAN,不需要设置模糊匹配参数*,返回执行结果即可,如果键值类型是前缀,调用Redis自身接口SCAN,需要设置模糊匹配参数*,同时调用系统函数COUNT(),计算所有匹配到的键值的数量,并且打印部分键值的名字;

所述键值删除模块,需要传入的参数:端口号、键值名、键值类型;本模块执行之前,会自动调用键值备份模块,用于备份指定的键值,方便后续执行恢复键值操作;如果键值备份模块执行失败,本模块无法执行;否则,根据传入的端口号,查询Redis主从集群元信息,随机得到一个对应的Redis数据库的IP和密码,建立PHP和Redis的连接,获取Redis的role信息,如果是slave,调用Redis接口,获取Redis主库的IP,如果是master,直接执行下面的操作:如果键值类型是全称,那么调用Redis自身接口SCAN,不需要传入匹配参数*,对于匹配到的键值,调用Redis自身接口DEL,即可删除所述键值;如果键值类型是前缀,那么调用Redis自身接口SCAN,需要传入匹配参数*,针对匹配到的键值,调用Redis自身接口DEL,采用循环方式,逐个删除匹配到的所有键值。

所述存储管理模块,需要传入的参数:存储节点元信息、键值备份文件名;根据存储节点元信息解析得到存储节点主机名和存储路径;在键值备份模块执行结束后,返回键值备份文件名,在管理节点上,调用saltstack接口,发送键值备份文件到存储节点上,根据键值备份文件名解析得到端口号、键值名和日期,然后把端口号、键值名、键值备份文件名和日期写入到键值备份元信息;

所述键值恢复模块,需要传入的参数为:端口号、键值备份文件名;在管理节点上,扫描所述键值备份文件名,如果不存在,返回失败,表示不存在指定的备份文件,无法执行恢复操作,否则,根据所述端口号,查询Redis主从集群元信息,随机得到一个对应的Redis数据库的IP和密码,建立PHP与Redis的连接,调用Redis接口,查询role,如果role是slave,根据Redis接口获取maser的IP,恢复键值数据。

一种基于saltstack的Redis键值管理方法,该方法包括以下步骤:

(1)调用元信息管理模块,在管理节点上保存存储节点元信息、数据库节点元信息、Redis主从集群元信息和键值备份元信息;

其中,存储节点元信息包括:存储节点的主机名、存储路径,如果存储节点发生变更,需要人工更新所述存储节点元信息;

数据库节点元信息包括数据库节点主机名、IP以及存储路径,如果所述数据库节点发生变更,需要人工变更所述数据库节点元信息;

Redis主从集群元信息包括所有Redis主从集群的端口号以及主从库的IP和密码;在管理节点上通过saltstack发送相应的指令到数据库节点的saltstack客户端,采集到所有的Redis主从集群元信息;

键值备份元信息包括端口号、键值名、键值备份文件名和日期,存储管理模块执行结束后,更新所述键值备份元信息;

在数据库节点上部署Redis主从集群,每个Redis主从集群的主库和从库端口号一致,并且采用端口号唯一标识一个Redis主从集群,每个Redis主从集群包括一个Redis主库,一个或者多个Redis从库;

(2)调用键值备份模块,对指定的键值名进行分析后,调用Redis自身接口备份所述键值,并返回键值备份文件名;所述键值备份文件名格式为:端口号_键值名_时间戳.sql,其中,端口号为Redis主从集群的端口号,键值名为传入的参数,时间戳表示备份执行开始的时间戳;采用上述命名方式,可以解析得到端口号的键值名以及时间戳,便于存储管理模块和键值恢复模块调用;

(3)调用键值查看模块,根据传入的参数,可以得到所述键值名相关的数量,以及部分键值的名字信息,便于管理员了解所述键值名相关的信息;

(4)调用键值删除模块,执行本模块之前,自动调用键值备份模块,备份相关键值,然后清理所述键值名对应的所有键值;

(5)调用存储管理模块,在键值备份模块执行结束后,返回键值备份文件名,本模块将键值备份文件上传到存储节点对应的存储路径,同时,定期清理过期的键值备份文件,以及统计所述键值备份元信息,便于平台化管理模块调用;

(6)调用键值恢复模块,在键值备份模块和键值删除模块执行结束后,如果需要恢复操作,执行本模块,可以恢复所需键值;

(7)调用平台化管理模块,在管理节点上启动Web应用服务,提供一个Web界面,提供查看、备份、删除和恢复四个选项,分别调用键值查看模块、键值备份模块、键值删除模块和键值恢复模块。本模块首先调用元信息管理模块,根据传入的端口号,获取到Redis主从集群元信息,从而可以根据操作需求,分别执行“查看”、“备份”、“删除”和“恢复”操作。本模块可以实现一键操作,降低了操作风险,而且提高了操作效率。

本发明的有益效果是:

(1)功能全面,支持单个或者多个键值的查看、备份、删除和恢复操作。

(2)操作简单,在平台界面填写少量信息,即可一键操作。

(3)操作安全可靠,大大降低操作风险。

(4)提升工作效率,降低人工维护成本。

附图说明

图1是本发明Redis键值管理系统架构图;

图2是本发明Redis键值管理系统的管理节点各个模块流程图。

具体实施方式

下面结合附图和具体实施例对本发明作进一步详细说明。

如图1所示,本发明提供的一种基于saltstack的Redis键值管理系统,该系统包括数据库节点、存储节点和管理节点三个单元。

(1)数据库节点:在数据库节点上部署Redis主从集群,每个Redis主从集群包括一个主库和一个或者多个从库,每个Redis主从集群中,主库和从库端口号一致,不同的Redis主从集群,端口号唯一;同时,在数据库节点上部署saltstack客户端,部署方式如下:

#yum install salt-minion–y

然后,修改/etc/salt/minion文件如下一行:

master:saltstack管理端IP

启动saltstack客户端方式:

#service salt-minion start

最后,把数据库节点的主机名和IP记录到管理节点的数据库节点元信息中。

(2)存储节点:在存储节点固话存储路径,为了防止磁盘故障,至少规划两个存储路径,用于存放键值备份文件。同时,按照如上方式部署和启动saltstack客户端。并且,把存储节点的主机名、IP、存储路径记录到管理节点的存储节点元信息中。

(3)管理节点:在管理节点上部署saltstack管理端,部署方式如下:

#yum install salt-master–y

启动saltstack管理端方式如下:

#service salt-master start

在管理节点上,分别记录数据库节点元信息和存储节点元信息,如果数据库节点或者存储节点发生变更,需要人工更新相应的元信息,由于变更很不频繁,所以,人工维护成本很低。在管理节点上,通过saltstack接口,获取到数据库节点上所有Redis主从集群的端口号、服务器主机名和Redis密码,记录到管理节点的Redis主从集群元信息中。存储管理模块执行结束后,在管理节点记录键值备份元信息。

如图2所示,管理节点各个模块的实现流程如下:

(1)平台化管理模块

在管理节点上,部署Web应用服务,提供一个Web界面,需要传入参数:端口号、键值名和键值类型,其中,键值类型表示键值名的类型,包括前缀和全称两种,如果是前缀,表示键值名是某些键值的打头部分;如果是全称,表示所述键值名是一个具体的键值,默认类型是前缀。界面提供“查看”、“备份”、“删除”和“恢复”四个按钮,分别调用键值查看模块、键值备份模块、键值删除模块和键值恢复模块。填写以上参数后,点击按钮,即可完成对应的操作,操作简单可靠。

(2)元信息管理模块

需要传入参数:数据库节点元信息、存储节点元信息

在管理节点上,通过saltstack接口,首先把所有的saltstack客户端注册到saltstack管理端,方式如下:

#salt-key–y–a服务器主机名

所述服务器主机名是运行了saltstack客户端的服务器主机名,这里是指数据库节点和存储节点的所有服务器。上述命令每次注册一个服务器到saltstack管理端。

然后,在管理节点上,调用saltstack接口,获取到所有数据库节点上的Redis进程信息,方式如下:

#salt‘数据库节点主机名’cmd.run‘ps–ef|egrep Redis-server|grep–vgrep-’>临时文件

对所述临时文件解析,得到每个Redis数据库端口号以及配置文件,解析配置文件,可以得到密码。记录每个Redis数据库的端口号、IP、密码到Redis主从集群元信息中。对以上操作进行封装,采用定时任务形式定期更新,可以得到Redis主从集群的最新信息。定时任务如下:

11 12,19***/bin/sh封装脚本

所述封装脚本是封装了以上操作的shell脚本。

在存储管理模块执行结束后,得到键值备份文件名,解析所述键值备份文件名,得到Redis端口号、键值名和日期,记录所述端口号、键值名、键值备份文件名和日期到键值备份元信息,便于平台化管理模块调用。

如果数据库节点或者存储节点发生变更,需要人工修改数据库节点元信息或者存储节点元信息。

(3)键值备份模块

需要传入参数:端口号、键值名、键值类型

为了方便实现键值备份模块,本发明采用了php语言编写相关代码,所以,在管理节点上,需要部署php环境以及Redis驱动。然后,根据传入的端口号,查询Redis主从集群元信息,随机选择一个所述端口号相关的Redis数据库IP以及对应的密码,根据所述Redis数据库IP、端口号和密码,建立PHP和Redis的连接,然后,根据传入的键值名、键值类型,进行如下操作:

(3.1)如果键值类型是“全称”,采用如下方式匹配键值:

首先调用Redis自身接口SCAN,需要传入的参数为迭代器和键值名,不要传入匹配参数*,返回键值的全称名字,接下来调用Redis资深接口TYPE,需要传入所述键值的全称名字,返回键值type类型。如果键值type类型是string,那么调用Redis资深接口GET,返回所述键值对应的值;如果键值type类型是set,那么调用Redis自身接口SMEMBERS,传入所述键值全称名字,返回对应的值;如果所述键值type类型是list,那么调用Redis自身接口LRANGE,传入所述键值全称名字,返回对应的值;如果键值type类型是zset,那么调用Redis资深接口ZRANGE,传入所述键值全称名字,返回对应的值;如果所述键值type类型是hash,那么调用Redis自身接口HGETALL,传入所述键值全称名字,返回对应的值。

(3.2)如果键值类型是“前缀”,采用如下方式匹配键值:

首先调用Redis自身接口SCAN,需要传入键值名、迭代器和匹配参数*,由于模糊匹配返回结果可能存在多个,所以采用循环方式处理匹配到的键值全称名字。针对每个匹配到的键值,进行如下操作:

调用Redis资深接口TYPE,需要传入所述键值的全称名字,返回键值type类型。如果键值type类型是string,那么调用Redis资深接口GET,返回所述键值对应的值;如果键值type类型是set,那么调用Redis自身接口SMEMBERS,传入所述键值全称名字,返回对应的值;如果所述键值type类型是list,那么调用Redis自身接口LRANGE,传入所述键值全称名字,返回对应的值;如果键值type类型是zset,那么调用Redis资深接口ZRANGE,传入所述键值全称名字,返回对应的值;如果所述键值type类型是hash,那么调用Redis自身接口HGETALL,传入所述键值全称名字,返回对应的值。

无论键值类型是“全称”还是“前缀”,得到键值全称名字后,执行如下操作:针对所述键值全称名字,调用Redis资深接口TTL,获取所述键值对应的过期时间以及当前的时间点,然后,记录如下信息到键值备份文件中:键值全称名字、键值type类型、键值过期时间、备份时间点、键值对应的值;

默认键值存储在Redis的数据库0中,通过以上方法,实现了指定键值的备份,便于键值恢复模块调用。

本模块执行结束后,返回键值备份文件名,如果执行失败,返回“本次备份失败”信息。

(4)键值查看模块

需要传入参数:端口号、键值名、键值类型

本模块主要包括查看键值的个数以及部分键值,方便管理员了解键值名相关的信息。在管理节点上,根据所述端口号,查询所述Redis主从集群元信息,随机得到一个所属端口号对应的Redis数据库的IP和密码,然后建立PHP和Redis的连接,然后根据键值名、键值类型,分别执行如下操作:

(4.1)键值类型是“全称”

调用Redis自身接口SCAN,传入迭代器和所述键值名,不要传入匹配参数*,返回结果包含键值名和个数;如果存在所述键值,那么键值数量为1,键值名就是键值全称名字;如果不存在所述键值,那么所述键值数量为0。

(4.2)键值类型是“前缀”

调用Redis自身接口SCAN,传入迭代器、键值名和匹配参数*,同时调用系统函数COUNT进行计数,得到所述键值名匹配到的键值数量。同时,打印键值全称名字,根据系统函数COUNT控制输出的数量。

(5)键值删除模块

需要传入参数:端口号、键值名、键值类型

本模块主要是删除指定的键值,本模块执行之前,会自动调用键值备份模块,用于备份指定的键值,方便后续执行恢复键值操作。如果键值备份模块执行失败,本模块无法执行;否则,可以执行本模块。根据传入的端口号,查询Redis主从集群元信息,随机得到一个对应的Redis数据库的IP和密码,然后建立PHP和Redis的连接,获取Redis的role信息,如果是slave,调用Redis接口,获取Redis主库的IP,如果role是master,那么继续执行下面的操作:

(5.1)键值类型是“全称”

$Redis->del($one_key);

(5.2)键值类型是“前缀”

while($arr_keys=$Redis->scan($it,$p['prekey'].'*')){

$Redis->del($arr_keys);}

(6)存储管理模块

需要传入参数:存储节点元信息、键值备份文件名

根据存储节点元信息,解析的到存储节点主机名和存储路径。在键值备份模块执行结束后,返回键值备份文件名,如果键值备份模块执行失败,本模块无法执行。在管理节点上,调用saltstack接口,发送键值备份文件到存储节点上,方式如下:

salt-cp'存储节点主机名'键值备份文件名存储路径

执行成功后,根据键值备份文件名解析得到端口号、键值名和日期,然后把端口号、键值名、键值备份文件名和日期写入到键值备份元信息;

在管理节点,定期扫描键值备份元信息,清理7天之前的键值备份文件,方式如下:

#salt‘存储节点主机名’‘cd存储路径&&rm–rf过期的键值备份文件’

(7)键值恢复模块

需要传入参数:端口号、键值备份文件名

在管理节点上,扫描所述键值备份文件名,如果不存在,返回失败,表示不存在指定的备份文件,无法执行恢复操作。否则,按照如下方式进行恢复键值数据:

根据所述端口号,查询Redis主从集群元信息,随机得到一一对应的Redis数据库的IP和密码,建立PHP与Redis的连接,调用Redis接口,查询role,如果role是slave,根据Redis接口,获取maser的IP,然后执行如下操作,恢复键值数据:

每次读取键值备份文件50MB内容,然后对其进行逐行扫描并解析得到如下内容:键值全称名字、键值type类型、备份时间点、过期时间以及键值对应的值,同时,调用系统函数time()得到当前的时间点,进行如下操作:

如果过期时间是-1,那么新过期时间等于-1,否则按照如下方式得到新过期时间:

新过期时间=过期时间–(当前时间点–备份时间点)

如果新过期时间小于或者等于0,表示该键值已经过期,那么跳过本次操作,继续下一行扫描和解析操作,如果新过期时间大于0,那么根据键值type类型不同,执行如下操作:

如果键值type类型是string,那么调用Redis自身接口SET,传入键值全称名字、键值对应的值以及新过期时间,写入到指定的Redis主库中;如果键值type类型是hash,那么调用Redis自身接口HMSET,传入键值全称名字、键值对应的值和新过期时间,写入到指定的Redis主库中;如果键值type类型是list,针对键值对应的值,采用循环方式,得到list每个元素,然后逐个调用Redis自身接口LPUSH,传入键值全称名字、元素和新过期时间,写入到指定的Redis主库中;如果键值type类型是set,那么调用Redis自身接口sAddArray,传入键值全称名字、键值对应的值以及新过期时间,写入到指定的Redis主库中;如果键值type类型是zset,那么调用Redis自身接口zAdd,传入键值全称名字、键值对应的值以及新过期时间,写入到指定的Redis主库中。

执行成功后,返回“恢复所述端口号指定的键值名成功“,否则返回“恢复数据失败”。

在平台化管理模块中,选择“恢复”功能,即可执行入行操作,简单可靠。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号