ITPub博客

首页 > 数据库 > NoSQL > Redis Sentinel高可用机制总结及配置详解

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

原创 NoSQL 作者:bestpaydata 时间:2016-01-26 18:15:53 0 删除 编辑

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

                                      图 1

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

启动后Sentinel会:

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

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

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

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

                                             图 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 

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


                                                               图 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博客 ” ,链接:https://blog.itpub.net/30109892/viewspace-1982662/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-01-19

  • 博文量
    126
  • 访问量
    1054935