目录
Redis 集群是 Redis 提供的分布式解决方案,用于横向扩展,提高系统的性能和可用性。它将数据分片存储在多个节点上,每个节点负责一部分数据。这样可以让 Redis 可以处理更大规模的数据和更高的并发请求。
特点
-
分布式存储:Redis 集群将数据分散存储在多个节点上,每个节点负责存储部分数据。
-
高可用性:集群支持主从复制,每个主节点都有一个或多个从节点,当主节点不可用时,从节点可以自动升级为新的主节点。
-
自动分片:集群可以自动处理数据的分片和迁移,当有节点故障或新节点加入时,集群会自动进行重新分片和数据迁移。
-
负载均衡:客户端连接到集群中的一个节点,集群会根据数据的哈希值将请求分发到正确的节点上,实现负载均衡。
-
数据备份:每个主节点都有一个或多个从节点,从节点负责备份主节点的数据,可以在主节点故障时提供数据恢复。
工作原理
-
槽分配:
- Redis 集群将整个数据集分成 16384 个槽,0~16383。
- 集群中的每个节点都会负责处理一部分槽。
-
节点间通信:
- 集群中的每个节点都会维护一个关于其他节点信息的路由表。
- 当一个节点需要访问另一个节点的数据时,它会使用路由表确定数据所在的节点,并直接与该节点通信。
-
数据分片:
- 当客户端发送写入请求时,集群根据 Key 的哈希值将数据分配到对应的槽中。
- 每个节点负责处理一部分槽中的数据。
-
故障转移:
- 当一个主节点失效时,集群会从该主节点的从节点中选举一个新的主节点。
- 如果从节点数量不足,集群会在其他节点上创建从节点。
- 故障转移过程是自动的,不需要手动干预。
-
新节点加入:
- 当一个新的节点加入集群时,集群会将部分槽从已有节点迁移到新节点上,实现数据的均衡分布。
配置步骤
创建redis600{1..6}目录
mkdir -p redis-cluster/redis600{1..6}
for循环复制6个目录的配置文件
for i in {1..6}
do
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$i
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis600$i
done
修改集群配置文件/etc/redis/redis-cluster/redis600{1..6}/redis.conf
vim /etc/redis/redis-cluster/redis6001/redis.conf
#bind 127.0.0.1
protected-mode no
port 6001
daemonize yes
cluster-enabled yes
cluster-config-file nodes-6001.conf
cluster-node-timeout 15000
appendonly yes
-
protected-mode no
:关闭保护模式,允许远程访问 Redis。 -
port 6001
:设置 Redis 服务器监听的端口为6001
。 -
daemonize yes
:以守护进程(后台运行)方式启动 Redis 服务器。 -
cluster-enabled yes
:开启集群模式,允许这个节点参与 Redis 集群。 -
cluster-config-file nodes-6001.conf
:指定保存集群节点信息的配置文件名为nodes-6001.conf
,这个文件会记录节点的 ID、地址和端口信息等。 -
cluster-node-timeout 15000
:设置节点间通信的超时时间为 15000 毫秒(15 秒)。 -
appendonly yes
:开启 AOF 持久化模式,将写操作追加到文件末尾,以保证数据持久性。 -
#bind 127.0.0.1
:这行被注释掉了,表示 Redis 将会监听所有网络接口。
注意6个配置文件中的port 6001和cluster-config-file nodes-6001.conf都要修改
启动6个redis节点
for d in {1..6}
do
cd /etc/redis/redis-cluster/redis600$d
redis-server redis.conf
done
启动集群
redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1
查看集群状态
redis-cli -p 6001 -c
127.0.0.1:6001> cluster slots