2016-02-28 2 views
1

У меня есть приложение на основе Spring Cloud с несколькими backend серверами Spring-Boot. Все серверы делятся своим сеансом с сервером Redis через @EnableRedisHttpSession.Корректная конфигурация @EnableRedisHttpSession с Redis Sentinel

Я пытаюсь настроить приложение с помощью конфигурации master-slave и Redis Sentinel. Моя настройка - 1 мастер, два раба и 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 

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 

Файлы конф являются:

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). Обычно это указывает на то, что он не может найти идентификатор сеанса, который ему нужно использовать. И это происходит даже после выхода из системы.

Я заметил, что когда я убиваю главный сервер, 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 узлов. Я могу заставить приложение снова работать, вручную установив файлы конфигурации.

Очевидно, я не могу использовать это решение на данный момент. Любая помощь будет принята с благодарностью.

Вот полный StackTrace:

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 

Спасибо.

+0

Вы добавили полную трассировку стека? – mp911de

+0

Добавлено. Я до сих пор перешел к полным файлам redis.conf для каждого сервера (master или slave) и пропустил встроенные настройки conf, я думаю, что это вызывало проблемы, главным образом потому, что по умолчанию все 3 сервера, вероятно, записывались в один и тот же файл дампа. Теперь я сосредоточен на проблеме не получения соединения из пула, как описано выше. Когда я удаляю мастер, я получаю ошибку. Когда мастер запускается снова - сайт работает. – odedia

+0

Добавлены дополнительные журналы с сервера сервера redis, slaves, sentinel – odedia

ответ

1

Я наконец нашел решение. Это был разработчик, который не слишком хорошо думал ...

В какой-то момент в самом далеком прошлом у меня были исключения при загрузке одного из серверов (шлюз, который является важным, когда дело доходит до управление сеансом), сообщая мне, что он не может найти jedisConnectionFactory bean. Поэтому я написал один, жестко закодированный, в основном классе ... указав на localhost на порт 6379 :). Не удивительно, что конфигурация контролера была проигнорирована.

С тем, что @Bean удален, все работает отлично.

Как я нашел, это может быть хорошей точкой отсчета для других. Сначала я заметил, что Spring игнорирует мои записи в application.properties.

Итак, я написал свой собственный класс @Configuration, с моим собственным sentinelConfig @Bean и моим собственным jedisConnectionFactory @Bean. Spring подобрала мой sentinelConfig, но полностью проигнорировала мою jedisConnectionFactory (простая отладка идентифицировала эту проблему).

Итак, я переименовал компонент в нечто вроде customJedisConnectionFactory, а затем получил сообщение об ошибке, связанное с наличием двух компонентов, реализующих RedisConnectionFactory. Оттуда было быстро найти другой @Bean в моем исходном коде.

Спасибо.

Смежные вопросы