redis(8)集群简介

一、集群

互联网每天都会产生大量的数据,单实例已经不能满足需求。但是如果依赖于硬件成本的提升,那就不是所有人能够负担的起的。

集群这个时候出现,一定程度上解决了这个问题。它通过互联网,将多个单实例连接在一起,对外隐藏实现细节,这样在用户看来跟单实例是一样的。你不需要去购买昂贵的服务器,甚至于只需要通过多台廉价的服务器就可以满足需要。

二、redis集群

1、简介

在redis3.0之前是它的无集群时代,大家只能够通过一些中间件来完成集群。而3.0开始,redis内部集群的实现开始逐渐替代很多中间件。redis集群主要有以下两个特点:

1)数据会自动地被分布到集群节点上;

2)它以主从模式提高集群的高可用性。

2、TCP端口

每一个集群节点都有两个TCP端口需要开启:

1)用于服务客户端的端口(通常是6379)

2)用于集群节点的通信端口(服务端口加上10000,如:16379)

你需要确保防火墙没有关闭这两个端口,否则集群将无法通信从而失效。

3、数据分片

redis并没有采用一致性哈希算法,而是使用哈希槽(slot)来包含数据,一个哈希槽可以存放很多数据。

在redis集群里,总共有16384个哈希槽,每一个key都会根据CRC16算法获得一个值,然后把这个值对16384求余,那么也就是说,每一个key都会落在[0,16384]这个区间当中。而这16384个哈希槽将被分配到集群的节点当中,根据计算出的值寻找落在哪个节点,并找到该节点的对应哈希槽,进行操作。

4、主从模型

redis集群的主节点如果挂掉,那么集群就失效了。为了让集群高可用,redis实现了主从模式。

例如:

主节点是A、B、C那么我们将设立从节点A1、B1、C1。主节点A挂掉,那么从节点A1将会被提升为主节点,以保证集群可用。当然,如果从节点也挂掉,或者一半的主节点挂掉了,那么集群也就直接失效。

5、一致性

redis集群并不是强一致性,例如:

1)客户端向主节点A写入数据

2)主节点A写入完成并返回OK

3)主节点A再向从节点A1,A2...写入数据。

我们看到,主节点A写入数据就立马返回了,而不是同步对A1,A2...写入数据以后再返回。那么如果主节点A写入完毕,这时主节点A挂掉呢?从节点A1或者A2会被提升为主节点,而从节点还未写入数据,也就产生了数据不一致的问题。当然,还有很多其它情况会产生数据不一致,这里只是简单举个例子。

6、集群参数配置

在开始构建集群之前,我们先了解一些redis.conf的参数配置:

1)cluster-enabled<yes/no>: 这个配置表示当前的redis实例是否开启集群支持,如果是那么配置yes如果你希望它保持单实例那么配置no;

2) cluster-config-file<filename>: 注意:你看到这里filename是可配置的,但事实上这里配置的这个文件是用户永远无法接触到的,也就是说你无法去编辑这个文件。而是当程序启动的时候,由redis集群节点自动持久化生成并维护的。这个文件里面包含了一些其它节点的信息,状态,变量等。

3)cluster-node-timeout<milliseconds>: 这里配置的是集群节点的超时时间,意思就是当该节点被判断为不可达(无法通信)的时间超过这个最大时间限制,那么将会被判定为该节点失效。

4)cluster-slave-validity-factor<factor>: 这里配置从节点的有效因子,如果设置为0,那么从节点将会不断尝试替换主节点。如果值为正数,那么不可达的超时时间将乘以这个有效因子来计算主节点什么时候判定为失效并替换主节点。如果当前节点是从节点,那么会反过来,也就是说超过该计算结果的话,当前节点将不会尝试替换主节点。

5)cluster-migration-barrier<count>: 这里配置最小的从节点数量,如果该主节点没有任何从节点,那么会从其它主节点那移一个过来作为当前主节点的从节点。

6)cluster-require-full-coverage<yes/no>: 配置集群的可用情况,例如:当一个key所在的节点挂掉,并且没有从节点可用的情况下,那么意味着该集群不完整,如果配置为yes集群将不可用。如果配置为no,那么意味着即使集群有部分不完整,也需要处理可用的那些key。redis默认设置为yes,也就是集群需要完整可用。

详细内容参考官网:https://redis.io/topics/cluster-tutorial

原文地址:https://www.cnblogs.com/lay2017/p/9275122.html

时间: 2024-07-31 06:44:06

redis(8)集群简介的相关文章

Redis Cluster搭建高可用Redis服务器集群

