使用Redis Sentinel更正@EnableRedisHttpSession配置 [英] Correct @EnableRedisHttpSession configuration with Redis Sentinel

查看:3122
本文介绍了使用Redis Sentinel更正@EnableRedisHttpSession配置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个基于Spring Cloud的应用程序,它有多个后端Spring-Boot服务器。服务器都通过@EnableRedisHttpSession与Redis服务器共享会话。

I have a Spring Cloud based application with multiple backend Spring-Boot servers. The servers are all sharing their session with a Redis server via @EnableRedisHttpSession.

我正在尝试使用主从配置和Redis Sentinel配置应用程序。我的设置是1个主人,2个奴隶和3个哨兵。

I'm trying to configure the application with master-slave configuration and Redis Sentinel. My setup is 1 master, two slaves, and 3 sentinels.

我不断遇到环境问题。起初,我收到一个错误,说我的奴隶是READONLY。所以我必须将所有从属设置为READWRITE。然后,我仍然有这个错误。事实证明,当一个奴隶被提升为主人时,旧的主人被改为奴隶,具有默认的READONLY设置。所以我不得不将master设置为READWRITE。这些是我启动redis服务器的命令(我知道使用同一台机器是没有意义的,在这个阶段用于测试目的):

I keep getting issues with the environment. At first, I was getting an error saying that my slave it READONLY. So I had to set all slaves to READWRITE. Then, I still got this error. Turns out that when a slave was promoted to master, the old master was turned into slave, with the default READONLY setting. So I had to set the master to READWRITE as well. These are my commands to boot the redis servers (I know it makes no sense to use the same machine, it's for testing purposes at this stage):

Boot master:

Boot master:

redis-server --slave-read-only no --port 6379

引导奴隶:

redis-server --slaveof 127.0.0.1 6379 --slave-read-only no --port 6380
redis-server --slaveof 127.0.0.1 6379 --slave-read-only no --port 6381

application.properties/yml config:

application.properties/yml config per spring-boot server participating in the session:

#Redis config
spring.redis.sentinel.master: mymaster
spring.redis.sentinel.nodes: localhost:5000,localhost:5001,localhost:5002

Redis sentinel config:

Redis sentinel config:

redis-sentinel sentinel-0.conf
redis-sentinel sentinel-1.conf
redis-sentinel sentinel-2.conf

配置文件是:

port 5000
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel config-epoch mymaster 6

对于其他两个哨兵它的端口5001和5002

For the other two sentinels it's port 5001 and 5002

现在,只要一切正常并且没有问题,一切正常。

Now, as long as everything is normal and there are no issues, everything works fine.

但是,一旦我杀死了主redis服务器,事情就会停止工作。
首先,我收到以下错误:

However, once I kill the master redis server, things stop working. First, I get the following error:

There was an unexpected error (type=Internal Server Error, status=500).
Cannot get Jedis connection; nested exception is     redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool

更糟糕的是,当我重新启动我的应用程序时,事情也会停止工作。每个说法没有真正的错误,但应用程序根本不起作用。例如,我得到的页面只包含一些文本(没有javascript / css / images),而不是为我提供内容。这通常表明它无法找到需要使用的会话ID。即使在注销后也会发生这种情况。

What's worse, when I restart my application, things stop working as well. There are no real errors per say, but the application simply won't work. For example, instead of serving me content, I get a page with just some text (no javascript/css/images). This is usually an indication that it cannot find the session id it needs to use. And this happens even after logout.

我注意到当我杀死主服务器时,redis sentinel会重写我的配置文件。例如,在杀死主redis服务器之后,sentinel.conf现在显示如下:

I noticed that when I kill the master server, redis sentinel rewrites my config files. For example, after killing the master redis server, the sentinel.conf now appears like this:

port 5000
sentinel monitor mymaster 127.0.0.1 6381 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel config-epoch mymaster 6
# Generated by CONFIG REWRITE
dir "/user/odedia/.jenkins/workspace/boot_redis_sentinel_0"
sentinel leader-epoch mymaster 6
sentinel known-slave mymaster 127.0.0.1 6380
sentinel known-slave mymaster 127.0.0.1 6379
sentinel known-sentinel mymaster 127.0.0.1 5002 28d5fdf14fcc023045f00b00fcdbd4d4f4554611
sentinel known-sentinel mymaster 127.0.0.1 5001 a492f1f0e270fa67c22e057fbd12e981811a79fe
sentinel current-epoch 6

现在,即使重新启动所有服务器/ redis节点,这些设置仍保持不变。我只能通过手动修复配置文件来重新启动应用程序。

And now these settings remain as is even after restarting all servers/redis nodes. I can only get the application working again by manually fixing the config files.

显然我目前无法使用此解决方案。任何帮助将不胜感激。

Clearly I can't use this solution at the moment. Any help would be greatly appreciated.

这是完整的堆栈跟踪:

2016-02-29 12:11:12.640 ERROR 32389 --- [enerContainer-1] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2016-02-29 12:11:16.134 ERROR 32389 --- [nio-9090-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception

org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
    at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.fetchJedisConnector(JedisConnectionFactory.java:162) ~[spring-data-redis-1.6.1.RELEASE.jar!/:1.6.1.RELEASE]
    at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.getConnection(JedisConnectionFactory.java:251) ~[spring-data-redis-1.6.1.RELEASE.jar!/:1.6.1.RELEASE]
    at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.getConnection(JedisConnectionFactory.java:58) ~[spring-data-redis-1.6.1.RELEASE.jar!/:1.6.1.RELEASE]
    at org.springframework.data.redis.core.RedisConnectionUtils.doGetConnection(RedisConnectionUtils.java:128) ~[spring-data-redis-1.6.1.RELEASE.jar!/:1.6.1.RELEASE]
    at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:91) ~[spring-data-redis-1.6.1.RELEASE.jar!/:1.6.1.RELEASE]
    at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:78) ~[spring-data-redis-1.6.1.RELEASE.jar!/:1.6.1.RELEASE]
    at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:178) ~[spring-data-redis-1.6.1.RELEASE.jar!/:1.6.1.RELEASE]
    at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:153) ~[spring-data-redis-1.6.1.RELEASE.jar!/:1.6.1.RELEASE]
    at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:86) ~[spring-data-redis-1.6.1.RELEASE.jar!/:1.6.1.RELEASE]
    at org.springframework.data.redis.core.DefaultHashOperations.entries(DefaultHashOperations.java:220) ~[spring-data-redis-1.6.1.RELEASE.jar!/:1.6.1.RELEASE]
    at org.springframework.data.redis.core.DefaultBoundHashOperations.entries(DefaultBoundHashOperations.java:101) ~[spring-data-redis-1.6.1.RELEASE.jar!/:1.6.1.RELEASE]
    at org.springframework.session.data.redis.RedisOperationsSessionRepository.getSession(RedisOperationsSessionRepository.java:233) ~[spring-session-1.0.2.RELEASE.jar!/:na]
    at org.springframework.session.data.redis.RedisOperationsSessionRepository.getSession(RedisOperationsSessionRepository.java:220) ~[spring-session-1.0.2.RELEASE.jar!/:na]
    at org.springframework.session.data.redis.RedisOperationsSessionRepository.getSession(RedisOperationsSessionRepository.java:141) ~[spring-session-1.0.2.RELEASE.jar!/:na]
    at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.getSession(SessionRepositoryFilter.java:276) ~[spring-session-1.0.2.RELEASE.jar!/:na]
    at org.springframework.web.context.request.ServletRequestAttributes.updateAccessedSessionAttributes(ServletRequestAttributes.java:255) ~[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE]
    at org.springframework.web.context.request.AbstractRequestAttributes.requestCompleted(AbstractRequestAttributes.java:48) ~[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE]
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:106) ~[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) ~[tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) ~[tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87) ~[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) ~[tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) ~[tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) ~[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) ~[tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) ~[tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:125) ~[spring-session-1.0.2.RELEASE.jar!/:na]
    at org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:65) ~[spring-session-1.0.2.RELEASE.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) ~[tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) ~[tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121) ~[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) ~[tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) ~[tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:103) ~[spring-boot-actuator-1.3.0.RELEASE.jar!/:1.3.0.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) ~[tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) ~[tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217) ~[tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) [tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) [tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) [tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) [tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) [tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) [tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673) [tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) [tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) [tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_65]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_65]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.0.28.jar!/:8.0.28]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_65]
