redis:redis sentinel(哨兵)主从高可用方案

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

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

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

Sentinel支持集群

很显然,只使用单个sentinel进程来监控redis集群是不可靠的,当sentinel进程宕掉后(sentinel本身也有单点问题,single-point-of-failure)整个集群系统将无法按照预期的方式运行。所以有必要将sentinel集群,这样有几个好处:

  • 即使有一些sentinel进程宕掉了,依然可以进行redis集群的主备切换;
  • 如果只有一个sentinel进程,如果这个进程运行出错,或者是网络堵塞,那么将无法实现redis集群的主备切换(单点问题);
  • 如果有多个sentinel,redis的客户端可以随意地连接任意一个sentinel来获得关于redis集群中的信息。

Sentinel版本

Sentinel当前最新的稳定版本称为Sentinel2(与之前的Sentinel1区分开来)。随着redis2.8的安装包一起发行。安装完Redis2.8后,可以在redis2.8/src/里面找到Redis-sentinel的启动程序。

sentinel_63791.conf配置:

port63791

daemonizeyes

logfile"/var/log/sentinel_63791.log"

#master-1

sentinelmonitormaster-1192.168.78.9963792

sentineldown-after-millisecondsmaster-15000

sentinelfailover-timeoutmaster-118000

sentinelauth-passmaster-1yingjun

sentinelparallel-syncsmaster-11

sentinel_63792.conf配置:

port63792

daemonizeyes

logfile"/var/log/sentinel_63792.log"

#master-1

sentinelmonitormaster-1192.168.78.9963792

sentineldown-after-millisecondsmaster-15000

sentinelfailover-timeoutmaster-118000

sentinelauth-passmaster-1yingjun

sentinelparallel-syncsmaster-11

redis_master_6379.conf配置:

在原配置文件中作如下修改:

port6379

daemonizeyes

requirepassyingjun

masterauthyingjun

redis_slave_6380.conf配置:

在原配置文件中作如下修改:

port6380

daemonizeyes

requirepassyingjun

slaveof192.168.78.996379

masterauthyingjun

redis_slave_6381.conf配置:

在原配置文件中作如下修改:

port6381

daemonizeyes

requirepassyingjun

slaveof192.168.78.996379

masterauthyingjun

按如下顺序依次启动服务:

./redis-server../conf/redis_master_6379.conf

./redis-server../conf/redis_slave_6380.conf

./redis-server../conf/redis_slave_6381.conf

./redis-sentinel../conf/sentinel_63791.conf

./redis-sentinel../conf/sentinel_63792.conf

三、JedisSentinel教程

Maven依赖:

redis.clientsjedis2.8.0org.springframework.dataspring-data-redis1.6.4.RELEASEredis的配置文件:

#redisconfig

redis.pass=yingjun

redis.pool.maxTotal=105

redis.pool.maxIdle=10

redis.pool.maxWaitMillis=60000

redis.pool.testOnBorrow=true

sentinel1.ip=192.168.78.99

sentinel1.port=63791

sentinel2.ip=192.168.78.99

sentinel2.port=63792

Spring的配置文件:

代码中直接用redisTemplate调用:

@Override

publicbooleanadd(finalKeyTokentkey){

booleanresult=redisTemplate.execute(newRedisCallback(){

@Override

publicBooleandoInRedis(RedisConnectionconnection)throwsDataAccessException{

RedisSerializerserializer=getRedisSerializer();

byte[]key=serializer.serialize(tkey.getIndex());

byte[]name=serializer.serialize(tkey.getExpire_time());

returnconnection.setNX(key,name);

}

});

returnresult;

}

相关推荐