1.1 主从复制的问题
Redis
主从复制可将主节点数据同步给从节点,从节点此时有两个作用:
- 一旦主节点宕机,从节点作为主节点的备份可以随时顶上来。
- 扩展主节点的读能力,分担主节点读压力。
但是问题来了:
- 一旦主节点宕机,从节点晋升成主节点,同时需要修改应用方的主节点地址,还需要命令所有从节点去复制新的主节点,整个过程需要人工干预。
- 主节点的写能力受到单机的限制。
- 主节点的存储能力受到单机的限制。
第一个问题,我们接下来讲的Sentinel
就可以解决。而后两个问题,Redis
也给出了方案Redis Cluster
。
1.2 Redis Sentinel的高可用
Redis Sentinel
是一个分布式架构,包含若干个Sentinel
节点和Redis
数据节点,每个Sentinel
节点会对数据节点和其余Sentinel
节点进行监控,当发现节点不可达时,会对节点做下线标识。
如果被标识的是主节点,他还会选择和其他Sentinel
节点进行“协商”,当大多数的Sentinel
节点都认为主节点不可达时,他们会选举出一个Sentinel
节点来完成自动故障转移工作,同时将这个变化通知给Redis
应用方。
整个过程完全自动,不需要人工介入,所以可以很好解决Redis
的高可用问题。
Sentine.conf配置:
redis.conf配置:
注意问题:
如果主节点设置了密码,必须在从节点的配置文件中添加:
masterauth password
slaveof 127.0.0.1 6379
应用程序代码:
Config config = new Config();
config.useSentinelServers().setMasterName("mymaster").
addSentinelAddress("127.0.0.1:26379","127.0.0.1:26479","127.0.0.1:26579")
.setPassword("9client2016")
.setReadMode(ReadMode.MASTER_SLAVE);