华子目录
- 实验
- 环境准备
- 部署`redis cluster`
- 添加节点
- 删除节点
- redis cluster集群维护
实验
环境准备
- 再开
3台主机

- 先把之前
3台源码编译的redis删除
[root@redis-node1 ~]# cd /usr/local/redis/
[root@redis-node1 redis]# make uninstall
[root@redis-node2 ~]# cd /usr/local/redis/
[root@redis-node2 redis]# make uninstall
[root@redis-node3 ~]# cd /usr/local/redis/
[root@redis-node3 redis]# make uninstall
6台主机通过yum方式安装
[root@redis-node1 ~]# yum install redis -y
[root@redis-node2 ~]# yum install redis -y
[root@redis-node3 ~]# yum install redis -y
[root@redis-node110 ~]# yum install redis -y
[root@redis-node120 ~]# yum install redis -y
[root@redis-node130 ~]# yum install redis -y
部署redis cluster
- 在
所有redis主机中
#现在node1上修改配置文件
[root@redis-node1 ~]# vim /etc/redis/redis.conf
bind * -::*
masterauth "123456" #集群主从认证
requirepass "123456" #redis登录密码
cluster-enabled yes #开启cluster集群功能
cluster-config-file nodes-6379.conf #指定集群配置文件
cluster-node-timeout 15000 #节点加入集群的超时时间,单位是毫秒
#再将配置文件复制给其他节点
[root@redis-node2 ~]# scp /etc/redis/redis.conf root@172.25.254.20:/etc/redis/
[root@redis-node3 ~]# scp /etc/redis/redis.conf root@172.25.254.30:/etc/redis/
[root@redis-node110 ~]# scp /etc/redis/redis.conf root@172.25.254.110:/etc/redis/
[root@redis-node120 ~]# scp /etc/redis/redis.conf root@172.25.254.120:/etc/redis/
[root@redis-node130 ~]# scp /etc/redis/redis.conf root@172.25.254.130:/etc/redis/
[root@redis-node1 ~]# systemctl restart redis
[root@redis-node2 ~]# systemctl restart redis
[root@redis-node3 ~]# systemctl restart redis
[root@redis-node110 ~]# systemctl restart redis
[root@redis-node120 ~]# systemctl restart redis
[root@redis-node130 ~]# systemctl restart redis
#进入node1的redis中
[root@redis-node1 ~]# redis-cli


[root@redis-node1 ~]# redis-cli --cluster create -a 123456 \
> 172.25.254.10:6379 172.25.254.20:6379 172.25.254.30:6379 \
> 172.25.254.110:6379 172.25.254.120:6379 172.25.254.130:6379 \
> --cluster-replicas 1
--cluster-replicas 1:指定了每个主节点应该有一个从节点。由于总共有6个节点,Redis集群会自动将这些节点分为3个主节点和3个从节点。Redis会根据节点的IP地址和端口号自动进行主从分配,确保每个主节点都有一个对应的从节点


- 只有
master上有hash槽,slave上没有hash槽- 只有存在
hash槽的主机才能进行读写slave的作用:只有当对应的master挂掉了,才会将master上的hash槽迁移到slave上,在没有迁移之前,slave上是没有hash槽的
此时redis cluster已经搭建成功
[root@redis-node1 ~]# redis-cli -a 123456 --cluster check 172.25.254.20:6379

[root@redis-node1 ~]# redis-cli -a 123456 --cluster info 172.25.254.110:6379

- 当在
10上插入数据时
[root@redis-node1 ~]# redis-cli -a 123456
127.0.0.1:6379> set name huazi
(error) MOVED 5798 172.25.254.20:6379

- 在
20上插入成功
[root@redis-node2 ~]# redis-cli -a 123456
127.0.0.1:6379> set name huazi
OK

- 当在
10上查看数据时
[root@redis-node1 ~]# redis-cli -a 123456
127.0.0.1:6379> get name
(error) MOVED 5798 172.25.254.20:6379

