zoukankan      html  css  js  c++  java
  • Linux 下redis 集群搭建练习

    Redis集群 学习参考:
    https://blog.csdn.net/jeffleo/article/details/54848428
    https://my.oschina.net/iyinghui/blog/830011

    redis集群简介

    redis集群在启动的时候就自动在多个节点间分好片。同时提供了分片之间的可用性:当一部分redis节点故障或网络中断,
    集群也能继续工作。但是,当大面积的节点故障或网络中断(比如大部分的主节点都不可用了),集群就不能使用。
    所以,从实用性的角度,Redis集群提供以下功能:
      ● 自动把数据切分到多个redis节点中
      ● 当一部分节点挂了或不可达,集群依然能继续工作

    Redis集群数据的分片

    Redis集群不是使用一致性哈希,而是使用哈希槽。整个redis集群有16384个哈希槽,决定一个key应该分配到那个槽的算
    法是:计算该key的CRC16结果再模16834。
    集群中的每个节点负责一部分哈希槽,比如集群中有3个节点,则:
      ● 节点A存储的哈希槽范围是:0 – 5500
      ● 节点B存储的哈希槽范围是:5501 – 11000
      ● 节点C存储的哈希槽范围是:11001 – 16384
    这样的分布方式方便节点的添加和删除。比如,需要新增一个节点D,只需要把A、B、C中的部分哈希槽数据移到D节点。
    同样,如果希望在集群中删除A节点,只需要把A节点的哈希槽的数据移到B和C节点,当A节点的数据全部被移走后,A
    节点就可以完全从集群中删除。
    因为把哈希槽从一个节点移到另一个节点是不需要停机的,所以,增加或删除节点,或更改节点上的哈希槽,也是不需要停
    机的。
    如果多个key都属于一个哈希槽,集群支持通过一个命令(或事务, 或lua脚本)同时操作这些key。通过“哈希标签”的概
    念,用户可以让多个key分配到同一个哈希槽。哈希标签在集群详细文档中有描述,这里做个简单介绍:如果key含有大括
    号”{}”,则只有大括号中的字符串会参与哈希,比如”this{foo}”和”another{foo}”这2个key会分配到同一个哈希槽,
    所以可以在一个命令中同时操作他们。

    Redis集群的主从模式

    为了保证在部分节点故障或网络不通时集群依然能正常工作,集群使用了主从模型,每个哈希槽有一(主节点)到N个副本
    (N-1个从节点)。在我们刚才的集群例子中,有A,B,C三个节点,如果B节点故障集群就不能正常工作了,因为B节点中的
    哈希槽数据没法操作。但是,如果我们给每一个节点都增加一个从节点,就变成了:A,B,C三个节点是主节点,A1, B1, 
    C1 分别是他们的从节点,当B节点宕机时,我们的集群也能正常运作。B1节点是B节点的副本,如果B节点故障,集群会
    提升B1为主节点,从而让集群继续正常工作。但是,如果B和B1同时故障,集群就不能继续工作了。
    Redis集群的一致性保证
    Redis集群不能保证强一致性。一些已经向客户端确认写成功的操作,会在某些不确定的情况下丢失。
    产生写操作丢失的第一个原因,是因为主从节点之间使用了异步的方式来同步数据。
    一个写操作是这样一个流程:
    1)客户端向主节点B发起写的操作2)主节点B回应客户端写操作成功3)主节点B向它的从节点B1,B2,B3同步该写操作
    从上面的流程可以看出来,主节点B并没有等从节点B1,B2,B3写完之后再回复客户端这次操作的结果。所以,如果主
    节点B在通知客户端写操作成功之后,但同步给从节点之前,主节点B故障了,其中一个没有收到该写操作的从节点会
    晋升成主节点,该写操作就这样永远丢失了。
    就像传统的数据库,在不涉及到分布式的情况下,它每秒写回磁盘。为了提高一致性,可以在写盘完成之后再回复客
    户端,但这样就要损失性能。这种方式就等于Redis集群使用同步复制的方式。
    基本上,在性能和一致性之间,需要一个权衡。


  • 相关阅读:
    17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Based Replication
    17.1.2 Replication Formats
    Setting the Master Configuration on the Slave
    17.1.1.9 Introducing Additional Slaves to an Existing Replication Environment
    17.1.1.8 Setting Up Replication with Existing Data
    17.1.1.7 Setting Up Replication with New Master and Slaves
    17.1.1.6 Creating a Data Snapshot Using Raw Data Files
    列出display的值,并说明它们的作用
    CSS设置DIV居中
    CSS选择符有哪些?哪些属性可以继承?优先级算法如何计算?
  • 原文地址:https://www.cnblogs.com/HDMaxfun/p/9470658.html
Copyright © 2011-2022 走看看