Redis Sentinel主从高可用方案(附Jedis Sentinel教程)
本文介绍一种通过Jed和Sentinel实现Redis集群(主从)的高可用方案,该方案需要使用Jedis2.2.2及以上版本(强制),Redis2.8及以上版本(可选,Sentinel最早出现在Redis2.4中,Redis2.8中Sentinel更加稳定),
附:
Redis Cluster集群主从方案:http://wosyingjun.iteye.com/blog/2289220
Redis Sentinel主从高可用方案:http://wosyingjun.iteye.com/blog/2289593
一、Sentinel介绍
Sentinel是Redis的高可用性(HA)解决方案,由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进行下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。Redis提供的sentinel(哨兵)机制,通过sentinel模式启动redis后,自动监控master/slave的运行状态,基本原理是:心跳机制+投票裁决
- 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
- 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
- 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
二、Sentinel的主从原理
之前介绍过为什么Jedis要用2.2.2及以上版本,因为主从实例地址(IP PORT)是不同的,当故障发生进行主从切换后,应用程序无法知道新地址,故在Jedis2.2.2中新增了对Sentinel的支持,应用通过redis.clients.jedis.JedisSentinelPool.getResource()取得的Jedis实例会及时更新到新的主实例地址。
三、Redis Sentinel配置
这里我采用2个哨兵,1个主redis,2个从redis的方式,配置文件如下:
sentinel_63791.conf 配置:
port 63791
daemonize yes
logfile "/var/log/sentinel_63791.log"
#master-1
sentinel monitor master-1 192.168.78.99 6379 2
sentinel down-after-milliseconds master-1 5000
sentinel failover-timeout master-1 18000
sentinel auth-pass master-1 yingjun
sentinel parallel-syncs master-1 1
sentinel_63792.conf 配置:
port 63792
daemonize yes
logfile "/var/log/sentinel_63792.log"
#master-1
sentinel monitor master-1 192.168.78.99 6379 2
sentinel down-after-milliseconds master-1 5000
sentinel failover-timeout master-1 18000
sentinel auth-pass master-1 yingjun
sentinel parallel-syncs master-1 1
redis_master_6379.conf 配置:
在原配置文件中作如下修改:
port 6379
daemonize yes
requirepass yingjun
masterauth yingjun
redis_slave_6380.conf 配置:
在原配置文件中作如下修改:
port 6380
daemonize yes
requirepass yingjun
slaveof 192.168.78.99 6379
masterauth yingjun
redis_slave_6381.conf 配置:
在原配置文件中作如下修改:
port 6381
daemonize yes
requirepass yingjun
slaveof 192.168.78.99 6379
masterauth yingjun
按如下顺序依次启动服务:
./redis-server ../conf/redis_master_6379.conf
./redis-server ../conf/redis_slave_6381.conf
./redis-server ../conf/redis_slave_6382.conf
./redis-sentinel ../conf/sentinel_63791.conf
./redis-sentinel ../conf/sentinel_63792.conf
查看进程是否都已经启动:
查看master的状态:
查看slave的状态:
查看sentinel的状态:
接下来验证redis sentinel的主从切换:
- 首先关闭主redis(6379)服务(shutdown)。
-
查看哨兵,发现端口号为6380的从服务变成了主服务,sentinel自动完成了故障切换。
- 启动刚才被shutdown的6379服务并查看,发现它变成了从服务。
三、Jedis Sentinel教程
Maven依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.0</version>
</dependency>
<!-- spring-redis -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.6.4.RELEASE</version>
</dependency>
redis的配置文件:
#redis config
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的配置文件:
<!-- Redis 配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="${redis.pool.maxTotal}" />
<property name="maxIdle" value="${redis.pool.maxIdle}" />
<property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}" />
<property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />
</bean>
<bean id="sentinelConfiguration"
class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
<property name="master">
<bean class="org.springframework.data.redis.connection.RedisNode">
<property name="name" value="master-1"></property>
</bean>
</property>
<property name="sentinels">
<set>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="${sentinel1.ip}"></constructor-arg>
<constructor-arg name="port" value="${sentinel1.port}"></constructor-arg>
</bean>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="${sentinel2.ip}"></constructor-arg>
<constructor-arg name="port" value="${sentinel2.port}"></constructor-arg>
</bean>
</set>
</property>
</bean>
<!-- Jedis ConnectionFactory连接配置 -->
<bean id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="password" value="${redis.pass}"></property>
<property name="poolConfig" >
<ref bean="jedisPoolConfig"/>
</property>
<constructor-arg name="sentinelConfig" ref="sentinelConfiguration"></constructor-arg>
</bean>
<!-- redisTemplate配置,redisTemplate是对Jedis的对redis操作的扩展,有更多的操作,封装使操作更便捷 -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory" />
</bean>
代码中直接用redisTemplate调用:
@Override
public boolean add(final KeyToken tkey) {
boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
@Override
public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
RedisSerializer<String> serializer = getRedisSerializer();
byte[] key = serializer.serialize(tkey.getIndex());
byte[] name = serializer.serialize(tkey.getExpire_time());
return connection.setNX(key, name);
}
});
return result;
}
附件:
相关推荐
Redis Sentinel 提供了一种强大的高可用性解决方案,通过监控、通知和自动故障迁移功能,确保 Redis 集群在主节点故障时仍能保持服务,同时通过 Jedis SentinelPool 支持,使得客户端能轻松适应这种变化,实现平滑的...
在2.8.19版本中,它提供了主从复制(replication)功能,以实现数据的高可用性和容错性。主从配置使得数据可以在多个实例间同步,当主节点出现问题时,从节点可以接管服务,确保服务不间断。 主从配置: 1. **配置...
哨兵是Redis的高可用性解决方案,它可以监控主从集群,自动故障检测、故障转移以及配置更新。要使用Jedis连接哨兵系统,首先在`redis-sentinel.conf`配置文件中定义哨兵节点,然后在Java代码中设置哨兵群组: ```...
在Java开发中,通过Jedis或Lettuce等Redis客户端库,可以方便地与Redis Sentinel+Keepalived集群进行交互,实现高可用的数据存储和读写操作。 总结,Redis哨兵主从模式与Keepalived的结合是企业级应用中保障数据...
Sentinel是Redis的一个高可用性解决方案,它可以监控Redis实例,并在主节点出现问题时自动进行故障转移,确保服务的连续性。 在这个"spring + redis + sentinel"配置中,我们将探讨如何整合这三个组件以创建一个...
Redis Sentinel是一种高可用性(HA)解决方案,用于监控、提醒和自动故障转移主Redis节点。在主Redis节点出现故障时,Sentinel会自动将从节点提升为主节点,确保服务的连续性。这对于Session存储至关重要,因为...
Sentinel是Redis的高可用性解决方案,它监控Redis主从集群,当主节点故障时,Sentinel会自动将从节点提升为新的主节点,并更新所有客户端的连接指向新的主节点,从而实现系统的无缝切换和高可用性。在Java应用中,...
在实际应用中,为了保证高可用性和可扩展性,Redis提供了Sentinel哨兵系统和Cluster集群两种解决方案。这个压缩包文件是一个完整的Java工程,用于测试Redis的各种连接方式,包括单节点、Sentinel哨兵和Cluster集群...
主从复制是Redis的基础高可用方案,它允许数据从主节点实时同步到多个从节点。当主节点出现故障时,可以从节点中手动或自动选择一个作为新的主节点,以保证服务的连续性。主从复制的主要步骤包括: 1. **配置主从...
Sentinel是Redis的高可用性解决方案,负责监控、故障检测以及自动故障迁移,确保集群的服务稳定性。 1. Redis介绍: Redis是一个开源的内存数据结构存储系统,可以作为数据库、缓存和消息中间件使用。它支持多种...
1. **哨兵模式**:在Redis 3.0以前,哨兵(Sentinel)系统常用于实现高可用性。哨兵监控Master节点状态,一旦检测到Master故障,会自动执行主从切换,将健康的Slave提升为新的Master。然而,哨兵模式有其局限性,如...
- Redis Sentinel是高可用性解决方案,Jedis能与Sentinel交互,自动发现主从切换,提供更稳定的连接。 7. **Cluster支持** - Redis Cluster是分布式部署方案,Jedis 3.0以上版本开始支持。通过`JedisCluster`类...
Redis以其内存存储和磁盘持久化的方式,提供了高速的数据读写性能,同时通过主从复制和哨兵系统提供了高可用性。 **Jedis简介** Jedis是Java语言中针对Redis的一个客户端库,由Xavi Beumala开发并维护。Jedis提供...
总之,Redis主从复制和Sentinel哨兵系统结合使用,能够实现高可用的数据存储解决方案。主从复制保证读写分离,提高读操作性能,而Sentinel则提供故障检测和恢复机制,确保服务的稳定性。正确配置和管理这些组件,...
Redis从入门到高可用 分布式实战教程,共140多节课程、 掌握redis主从、哨兵、集群 ,参数调优 目录: 9-9 原生安装-1.准备节点.mp4 9-8 原生安装.mp4 9-7 基本架构.mp4 9-6 虚拟槽哈希分布.mp4 9-5 一致性...
在实际应用中,可能还需要考虑高可用性(如Sentinel或Cluster)、数据一致性(AOF/RDB)、性能优化等更复杂的话题。理解并熟练掌握这些知识,有助于在开发中更好地利用Redis提升系统的性能和可靠性。
在Java开发中,Redis Sentinel是实现高可用Redis集群的关键组件,它主要负责监控主从节点的状态,当主节点出现故障时,Sentinel会自动进行故障转移,将从节点提升为主节点,确保服务的连续性。这里我们将深入探讨...
Redis Sentinel是高可用性的解决方案,用于监控、故障检测和自动故障转移。在Sentinel模式下,读写分离可以通过Sentinel提供的API动态获取主从状态,确保读请求始终指向从库,写请求指向主库。Spring Data Redis...
哨兵(Sentinel)系统是Redis提供的一种高可用性解决方案,能够监控、故障检测以及自动故障迁移,确保服务的稳定运行。 哨兵模式配置主要包括以下几个关键部分: 1. **哨兵(Sentinel)启动配置**:每个Sentinel节点...