原文:Redis Cluster搭建高可用Redis服务器集群 一.Redis Cluster集群简介 Redis Cluster是Redis官方提供的分布式解决方案,在3.0版本后推出的,有效地解决了Redis分布式的需求,当一个节点挂了可以快速的切换到另一个节点,当遇到单机内存.并发等瓶颈时,可以采用分布式方案要解决问题. 二.集群原理 Redis Cluster架构图 Redis Cluster集群采用了P2P的模式,完全去中心化,Redis把所有的Key分成了16384个slot,每个R

Redis Cluster集群搭建与应用

1.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper,但从redis 3.0之后版本支持redis-cluster集群,redis-cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接.其redis-cluster架构图如下: 其结构特点 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. 节点的fail是通过集群中超过半数的节点检测失效时才生效. 客户端与redis节点直

Redis(五)、Redis数据库集群相关

Redis数据库集群 第1章 集群简介 Redis 集群是一个分布式(distributed).容错(fault-tolerant)的 Redis 实现, 集群可以使用的功能是普通单机 Redis 所能使用的功能的一个子集(subset),是一个可以在多个 Redis 节点之间进行数据共享的设施(installation). Redis 集群中不存在中心(central)节点或者代理(proxy)节点, 集群的其中一个主要设计目标是达到线性可扩展性(linear scalability). Re

Redis Cluster 集群使用(3)

简介 Redis3.0版本之前,可以通过Redis Sentinel(哨兵)来实现高可用(HA),从3.0版本之后,官方推出了Redis Cluster,它的主要用途是实现数据分片(Data Sharding),不过同样可以实现HA,是官方当前推荐的方案.在Redis Sentinel模式中,每个节点需要保存全量数据,冗余比较多,而在Redis Cluster模式中,每个分片只需要保存一部分的数据,对于内存数据库来说,还是要尽量的减少冗余.在数据量太大的情况下,故障恢复需要较长时间. Redis

redis搭建集群并用TreeSoft管理

前言:redis作为一款高效的NOSQL数据库已经深入贯彻和落实到我们的日常开发代码中,作为缓存.时间控制.数据仓库.队列等使用方法层出不穷,简直是开写代码.居家旅行之必备良药.曾经,我们的项目都是单体的,直到后来逐渐演变为微服务-- 一个将我们的工程解耦成多个工程的体系.然后随着我们项目的访问量越来越高,后台的吞吐量也越来越大.如果我们还采用的单体redis,性能很容易形成瓶颈.如何突破单体redis带来的功能受限?如何突破性能带来的问题?这时我们就可以考虑横向扩展,搭建redis集群.正所谓

Redis Cluster 集群数据分片机制

复制粘贴自: https://www.e-learn.cn/content/redis/2344485, 点击链接访问原文 仅供个人学习参考之用, 高级开发不得不懂的Redis Cluster数据分片机制 Redis 集群简介 Redis Cluster 是 Redis 的分布式解决方案,在 3.0 版本正式推出,有效地解决了 Redis 分布式方面的需求. Redis Cluster 一般由多个节点组成,节点数量至少为 6 个才能保证组成完整高可用的集群,其中三个为主节点,三个为从节点.三个主

Redis Cluster集群部署搭建

在Oracle的路上走了许多年,换换感觉,尝试一下新的知识,也是一个不错的感觉.Redis,一个超轻量化的内存数据库,只做一小块数据库功能实现,却非常优秀的一个产品.今天,就分享一下安装Redis集群的过程. 搭建redis集群,建议至少需要准备3台服务器,共搭建6个节点,3个master,3个slave,并且要求3个master节点不能全部跑到同一台服务器上,保证节点安全,3台服务器的配置相同,使用redistest账号搭建,对应的端口是7000/7001/7002端口 我的集群分配如下,每个

java:redis(redis的集群配置)

服务器集群作用: 服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就象是只有一个服务器 集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行.一旦在服务器上安装并运行了群集服务,该服务器即可加入群集.群集化操作可以减少单点故障数量,并且实现了群集化资源的高可用性. redis的集群配置: (.编辑network文件 HOSTNAME=redis(自己定义的hostname) vi /etc/sysc

redis cluster 集群重启关闭

找遍了redis cluster官方文档,没发现有关集群重启和关闭的方法.为啥会没有呢,猜测redis cluster至少要三个节点才能运行,三台同时挂掉的可能性比较小,只要不同时挂掉,挂掉的机器修复后在加入集群,集群都能良好的运作,万一同时挂掉,数据又没有备份的话,就有大麻烦了. redis cluster集群中的节点基本上都对等的,没有管理节点.如果要让所有节点都关闭,只能关闭进程了# pkill -9 redis 把所有集群都关闭,然后在重新启动,会报以下错误 # redis-trib.r