- 在
20上查看
[root@redis-node2 ~]# redis-cli -a 123456
127.0.0.1:6379> get name
"huazi"

添加节点
- 加
2个节点

[root@redis-node50 ~]# yum install redis -y
[root@redis-node150 ~]# yum install redis -y
#将配置文件传递给50和150
[root@redis-node1 ~]# scp /etc/redis/redis.conf root@172.25.254.50:/etc/redis/
[root@redis-node1 ~]# scp /etc/redis/redis.conf root@172.25.254.150:/etc/redis/
[root@redis-node50 ~]# systemctl restart redis
[root@redis-node150 ~]# systemctl restart redis

- 将
50加入到cluster集群中
[root@redis-node1 ~]# redis-cli -a 123456 --cluster add-node 172.25.254.50:6379 172.25.254.20:6379
查看
[root@redis-node1 ~]# redis-cli -a 123456 --cluster check 172.25.254.10:6379

- 在
cluster中重新划分槽位
[root@redis-node1 ~]# bc
16384/4
4096
[root@redis-node1 ~]# redis-cli -a 123456 --cluster reshard 172.25.254.10:6379





- 在
槽位重新划分的同时也不会影响原来槽位中的数据
[root@redis-node1 ~]# redis-cli -a 123456 --cluster check 172.25.254.10:6379

- 查看
数据
[root@redis-node1 ~]# redis-cli -a 123456
127.0.0.1:6379> get name
(error) MOVED 5798 172.25.254.50:6379
#让到50上查看
[root@redis-node50 ~]# redis-cli -a 123456
127.0.0.1:6379> get name
"huazi"
- 加入
slave到集群中
[root@redis-node1 ~]# redis-cli -a 123456 --cluster add-node 172.25.254.150:6379 172.25.254.10:6379 --cluster-slave --cluster-master-id 779b42266fc4f08b0be1d65cba5a77ccbb46b8d4

- 查看
[root@redis-node1 ~]# redis-cli -a 123456 --cluster check 172.25.254.10:6379

删除节点
- 先删除
slave
[root@redis-node1 ~]# redis-cli -a 123456 --cluster del-node 172.25.254.150:6379 c4311c2a6eee3330015c9b3458060ace57b906be

[root@redis-node1 ~]# redis-cli -a 123456 --cluster check 172.25.254.10:6379

- 将
50的槽位分享给其他节点
[root@redis-node1 ~]# redis-cli -a 123456 --cluster reshard 172.25.254.10:6379





[root@redis-node1 ~]# redis-cli -a 123456 --cluster check 172.25.254.10:6379

[root@redis-node1 ~]# redis-cli -a 123456 --cluster del-node 172.25.254.50:6379 779b42266fc4f08b0be1d65cba5a77ccbb46b8d4

- 发现
50已经从集群中移除了
[root@redis-node1 ~]# redis-cli -a 123456 --cluster check 172.25.254.10:6379

查看数据
[root@redis-node1 ~]# redis-cli -a 123456
127.0.0.1:6379> get name
(error) MOVED 5798 172.25.254.20:6379
[root@redis-node2 ~]# redis-cli -a 123456
127.0.0.1:6379> get name
"huazi"
redis cluster集群维护
添加节点的时候是先添加node节点到集群,然后分配槽位,删除节点的操作与添加节点的操作正好相反,是先将被删除的Redis node上的槽位迁移到集群中的其他Redis node节点上,然后再将其删除,如果一个Redis node节点上的槽位没有被完全迁移,删除该node的时候会提示有数据且无法删除






![Postman[8] 断言](https://i-blog.csdnimg.cn/direct/898b225b17f64134b7e5bde23f070d49.png)



![Postman[4] 环境设置](https://i-blog.csdnimg.cn/direct/5673aa0084294643aeada3bf32aed56b.png)







