码迷,mamicode.com
首页 > 其他好文 > 详细

redis sentinel 高可用集群

时间:2015-10-20 16:38:55      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:

        redis是目前比较火爆的nosql开源软件。他因为丰富的数据类型和每秒80k+的速度对有高并发,大访问量要求的应用场景是很好的选择。我用redis主要用来做数据的cache。以及分布式系统中session的集中存储。为了解决redis的单点故障,提高redis的可靠性,以前的做法是用Keepalived来控制虚IP的浮动,来进行热备。随着redis2.8和3.0版本的诞生。目前官网支持sentinel模式的热备,sentinel是哨兵,不断监听目前redis的存活状态。整体采用一主多备的模式。读写分离。主节点可读可写,备节点只读。

部署:三台服务器,ip分别为192.168.0.2(master,sentinel),192.168.0.3(slave,sentinel),192.168.0.4(slave,sentinel)

1.选用redis的版本是3.0.4。单节点的部署不再赘述。网上百度/google一大片。

2.master节点部署好以后,两个备节点在配置文件中分别添加:

slaveof 192.168.0.2 6379

作为主节点的备用节点。

3.查看节点运行情况

redis-cli -h 192.168.0.2 -p 6379 info replication

4.部署sentinel

打开sentinel配置文件sentinel.conf

port 26379
sentinel monitor mymaster 192.168.0.2 6379 2  #j监控主节点,并且当2个sentinel节点认为master宕机时启动failover
sentinel down-after-milliseconds mymaster 5000 #master多久不可达的时候转换状态为S_DOWN
sentinel failover-timeout mymaster 900000 #预留一个主从切换的时间。如果这个时间之内没有完成主从切换则宣告切换失败。

5.启动sentinel

./bin/redis-sentinel ./conf/sentinel.conf --sentinel


按照上面的配置依次配置ip为192.168.0.3,192.168.0.4开启sentinel。

4.spring的整合。

我的开发架构中用了spring的spring-data-redis。相关配置文件如下:

<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal" value="${redis.maxTotal}"/>
        <property name="maxIdle" value="${redis.maxIdle}"/>
        <property name="timeBetweenEvictionRunsMillis" value="${redis.timeBetweenEvictionRunsMillis}"/>
        <property name="minEvictableIdleTimeMillis" value="${redis.minEvictableIdleTimeMillis}"/>
        <property name="testOnBorrow" value="${redis.testOnBorrow}"/>
    </bean>
    <bean id="redisSentinelConfiguration" class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
        <property name="master">
            <bean class="org.springframework.data.redis.connection.RedisNode">
                <property name="name" value="mymaster"/>
            </bean>
        </property>
        <property name="sentinels">
            <set>
                <bean class="org.springframework.data.redis.connection.RedisNode">
                    <constructor-arg name="host" value="192.168.0.2"/>
                    <constructor-arg name="port" value="26379"/>
                </bean>
                <bean class="org.springframework.data.redis.connection.RedisNode">
                    <constructor-arg name="host" value="192.168.0.3"/>
                    <constructor-arg name="port" value="26379"/>
                </bean>
                <bean class="org.springframework.data.redis.connection.RedisNode">
                    <constructor-arg name="host" value="192.168.0.4"/>
                    <constructor-arg name="port" value="26379"/>
                </bean>
            </set>
        </property>
    </bean>
    <bean id="jedisConnFactory"
          class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <constructor-arg ref="redisSentinelConfiguration"/>
        <constructor-arg ref="jedisPoolConfig"/>
    </bean>
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="jedisConnFactory"/>
        <property name="keySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
        </property>
        <property name="valueSerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
        </property>
    </bean>

以上是redis的使用总结请大家多指教谢谢!





redis sentinel 高可用集群

标签:

原文地址:http://my.oschina.net/hanjiafu/blog/519376

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!