Caused by: redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
    at redis.clients.util.Pool.getResource(Pool.java:50) ~[jedis-2.7.3.jar!/:na]
    at redis.clients.jedis.JedisPool.getResource(JedisPool.java:99) ~[jedis-2.7.3.jar!/:na]
    at redis.clients.jedis.JedisPool.getResource(JedisPool.java:12) ~[jedis-2.7.3.jar!/:na]
    at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.fetchJedisConnector(JedisConnectionFactory.java:155) ~[spring-data-redis-1.6.1.RELEASE.jar!/:1.6.1.RELEASE]
    ... 55 common frames omitted
Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused
    at redis.clients.jedis.Connection.connect(Connection.java:164) ~[jedis-2.7.3.jar!/:na]
    at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:82) ~[jedis-2.7.3.jar!/:na]
    at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1641) ~[jedis-2.7.3.jar!/:na]
    at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:85) ~[jedis-2.7.3.jar!/:na]
    at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:868) ~[commons-pool2-2.4.2.jar!/:2.4.2]
    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:435) ~[commons-pool2-2.4.2.jar!/:2.4.2]
    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363) ~[commons-pool2-2.4.2.jar!/:2.4.2]
    at redis.clients.util.Pool.getResource(Pool.java:48) ~[jedis-2.7.3.jar!/:na]
    ... 58 common frames omitted
Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_65]
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_65]
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_65]
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_65]
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_65]
    at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_65]
    at redis.clients.jedis.Connection.connect(Connection.java:158) ~[jedis-2.7.3.jar!/:na]
    ... 65 common frames omitted

