十二、Redis集群操作配置详解(超详细图示辅助)
目录
- 十二、Redis集群操作配置详解(超详细图示辅助)
- 1、为何需要集群-高可用性
- 2、集群概况(及其搭建)
- 3、Redis集群的运用
- 4、Redis集群故障恢复
- 5、Redis集群的Jedis开发(用Java程序连接Redis并开启集群)
- 6、Redis集群的优劣势
- 7、补充:
- 8、结尾:
1、为何需要集群-高可用性
为何需要集群-高可用性:
- 生产环境的实际需求与问题:
- 当容量不足时,redis需要进行扩容操作。
- 面对并发写操作,redis需要合理分担压力。
- 在主从模式下,若主机出现宕机情况,会导致ip地址发生改变,应用程序中需要相应修改主机地址、端口等配置信息。
- 传统解决办法:借助代理主机来达成
上图解图:
- 客户端请求首先到达代理服务器。
- 由代理服务器将请求转发至对应的业务处理器。
- 为保障高可用,代理服务、A服务、B服务、C服务都需要搭建主从结构(至少是一主一从,这样就需要搭建至少8台服务器)。
- 该方案的弊端是:成本较高,维护起来较为困难,如果是一主多从的情况,成本会更高。
redis3.0提供的解决方案:无中心化集群配置

- 各个Redis服务依旧采用主从结构。
- 各个Redis服务相互连通,任意一台服务器均可作为请求入口 。
- 由于各个Redis服务器是连通的,能够进行请求转发。
- 这种方式属于无中心化集群配置,可见,仅需6台服务器就能搞定。
- 无中心化集群配置还会依据key值计算slot,把数据分散到不同主机,从而缓解单个主机的存取压力。
- Redis推荐采用无中心化集群配置。
- 在实际生产环境中,各个Redis服务器应部署在不同机器上(防止机器宕机导致主从复制失效)。
2、集群概况(及其搭建)
- Redis集群实现了对Redis的水平扩容,即启动N个Redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N。
- Redis集群通过分区(partition)来提供一定程度的可用性(availability),即便集群中有一部分节点失效或无法通讯,集群仍可继续处理命令请求。
Redis集群搭建:实操演示

1、redis.conf
配置修改
cluster-enabled yes 开启集群模式
cluster-config-file nodes-6379.conf 设定节点配置文件名
cluster-node-timeout 15000 设定节点失联时间,超过该时间(毫秒),集群自动进行主从切换
2、修改/rainbowsea/redis6379.conf
文件
include /rainbowsea/redis.conf
pidfile "/var/run/redis_6379.pid"
port 6379
dbfilename "dump6379.rdb"
masterauth rainbowsea
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000


[root@localhost rainbowsea]# cp redis6379.conf redis6380.conf
[root@localhost rainbowsea]# cp redis6379.conf redis6381.conf
[root@localhost rainbowsea]# cp redis6379.conf redis6389.conf
[root@localhost rainbowsea]# cp redis6379.conf redis6390.conf
[root@localhost rainbowsea]# cp redis6379.conf redis6391.conf
[root@localhost rainbowsea]#


3、用查找替换修改另外5个文件
替换指令 :%s/6379/6380
其他几个文件按此操作即可,操作时要小心,最后建议再检查一遍
![]()
![]()
![]()
![]()

所有文件都要添加masterauth rainbowsea
(若Redis设置了密码则需配置,无密码则无需)。
4、启动6个Redis服务
[root@localhost rainbowsea]# redis-server /rainbowsea/redis6379.conf
[root@localhost rainbowsea]# redis-server /rainbowsea/redis6380.conf
[root@localhost rainbowsea]# redis-server /rainbowsea/redis6381.conf
[root@localhost rainbowsea]# redis-server /rainbowsea/redis6389.conf
[root@localhost rainbowsea]# redis-server /rainbowsea/redis6390.conf
[root@localhost rainbowsea]# redis-server /rainbowsea/redis6391.conf
[root@localhost rainbowsea]# ps -aux | grep redis


5、将六个节点组成一个集群


进入对应路径后,将六个节点组成集群的指令:
若Redis未配置密码,指令为
redis-cli --cluster create --cluster-replicas 1 192.168.76.147:6379 192.168.76.147:6380 192.168.76.147:6381 192.168.76.147:6389 192.168.76.147:6390 192.168.76.147:6391
若Redis配置了密码,指令为
redis-cli --cluster create -a rainbowsea --cluster-replicas 1 192.168.76.147:6379 192.168.76.147:6380 192.168.76.147:6381 192.168.76.147:6389 192.168.76.147:6390 192.168.76.147:6391
注意事项与细节
- 组合之前,确保所有要使用的端口的Redis服务器均已启动,且在root目录下(此处为root配置)
nodes-xxxx.conf
文件正常生成。 - 此时不能用127.0.0.1,需使用真实IP地址(即连接Linux的地址,可通过
ifconfig
指令查询),真实生产环境中IP均为独立的。 replicas 1
采用最简单的方式配置集群,一台主机、一台从机,正好三组。- 搭建集群若未成功,关闭
sentinel
进程后再试。 - 分析主从对应关系。


- 分析主从对应关系:如下


6、集群方式登录
指令: redis-cli -c -p 6379
指令: cluster nodes 命令查看集群信息,主从对应关系,重点看标注颜色
[root@localhost src]# redis-cli -c -p 6379
127.0.0.1:6379> auth rainbowsea
127.0.0.1:6379> cluster nodes


注意事项与细节
[root@localhost src]# redis-cli -c -p 6379

- 一个集群至少要有三个主节点。
- 选项
--cluster-replicas 1
表示我们期望为集群中的每个主节点创建一个从节点。 - 分配原则: 尽量让主服务器和从服务器各自运行在不同IP地址(机器)上,防止机器故障导致主从机制失效,保障高可用性。
3、Redis集群的运用
什么是 slots
Redis集群启动后,会看到如下提示:
- 一个Redis集群包含了
16384
个插槽(hash slot) ,编号从0-16383
,Redis中的每个键都属于这16384个插槽的其中一个。注意:这里虽然只有16384个插槽,但并非只能插入16384个键,多个不同的键可插入到同一个插槽中,并非一个插槽对应一个键 。 - 集群使用公式
CRC16(key) % 16384
来计算键key属于哪个槽,其中CRC16(key)语句用于计算键key的CRC16校验和

- 集群中的每个节点负责处理一部分插槽。举个例子:如果一个集群有主节点,其中
- 节点A负责处理
0号 ~ 5460号
插槽- 节点B负责处理
5461号 ~ 10922号
插槽- 节点C负责处理
10923号 ~ 16383号
插槽
在集群中录入值
- 在Redis每次录入、查询键值时,redis都会计算出该key应送往的插槽,若不是该客户端对应服务器的插槽,redis会告知前往的Redis实例地址和端口。
- Redis-cli客户端提供了
-c
参数实现自动重定向。 - 如
redis-cli -c -p 6379
登入后
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...