理论:
Redis-cluster集群概念
- 由多个Redis服务器组成的分布式网络服务集群;
- 集群之中有多个Master主节点,每一个主节点都可读可写;
- 节点之间会互相通信,两两相连;
- Redis集群无中心节点。
集群选举原理分析(ping-pong机制):
选举流程:
当slave发现自己的master变为FAIL状态时,便尝试发起选举,以期成为新的master。由于挂掉的master可能会有多个slave,从而存在多个slave竞争成为master节点的过程,其过程如下:
1、 slave发现自己的master变为FAIL(失败)
2、将自己记录的集群currentEpoch(选举轮次标记)加1,并广播信息给集群中其他节点
3、其他节点收到该信息,只有master响应,判断请求者的合法性,并发送结果
4、尝试选举的slave收集master返回的结果,收到超过半数master的同意后变成新Master
5、广播Pong消息通知其他集群节点。
什么是跳转重定位
当客户端向一个错误的节点发出了指令,该节点会发现指令的 key 所在的槽位并不归自己管理,这时它会向客户端发送一个特殊的跳转指令携带目标操作的节点地址,告诉客户端去连这个节点去获取数据。客户端收到指令后除了跳转到正确的节点上去操作,还会同步更新纠正本地的槽位映射表缓存,后续所有 key 将使用新的槽位映射表。
Redis-cluster集群最多可以挂多少台主机?
不能多于集群中的redis服务半数主机
实验部分:
六台机子修改名称:centos1--6
编写hosts文件
vim /etc/hosts
192.168.100.1 centos1
192.168.100.2 centos2
192.168.100.3 centos3
192.168.100.4 centos4
192.168.100.5 centos5
192.168.100.6 centos6
安装看redis7.0.4安装
修改配置文件:
#309行,redis后台运行
daemonize yes
#87行,监听地址
bind 192.168.100.1
#111行,关闭保护模式
protected-mode no
#341行,pidfile文件对应端口
pidfile /var/run/redis_6379.pid
#138行,端口号
port 6379
#354行,log日志路径,需自己创建
logfile "/var/log/redis/redis_6379.log"
#1037行,修改密码
requirepass 123123
#1577,把注释去掉,开启群集
cluster-enabled yes
#1585,集群的配置,配置文件首次启动自动生成
cluster-config-file nodes_6379.conf
#1591,超时时间15s
cluster-node-timeout 15000
#1380行,aof日志开启,有需要就开启,它会每次写操作都记录一条日志
appendonly yes
配置文件只有监听地址不一样,每台都写本机的ip地址,配置完后重启redis
systemctl restart redis
输入
redis-cli --cluster create --cluster-replicas 1 -a 123123 192.168.100.1:6379 192.168.100.2:6379 192.168.100.3:6379 192.168.100.4:6379 192.168.100.5:6379 192.168.100.6:6379
需要自己输入一个yes
查看集群状态:
redis-cli --cluster check 192.168.100.1:6379
扩展:
当要加一台主时:配置文件除了监控ip,剩下都一样
添加到集群
redis-cli --cluster add-node 192.168.100.7:6379 192.168.100.2:6379 -a 123123
开始分配卡槽
redis-cli --cluster reshard 192.168.100.7:6379
写7的id号
到这写个all
查看状态
redis-cli --cluster check 192.168.100.1:6379 -a 123123
移除的话需要先把槽,再移除
#把要删除节点的槽移到集群内的主节点,ID号是从删除的到集群的
redis-cli --cluster reshard 192.168.100.1:6379 --cluster-from 5043fa8217a31fe57005af257f40872ed3658d65 --cluster-to 74ddc20adfd0458d3959b4b1944cbede1bbb0045 --cluster-slots 4096 -a 123123
删除节点
redis-cli --cluster del-node 192.168.100.7:6379 5043fa8217a31fe57005af257f40872ed3658d65 -a 123123
可以看到槽点不均衡
可以用这条命令
redis-cli --cluster rebalance --cluster-use-empty-masters 192.168.100.1:6379 -a 123123