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

申请号 : CN201710655955.4

文献号 : CN107688611B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 顾伟涛于伟

申请人 : 杭州铭师堂教育科技发展有限公司

摘要 :

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

权利要求 :

1.一种基于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键值管理。

2.根据权利要求1所述的基于saltstack的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,恢复键值数据。

3.一种基于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界面,提供查看、备份、删除和恢复四个选项,分别调用键值查看模块、键值备份模块、键值删除模块和键值恢复模块。

说明书 :

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

技术领域

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

背景技术

[0002] 对于互联网公司而言,Redis数据库作为缓存和高性能存储方案,应用越来越广泛,由于业务不同,对Redis的操作需求也千差万别,对于单个或者多个键值的操作,也日渐增多,但是,现有Redis键值管理方案存在如下缺点:
[0003] 1)一般是针对所有键值的操作,对单个或者多个键值的支持不够有好。
[0004] 2)操作效率低下,需要较多的人力成本。
[0005] 3)操作风险较大,并且无法做到恢复。

发明内容

[0006] 本发明的目的在于针对现有技术的不足,提供一种基于saltstack的Redis键值管理系统及方法,基于saltstack可以方便地获取到Redis主从集群的元信息,以及管理备份文件,方便备份和恢复操作。
[0007] 本发明的目的是通过以下技术方案来实现的:一种基于saltstack的Redis键值管理系统,该系统包括管理节点、数据库节点和存储节点;
[0008] 数据库节点:运行Redis主从集群的节点,每个Redis主从集群包括一个Redis主库和一个或者多个Redis从库;不同的Redis主从集群端口不同,同一个Redis主从集群的主库和从库端口一致;Redis主库和Redis从库服务器需要部署saltstack客户端,用于接收saltstack管理端发送的指令和完成相应的操作;将数据库节点的主机名和IP记录到数据库节点元信息中;
[0009] 存储节点:存储Redis键值数据,便于进行Redis键值恢复操作,存储节点需要部署saltstack客户端,用于接收saltstack管理端发送的指令和完成相应的操作;将存储节点的主机名、IP、存储路径记录到存储节点元信息中;
[0010] 管理节点:存储所有元信息,包括Redis主从集群元信息、键值备份元信息、存储节点元信息和数据库节点元信息;同时,在管理节点上部署Web应用服务和saltstack管理端;通过saltstack管理端发送相应的指令到数据库节点的saltstack客户端,可以收集Redis主从集群元信息;通过saltstack管理端发送相应的指令到存储节点的saltstack客户端,可以实现传输键值备份文件,从而简化备份和恢复操作;Web应用服务可以实现平台化管理,简化Redis键值管理。
[0011] 进一步地,所述管理节点包括平台化管理模块、元信息管理模块、键值查看模块、键值备份模块、键值删除模块、存储管理模块和键值恢复模块;
[0012] 所述平台化管理模块,需要传入参数为:端口号、键值名和键值类型;键值类型表示键值名的类型,包括前缀和全称两种,如果是前缀,表示键值名是某些键值的打头部分,如果是全称,表示键值名是一个具体的键值,默认类型是前缀;在管理节点上,部署Web应用服务,提供一个Web界面,提供查看、备份、删除和恢复四个选项,分别调用键值查看模块、键值备份模块、键值删除模块和键值恢复模块;
[0013] 所述元信息管理模块,需要传入参数为:数据库节点元信息、存储节点元信息;在管理节点上,通过saltstack接口,首先把所有的saltstack客户端注册到saltstack管理端,然后,获取到所有数据库节点上的Redis进程信息,得到每个Redis数据库端口号、密码,记录每个Redis数据库的端口号、IP、密码到Redis主从集群元信息中;在存储管理模块执行结束后,得到键值备份文件名,解析所述键值备份文件名得到Redis端口号、键值名和日期,记录所述端口号、键值名、键值备份文件名和日期到键值备份元信息;如果数据库节点或者存储节点发生变更,人工修改数据库节点元信息或者存储节点元信息;
[0014] 所述键值备份模块,需要传入的参数:端口号、键值名、键值类型;在管理节点上,部署PHP环境以及Redis驱动;根据传入的端口号查询Redis主从集群元信息,随机选择一个所述端口号相关的Redis数据库IP以及对应的密码,根据所述Redis数据库IP、端口号和密码,建立PHP和Redis的连接;根据传入的键值名、键值类型,进行键值匹配操作,实现指定键值的备份;本模块执行成功后,返回键值备份文件名;
[0015] 所述键值查看模块,需要传入的参数:端口号、键值名、键值类型;包括查看键值的个数以及部分键值,方便管理员了解键值名相关的信息;在管理节点上,根据所述端口号,查询所述Redis主从集群元信息,随机得到一个所述端口号对应的Redis数据库的IP和密码,建立PHP和Redis的连接,根据键值名、键值类型,执行如下操作:如果键值类型是全称,那么调用Redis自身接口SCAN,不需要设置模糊匹配参数*,返回执行结果即可,如果键值类型是前缀,调用Redis自身接口SCAN,需要设置模糊匹配参数*,同时调用系统函数COUNT(),计算所有匹配到的键值的数量,并且打印部分键值的名字;
[0016] 所述键值删除模块,需要传入的参数:端口号、键值名、键值类型;本模块执行之前,会自动调用键值备份模块,用于备份指定的键值,方便后续执行恢复键值操作;如果键值备份模块执行失败,本模块无法执行;否则,根据传入的端口号,查询Redis主从集群元信息,随机得到一个对应的Redis数据库的IP和密码,建立PHP和Redis的连接,获取Redis的role信息,如果是slave,调用Redis接口,获取Redis主库的IP,如果是master,直接执行下面的操作:如果键值类型是全称,那么调用Redis自身接口SCAN,不需要传入匹配参数*,对于匹配到的键值,调用Redis自身接口DEL,即可删除所述键值;如果键值类型是前缀,那么调用Redis自身接口SCAN,需要传入匹配参数*,针对匹配到的键值,调用Redis自身接口DEL,采用循环方式,逐个删除匹配到的所有键值。
[0017] 所述存储管理模块,需要传入的参数:存储节点元信息、键值备份文件名;根据存储节点元信息解析得到存储节点主机名和存储路径;在键值备份模块执行结束后,返回键值备份文件名,在管理节点上,调用saltstack接口,发送键值备份文件到存储节点上,根据键值备份文件名解析得到端口号、键值名和日期,然后把端口号、键值名、键值备份文件名和日期写入到键值备份元信息;
[0018] 所述键值恢复模块,需要传入的参数为:端口号、键值备份文件名;在管理节点上,扫描所述键值备份文件名,如果不存在,返回失败,表示不存在指定的备份文件,无法执行恢复操作,否则,根据所述端口号,查询Redis主从集群元信息,随机得到一个对应的Redis数据库的IP和密码,建立PHP与Redis的连接,调用Redis接口,查询role,如果role是slave,根据Redis接口获取maser的IP,恢复键值数据。
[0019] 一种基于saltstack的Redis键值管理方法,该方法包括以下步骤:
[0020] (1)调用元信息管理模块,在管理节点上保存存储节点元信息、数据库节点元信息、Redis主从集群元信息和键值备份元信息;
[0021] 其中,存储节点元信息包括:存储节点的主机名、存储路径,如果存储节点发生变更,需要人工更新所述存储节点元信息;
[0022] 数据库节点元信息包括数据库节点主机名、IP以及存储路径,如果所述数据库节点发生变更,需要人工变更所述数据库节点元信息;
[0023] Redis主从集群元信息包括所有Redis主从集群的端口号以及主从库的IP和密码;在管理节点上通过saltstack发送相应的指令到数据库节点的saltstack客户端,采集到所有的Redis主从集群元信息;
[0024] 键值备份元信息包括端口号、键值名、键值备份文件名和日期,存储管理模块执行结束后,更新所述键值备份元信息;
[0025] 在数据库节点上部署Redis主从集群,每个Redis主从集群的主库和从库端口号一致,并且采用端口号唯一标识一个Redis主从集群,每个Redis主从集群包括一个Redis主库,一个或者多个Redis从库;
[0026] (2)调用键值备份模块,对指定的键值名进行分析后,调用Redis自身接口备份所述键值,并返回键值备份文件名;所述键值备份文件名格式为:端口号_键值名_时间戳.sql,其中,端口号为Redis主从集群的端口号,键值名为传入的参数,时间戳表示备份执行开始的时间戳;采用上述命名方式,可以解析得到端口号的键值名以及时间戳,便于存储管理模块和键值恢复模块调用;
[0027] (3)调用键值查看模块,根据传入的参数,可以得到所述键值名相关的数量,以及部分键值的名字信息,便于管理员了解所述键值名相关的信息;
[0028] (4)调用键值删除模块,执行本模块之前,自动调用键值备份模块,备份相关键值,然后清理所述键值名对应的所有键值;
[0029] (5)调用存储管理模块,在键值备份模块执行结束后,返回键值备份文件名,本模块将键值备份文件上传到存储节点对应的存储路径,同时,定期清理过期的键值备份文件,以及统计所述键值备份元信息,便于平台化管理模块调用;
[0030] (6)调用键值恢复模块,在键值备份模块和键值删除模块执行结束后,如果需要恢复操作,执行本模块,可以恢复所需键值;
[0031] (7)调用平台化管理模块,在管理节点上启动Web应用服务,提供一个Web界面,提供查看、备份、删除和恢复四个选项,分别调用键值查看模块、键值备份模块、键值删除模块和键值恢复模块。本模块首先调用元信息管理模块,根据传入的端口号,获取到Redis主从集群元信息,从而可以根据操作需求,分别执行“查看”、“备份”、“删除”和“恢复”操作。本模块可以实现一键操作,降低了操作风险,而且提高了操作效率。
[0032] 本发明的有益效果是:
[0033] (1)功能全面,支持单个或者多个键值的查看、备份、删除和恢复操作。
[0034] (2)操作简单,在平台界面填写少量信息,即可一键操作。
[0035] (3)操作安全可靠,大大降低操作风险。
[0036] (4)提升工作效率,降低人工维护成本。

