Sentinel(哨兵)是redis的高可用性解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监控任意多个主服务器,以及这些主服务器属下的所有从服务器,并且在被监控的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。
1. 首先需要搭建主从复制:
2. 挂载外部配置:
创建目录和配置文件sentinel.conf。
sentinel.conf:
bind 0.0.0.0
protected-mode no
sentinel monitor mymaster 172.17.0.2 6379 2
3. 启动哨兵
docker run --name sentinel-26379 -v /root/docker-redis-sentinel1/conf/sentinel.conf:/etc/sentinel.conf -v /root/docker-redis-sentinel1/data:/data -p 26379:26379 -d redis redis-sentinel /etc/sentinel.conf
docker run --name sentinel-26380 -v /root/docker-redis-sentinel2/conf/sentinel.conf:/etc/sentinel.conf -v /root/docker-redis-sentinel2/data:/data -p 26380:26379 -d redis redis-sentinel /etc/sentinel.conf
docker run --name sentinel-26381 -v /root/docker-redis-sentinel3/conf/sentinel.conf:/etc/sentinel.conf -v /root/docker-redis-sentinel3/data:/data -p 26381:26379 -d redis redis-sentinel /etc/sentinel.conf
通过查看sentinel.conf或日志可以发现哨兵已经开始工作:
4. 验证故障转移
为了验证哨兵机制下的自动主从切换,可以将主服务器停止掉。
观察日志:
从日志中可以看出redis-6381成为新的主服务器。接着进入redis-6381中进行验证:
我们继续启动之前的主服务器redis-6379,可以看出redis-6379重新启动后成为redis-6381的从服务器: