一、简介
官网文档地址:https://redis.io/topics/sentinel
Sentinel(哨兵)是用于监控Redis集群中Master状态的工具,是 Redis 高可用解决方案,哨兵可以监视一个或者多个redis master服务,以及这些master服务的所有从服务;当某个master服务宕机后,会把这个master下的某个从服务升级为master来替代已宕机的master继续工作。其中三个特性:
- 监控(Monitoring):Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
- 提醒(Notification):当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
- 自动故障迁移(Automatic failover):当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作。
特点
- 保证高可用
- 监控各个节点的情况
- 自动故障迁移
缺点
- 主从模式,切换需要时间,会丢数据
- 比如master同步数据给slave的时候,这其实是异步复制吧,这个时候master挂了,那么slave上的数据就没有master新,数据同步需要时间的,1-2秒的数据会丢失。master恢复并转换成slave后,新数据则丢失
- 没有解决 master 写的压力
二、环境搭建
1. 普通方式搭建哨兵模式
创建并且配置sentinel.conf:(需要启动至少3个哨兵,并且是奇数)
port 26379
pidfile "/usr/local/redis/sentinel/redis-sentinel.pid"
dir "/usr/local/redis/sentinel" #哨兵的工作空间
daemonize yes
protected-mode no #保护模式
logfile "/usr/local/redis/sentinel/redis-sentinel.log" #日志文件
核心控制
# 配置哨兵
sentinel monitor mymaster 192.168.71.130 6379 2 #监控master的名称(mymaster 前后要保持一致) 地址 端口 2是决策哨兵的数量(3个总数)
# 访问master的密码
sentinel auth-pass mymaster 1234
# master被sentinel认定为失效的间隔时间
sentinel down-after-milliseconds mymaster 30000
# 剩余的slaves重新和新的master做同步的并行个数
sentinel parallel-syncs mymaster 1
# 主备切换的超时时间,哨兵要去做故障转移,这个时候哨兵也是一个进程,如果他没有去执行,超过这个时间后,会由其他的哨兵来处理
sentinel failover-timeout mymaster 180000
不同的linux之间的远程传递(用于复制)
scp sentinel.conf root@192.168.71.102:/usr/local/redis/
启动哨兵(如果没有创建日志文件夹,则需要提前创建)
./redis-sentinel sentinel.conf
日志查看
tail -f redis-sentinel.log
2. 查看哨兵中的内容
连接哨兵
redis-cli -p 26379
相关指令
# 查看imooc-master下的master节点信息
sentinel master mymaster
# 查看imooc-master下的slaves节点信息
sentinel slaves mymaster
# 查看imooc-master下的哨兵节点信息
sentinel sentinels mymaster
3. 部署约定
- 哨兵节点要有至少3个或者技奇数个节点
- 哨兵分布式部署在不同的计算机节点
- 一组哨兵只监听一组主从
4. SpringBoot中的配置
spring:
redis:
database: 1
password: 1234
sentinel:
master: mymaster
#所有的哨兵节点
nodes: 192.168.1.191:26379,192.168.1.192:26379,192.168.1.193:26379