Redis集群

来源:互联网 发布:node.js和php哪个简单 编辑:程序博客网 时间:2024/06/04 21:48

Redis集群的特性:

1、所有的redis节点彼此互联(通过PING-PONG机制),内部使用二进制协议优化传输速度和带宽。

2、某个节点的fail失效,是通过集群中超过半数的节点检测失效时才真正失效。

3、客户端与redis节点直连,不需要中间代理层。客户端不需要连接集群中所有节点,连接集群中任一可用节点即可。

4、redis-cluster把所有的物理节点映射到[ 0 - 16383 ]slot上,cluster负责维护   node <--> slot <--> value

Redis内置了16384个哈希槽(插槽)


例如:在集群中执行 set  a  a 时,

1、对key(a)进行crc16算法的计算,得出一个数字。

2、对该数字进行16384的求模,得到0~16383之间的数字,假设得到 6666(插槽)。

3、在集群中获取这个数字是属于哪个节点,假设确定到 node6。

4、跳转到node6节点,执行 set  a  a。


在集群中执行 get  a  时,

1、对key(a)进行crc16算法,得到一个数字。

2、通过该数字,对16384求模,得到 6666(插槽)。

3、定位 6666 是属于 node6节点的。

4、跳转到 node6,执行get  a。



Redis-Cluster投票:

容错
1、投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超时(cluster-node-timeout),
认为当前节点挂掉。

2、整个集群不可用(cluster_state:fail):

a、集群的slot映射[ 0 - 16383 ]不完整时。
如果集群中任一master挂掉,且当前master没有slave,集群就会进入fail状态。

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


master为主节点
slave为从节点
从节点是主节点的复制版。
为了保证高可用,在主节点挂掉时,可从从节点中存取数据。


Redis集群:

为了保证投票,需要至少3个主节点(master)。
每个主节点,都需要至少一个从节点(slave),因此最少3个从节点。

因此,最少需要6台redis服务器。



……



Redis集群连接:

Redis的单机版默认是16个数据库。但Redis-Cluster集群版,只有一个数据库。

1、使用redis命令行进行客户端连接:
./redis-cli -h 192.168.xx.xx -p xxxx -c。注:加上 -c 参数,节点之间就可以跳转。

2、图形化界面:
弊端:不能进行节点间的跳转,放弃……

3、redis的Java客户端连接:
JedisCluster的API……






待续……