Redis集群
Redis的集群是一种允许多个Redis节点在网络上互联并协作的技术,它为处理大规模数据提供了更高的性能和可扩展性,同时具有数据高可用性和故障容忍性。
以下是Redis集群的一些主要特性:
数据分片
在Redis集群中,数据会被分成多个部分,每个部分在不同的Redis节点上进行存储。这就是所谓的数据分片或分区。分片可以有效地分散存储和处理的负载,并且可以在新增节点时进行动态地、无中断地数据重新分片。高可用性与故障转移
Redis集群具有很高的可用性,因为每个节点都可以有零个或多个从节点。如果主节点出现故障,系统可以自动在从节点中选择一个进行提升,作为新的主节点,以此来继续处理命令。这种能力使得Redis集群可以在面对节点故障时,仍保持存储和处理能力。读写分离
在Redis集群中,读操作既可以在主节点上进行,也可以在从节点上进行。这样的策略既可以实现负载均衡,也能确保读操作的即时性和性能。为了使Redis集群能顺利工作,需要满足一定的网络条件。例如,Redis集群需要相对稳定并且延迟较低的网络环境,所有的节点必须能够彼此进行通信,而且集群的大多数节点(半数以上)需要正常工作才能保持集群的读写能力。
需要注意的是,虽然Redis集群提供了数据分片和高可用性等功能,但是它也引入了一些复杂性,例如数据一致性和数据迁移等问题。因此,使用Redis集群需要在性能、可用性与复杂性之间进行综合考虑。
下载windows版本redis5.0
下载地址:Releases · tporadowski/redis · GitHub
解压
解压之后,复制六份到不同的文件夹,命名为7001,7002,7003,7004,7005,7006
复制六份
配置文件
修改6个配置文件redis.windows-service.conf,端口号和文件名不能冲突
# 端口 (注意:改为每个文件夹对应的端口,分别为7001、7002、7003、7004、7005、7006)
port 7001
# 日志 (说明:不想给空就输入绝对地址)
logfile "server_log_7001.txt"
# 允许创建集群
appendonly yes
cluster-enabled yes
# 节点配置文件,分别为7001、7002、7003、7004、7005、7006
cluster-config-file nodes-7001.conf
# 连接超时时间
cluster-node-timeout 15000
# 允许远程
protected-mode no
启动实例
创建6个CMD控制台窗口(以管理员身份),分别进入六个Redis文件夹路径下,执行启动命令
D:
cd D:\RedisCluster5.0\7001
redis-server.exe redis.windows-service.conf
启动后窗口不要关闭 !
构建集群
随便进入一个Redis文件夹下,打开CMD窗口,执行命令
redis-cli.exe --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1
提示输入,输入yes
创建成功后,连接集群
redis-cli.exe -h 127.0.0.1 -p 7001 -c
注意:这里命令最后必须有 -c,这是以集群模式连接,否则报错
查看集群信息
cluster info
查看集群状态
cluster nodes
搭建完成!
重点
- redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群
- redis集群采用P2P模式,是完全去中心化的,不存在中心节点或者代理节点
- redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制),每个节点都是一个redis实例
- 如何判断某个节点是否挂了->为了实现集群的高可用,即判断节点是否健康(能否正常使用),redis-cluster有这么一个投票容错机制:如果集群中超过半数的节点投票认为某个节点挂了,那么这个节点就挂了
- 如何判断集群是否挂了-> 如果集群中任意一个节点挂了,而且该节点没有从节点(备份节点),那么这个集群就挂了。这是判断集群是否挂了的方法
-
那么为什么任意一个节点挂了(没有从节点)这个集群就挂了呢? -> 因为集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384[0-16383]个slot上,或者说把这些slot均等的分配给了各个节点。当需要在Redis集群存放一个数据(key-value)时,redis会先对这个key进行crc16算法,然后得到一个结果。再把这个结果对16384进行求余,这个余数会对应[0-16383]其中一个槽,进而决定key-value存储到哪个节点中。所以一旦某个节点挂了,该节点对应的slot就无法使用,那么就会导致集群无法正常工作。
-
每个Redis集群理论上最多可以有16384个节点
-
Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。
-
要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。