ActiveRecord::ConnectionTimeoutError после переключения узла кластера БД
Среда
У меня есть нагрузка приложения rails 3.2.x между двумя веб-серверами: web1 и web2. Каждый веб-сервер указывает на кластерный IP-адрес для базы данных mysql. База данных состоит из 2 серверов, кластеризованных (по стеллажам). 1 база данных активна за один раз до аварийного переключения.
ошибка
На нашем последнем отказоустойчивом web1 началась отправка ActiveRecord::ConnectionTimeoutError
на Middleware/Rack/ActiveRecord::QueryCache#call
(трассировка стека ниже), а в web2 не было ошибок. Обратите внимание, что это произошло после того, как БД была стабильной и 100% переключилась на другой узел.
теория
Моя теория заключается в том, что сеанс, кэш или соединение ссылались на старый узел и после переключения не могли найти указанное соединение. Это кажется странным, поскольку оба узла БД кластеризованы, обслуживают один и тот же кластерный IP и реплицируются.
Временное решение
Нашим временным решением было перезапустить сервер рельсов web1, это сработало.
Вопросы
1) Мне было интересно, смогу ли я получить объяснение того, что может происходить здесь
2) Есть ли настройки конфигурации, которые могут предотвратить это в будущем.
Трассировки стека
Сообщение об ошибке ActiveRecord::ConnectionTimeoutError: не удалось получить соединение с базой данных в течение 5 секунд (ожидание 5.000268907 секунд). Максимальный размер пула в настоящее время 5; рассмотреть возможность увеличения его.
… Record/connection_adapters/abstract/connection_pool.rb: 258: в block (2 levels) in checkout'
…record/connection_adapters/abstract/connection_pool.rb: 242:in
loop '… record / connection_adapters / abstract / connection_pool.rb: 242: in block in checkout'
/usr/local/lib/ruby/1.9.1/monitor.rb: 211:in
mon_synchronize '… record / connection_adapters / abstract / connection_pool.rb: 239: в checkout'
…record/connection_adapters/abstract/connection_pool.rb: 102:in
заблокировать соединение '
/usr/local/lib/ruby/1.9.1/monitor.rb: 211:in mon_synchronize'
…record/connection_adapters/abstract/connection_pool.rb: 101:in
соединение '… record / connection_adapters / abstract / connection_pool.rb: 410: in retrieve_connection'
…nnection_adapters/abstract/connection_specification.rb: 171:in
retrieve_connection '… nnection_adapters / abstract / connection_specification.rb: 145: in connection'
…s/activerecord-3.2.19/lib/active_record/query_cache.rb: 67:in
спасение при вызове '
…s/activerecord-3.2.19/lib/active_record/query_cache.rb: 61:in call'
…record/connection_adapters/abstract/connection_pool.rb: 479:in
вызвать '… ack-3.2.19 / lib / action_dispatch / middleware / callbacks.rb: 28: in block in call'
…s/activesupport-3.2.19/lib/active_support/callbacks.rb: 405:in
_run__862588711471957735__call__1324336831638990183__callbacks '… s / activesupport-3.2.19 / lib / active_support / callbacks.rb: 405: in __run_callback'
…s/activesupport-3.2.19/lib/active_support/callbacks.rb: 385:in
_run_call_callbacks '… s / activesupport-3.2.19 / lib / active_support / callbacks.rb: 81: in run_callbacks'
…ack-3.2.19/lib/action_dispatch/middleware/callbacks.rb: 27:in
вызовите '
…ack-3.2.19/lib/action_dispatch/middleware/remote_ip.rb: 31:in call'
…/gems/airbrake-3.1.14/lib/airbrake/rails/middleware.rb: 13:in
вызовите '
….19/lib/action_dispatch/middleware/debug_exceptions.rb: 16:in call'
…2.19/lib/action_dispatch/middleware/show_exceptions.rb: 56:in
вызовите '
…by/1.9.1/gems/railties-3.2.19/lib/rails/rack/logger.rb: 32:in call_app'
…by/1.9.1/gems/railties-3.2.19/lib/rails/rack/logger.rb: 16:in
блок в вызове '
…ivesupport-3.2.19/lib/active_support/tagged_logging.rb: 22:in tagged'
…by/1.9.1/gems/railties-3.2.19/lib/rails/rack/logger.rb: 16:in
вызовите…ck-3.2.19/lib/action_dispatch/middleware/request_id.rb: 22:in call'
…/ruby/1.9.1/gems/rack-1.4.5/lib/rack/methodoverride.rb: 21:in
вызовите '
…/bundle/ruby / 1.9.1 / gems / rack-1.4.5 / lib / rack / runtime.rb: 17: in call'
…9.1/gems/airbrake-3.1.14/lib/airbrake/user_informer.rb: 16:in
_call '… 9.1 / gems / airbrake-3.1.14 / lib / airbrake / user_informer.rb: 12: in call'
…le/ruby/1.9.1/gems/railties-3.2.19/lib/rails/engine.rb: 484:in
вызовите '… by / 1.9.1 / gems / railties-3.2.19 / lib / rails / application.rb: 231: in call'
…gems/railties-3.2.19/lib/rails/railtie/configurable.rb: 30:in
method_missing '… r-3.0.13 / lib / phusion_passenger / rack / request_handler.rb: 96: в `process_request'