华子目录
- 实验
- 环境准备
- 部署`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
的时候
会提示有数据
且无法删除