Re: Re: redis数据备份转移

28 views
Skip to first unread message

Lu Wenlong

unread,
Jul 4, 2011, 8:50:13 AM7/4/11
to bamb...@googlegroups.com
我们知道,redis数据库(instance A)的备份方式就是简单地将硬盘上的rdb或aof文件保存在另外的地方;而转移到instance B中,只需多加一步,即将rdb/aof文件(可能)通过网络传送到instance B的相应路径下,系统会将该文件loading到内存去(在master-slave replication中,内部命令sync会起动这个过程)。

单机版的基本结构
1th level:  redis instance,每个物理机器可以运行多个instances, 只要配置它们的端口port不同即可。redis是单进程的。硬盘上的rdb/aof文件是以instance为基本单位存储的,好似不能再分。

2nd level: database number, 默认是16, 相当于namespace,彼此之间是独立的。database 并不能直接作为独立的个体在硬盘上存在,除非,提供新的工具将rdb/aof文件的内容按不同的database提取出来,我还没见到这样的工具。自己现在也不知道怎么写,因刚刚开始看源代码。

3rd level: key-value pairs,所有的键值对都是平等的。但在实际应用时,还是会根据读操作特点与数据的结构 来建立有效indexing, 如某个set中装的都是 具有某种特征的 keys。 在存储改变结构方面,可以利用move命令,在同一个instance中的不同databases之间移动key-value pair;

集群的基本结构
1th level: instance(node),基本同上。它有个原则是,尽量使得每个instance独立,实现理想的 线性扩展关系,即存储量 vs  instance数量(假设每个instance的费用是相等的)。

2nd level: hash slot, 相当于单机版的database。但给定keys后,怎样将相关的一组keys都存放到同一个hash slot中?作者用了个trick. 若将keys写成如下形式,{myappOne}name, {myappOne}password, {myappOne}xxxx,  通过hash函数的作用,这些keys就会得到相同的hash值,这个值就会对应某个hash slot。 关键点是,hash函数只作用在第一个{}内的字符串上,而它们现在相同。

而且,集群提供命令migrate,可以将slot作为整体在不同的instance之间原子性地移动。这是单机版里没有对应的。

3rd level: key-value pairs, 同单机版。

建议
在keys的命名方面可以参考{myappOne}xxxx这种方式,以便将来升级。其实,将来升级的话,我想作者会提供一种工具,将现在的rdb/aof文件 转化成 未来的rdb/aof文件格式。 

在备份与转移方面,我现在也想不出好办法,只能以整体来备份/转移,浪费部分空间。或者每个instance只有一个database, 通过设置参数,来备份/移动instance。 为了弥补,此时可以在一台机器上,运行多个instances. 

基本是我现在的理解,不清楚之处,可以继续讨论哈。




Wenlong










2011/7/4 Tang Daogang <daoga...@gmail.com>
木有了。


2011/7/4 Lu Wenlong <a88...@gmail.com>
可能是繁体字的原因,我重新输入一次了,不好意思哈。


------------------------------------------------------------------------------------------
之前与唐刚讨论过类似的问题,如下(我觉得它们本质是一致的?)

如何把 redis的存储文件A中的数据库 Ai 移到另一台机器上的存储文件B中的Bj数据库中去

我当时的想法是:利用redis-cluster
1. 在redis cluster中,每个node中的hash slot相当于 单机版 redis的database,在cluster中并不支持database 
2. 可以利用redis-trib命令集 来动态地将 node A 的hash slot X 转移到 node B的hash slot 

但是现在cluster还没有发布,我想要找到个好点的办法,现在可以用;以后cluster出来后,也可以很容易的转移过去。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

看下还有没乱码哈?
Wenlong
2011/7/4 刚子 <trus...@163.com>
问题描述清楚了.....不过怎么有乱码,好多地方用????代替了,

在 2011-07-04,"Lu Wenlong" <a88...@gmail.com> 写道:
之前?唐????????,如下(我?得??在????本?一致?)
 
如何把 redis的存储文件A中的数据库 Ai 移到另一台机器上的存储文件B中的Bj数据库中去

我??的想法是:
利用 redis cluster 
1. 在redis cluster中,每?node中的hash slot相?於 ??版redis的database,在cluster中?不支持database 
2. 可以利用redis-trib命令集 ???的?node A 的hash slot X ?移到node B的hash slot 

但是?在cluster???布,我想?是找?好?的?法,?在可以用;??cluster出?後,可以容易?渡?去。


Wenlong
2011/7/4 18602871035 <18602...@163.com>
这篇帖子说了一个方法:set up replication with the new instance as a slave node - then you can switch the new node to master with a single command and do the move with zero downtime.
 
 
 
2011-07-04


发件人: 刚子
发送时间: 2011-07-04  09:08:07
收件人: legerobot
抄送:
主题: redis数据备份转移
当多个网站数据都放在redis数据军库时,怎么对单个网站数据进行备份或者转移到其它地方的redis数据库.
(ps:redis-cli里是利用select xx来选择不同的数据模块也就是不同网站的数据)


收到此邮件是因为您加入了网易邮件列表,点击这里进入列表管理
收到此邮件是因为您加入了网易邮件列表,点击这里进入列表管理



--
?有理想走不?,不面????今天都走不?.
 


收到此邮件是因为您加入了网易邮件列表,点击这里进入列表管理





--
?有理想走不?,不面????今天都走不?.
 


收到此邮件是因为您加入了网易邮件列表,点击这里进入列表管理



--
Nothing is impossible.




--
沒有理想走不遠,不面對現實連今天都走不過.
 


Lu Wenlong

unread,
Jul 4, 2011, 9:02:44 AM7/4/11
to bamb...@googlegroups.com
http://groups.google.com/group/redis-db/browse_thread/thread/4c3d80c7b056b3ef?hl=en#

是最新的讨论,关于类似的问题。
作者的大概意思是,集群肯定不会支持database+select,因为有hash slot + migrate 等更合适的概念; 但单机版是否继续支持,还不确定。

2011/7/4 Lu Wenlong <a88...@gmail.com>



--
沒有理想走不遠,不面對現實連今天都走不過.
 


Reply all
Reply to author
Forward
0 new messages