Redis Sentinel高可用机制总结及配置详解

       SentinelRedis官方提供的高可用解决方案。 在互联网线上环境中可以使用    Sentinelredis自动故障转移,实现自动化运维功能。并且,    Sentinel能够给客户端提供了监控消息的通知,从而客户端就可以根据接收的信息去判断服务器的状态,去做相应的连接配置变化。

0?wx_fmt=png

                                      图 1

1.监控(Monitoring Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。

启动后Sentinel会:

        以10秒一次的频率,向被监视的master发送info命令,根据回复获取master当前信息。

        以1秒一次的频率,向所有redis服务器、包含sentinel在内发送PING命令,通过回复判断服务器是否在线。

        以2秒一次的频率,通过向所有被监视的master,slave服务器发送包含当前sentinel,master信息的消息。

根据以上回复消息,如图2,sentinel会维护一个数据字典,数据字典里记录了包括主服务信息、从服务器信息、其他sentinel信息等。

0?wx_fmt=png

                                             图 2

2.自动故障迁移(Automatic failover:如图1, 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

需要指出来的是有多sentinel的系统,sentinel系统会通过投票,选出来一个领头者, 领头者负责处理redis主节点的下线和从节点升为主节点的工作,领头者选举总结:

1.每个要求服务器客观下线的sentinel都有机会成为领头者 ;

2.sentinel设置领头者的规则是先到先得 ;

3.如果半数以上sentinel设置为局部领头,才能成为领头者;

4.一次选举中没有选出局部领头会接着选,直到选出领头;

3.提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。

当故障转移期间,可以指定一个“通知”脚本用来告知系统管理员,当前集群的情况。

sentinel notification-script mymaster /var/redis/notify.sh 

##############################################################

0?wx_fmt=png
                                                               图 3

redis sentinel高可用集群搭建:

如图3

主节点(master):192.168.1.101    6379

从节点(slave1): 192.168.1.102    6379

从节点(slave2): 192.168.1.103    6379 

sentinel 1:192.168.1.101    6380

sentinel 2:192.168.1.102    6380

sentinel 3:192.168.1.103    6380


-----------------------------

master:192.168.1.101

tar zxvf redis-3.0.5.tar.gz

cd redis-3.0.5

mkdir /usr/local/redis

make PREFIX=/usr/local/redis install


redis安装:

mkdir /usr/local/redis/etc

cp /usr/local/src/redis/redis.conf  /usr/local/redis/etc/redis.conf

mkdir -p /usr/local/redis/data

mkdir -p  /usr/local/redis/log

cp /usr/local/src/redis-3.0.5/utils/redis_init_script /etc/rc.d/init.d/redis-6379

chkconfig --add redis-6379

chkconfig redis-6379 off

service redis-6379 start

redis服务完成


sentinel安装:

mkdir -p /usr/local/redis/sentinel

cp /usr/local/src/sentinel.conf  /usr/local/redis/sentinel/sentinel.conf

 /usr/local/redis/bin/redis-server   /usr/local/redis/sentinel/sentinel.conf --sentinel

sentinel启动完成

-----------------------------

slave:192.168.1.102

tar zxvf redis-3.0.5.tar.gz

cd redis-3.0.5

mkdir /usr/local/redis

make PREFIX=/usr/local/redis install

mkdir /usr/local/redis/etc

cp /usr/local/src/redis/redis.conf  /usr/local/redis/etc/redis.conf

mkdir -p /usr/local/redis/data

mkdir -p  /usr/local/redis/log

cp /usr/local/src/redis-3.0.5/utils/redis_init_script /etc/rc.d/init.d/redis-6379

chkconfig --add redis-6379

chkconfig redis-6379 off

service redis-6379 start

redis服务完成


mkdir -p /usr/local/redis/sentinel

cp /usr/local/src/sentinel.conf  /usr/local/redis/sentinel/sentinel.conf

 /usr/local/redis/bin/redis-server   /usr/local/redis/sentinel/sentinel.conf --sentinel

-----------------------------

slave:192.168.1.103

tar zxvf redis-3.0.5.tar.gz

cd redis-3.0.5

mkdir /usr/local/redis

make PREFIX=/usr/local/redis install

mkdir /usr/local/redis/etc

cp /usr/local/src/redis/redis.conf  /usr/local/redis/etc/redis.conf

mkdir -p /usr/local/redis/data

mkdir -p  /usr/local/redis/log

cp /usr/local/src/redis-3.0.5/utils/redis_init_script /etc/rc.d/init.d/redis-6379

chkconfig --add redis-6379

chkconfig redis-6379 off

service redis-6379 start

redis服务完成


mkdir -p /usr/local/redis/sentinel

cp /usr/local/src/sentinel.conf  /usr/local/redis/sentinel/sentinel.conf

 /usr/local/redis/bin/redis-server   /usr/local/redis/sentinel/sentinel.conf --sentinel


###############################################################
另附sentinel.conf的配置详解:


##sentinel实例之间的通讯端口  

##redis-0  

port 16379  

##sentinel需要监控的master信息:<mastername> <masterIP> <masterPort> <quorum>  

##<quorum>应该小于集群中slave的个数,只有当至少<quorum>个sentinel实例提交"master失效"  

##才会认为master为O_DWON("客观"失效)  

sentinel monitor def_master 127.0.0.1 6379 2  

  

sentinel auth-pass def_master 012_345^678-90  

  

##master被当前sentinel实例认定为“失效”的间隔时间  

##如果当前sentinel与master直接的通讯中,在指定时间内没有响应或者响应错误代码,那么  

##当前sentinel就认为master失效(SDOWN,“主观”失效)  

##<mastername> <millseconds>  

##默认为30秒  

sentinel down-after-milliseconds def_master 30000  

  

##当前sentinel实例是否允许实施“failover”(故障转移)  

##no表示当前sentinel为“观察者”(只参与"投票".不参与实施failover),  

##全局中至少有一个为yes  

sentinel can-failover def_master yes  

  

##当新master产生时,同时进行“slaveof”到新master并进行“SYNC”的slave个数。  

##默认为1,建议保持默认值  

##在salve执行salveof与同步时,将会终止客户端请求。  

##此值较大,意味着“集群”终止客户端请求的时间总和和较大。  

##此值较小,意味着“集群”在故障转移期间,多个salve向客户端提供服务时仍然使用旧数据。  

sentinel parallel-syncs def_master 1  

  

##failover过期时间,当failover开始后,在此时间内仍然没有触发任何failover操作,  

##当前sentinel将会认为此次failoer失败。  

sentinel failover-timeout def_master 900000  

  

##当failover时,可以指定一个“通知”脚本用来告知系统管理员,当前集群的情况。  

##脚本被允许执行的最大时间为60秒,如果超时,脚本将会被终止(KILL)  

##脚本执行的结果:  

## 1    -> 稍后重试,最大重试次数为10;   

## 2    -> 执行结束,无需重试  

sentinel notification-script mymaster /var/redis/notify.sh  


 

 
 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30109892/viewspace-1982662/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30109892/viewspace-1982662/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值