Redis-Sentinel是Redis官方提供的集群管理工具。当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自懂切换,将slave提升为master,并在老的master重新加入到sentinel的群集之后,会被重新配置,作为新master的slave。
它的主要功能有以下几点
1.不时地监控redis是否按照预期良好地运行
2.如果发现某个redis节点运行出现状况,能够通知另外一个进程
3.能够进行自动切换。当一个master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中的一个来作为新的master,其它的slave节点会将它的master的地址改为被新master的slave的地址。
准备工作:
Redis配置
===============================================================================
#是否作为守护进程运行
daemonize no
#Redis 默认监听端口
port 9001
#客户端闲置多少秒后,断开连接
timeout 300
#日志显示级别
loglevel verbose
#指定日志输出的文件名,也可指定到标准输出端口
logfile redis.log
#设置数据库的数量,默认最大是16,默认连接的数据库是0,可以通过select N来连接不同的数据库
databases 32
#Dump持久化策略
#当有一条Keys数据被改变是,900秒刷新到disk一次
#save 900 1
#当有10条Keys数据被改变时,300秒刷新到disk一次
save 300 100
#当有1w条keys数据被改变时,60秒刷新到disk一次
save 6000 10000
#当dump .rdb数据库的时候是否压缩数据对象
rdbcompression yes
#dump 持久化数据保存的文件名
dbfilename dump.rdb
########### Replication #####################
#Redis的主从配置,配置slaveof则实例作为从服务器
#slaveof 192.168.0.105 6379
#主服务器连接密码
# masterauth <master-password>
############## 安全性 ###########
#设置连接密码
#requirepass <password>
############### LIMITS ##############
#最大客户端连接数
# maxclients 128
#最大内存使用率
# maxmemory <bytes>
########## APPEND ONLY MODE #########
#是否开启日志功能
appendonly no
# AOF持久化策略
#appendfsync always
#appendfsync everysec
#appendfsync no
################ VIRTUAL MEMORY ###########
#是否开启VM功能
#vm-enabled no
# vm-enabled yes
#vm-swap-file logs/redis.swap
#vm-max-memory 0
#vm-page-size 32
#vm-pages 134217728
#vm-max-threads 4
===============================================================================
Redis命令
1.进入redis安装目录
cd redisCluster\redis
2.启动redis服务,输入
redis-server.exe redis.windows7000.conf
3,查看从状态
redis-cli -h 127.0.0.1 -p 7000 info Replication
4.链接指定客户端
redis-cli -h 127.0.0.1 –p 7000
备注:配置主从
主默认,从配置 slaveof 127.0.0.1 7000
Sentienl配置
===============================================================================
##sentinel实例之间的通讯端口
port 27000
####sentinel需要监控的master信息:<mastername> <masterIP> <masterPort> <quorum>.
####<quorum>应该小于集群中slave的个数,只有当至少<quorum>个sentinel实例提交"master失效"才会认为master为ODWON("客观"失效) .
sentinel monitor mymaster 127.0.0.1 7000 1
####授权密码,在安全的环境中可以不设置
#sentinel auth-pass mymaster luyx30
####master被当前sentinel实例认定为“失效”(SDOWN)的间隔时间
sentinel down-after-milliseconds mymaster 30000
####当新master产生时,同时进行“slaveof”到新master并进行同步复制的slave个数。
##在salve执行salveof与同步时,将会终止客户端请求。
##此值较大,意味着“集群”终止客户端请求的时间总和和较大。
##此值较小,意味着“集群”在故障转移期间,多个salve向客户端提供服务时仍然使用旧数据。
sentinel parallel-syncs mymaster 1
####failover过期时间,当failover开始后,在此时间内仍然没有触发任何failover操作,当前sentinel将会认为此次failoer失败。
sentinel failover-timeout mymaster 900000
===============================================================================
Sentinel命令
1.进入redis安装目录
cd redisCluster\redis
2.启动sentinel服务,输入
redis-cli sentinel.conf
Sentinel集群处理Master Redis实例挂掉的基本流程:
1)每个Sentinel实例通过监控发现6379端口的Master Redis实例不工作,于是将该实例的状态设置为sdown;
2)通过Sentinel彼此之间通信确认大多数Sentinel实例均认为Master Redis挂掉,于是将该实例的状态设置为odown;
3)准备触发Master Redis实例的failover,要选举一个Sentinel实例进行首次failover操作;4)选举出来的Sentinel实例从Slave Redis实例中选择一个出来成为新的Master Redis实例;5)完成Master Redis实例的切换之后,在各个Sentinel实例间同步最新的配置信息;
6)让落选的Slave Redis实例切换到新的Master Redis实例,开始同步数据。
以上为sentinel-redis集群环境搭建,下面我们学习如何在开发中操作Redis的Sentinel,进行对缓存的操作。假设已经安装完成了Redis服务,并成功运行。
使用Spring-data-redis操作Redis的Sentinel,依赖包主要有jedis 2.8.1.jar 、spring-data-redis.1.6.2.RELEASE
具体可参考 http://blog.csdn.net/roguestudys/article/details/51879140
注意
1)在配置Redis的sentinel.conf文件时注意使用外部可以访问的ip地址,因为当redis-sentinel服务和redis-server在同一台机器的时候,主服务发生变化时配置文件中将主服务ip变为127.0.0.1,这样外部就无法访问了。
2)发生master迁移后,如果遇到运维需要,想重启所有redis,必须最先重启“新的”master节点,否则sentinel会一直找不到master。