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

文档序号:13685797阅读:172来源:国知局
一种基于saltstack的Redis键值管理系统及方法与流程

本发明属于计算机技术领域,应用于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客户端,部署方式如下:

#yuminstallsalt-minion–y

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

master:saltstack管理端ip

启动saltstack客户端方式:

#servicesalt-minionstart

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

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

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

#yuminstallsalt-master–y

启动saltstack管理端方式如下:

#servicesalt-masterstart

在管理节点上,分别记录数据库节点元信息和存储节点元信息,如果数据库节点或者存储节点发生变更,需要人工更新相应的元信息,由于变更很不频繁,所以,人工维护成本很低。在管理节点上,通过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|egrepredis-server|grep–vgrep-’>临时文件

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

1112,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主库中。

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

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

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1