環境
Rails 3.2.x アプリの負荷を 2 つの Web サーバー (web1 と web2) 間で分散しています。各 Web サーバーは、mysql データベースのクラスター化された IP を指します。データベースは (ラックスペースごとに) クラスター化された 2 つのサーバーです。フェールオーバーまで、一度に 1 つのデータベースがアクティブになります。
エラー
最新のフェールオーバーでは、web1 は送信ActiveRecord::ConnectionTimeoutError
を開始しましたがMiddleware/Rack/ActiveRecord::QueryCache#call
(以下のスタック トレース)、web2 にはエラーはありませんでした。これは、DB が安定し、100% が他のノードに切り替えられた後に発生したことに注意してください。
仮説
私の理論は、セッション、キャッシュ、または接続が古いノードを参照し、切り替えられると、その接続を見つけることができなかったというものです。両方の DB ノードがクラスター化され、同じクラスター化された IP でサービスを提供し、レプリケートされるため、これは奇妙に思えます。
一時的な解決策
私たちの暫定的な解決策は、web1 rails サーバーを再起動することでした。これはうまくいきました。
質問
1) ここで何が起こっているのか説明が得られるかどうか疑問に思っていました
2)将来これを防ぐことができる構成設定はありますか。
スタックトレース
エラー メッセージ ActiveRecord::ConnectionTimeoutError: 5 秒以内にデータベース接続を取得できませんでした (5.000268907 秒待機)。最大プール サイズは現在 5 です。増やすことを検討してください。
…record/connection_adapters/abstract/connection_pool.rb: 258:in 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:in checkout'
…record/connection_adapters/abstract/connection_pool.rb: 102:in
block in connection' /usr/local/lib/ruby/1.9.1/monitor.rb: 211:in mon_synchronize'
…record/connection_adapters/abstract/connection_pool.rb: 101:in
connection' …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:inconnection'
…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: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:で__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: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: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
call' …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
block in call' …ivesupport- 3.2.19/lib/active_support/tagged_logging.rb: 22: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: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: call'
…9.1/gems/airbrake-3.1.14/lib/airbrake/user_informer.rb: 16:in
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
call' …by/1.9.1 /gems/railties-3.2.19/lib/rails/application.rb: 231:incall'
…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' で