Redis集群操作配置深度解析(超详细图示助力)

3周前发布 gsjqwyl
18 0 0

十二、Redis集群操作配置详解(超详细图示辅助)

目录

  • 十二、Redis集群操作配置详解(超详细图示辅助)
  • 1、为何需要集群-高可用性
  • 2、集群概况(及其搭建)
  • 3、Redis集群的运用
  • 4、Redis集群故障恢复
  • 5、Redis集群的Jedis开发(用Java程序连接Redis并开启集群)
  • 6、Redis集群的优劣势
  • 7、补充:
  • 8、结尾:

1、为何需要集群-高可用性

为何需要集群-高可用性:

  1. 生产环境的实际需求与问题
    1. 当容量不足时,redis需要进行扩容操作。
    2. 面对并发写操作,redis需要合理分担压力。
    3. 在主从模式下,若主机出现宕机情况,会导致ip地址发生改变,应用程序中需要相应修改主机地址、端口等配置信息。
  2. 传统解决办法:借助代理主机来达成

上图解图:

  1. 客户端请求首先到达代理服务器。
  2. 由代理服务器将请求转发至对应的业务处理器。
  3. 为保障高可用,代理服务、A服务、B服务、C服务都需要搭建主从结构(至少是一主一从,这样就需要搭建至少8台服务器)。
  4. 该方案的弊端是:成本较高,维护起来较为困难,如果是一主多从的情况,成本会更高。

redis3.0提供的解决方案:无中心化集群配置

在这里插入图片描述
  1. 各个Redis服务依旧采用主从结构。
  2. 各个Redis服务相互连通,任意一台服务器均可作为请求入口
  3. 由于各个Redis服务器是连通的,能够进行请求转发。
  4. 这种方式属于无中心化集群配置,可见,仅需6台服务器就能搞定。
  5. 无中心化集群配置还会依据key值计算slot,把数据分散到不同主机,从而缓解单个主机的存取压力。
  6. Redis推荐采用无中心化集群配置。
  7. 在实际生产环境中,各个Redis服务器应部署在不同机器上(防止机器宕机导致主从复制失效)。

2、集群概况(及其搭建)

  1. Redis集群实现了对Redis的水平扩容,即启动N个Redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N。
  2. 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

注意事项与细节

  1. 组合之前,确保所有要使用的端口的Redis服务器均已启动,且在root目录下(此处为root配置)nodes-xxxx.conf文件正常生成。
  2. 此时不能用127.0.0.1,需使用真实IP地址(即连接Linux的地址,可通过ifconfig指令查询),真实生产环境中IP均为独立的。
  3. replicas 1采用最简单的方式配置集群,一台主机、一台从机,正好三组。
  4. 搭建集群若未成功,关闭sentinel进程后再试。
  5. 分析主从对应关系。
在这里插入图片描述 在这里插入图片描述
  • 分析主从对应关系:如下
在这里插入图片描述 在这里插入图片描述

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
在这里插入图片描述
  1. 一个集群至少要有三个主节点。
  2. 选项--cluster-replicas 1表示我们期望为集群中的每个主节点创建一个从节点。
  3. 分配原则: 尽量让主服务器和从服务器各自运行在不同IP地址(机器)上,防止机器故障导致主从机制失效,保障高可用性。

3、Redis集群的运用

什么是 slots

Redis集群启动后,会看到如下提示:

在这里插入图片描述
在这里插入图片描述

  1. 一个Redis集群包含了 16384 个插槽(hash slot) ,编号从 0-16383 ,Redis中的每个键都属于这16384个插槽的其中一个。注意:这里虽然只有16384个插槽,但并非只能插入16384个键,多个不同的键可插入到同一个插槽中,并非一个插槽对应一个键
  2. 集群使用公式 CRC16(key) % 16384 来计算键key属于哪个槽,其中CRC16(key)语句用于计算键key的CRC16校验和
在这里插入图片描述
  1. 集群中的每个节点负责处理一部分插槽。举个例子:如果一个集群有主节点,其中
  • 节点A负责处理0号 ~ 5460号 插槽
  • 节点B负责处理5461号 ~ 10922号 插槽
  • 节点C负责处理10923号 ~ 16383号 插槽

在集群中录入值

  1. 在Redis每次录入、查询键值时,redis都会计算出该key应送往的插槽,若不是该客户端对应服务器的插槽,redis会告知前往的Redis实例地址和端口。
  2. Redis-cli客户端提供了-c参数实现自动重定向。
  3. redis-cli -c -p 6379登入后
© 版权声明

相关文章

暂无评论

暂无评论...