另外,这是其中一个标记日志的输出:

Also, here is the output of one of the sentinels log:

           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.0.6 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 5001
 |    `-._   `._    /     _.-'    |     PID: 30337
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

30337:X 29 Feb 12:43:42.898 # Sentinel runid is b2146318c65fb869a5933d6812b41de89cd0131a
30337:X 29 Feb 12:43:42.898 # +monitor master mymaster 127.0.0.1 6379 quorum 2
30337:X 29 Feb 12:43:45.015 * -dup-sentinel master mymaster 127.0.0.1 6379 #duplicate of 127.0.0.1:5000 or 719b5af91a18190a4d07059243bb664b95047f0f
30337:X 29 Feb 12:43:45.015 * +sentinel sentinel 127.0.0.1:5000 127.0.0.1 5000 @ mymaster 127.0.0.1 6379
30337:X 29 Feb 12:43:45.095 * -dup-sentinel master mymaster 127.0.0.1 6379 #duplicate of 127.0.0.1:5002 or b375d206c4833c1196911073f63a13f9ee19b5b1
30337:X 29 Feb 12:43:45.095 * +sentinel sentinel 127.0.0.1:5002 127.0.0.1 5002 @ mymaster 127.0.0.1 6379
30337:X 29 Feb 12:44:07.928 # +sdown master mymaster 127.0.0.1 6379
30337:X 29 Feb 12:44:08.502 # +new-epoch 66
30337:X 29 Feb 12:44:08.630 # +vote-for-leader 719b5af91a18190a4d07059243bb664b95047f0f 66
30337:X 29 Feb 12:44:09.094 # +odown master mymaster 127.0.0.1 6379 #quorum 3/2
30337:X 29 Feb 12:44:09.094 # Next failover delay: I will not start a failover before Mon Feb 29 12:46:08 2016
30337:X 29 Feb 12:46:08.143 # +new-epoch 67
30337:X 29 Feb 12:46:08.144 # +vote-for-leader b375d206c4833c1196911073f63a13f9ee19b5b1 67
30337:X 29 Feb 12:46:08.150 # Next failover delay: I will not start a failover before Mon Feb 29 12:48:08 2016
30337:X 29 Feb 12:48:08.309 # +new-epoch 68
30337:X 29 Feb 12:48:08.310 # +try-failover master mymaster 127.0.0.1 6379
30337:X 29 Feb 12:48:08.313 # +vote-for-leader b2146318c65fb869a5933d6812b41de89cd0131a 68
30337:X 29 Feb 12:48:08.318 # 127.0.0.1:5002 voted for b2146318c65fb869a5933d6812b41de89cd0131a 68
30337:X 29 Feb 12:48:08.318 # 127.0.0.1:5000 voted for b2146318c65fb869a5933d6812b41de89cd0131a 68
30337:X 29 Feb 12:48:08.403 # +elected-leader master mymaster 127.0.0.1 6379
30337:X 29 Feb 12:48:08.404 # +failover-state-select-slave master mymaster 127.0.0.1 6379
30337:X 29 Feb 12:48:08.466 # -failover-abort-no-good-slave master mymaster 127.0.0.1 6379
30337:X 29 Feb 12:48:08.525 # Next failover delay: I will not start a failover before Mon Feb 29 12:50:08 2016

