redis HA策略

       Redis提供的HA策略包括master-slave配置和sentinel策略。其中master-slave能够进行主从配置,redis支持异步的主从配置,性能不是问题,参考:http://www.redis.cn/topics/replication.html  。sentinel策略,也称为哨兵模式,可以理解为单独开了一个线程监控master-slave的运行状态,在master出现故障时实现自动切换,参考:http://www.redis.cn/topics/sentinel.html 。

        redis版本号3.0,客户端jedis2.5.2。在一台虚拟机进行测试,master分配端口6379和26379,slave1分配端口6378和26378,slave2分配端口6377和26377。

         安装redis,参考http://lpyyn.iteye.com/blog/2199433 ,安装完成之后复制redis安装目录下的src/redis-server、src/redis-sentinel、redis.conf、sentinel.conf到目录/usr/local/redis-master-slave,分别放到三个文件夹下master6379、slave6377和slave6378,将6379为master,6378和6377为slave。

 

  • 配置master和slave,只需要配置redis.conf

       master配置,只需要改下端口

#端口
port 6379

       slave6377配置

#端口
port 6377
#作为6379的slave
slaveof 172.16.230.61 6379

       slave6378配置 

#端口
port 6378
#作为6379的slave
slaveof 172.16.230.61 6379

       配置完成之后,先启动master,然后分别启动slave,通过redis-cli对master进行set操作,再分别在slave中通过get查看master中set的值,至此master-slave配置完成,但是他们之间是没有failover机制。

 

  • 配置sentinel,主要配置sentinel.conf

       master配置

#sentinel检测端口号
port 26379
#sentinel供外放访问的IP
sentinel announce-ip 172.16.230.61
#初始监控的master地址和端口,以及需要多少个sentinel同意才能判断一个master失效,并启用failover
sentinel monitor mymaster 172.16.230.61 6379 1

       slave6377配置,相对于master的配置只是改下port。

#sentinel检测端口号
port 26377
#sentinel供外放访问的IP
sentinel announce-ip 172.16.230.61
#初始监控的master地址和端口,以及需要多少个sentinel同意才能判断一个master失效,并启用failover
sentinel monitor mymaster 172.16.230.61 6379 1

       slave6378配置。

#sentinel检测端口号
port 26378
#sentinel供外放访问的IP
sentinel announce-ip 172.16.230.61
#初始监控的master地址和端口,以及需要多少个sentinel同意才能判断一个master失效,并启用failover
sentinel monitor mymaster 172.16.230.61 6379 1

       sentinel的其它配置,例如:down-after-milliseconds、failover-timeout等,保持默认。

 

   通过以下命令分别启动master、slave以及sentinel。

./redis-server redis.conf
./redis-sentinel sentinel.conf

 启动后,可以看到三个sentinel的界面如下,由日志中可以看到6379、6378和6377已经被sentinel监视了。

 

 

 

  使用redis-cli连到sentinel端口查看当前的master-slave信息。

  查看整个master-slave:

# ./redis-cli -p 26377
127.0.0.1:26377> sentinel master mymaster

  

 查看当前的master:

# ./redis-cli -p 26377
127.0.0.1:26377> sentinel get-master-addr-by-name mymaster

 
 

 

 

  通过控制台停止6379,./redis-cli -p 6379 shutdown , 由sentinel控制台可以看到打出了failover的时间点。 

 

基于spring-data-redis 和 jedis-2.5.2的连接工厂配置如下:

RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration() ;
//配置redis的sentinel
redisSentinelConfiguration.master("mymaster").sentinel("172.16.230.61", 26379).sentinel("172.16.230.61", 26378).sentinel("172.16.230.61", 26377) ;
//通过RedisSentinelConfiguration配置JedisConnectionFactory
jedisConnectionFactory = new JedisConnectionFactory(redisSentinelConfiguration) ;

通过JedisConnectionFactory获取Connection时,会首先会由sentinel获取master信息,然后建立和master的连接,参考日志如下:

八月 26, 2015 4:49:46 下午 redis.clients.jedis.JedisSentinelPool initSentinels
INFO: Trying to find master from available Sentinels...
八月 26, 2015 4:49:46 下午 redis.clients.jedis.JedisSentinelPool initSentinels
INFO: Redis master running at 172.16.230.61:6378, starting Sentinel listeners...
八月 26, 2015 4:49:46 下午 redis.clients.jedis.JedisSentinelPool initPool
INFO: Created JedisPool to master at 172.16.230.61:6378

 

注:相关配置打包,见附件redis-master-slave.rar

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值