由于始终只有一个主节点,所以写操作性能受限
数据存储能力受单机限制
引入哈希槽概念,将16384 个哈希槽( 编号0-16383),分配给每个主节点集群的每个节点负责一部分哈希槽
多个主节点和从节点提高读写性能
- mkdir /usr/local/redis
- cd /usr/local/redis
- wget http://download.redis.io/releases/redis-7.2.3.tar.gz
- tar -xzvf redis-7.2.3.tar.gz
yum install gcc-c++
- cd /usr/local/redis/redis-7.2.3
- make
- make install PREFIX=/usr/local/redis/redis-cluster
- cd /usr/local/redis/
- mkdir redis-cluster
- cd /usr/local/redis/redis-cluster
- mkdir redis-5001
- mkdir redis-5002
- mkdir redis-5003
- cp /usr/local/redis/redis-7.2.3/redis.conf /usr/local/redis/redis-cluster/bin/redis-5001.conf
- cp /usr/local/redis/redis-7.2.3/redis.conf /usr/local/redis/redis-cluster/bin/redis-5002.conf
- cp /usr/local/redis/redis-7.2.3/redis.conf /usr/local/redis/redis-cluster/bin/redis-5003.conf
- #建议 bind 0.0.0.0
- #bind绑定本机ip,则只能本机ip访问
- #学习阶段建议注释bind完全放开访问限制(比如三方客户端也想访问)
- #bind 0.0.0.0
-
- #关闭保护模式
- protected-mode no
-
- #修改对应的端口,每个机器的节点端口都不同,本文分别占用5001,5002,5003
- #可以参考文件目录文件夹名称,例如redis-5001目录下的在此为5001
- port 5001
-
- #启动集群模式
- cluster-enabled yes
-
- #集群节点信息文件,这里500x最好和port对应上
- #可以参考文件目录文件夹名称,例如redis-5001目录下的在此为nodes-5001.conf
- cluster-config-file nodes-5001.conf
-
- #节点离线的超时时间
- cluster-node-timeout 5000
-
- #如果要设置密码需要增加如下配置:
- #设置redis访问密码
- requirepass 123456
-
- #设置集群节点间访问密码,跟上面一致,理论上可以不一致,但为了降低维护成本直接设置为一致比较方便
- #当集群中从节点访问主节点时需要此密码,所以需要与requirepass
- masterauth 123456
-
- #修改启动进程号存储位置
- #可以参考文件目录文件夹名称,例如redis-5001目录下的在此为redis_5001.pid
- pidfile /var/run/redis_5001.pid
-
- #指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据
- #可以参考文件目录文件夹名称,例如redis-5001目录
- dir /usr/local/redis/redis-cluster/redis-5001
-
- #修改为后台启动
- daemonize yes
-
- #启动AOF文件
- appendonly yes
- cd /usr/local/redis/redis-cluster/bin
- ./redis-server redis-5001.conf
- ./redis-server redis-5002.conf
- ./redis-server redis-5003.conf
- echo "192.168.79.135 hadoop001" >> /etc/hosts
- echo "192.168.79.136 hadoop002" >> /etc/hosts
- cd /usr/local/redis/redis-cluster/bin
- ./redis-cli -a 123456 --cluster create --cluster-replicas 1 hadoop001:5001 hadoop001:5002 hadoop001:5003 hadoop002:5001 hadoop002:5002 hadoop002:5003
--replicas 1:代表给每个主机点下配置一个从节点


