目录
前言
一、集群的作用
二、集群模式的数据分片
三、集群模式的主从复制模型
四、Redis集群模式
Redis集群部署
开启群集功能
修改所有集群服务的配置文件端口,使其不一致
启动集群
集群测试
前言
1、集群,即 Redis Cluster, 是Redis 3. 0开始引入的分布式存储方案。
2、集群由多个节点(Node) 组成,Redis 的数据分布在这些节点中。
3、集群中的节点分为主节点和从节点;只有主节点负责读写请求和集群信息的维护;从节点只进
行主节点数据和状态信息的复制。
一、集群的作用
①数据分区:数据分区(或称数据分片) 是集群最核心的功能。
集群将数据分散到多个节点,一方面突破了 Redis 单机内存大小的限制,存储容量大大增加;
另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。
Redis 单机内存大小受限问题,在介绍持久化和主从复制时都有提及;
例如,如果单机内存太大,bgsave 和 bgrewriteaof的 fork 操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出。
②高可用:集群支持主从复制和主节点的自动故障转移(与哨兵类似) ;当任一节点发生故障时,集群仍然可以对外提供服务。
二、集群模式的数据分片
1、Redis集群引入了哈希槽的概念
2、Redis集群有 16384 个哈希槽( 编号0-16383)
3、集群的每个节点负责一部分哈希槽
4、每个Key 通过 CRC16校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作
三、集群模式的主从复制模型
<- - -以3个节点组成的集群为例- - ->
节点A 包含0到5460号哈希槽
节点B 包含5461到10922号哈希槽
节点C 包含10923到16383号哈希槽
1、集群中具有A、B、C三个节点,如果节点B失败了,整个集群就会因缺少5461-10922这个范围的槽而不可以用。
2、为每个节点添加一个从节点A1、B1、C1整个集群便有三个Master节点和三个slave节点组成,在节点B失败后,集群选举B1位为主节点继续服务。当B和B1都失败后,集群将不可用。
四、Redis集群模式
Redis集群部署
Redis集群一般需要6个节点,3主3从。
这里使用一个服务器,模拟三主三从
#在当前服务器配置6个redis服务
cd /etc/redis/
mkdir -p /etc/redis/redis-cluster/redis600{1…6}
cd redis-cluster/redis6001
#复制配置文件及程序到目录中
cp /opt/redis-5.0.7/redis.conf ./
cp /opt/redis-5.0.7/src/redis-cli ./
cp /opt/redis-5.0.7/src/redis-server ./
开启群集功能
vim redis.conf
69 #bind 127.0.0.1 #将其注释,即监听所有端口
88 protected-mode no #关闭保护模式
92 port 6001 #为了区分,将端口更改,6个不能相同
136 daemonize yes #开启守护进程
699 appendonly yes #开启AOF持久化
832 cluster-enabled yes #开启集群功能
840 cluster-config-file nodes-6001.conf #群集名称文件设置
846 cluster-node-timeout 15000 #群集超时时间设置
将配置好的文件复制到其余目录中
for i in {2…6};do
cp ./* /etc/redis/redis-cluster/redis600$i
done
修改所有集群服务的配置文件端口,使其不一致
for n in {2..6};do
sed -i '92s/6001/600'$n'/' /etc/redis/redis-cluster/redis600$n/redis.conf
sed -i '840s/6001/600'$n'/' /etc/redis/redis-cluster/redis600$n/redis.conf
done
启动redis节点
#分别进入6个节点,进行服务启动redis-server redis.conf
for m in {1…6};do
cd /etc/redis/redis-cluster/redis600$m/
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
-replicas 1 表示每个主节点有1个从节点
若使用6台服务器,此处节点ip请换为自己真实ip即端口号
集群测试
redis-cli -p 6001 -c
#-c 参数,节点之间可以相互跳转
cluster slots
#查看节点的哈希槽编号范围
cluster keyslot 键名
#查看键的哈希槽编号