AWS AuroraでEctoを扱う際に、Ectoをそのまま使うとConnection Poolが問題を起こすケースがある。 そのようなケースで適切にコネクションを切断するためにこのモジュールを利用すること
failoverからの復帰時におけるnameserverの反映までの間、 readonlyのendpointに対してmasterとして接続してしまい更新系SQLを実行してしまうケースがある。
その際は1290エラーが発生するので、適切にコネクションを切断すること。
また、failoverの復旧を早めるために、mariaexライブラリをカスタマイズしたものを利用する。
以下のリポジトリのfailover対応ブランチから適切なバージョンを選択する
https://github.com/xflagstudio/mariaex
Ectoは、prepared statementをコネクションごとにキャッシュする。 しかしゼロダウンタイムでaurora側のバージョンアップなどを行った際は、 コネクションは切断されないまま、サーバー側でprepared statementがクリアされてしまう。
そのため、サーバー上に存在しないprepared statementを利用しようとして1243エラーが発生する。 この場合もコネクションを適切に切断し、Ecto側のprepared statementをクリアしなければならない。
If available in Hex, the package can be installed
by adding aurora_repo
to your list of dependencies in mix.exs
:
def deps do
[
{:aurora_repo, github: "xflagstudio/aurora_repo", tag: "0.1.1"}
{:mariaex, github: "xflagstudio/mariaex", branch: "aurora_failover_0_8_4", override: true}
]
end
Ecto.Repoの代わりにAuroraRepoをuseするだけです。
defmodule YourRepo do
use AuroraRepo, otp_app: :your_app
end