redis集群

发布时间:2018-11-15  栏目:NoSQL  评论:0 Comments

redis集群是起那么些单redis一起干活,那么就用这个集群不是那好挂掉,所以啊,理论及虽应该被集众多中之每个节点至少一个备用的redis服务。这个备用的redis称为从节点(slave)。

一、why

Redis 的分片负责着简单只基本点对象:
1.许用群电脑的内存总和来支撑再次充分之数据库。没有分片,你虽被局限为单机能支撑之内存容量。
2.同意伸缩计算能力及大半按或多服务器,伸缩网络带来富顶几近服务器或多网络适配器。

Redis Cluster功能特点如下:
1)所有的节点相互连接
2)集群消息通信通过集群总线通信,,集群总线端口大小也客户端服务端口+10000,这个10000凡是固定值
3)节点和节点内通过二进制协议进行通信
4)客户端和集群节点内通信和平常一样,通过文件协议进行
5)集群节点不见面代理查询
6)数据据Slot存储分布在差不多个Redis实例上
7)集群节点挂掉会活动故障转移
8)可以相对平缓扩/缩容节点

1、集群是如何判定是否生有节点挂掉

二、what

redis集群由多独Redis实例组成的完全,数据据Slot存储分布于差不多个Redis实例上,通过Gossip协议来拓展节点内通信

Redis集群中之相继节点通过Gossip协议来交换各自关于不同节点的状态信息,其中Gossip协议由MEET、PING、PONG三种植信息实现,这三种信息的正文都是因为个别单clusterMsgDataGossip结构组成

Redis
Cluster
是Redis的集群实现,内置数据自动分片机制,集群中将具有的key映射到16384单Slot中,集众多中之每个Redis
Instance负责中的如出一辙有的的Slot的读写。集群客户端连接集众多中管一Redis
Instance即可发送命令,当Redis
Instance收到好不负之Slot的求时,会拿肩负请求Key所在Slot的Redis
Instance地址返回给客户端,客户端收到后自动将本请求又作朝这个地点,对外表透明。一个Key到底属于哪个Slot由CRC16(key)%16384决定。

有关负载均衡,集群的Redis
Instance之间可迁移数据,以Slot为单位,但切莫是全自动的,需要外部命令触发。

至于集群成员管理,集群的节点(Redis
Instance)和节点内少少定期交换集群内节点信息同时更新,从发送节点的角度看,这些消息包括:集群内出什么样节点,IP和PORT是啊,节点名字是呀,节点的状态(比如OK,PFAIL,FAIL,后面详述)是啊,包括节点角色(master
或者 slave)等。

关于可用性,集群由N组主从Redis Instance组成。主好没有打,但是从未从
意味着主宕机后主负责的Slot读写服务不可用。一个兆好发差不多个由,主宕机时,某个从会叫升级为主,具体哪个从为提升为主,协议类似于Raft,参见这里。如何检测主宕机?Redis
Cluster采用quorum+心跳的体制。从节点的角度看,节点会定期给另外所有的节点发送Ping,cluster-node-timeout(可安排,秒级)时间外无接到对方的复,则单方面认为对端节点宕机,将拖欠节点标为PFAIL状态。通过节点内交换信息搜集至quorum个节点都以为这个节点吧PFAIL,则以拖欠节点标记为FAIL,并且以那发送给另外兼具节点,其他有节点收到后立即认为该节点宕机。从这里可以看到,主宕机后,至少cluster-node-timeout时间外该主所负责之Slot的读写服务不可用。

  首先使说的凡,每一个节点都满怀来是集群拥有主节点以及由节点的消息。它们之间通过互动的ping-pong判断是否节点可以连续达。如果生一半上述之节点去ping一个节点的下没回,集群就认为这节点宕机了,然后去老是它的备用节点。

三、how

http://www.jianshu.com/p/f18d3376c848

 

2、集群进入fail状态的必要条件

A、某个主节点和富有由节点不折不扣挂掉,我们集群就进faill状态。

B、如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态.

 C、如果集群任意master挂掉,且当前master没有slave.集群进入fail状态

 

3、redis的投票机制

实际原理如下图所示:

    图片 1

投票过程是集聚众多被所有master参与,如果半数以上master节点与master节点通信超时(cluster-node-timeout),认为目前master节点挂掉。

   
选举的依据各个是:网络连接正常->5秒内回升了INFO命令->10*down-after-milliseconds内和主连接了的->从服务器优先级->复制偏移量->运行id较小的。选出后经过slaveif
no ont将该由劳动器升为新主服务器。

    通过slaveof ip port命令让其它从服务器复制该信主服务器。

   
最后当旧主重新连接后将那个成新主的由服务器。注意要客户端与旧主服务器分隔在并,写副的多寡以平复后由原主会复制新主的数量会造成数丢失。

4、集众多中的主从复制
     
集众多中之每个节点都生1独及N个复制品,其中一个为主节点,其余的啊从节点,如果主节点下线了,集群就见面管这主节点的一个起节点设置也新的主节点继续工作,这样集群就不见面因一个主节点之底线而望洋兴叹正常干活。
注意:
1、如果有一个主节点和外拥有的从节点都下线的说话,redis集群就会见终止工作了。redis集群不保证数据的高一致性,在一定的气象下,redis集群会丢失已经给实践了之形容命令。
2、使用异步复制(asynchronous replication)是redis
集群可能会见掉写命令的里边一个缘故,有时候是因为网络由,如果网络断开时间最丰富,redis集群就见面启用新的主节点,之前发给主节点的数量就是会丢掉。

留下评论

网站地图xml地图