我有一个基于Spring Cloud的应用程序,带有多个后端Spring- Boot服务器。这些服务器都通过@EnableRedisHttpSession与Redis服务器共享会话。
我正在尝试使用主从配置和Redis Sentinel配置应用程序。我的设置是1个主机,2个从机和3个哨兵。
我不断遇到环境问题。刚开始,我遇到一个错误,说我的奴隶是READONLY。因此,我必须将所有从属设备设置为READWRITE。然后,我仍然收到此错误。事实证明,当从属服务器升级为主服务器时,旧的主服务器被转换为从属服务器,并且具有默认的READONLY设置。因此,我也必须将主机设置为READWRITE。这些是我引导redis服务器的命令(我知道使用同一台机器是没有意义的,在此阶段用于测试目的):
引导大师:
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
参与会话的每个spring-boot服务器的application.properties/yml配置:
#Redis config spring.redis.sentinel.master: mymaster spring.redis.sentinel.nodes: localhost:5000,localhost:5001,localhost:5002
Redis哨兵配置:
redis-sentinel sentinel-0.conf redis-sentinel sentinel-1.conf redis-sentinel sentinel-2.conf
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
现在,只要一切正常且没有问题,一切就可以正常进行。
但是,一旦我杀死了主Redis服务器,一切就停止了。首先,出现以下错误:
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。这甚至在注销后也会发生。
我注意到当我杀死主服务器时,redis sentinel会重写我的配置文件。例如,在杀死主redis服务器之后,sentinel.conf现在显示如下:
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节点,这些设置仍保持不变。我只能通过手动修复配置文件来使应用程序再次运行。
显然,目前我无法使用此解决方案。任何帮助将不胜感激。
这是完整的堆栈跟踪:
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
同样,这是前哨日志之一的输出:
_.-``__ ''-._ _.-`` `. `_. ''-._ 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通知):
_._ _.-``__ ''-._ _.-`` `. `_. ''-._ 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奴隶的日志:
_._ _.-``__ ''-._ _.-`` `. `_. ''-._ 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
谢谢。
我终于找到了解决方案。是我作为一名开发人员,没有足够的前瞻性思考…
在很远的过去的某个时候,启动一台服务器(网关,这是会话管理中的重要网关)时,我遇到了异常,告诉我找不到jedisConnectionFactory bean。所以我在主类中写了一个硬编码的……指向端口6379处的localhost :)。难怪哨兵配置被忽略了。
删除@Bean后,一切运行正常。
我发现它的方式可能是其他人的很好参考。起初,我注意到Spring忽略了我在application.properties中的条目。
因此,我用自己的sentinelConfig @Bean和自己的jedisConnectionFactory @Bean编写了自己的@Configuration类。Spring选择了我的sentinelConfig,但完全忽略了我的jedisConnectionFactory(简单的调试确定了该问题)。
因此,我将bean重命名为customJedisConnectionFactory之类的东西,然后收到一条错误消息,内容是让两个bean实现RedisConnectionFactory。从那里很快可以在我的源代码中找到另一个@Bean。