这是Redis主机的日志(带有sigterm通知):

Here is the log of the Redis master (with the sigterm notification):

                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.0.6 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 30316
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

30316:S 29 Feb 12:43:42.883 # Server started, Redis version 3.0.6
30316:S 29 Feb 12:43:42.883 * DB loaded from disk: 0.000 seconds
30316:S 29 Feb 12:43:42.883 * The server is now ready to accept connections on port 6379
30316:S 29 Feb 12:43:42.883 * Connecting to MASTER 127.0.0.1:6380
30316:S 29 Feb 12:43:42.883 * MASTER <-> SLAVE sync started
30316:S 29 Feb 12:43:42.883 # Error condition on socket for SYNC: Connection refused
30316:S 29 Feb 12:43:43.896 * Connecting to MASTER 127.0.0.1:6380
30316:S 29 Feb 12:43:43.896 * MASTER <-> SLAVE sync started
30316:S 29 Feb 12:43:43.896 * Non blocking connect for SYNC fired the event.
30316:S 29 Feb 12:43:43.896 * Master replied to PING, replication can continue...
30316:S 29 Feb 12:43:43.896 * Partial resynchronization not possible (no cached master)
30316:S 29 Feb 12:43:43.897 * Full resync from master: 04f525038fe60c44a75fac73285485fa534bf24c:1
30316:S 29 Feb 12:43:43.996 * MASTER <-> SLAVE sync: receiving 18 bytes from master
30316:S 29 Feb 12:43:43.996 * MASTER <-> SLAVE sync: Flushing old data
30316:S 29 Feb 12:43:43.996 * MASTER <-> SLAVE sync: Loading DB in memory
30316:S 29 Feb 12:43:43.996 * MASTER <-> SLAVE sync: Finished with success
30316:signal-handler (1456742796) Received SIGTERM scheduling shutdown...

以下是两个Redis奴隶的日志:

And here is the log of the two Redis slaves:

                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.0.6 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6380
 |    `-._   `._    /     _.-'    |     PID: 30319
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

30319:M 29 Feb 12:43:42.884 # Server started, Redis version 3.0.6
30319:M 29 Feb 12:43:42.884 * DB loaded from disk: 0.000 seconds
30319:M 29 Feb 12:43:42.884 * The server is now ready to accept connections on port 6380
30319:M 29 Feb 12:43:42.891 * Slave 127.0.0.1:6381 asks for synchronization
30319:M 29 Feb 12:43:42.891 * Full resync requested by slave 127.0.0.1:6381
30319:M 29 Feb 12:43:42.891 * Starting BGSAVE for SYNC with target: disk
30319:M 29 Feb 12:43:42.891 * Background saving started by pid 30333
30333:C 29 Feb 12:43:42.901 * DB saved on disk
30333:C 29 Feb 12:43:42.901 * RDB: 0 MB of memory used by copy-on-write
30319:M 29 Feb 12:43:42.984 * Background saving terminated with success
30319:M 29 Feb 12:43:42.984 * Synchronization with slave 127.0.0.1:6381 succeeded
30319:M 29 Feb 12:43:43.896 * Slave 127.0.0.1:6379 asks for synchronization
30319:M 29 Feb 12:43:43.896 * Full resync requested by slave 127.0.0.1:6379
30319:M 29 Feb 12:43:43.896 * Starting BGSAVE for SYNC with target: disk
30319:M 29 Feb 12:43:43.897 * Background saving started by pid 30368
30368:C 29 Feb 12:43:43.903 * DB saved on disk
30368:C 29 Feb 12:43:43.903 * RDB: 0 MB of memory used by copy-on-write

