Redis复制和redis分片(集群)的区别
Posted
技术标签:
【中文标题】Redis复制和redis分片(集群)的区别【英文标题】:Redis replication and redis sharding (cluster) difference 【发布时间】:2011-01-09 12:19:27 【问题描述】:-
有人知道redis复制和redis分片的区别吗?
它们有什么用? Redis 将数据存储在内存中,这对复制/分片有何影响?
是否可以同时使用它们?
【问题讨论】:
【参考方案1】:分片几乎是复制的对立面,尽管它们是正交的概念并且可以很好地协同工作。
分片,也称为分区,是通过键将数据拆分;而复制,也称为镜像,就是复制所有数据。
分片有助于提高性能,减少任何一种资源的命中和内存负载。复制对于获得高可用性读取很有用。如果从多个副本读取,也会降低所有资源的命中率,但所有资源的内存需求保持不变。应该注意的是,虽然您可以写入从属设备,但复制只是主->从属。所以你不能以这种方式扩展写入。
假设您有以下元组:[1:Apple]、[2:Banana]、[3:Cherry]、[4:Durian],我们有两台机器 A 和 B。使用 Sharding,我们可能会存储密钥 2 ,4 在机器 A 上;和机器 B 上的密钥 1,3。通过复制,我们将密钥 1,2,3,4 存储在机器 A 上,将 1,2,3,4 存储在机器 B 上。
分片通常是通过对键执行一致的哈希来实现的。上面的例子是用下面的哈希函数 h(x)return x%2==0?A:B 实现的。
为了结合这些概念,我们可能会复制每个分片。在上述情况下,机器A的所有数据(2,4)都可以复制到机器C上,机器B的所有数据(1,3)都可以复制到机器D上。
任何键值对存储(Redis 只是其中一个示例)都支持分片,但某些交叉键功能将不再起作用。 Redis 支持开箱即用的复制。
【讨论】:
很好的答案(一般而言),但并没有真正回答这个问题:) 我认为这个答案很好地回答了提问者的问题。大大简化,但正确的解释。 +1 @Alex 为了 redis 复制的高可用性,哨兵也应该需要配置对吗?否则复制将无法在故障转移中工作 redis cluster 和 redis sharding 是一回事吗?【参考方案2】:简单来说,这两个概念的根本区别在于,Sharding 用于扩展 Writes,而 Replication 用于扩展 Reads。正如 Alex 已经提到的,复制也是实现 HA 的解决方案之一。
是的,如果您考虑如何在集群中的节点之间复制分片,它们通常会一起使用。
关于您的第三个问题,最好使用 Redis Append Only File (AOF),而不是 RAM-flush 选项。只需很小的成本(就写入速度而言),您的写入可靠性就会提高很多。它很像 mysql 二进制日志。 1 fsync/second 是推荐使用的选项。
【讨论】:
【参考方案3】:同时使用复制和分片
如果您想要高可用性和更高的性能,可以同时使用复制和分片来提供此功能。使用分片,您将拥有两个或更多具有基于键的特定数据的实例。然后,您可以复制这些实例中的每一个以生成一个既可复制又可分片的数据库,这将同时提供可靠性和速度!
【讨论】:
以上是关于Redis复制和redis分片(集群)的区别的主要内容,如果未能解决你的问题,请参考以下文章