- # 创建5004节点目录
- cd /usr/local/redis/redis-cluster/
- mkdir redis-5004
-
- # 复制一份redis.conf文件
- cp /usr/local/redis/redis-cluster/bin/redis-5001.conf /usr/local/redis/redis-cluster/bin/redis-5004.conf
-
- # 修改5004节点的redis.conf文件,将端口相关的值从5003修改为5004
- # -------------------------------
- # port 5004
- # cluster-config-file nodes-5004.conf
- # pidfile /var/run/redis_5004.pid
- # dir /usr/local/redis/redis-cluster/redis-5004
- # -------------------------------
- cd /usr/local/redis/redis-cluster/bin
- vi redis-5004.conf
-
- # 启动新节点5004
- cd /usr/local/redis/redis-cluster/bin
- ./redis-server redis-5004.conf
-
- # 第一个ip端口 127.0.0.1:5004 是要新增的节点
- # 第二个IP端口 127.0.0.1:5001 是现有集群中的一个节点,-a 123456是需要密码
- cd /usr/local/redis/redis-cluster/bin
- ./redis-cli --cluster add-node hadoop001:5004 hadoop001:5001 -a 123456
-
- # 查看集群节点状态
- cd /usr/local/redis/redis-cluster/bin
- # 登录一个节点
- ./redis-cli -h 127.0.0.1 -p 5001 -a 123456 -c

- # 第一个ip端口 hadoop002:5004 是要新增的从节点ip端口
- # 第二个IP端口 hadoop001:5004 是上一步新增的主节点ip端口,-a 123456是需要密码
- # 3a20354e215cbd9c282011383ad3d0486afe8aa4是主节点id,也就是此从节点要关联的主节点id
- cd /usr/local/redis/redis-cluster/bin
- ./redis-cli --cluster add-node hadoop002:5004 hadoop001:5004 --cluster-slave --cluster-master-id "3a20354e215cbd9c282011383ad3d0486afe8aa4" -a 123456
-
- # 查看集群节点状态
- cd /usr/local/redis/redis-cluster/bin
- # 登录一个节点
- ./redis-cli -h 127.0.0.1 -p 5001 -a 123456 -c

- # 分配哈希槽
-
- # 方法一
- # 通过交互方式,可以指定多个源主节点,并根据输入的哈希槽迁移数量,自动从指定源头主节点均匀分配要迁出的哈希槽
- # 127.0.0.1:5001 可以是集群中随便一个可以访问的节点,-a 123456是需要密码
- cd /usr/local/redis/redis-cluster/bin
- ./redis-cli -a 123456 --cluster reshard 127.0.0.1:5001
-
- # 方法二
- # 执行命令时直接指定迁移信息,省去了交互部分,直接yes即可
- # --cluster-from 要迁出槽主节点id
- # --cluster-to 要迁入槽主节点id
- # --cluster-slots 要迁移的槽数量
- # 执行后会提示 Do you want to proceed with the proposed reshard plan (yes/no)?
- # 输入yes即可
- cd /usr/local/redis/redis-cluster/bin
- ./redis-cli -a 123456 --cluster reshard 127.0.0.1:5001 --cluster-from bc14f675c94efc6009569d5da7c43b15be672fa0 --cluster-to a1a94648f505b665bfa7ca907cf4068bbd508e95 --cluster-slots 1365

- # 删除从节点
- # hadoop002:5004 是集群中要删除的从节点IP端口,-a 123456是需要密码
- # 1f3a8532d72c1bea6f1b45ea74adc97d28843b95 是从节点的节点id
- cd /usr/local/redis/redis-cluster/bin
- ./redis-cli --cluster del-node hadoop002:5004 1f3a8532d72c1bea6f1b45ea74adc97d28843b95 -a 123456
-
- # 删除主节点
- # hadoop001:5004 是集群中要删除的主节点IP端口,-a 123456是需要密码
- # 3a20354e215cbd9c282011383ad3d0486afe8aa4 是主节点的节点id
- cd /usr/local/redis/redis-cluster/rbin
- ./redis-cli --cluster del-node hadoop001:5004 3a20354e215cbd9c282011383ad3d0486afe8aa4 -a 123456





Redis集群之主从、哨兵、分片集群,SpringBoot整合Redis集群_小道仙97的博客-CSDN博客
Redis三种集群模式介绍及搭建_redis 集群_0307.quē的博客-CSDN博客
笔记(十):redis集群_redis集群从节点读取数据吗-CSDN博客