第二名:

                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.0.6 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6381
 |    `-._   `._    /     _.-'    |     PID: 30325
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

30325:S 29 Feb 12:43:42.889 # Server started, Redis version 3.0.6
30325:S 29 Feb 12:43:42.889 * DB loaded from disk: 0.000 seconds
30325:S 29 Feb 12:43:42.889 * The server is now ready to accept connections on port 6381
30325:S 29 Feb 12:43:42.889 * Connecting to MASTER 127.0.0.1:6380
30325:S 29 Feb 12:43:42.889 * MASTER <-> SLAVE sync started
30325:S 29 Feb 12:43:42.889 * Non blocking connect for SYNC fired the event.
30325:S 29 Feb 12:43:42.890 * Master replied to PING, replication can continue...
30325:S 29 Feb 12:43:42.891 * Partial resynchronization not possible (no cached master)
30325:S 29 Feb 12:43:42.892 * Full resync from master: 04f525038fe60c44a75fac73285485fa534bf24c:1
30325:S 29 Feb 12:43:42.984 * MASTER <-> SLAVE sync: receiving 18 bytes from master
30325:S 29 Feb 12:43:42.984 * MASTER <-> SLAVE sync: Flushing old data
30325:S 29 Feb 12:43:42.984 * MASTER <-> SLAVE sync: Loading DB in memory
30325:S 29 Feb 12:43:42.984 * MASTER <-> SLAVE sync: Finished with success

谢谢。

推荐答案

我终于找到了解决方案。我是一个没有充分思考的开发人员......

I finally found the solution. It was me being a developer that is not thinking forward enough...

在远处的某个时刻,我在启动其中一个服务器时遇到异常(网关) ,当涉及到会话管理时,这是重要的一个),告诉我它找不到jedisConnectionFactory bean。所以我在主类中编写了一个硬编码的...指向localhost at port 6379 :)。难怪哨兵配置被忽略了。

At some point in the very distant past I got exceptions when booting one of the servers (The gateway, which is the important one when it comes to the session management), telling me that it cannot find jedisConnectionFactory bean. So I wrote one, hard-coded, in the main class... pointing to localhost at port 6379 :). No wonder sentinel configuration was ignored.

删除@Bean后,一切正常。

With that @Bean removed, everything is working perfectly.

我发现它的方式可能很好其他人的参考点。起初,我注意到Spring在application.properties中忽略了我的条目。

The way I found it could be a good point of reference for others. At first, I noticed Spring ignores my entries in application.properties.

所以,我用我自己的sentinelConfig @Bean和我自己的jedisConnectionFactory编写了我自己的@Configuration类。豆。 Spring拿起了我的sentinelConfig,但完全忽略了我的jedisConnectionFactory(简单的调试确定了这个问题)。

So, I wrote my own @Configuration class, with my own sentinelConfig @Bean and my own jedisConnectionFactory @Bean. Spring picked up my sentinelConfig, but totally ignored my jedisConnectionFactory (simple debug identified that issue).

因此,我将bean重命名为customJedisConnectionFactory,然后我收到一条关于让两个bean实现RedisConnectionFactory的错误消息。从那里很快就能在我的源代码中找到另一个@Bean。

So, I renamed the bean to something like customJedisConnectionFactory, and then I got an error message about having two beans implementing RedisConnectionFactory. From there it was quick to find the other @Bean in my source code.

谢谢。

这篇关于使用Redis Sentinel更正@EnableRedisHttpSession配置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