redis集群初体验

准备

这里我准备了三台虚拟机,都安装好了redis

ip role
192.168.56.101 master
192.168.56.102 slave
192.168.56.103 slave

配置主从

修改slave节点的redis配置

1
2
replicaof 192.168.56.101 6379
masterauth yuuki

不难看出就是配置主节点的ip端口还有密码- -

修改完后重启redis

在主节点进入redis-cli,输入info replication,不出意外应该能看到如下的图- -

1

然后可以试着在主节点设置一些key进去,在从节点看看有没有同步,理论上是可以的。

接着我们把主节点关闭,查看从节点,是还能提供查询服务的,但是设置key的时候会报错,因为我们在配置文件里面配置了replica-read-only yes,所以从节点是只读的

当master挂掉后,所有写操作都不得行了,那可不行,所以下一步我们给他加上哨兵,监控下

配置哨兵

在redis的安装包下有一个sentinel.conf文件,这个就是用来哨兵的配置文件,我们修改下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 哨兵端口
port 26379
# pid目录默认即可
pidfile ""
# 工作目录
dir "/usr/local/redis/sentinel"
# 后台运行
daemonize yes
# 保护模式
protected-mode no
logfile "/usr/local/redis/sentinel/redis-sentinel.log"
# 配置哨兵
sentinel monitor mymaster 127.0.0.1 6379 2
# 密码
sentinel auth-pass <master-name> <password>
# master被sentinel认定为失效的间隔时间
sentinel down-after-milliseconds mymaster 30000
# 剩余的slaves重新和新的master做同步的并行个数
sentinel parallel-syncs mymaster 1
# 主备切换的超时时间,哨兵要去做故障转移,这个时候哨兵也是一个进程,如果他没有去执行,超过这个时间后,会由其他的哨兵来处理
sentinel failover-timeout mymaster 180000

缩略下就这些了

修改完之后使用redis-sentinel /usr/local/redis/sentinel.conf启动哨兵,每个节点都启动

接着我们新开一个窗口使用tail -f查看sentinel的log

刚开始能看到2

然后我们把master停掉3 可以看到master挂掉的信息,然后又选举103为新的master,到103用info replication查看会发现103的redis变成了master

接着我们再把原来的master再启动,会发现他不是master了,查看103的info可以看到101作为从节点加入了

注:如果发现原来的mater恢复后没有加入的话,看下redis是否配置了masterauth

集群配置

直接上redis配置

1
2
3
4
5
6
7
8
# 开启集群模式
cluster-enabled yes
# 每一个节点需要有一个配置文件。每个节点处于集群的角色都需要告知其他所有节点,彼此知道,这个文件用于存储集群模式下的集群状态等信息,这个文件是由redis自己维护,我们不用管。如果你要重新创建集群,那么把这个文件删了就行
cluster-config-file nodes-201.conf
# 超时时间,超时则认为master宕机,随后主备切换
cluster-node-timeout 5000
# 开启AOF
appendonly yes

创建集群

1
redis-cli --cluster create ip1:port1 ip2:port2 ip3:port3 ip4:port4 ip5:port5 ip6:port6 --cluster-replicas 1

记录一下--cluster-replicas 1代表为每个主节点指定一个从节点,redis集群至少要6台,所以就是1-3是主,4-6是从,1的从是4这样

redis集群数据其实是存储在slots(槽)中的,集群中还是主节点负责写,从节点负责读,但是三台主节点存的数据并不一样。存储的时候集群会对key进行hash然后存储到相应的槽中,每个主节点负责一部分槽,存取的时候集群会只能的切换节点

springboot连接集群

1
2
3
4
5
spring:
redis:
password: xxx
cluster:
nodes: masterIp1:port1,masterIp2:port2...

end…