附图说明

[0037] 图1是本发明Redis键值管理系统架构图;
[0038] 图2是本发明Redis键值管理系统的管理节点各个模块流程图。

具体实施方式

[0039] 下面结合附图和具体实施例对本发明作进一步详细说明。
[0040] 如图1所示,本发明提供的一种基于saltstack的Redis键值管理系统,该系统包括数据库节点、存储节点和管理节点三个单元。
[0041] (1)数据库节点:在数据库节点上部署Redis主从集群,每个Redis主从集群包括一个主库和一个或者多个从库,每个Redis主从集群中,主库和从库端口号一致,不同的Redis主从集群,端口号唯一;同时,在数据库节点上部署saltstack客户端,部署方式如下:
[0042] #yum install salt-minion–y
[0043] 然后,修改/etc/salt/minion文件如下一行:
[0044] master:saltstack管理端IP
[0045] 启动saltstack客户端方式:
[0046] #service salt-minion start
[0047] 最后,把数据库节点的主机名和IP记录到管理节点的数据库节点元信息中。
[0048] (2)存储节点:在存储节点固话存储路径,为了防止磁盘故障,至少规划两个存储路径,用于存放键值备份文件。同时,按照如上方式部署和启动saltstack客户端。并且,把存储节点的主机名、IP、存储路径记录到管理节点的存储节点元信息中。
[0049] (3)管理节点:在管理节点上部署saltstack管理端,部署方式如下:
[0050] #yum install salt-master–y
[0051] 启动saltstack管理端方式如下:
[0052] #service salt-master start
[0053] 在管理节点上,分别记录数据库节点元信息和存储节点元信息,如果数据库节点或者存储节点发生变更,需要人工更新相应的元信息,由于变更很不频繁,所以,人工维护成本很低。在管理节点上,通过saltstack接口,获取到数据库节点上所有Redis主从集群的端口号、服务器主机名和Redis密码,记录到管理节点的Redis主从集群元信息中。存储管理模块执行结束后,在管理节点记录键值备份元信息。
[0054] 如图2所示,管理节点各个模块的实现流程如下:
[0055] (1)平台化管理模块
[0056] 在管理节点上,部署Web应用服务,提供一个Web界面,需要传入参数:端口号、键值名和键值类型,其中,键值类型表示键值名的类型,包括前缀和全称两种,如果是前缀,表示键值名是某些键值的打头部分;如果是全称,表示所述键值名是一个具体的键值,默认类型是前缀。界面提供“查看”、“备份”、“删除”和“恢复”四个按钮,分别调用键值查看模块、键值备份模块、键值删除模块和键值恢复模块。填写以上参数后,点击按钮,即可完成对应的操作,操作简单可靠。
[0057] (2)元信息管理模块
[0058] 需要传入参数:数据库节点元信息、存储节点元信息
[0059] 在管理节点上,通过saltstack接口,首先把所有的saltstack客户端注册到saltstack管理端,方式如下:
[0060] #salt-key–y–a服务器主机名
[0061] 所述服务器主机名是运行了saltstack客户端的服务器主机名,这里是指数据库节点和存储节点的所有服务器。上述命令每次注册一个服务器到saltstack管理端。
[0062] 然后,在管理节点上,调用saltstack接口,获取到所有数据库节点上的Redis进程信息,方式如下:
[0063] #salt‘数据库节点主机名’cmd.run‘ps–ef|egrep Redis-server|grep–vgrep-’>临时文件
[0064] 对所述临时文件解析,得到每个Redis数据库端口号以及配置文件,解析配置文件,可以得到密码。记录每个Redis数据库的端口号、IP、密码到Redis主从集群元信息中。对以上操作进行封装,采用定时任务形式定期更新,可以得到Redis主从集群的最新信息。定时任务如下:
[0065] 11 12,19***/bin/sh封装脚本
[0066] 所述封装脚本是封装了以上操作的shell脚本。
[0067] 在存储管理模块执行结束后,得到键值备份文件名,解析所述键值备份文件名,得到Redis端口号、键值名和日期,记录所述端口号、键值名、键值备份文件名和日期到键值备份元信息,便于平台化管理模块调用。
[0068] 如果数据库节点或者存储节点发生变更,需要人工修改数据库节点元信息或者存储节点元信息。
[0069] (3)键值备份模块
[0070] 需要传入参数:端口号、键值名、键值类型
[0071] 为了方便实现键值备份模块,本发明采用了php语言编写相关代码,所以,在管理节点上,需要部署php环境以及Redis驱动。然后,根据传入的端口号,查询Redis主从集群元信息,随机选择一个所述端口号相关的Redis数据库IP以及对应的密码,根据所述Redis数据库IP、端口号和密码,建立PHP和Redis的连接,然后,根据传入的键值名、键值类型,进行如下操作:
[0072] (3.1)如果键值类型是“全称”,采用如下方式匹配键值:
[0073] 首先调用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,传入所述键值全称名字,返回对应的值。
[0074] (3.2)如果键值类型是“前缀”,采用如下方式匹配键值:
[0075] 首先调用Redis自身接口SCAN,需要传入键值名、迭代器和匹配参数*,由于模糊匹配返回结果可能存在多个,所以采用循环方式处理匹配到的键值全称名字。针对每个匹配到的键值,进行如下操作:
[0076] 调用Redis资深接口TYPE,需要传入所述键值的全称名字,返回键值type类型。如果键值type类型是string,那么调用Redis资深接口GET,返回所述键值对应的值;如果键值type类型是set,那么调用Redis自身接口SMEMBERS,传入所述键值全称名字,返回对应的值;如果所述键值type类型是list,那么调用Redis自身接口LRANGE,传入所述键值全称名字,返回对应的值;如果键值type类型是zset,那么调用Redis资深接口ZRANGE,传入所述键值全称名字,返回对应的值;如果所述键值type类型是hash,那么调用Redis自身接口HGETALL,传入所述键值全称名字,返回对应的值。
[0077] 无论键值类型是“全称”还是“前缀”,得到键值全称名字后,执行如下操作:针对所述键值全称名字,调用Redis资深接口TTL,获取所述键值对应的过期时间以及当前的时间点,然后,记录如下信息到键值备份文件中:键值全称名字、键值type类型、键值过期时间、备份时间点、键值对应的值;
[0078] 默认键值存储在Redis的数据库0中,通过以上方法,实现了指定键值的备份,便于键值恢复模块调用。
[0079] 本模块执行结束后,返回键值备份文件名,如果执行失败,返回“本次备份失败”信息。
[0080] (4)键值查看模块
[0081] 需要传入参数:端口号、键值名、键值类型
[0082] 本模块主要包括查看键值的个数以及部分键值,方便管理员了解键值名相关的信息。在管理节点上,根据所述端口号,查询所述Redis主从集群元信息,随机得到一个所属端口号对应的Redis数据库的IP和密码,然后建立PHP和Redis的连接,然后根据键值名、键值类型,分别执行如下操作:
[0083] (4.1)键值类型是“全称”
[0084] 调用Redis自身接口SCAN,传入迭代器和所述键值名,不要传入匹配参数*,返回结果包含键值名和个数;如果存在所述键值,那么键值数量为1,键值名就是键值全称名字;如果不存在所述键值,那么所述键值数量为0。
[0085] (4.2)键值类型是“前缀”
[0086] 调用Redis自身接口SCAN,传入迭代器、键值名和匹配参数*,同时调用系统函数COUNT进行计数,得到所述键值名匹配到的键值数量。同时,打印键值全称名字,根据系统函数COUNT控制输出的数量。
[0087] (5)键值删除模块
[0088] 需要传入参数:端口号、键值名、键值类型
[0089] 本模块主要是删除指定的键值,本模块执行之前,会自动调用键值备份模块,用于备份指定的键值,方便后续执行恢复键值操作。如果键值备份模块执行失败,本模块无法执行;否则,可以执行本模块。根据传入的端口号,查询Redis主从集群元信息,随机得到一个对应的Redis数据库的IP和密码,然后建立PHP和Redis的连接,获取Redis的role信息,如果是slave,调用Redis接口,获取Redis主库的IP,如果role是master,那么继续执行下面的操作:
[0090] (5.1)键值类型是“全称”
[0091] $Redis->del($one_key);
[0092] (5.2)键值类型是“前缀”
[0093] while($arr_keys=$Redis->scan($it,$p['prekey'].'*')){
[0094]       $Redis->del($arr_keys);}
[0095] (6)存储管理模块
[0096] 需要传入参数:存储节点元信息、键值备份文件名
[0097] 根据存储节点元信息,解析的到存储节点主机名和存储路径。在键值备份模块执行结束后,返回键值备份文件名,如果键值备份模块执行失败,本模块无法执行。在管理节点上,调用saltstack接口,发送键值备份文件到存储节点上,方式如下:
[0098] salt-cp'存储节点主机名'键值备份文件名存储路径
[0099] 执行成功后,根据键值备份文件名解析得到端口号、键值名和日期,然后把端口号、键值名、键值备份文件名和日期写入到键值备份元信息;
[0100] 在管理节点,定期扫描键值备份元信息,清理7天之前的键值备份文件,方式如下:
[0101] #salt‘存储节点主机名’‘cd存储路径&&rm–rf过期的键值备份文件’
[0102] (7)键值恢复模块
[0103] 需要传入参数:端口号、键值备份文件名
[0104] 在管理节点上,扫描所述键值备份文件名,如果不存在,返回失败,表示不存在指定的备份文件,无法执行恢复操作。否则,按照如下方式进行恢复键值数据:
[0105] 根据所述端口号,查询Redis主从集群元信息,随机得到一一对应的Redis数据库的IP和密码,建立PHP与Redis的连接,调用Redis接口,查询role,如果role是slave,根据Redis接口,获取maser的IP,然后执行如下操作,恢复键值数据:
[0106] 每次读取键值备份文件50MB内容,然后对其进行逐行扫描并解析得到如下内容:键值全称名字、键值type类型、备份时间点、过期时间以及键值对应的值,同时,调用系统函数time()得到当前的时间点,进行如下操作:
[0107] 如果过期时间是-1,那么新过期时间等于-1,否则按照如下方式得到新过期时间:
[0108] 新过期时间=过期时间–(当前时间点–备份时间点)
[0109] 如果新过期时间小于或者等于0,表示该键值已经过期,那么跳过本次操作,继续下一行扫描和解析操作,如果新过期时间大于0,那么根据键值type类型不同,执行如下操作:
[0110] 如果键值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主库中。
[0111] 执行成功后,返回“恢复所述端口号指定的键值名成功“,否则返回“恢复数据失败”。
[0112] 在平台化管理模块中,选择“恢复”功能,即可执行入行操作,简单可靠。