十二. Redis 集群操作配置(超详细配图,配截图详细说明)
十二. Redis 集群操作配置(超详细配图,配截图详细说明)
@
目录
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 集群搭建:实操演示:

redis.conf配置修改
cluster-enabled yes 打开集群模式
cluster-config-file nodes-6379.conf 设定节点配置文件名
cluster-node-timeout 15000 设定节点失联时间,超过该时间(毫秒),集群自动进行主 从切换
vi /rainbowsea/redis6379.conf, 删除不必要的内容 增加 cluster 配置, 文件最后内容,如图
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]#


- 使用查找替换修改另外 5 个文件


换指令 :%s/6379/6380
其它几个文件以此操作即可, 操作的时候,一定要小心, 最后建议再检查一下

所有的都要加上这个 masterauth rainbowsea 加上 Redis 的密码,没有设置密码的则不用配置这个。
所有的都要加上这个 masterauth rainbowsea 加上 Redis 的密码,没有设置密码的则不用配置这个。
所有的都要加上这个 masterauth rainbowsea 加上 Redis 的密码,没有设置密码的则不用配置这个。
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
- 启动 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


- 将六个节点合成一个集群


进入到该路径下后,将六个节点合成一个集群的指令:
如下这个是 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 的地址,Linux 当中使用
ifconfig指令查询到的地址),在真实生产环境 IP都是独立的。 replicas 1采用最简单的方式配置集群,一台主机,一台从机,正好三组。- 搭建加群如果没有成功,把
sentinel进程关闭掉,再试一下。 - 分许主从对应关系。


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


- 集群方式登录:
指令: 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

- 一个集群至少要有三个主节点。
- 选项



