redis 哨兵模式配置 和 spring data redis 哨兵配置 总结
2018-01-30 14:20
781 查看
从帖子http://blog.csdn.net/men_wen/article/details/72724406学习了哨兵配置,但是在实践的过程中遇到了问题,主要是关于bind配置,密码认证,ip的问题。然后再次总结一下。
redis版本3.2.100
分别有3个Sentinel节点,1个主节点,2个从节点组成一个Redis Sentinel。
spring-data-redis版本1.8.9.RELEASE
jedis版本2.9.0
redis版本3.2.100
分别有3个Sentinel节点,1个主节点,2个从节点组成一个Redis Sentinel。
角色 | ip | 端口 |
---|---|---|
master | 192.168.30.249 | 6379 |
slave1 | 192.168.30.123 | 6379 |
slave2 | 192.168.30.254 | 6379 |
Sentinel1 | 192.168.30.249 | 26379 |
Sentinel2 | 192.168.30.123 | 26379 |
Sentinel3 | 192.168.30.254 | 26379 |
192.168.30.249 配置
redis.conf配置
主要修改的配置如下,其他配置默认。##这里绑定真实ip。让客户端可以远程访问 bind 192.168.30.249 port 6379 ##开启日志级别是debug,方便看日志调试。 loglevel debug ##日志位置 logfile "D:/myStuepss/redis-x64-3.2.100/redisserver.log" ##配置了master的认证密码,虽然当前角色是master,但是一旦挂掉恢复后,会变为salve,这个时候再连接新master的时候,如果master需要密码认证,就需要配置。 masterauth "redistest@123" ##客户端连接的时候需要密码认证。 requirepass "redistest@123"
sentinel配置
#这里配置成真实ip。为了客户端可以远程访问,例如:我用了spring data redis. 这里如果不配置ip,会报错的。 bind 192.168.30.249 port 26379 dir "D:\\myStuepss\\Redis-x64-3.2.100\\temp" #监控master sentinel monitor mymaster 192.168.30.249 6379 2 #要配置上master的认证密码,否则监控不到 sentinel auth-pass mymaster redistest@123 #配置上日志,方便排除错误,查看状态。 logfile "D:/myStuepss/redis-x64-3.2.100/sentinellog.log" loglevel debug
192.168.30.254配置
redis.conf配置
主要修改的配置如下,其他配置默认。##这里绑定真实ip。让客户端可以远程访问 bind 192.168.30.254 port 6379 slaveof 192.168.30.249 6379 ##配置了master的认证密码,作为salve要同步master的数据,不配置就连不上master masterauth "redistest@123" ##客户端连接的时候需要密码认证。 requirepass "redistest@123"
sentinel配置
#这里配置成真实ip。为了客户端可以远程访问,例如:我用了spring data redis. 这里如果不配置ip,会报错的。 bind 192.168.30.254 port 26379 dir "D:\\myStuepss\\Redis-x64-3.2.100\\temp" #监控master sentinel monitor mymaster 192.168.30.249 6379 2 #要配置上master的认证密码,否则监控不到 sentinel auth-pass mymaster redistest@123 #配置上日志,方便排除错误,查看状态。 logfile "D:/myStuepss/redis-x64-3.2.100/sentinellog.log" loglevel debug
192.168.30.123配置
redis.conf配置
主要修改的配置如下,其他配置默认。##这里绑定真实ip。让客户端可以远程访问 bind 192.168.30.123 port 6379 slaveof 192.168.30.249 6379 ##配置了master的认证密码,作为salve要同步master的数据,不配置就连不上master masterauth "redistest@123" ##客户端连接的时候需要密码认证。 requirepass "redistest@123"
sentinel配置
#这里配置成真实ip。为了客户端可以远程访问,例如:我用了spring data redis. 这里如果不配置ip,会报错的。 bind 192.168.30.123 port 26379 dir "D:\\myStuepss\\Redis-x64-3.2.100\\temp" #监控master sentinel monitor mymaster 192.168.30.249 6379 2 #要配置上master的认证密码,否则监控不到 sentinel auth-pass mymaster redistest@123 #配置上日志,方便排除错误,查看状态。 logfile "D:/myStuepss/redis-x64-3.2.100/sentinellog.log" loglevel debug
spring data redis 哨兵配置
spring版本4.3.5.RELEASEspring-data-redis版本1.8.9.RELEASE
jedis版本2.9.0
redis.properties配置
#主机和端口号 redis.host1.cloudq=192.168.30.254 redis.port1.cloudq=26379 redis.host2.cloudq=192.168.30.249 redis.port2.cloudq=26379 redis.host3.cloudq=192.168.30.123 redis.port3.cloudq=26379 #JedisPoolConfig的参数 #最大连接数 redis.pool.maxTotal=30 #最大空闲时间 redis.pool.maxIdle=10 #每次最大连接数 redis.pool.numTestsPerEvictionRun=1024 #释放扫描的扫描间隔 redis.pool.timeBetweenEvictionRunsMillis=30000 #连接的最小空闲时间 redis.pool.minEvictableIdleTimeMillis=1800000 #连接控歘按时间多久后释放,当空闲时间>该值且空闲连接>最大空闲连接数时直接释放 redis.pool.softMinEvictableIdleTimeMillis=10000 #获得链接时的最大等待毫秒数,小于0:阻塞不确定时间,默认-1 redis.pool.maxWaitMillis=1500 #在获得链接的时候检查有效性,默认false redis.pool.testOnBorrow=true #在空闲时检查有效性,默认false redis.pool.testWhileIdle=true #连接耗尽时是否阻塞,false报异常,true阻塞超时,默认true redis.pool.blockWhenExhausted=false #JedisConnectionFactory的参数 #超时时间,默认:2000 redis.timeout.cloudq=3000 #密码 redis.password.cloudq=redistest@123 #是否使用连接池,默认true redis.usePool=true #使用数据库的索引,0-15之间的数字,默认:0 redis.dbIndex=0 #是否使用数据类型的转换,默认:true #redis.convertPipelineAndTxResults #哨兵配置 #redis.sentinelConfig redis.expiration=3000
spring-redis.xml配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "> <!--引入配置文件--> <bean id="placeholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="order" value="1"/> <property name="ignoreUnresolvablePlaceholders" value="true"/> <property name="locations"> <list> <value>classpath:redis.properties</value> </list> </property> </bean> <!--配置 jedis pool--> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <!-- 最大连接数 --> <property name="maxTotal" value="${redis.pool.maxTotal}"/> <!-- 最大空闲时间 --> <property name="maxIdle" value="${redis.pool.maxIdle}"/> <!-- 每次最大连接数 --> <property name="numTestsPerEvictionRun" value="${redis.pool.numTestsPerEvictionRun}"/> <!-- 释放扫描的扫描间隔 --> <property name="timeBetweenEvictionRunsMillis" value="${redis.pool.timeBetweenEvictionRunsMillis}"/> <!-- 连接的最小空闲时间 --> <property name="minEvictableIdleTimeMillis" value="${redis.pool.minEvictableIdleTimeMillis}"/> <!-- 连接控歘按时间多久后释放,当空闲时间>该值且空闲连接>最大空闲连接数时直接释放 --> <property name="softMinEvictableIdleTimeMillis" value="${redis.pool.softMinEvictableIdleTimeMillis}"/> <!-- 获得链接时的最大等待毫秒数,小于0:阻塞不确定时间,默认-1 --> <property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}"/> <!-- 在获得链接的时候检查有效性,默认false --> <property name="testOnBorrow" value="${redis.pool.testOnBorrow}"/> <!-- 在空闲时检查有效性,默认false --> <property name="testWhileIdle" value="${redis.pool.testWhileIdle}"/> <!-- 连接耗尽时是否阻塞,false报异常,true阻塞超时 默认:true--> <property name="blockWhenExhausted" value="${redis.pool.blockWhenExhausted}"/> </bean> <!--配置redisSentinelConfiguration 哨兵模式--> <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"> </property> </bean> </property> <property name="sentinels"> <set> <bean class="org.springframework.data.redis.connection.RedisNode"> <constructor-arg name="host" value="${redis.host1.cloudq}"/> <constructor-arg name="port" value="${redis.port1.cloudq}"/> </bean> <bean class="org.springframework.data.redis.connection.RedisNode"> <constructor-arg name="host" value="${redis.host2.cloudq}"/> <constructor-arg name="port" value="${redis.port2.cloudq}"/> </bean> <bean class="org.springframework.data.redis.connection.RedisNode"> <constructor-arg name="host" value="${redis.host3.cloudq}"/> <constructor-arg name="port" value="${redis.port3.cloudq}"/> </bean> </set> </property> </bean> <bean id="redisConnectionFactorySentinel" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:password="${redis.password.cloudq}"> <constructor-arg name="sentinelConfig" ref="redisSentinelConfiguration"></constructor-arg> <constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg> </bean> <!-- redis template definition --> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connection-factory-ref="redisConnectionFactorySentinel" p:keySerializer-ref="genericJackson2JsonRedisSerializer" p:valueSerializer-ref="genericJackson2JsonRedisSerializer" p:hashKeySerializer-ref="genericJackson2JsonRedisSerializer" p:hashValueSerializer-ref="genericJackson2JsonRedisSerializer" p:enableTransactionSupport="false"/> <bean id="genericJackson2JsonRedisSerializer" class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/> <!-- 配置RedisCacheManager 实现spring框架提供的缓存 --> <!-- <bean id="redisCacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"> <constructor-arg name="redisOperations" ref="redisTemplate"/> <property name="defaultExpiration" value="${redis.expiration}"/> </bean>--> </beans>
junit测试
import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:/spring-redis.xml"} ) public class LockTest { @Autowired private RedisTemplate redisTemplate; @org.junit.Test public void test() throws Exception{ ValueOperations valueOperations = redisTemplate.opsForValue(); for(int i =0;i<10000;i++){ try{ valueOperations.set("test:"+i,i); }catch (Exception e){ e.printStackTrace(); } Thread.sleep(1000); } } }
相关文章推荐
- 【Redis】Redis的基本安装及使用、Jedis的基本使用、spring-data-redis的集成、主从模式、哨兵模式
- spring-data-redis使用哨兵配置一主多从
- redis哨兵模式spring配置
- spring-data-redis使用哨兵配置一主多从
- spring-data-redis 哨兵配置例子
- spring-data-redis用配置类连接时,抛异常Cannot get Jedis connection; nested exception is java.lang.NullPointerEx
- Spring集成Redis方案(spring-data-redis)(基于Jedis的单机模式)(待实践)
- Spring集成Jedis(不依赖spring-data-redis)(单机/集群模式)(待实践)
- Redis-sentinel哨兵模式集群方案配置
- Spring Data Redis 单节点和集群配置和RedisTemplate用法
- Spring-data-redis操作redis知识总结
- 四:redis主从读写分离,哨兵模式与spring的集成
- Spring-data-redis操作redis知识总结
- redis的主从架构的配置和哨兵模式原理和配置
- Redis-sentinel哨兵模式集群方案配置
- spring-data-redis + Jedis配置文件
- spring整合redis集群的相关配置(senlient模式)
- Redis哨兵模式配置
- spring data redis配置
- Spring data redis配置各个配置的解析