Amazon AuroraでのSlaveのインスタンスサイズについて議論したのでそのメモ

はじめに

現在、構築中の本番環境では検証の末 Amazon Aurora を使用することになりそうです

それにあたってSlaveをどうするか少し議論(?)になったので自分用のメモの意味も込めて残してきます

以前の環境

この話をするために今までの環境を確認したいと思います

今までの環境は Amazon RDS で下記の様な構成を取っていました

slaveへは各Webサーバーで起動しているhaproxyでバランシングしています。

スペックですが slave用のRDSは master用のRDSに比べてスペックを低くしてあります。

雑に図にするとこんな感じです

image

検討した構成

Auroraはフェイルオーバーの際にReplicaのどれかがマスターに昇格します。

そのため以前と同様に、slaveをmasterよりも低いスペックで運用してしまうとmasterがフェイルオーバーした際にスペックの低いDBがmasterに昇格しDBの負荷が高くなるという二次障害が起きてしまう可能性があります。

どのような構成にしようか以下のパターンが出ました

パターン1

今まで通り

master x 1 masterよりも低いスペックのslave x 2 masterと同じスペックのslave x 1 をstand by状態にしておく

これだとmasterがフェイルオーバーしてもと同等のspecのサーバーに切り替わるのでスペック的なところで問題ない ただ、 同様のスペックをstand byにしておくので勿体無い

ということで次のパターンを考えました

パターン2

master x 1 masterと同等のスペックのslave x 2

これだとmasterがフェイルオーバーしてslaveがmasterに昇格してもスペック的なところでは問題ない しかし、 slaveがマスターに昇格してもhaproxyからslaveとして参照され続けるので master + slave 両方のアクセスが有り負荷が高まる恐れがある

構築中の環境

構成は、以上のことをふまえてパターン2 にすることにしました。

以前の環境と代わりませんがslaveのスペックが大きくしました。

で、パターン2ででていた問題ですが、 haproxy 1.6 から入った external-check を使用してmasterに昇格したらslave参照をしない

という設定をhaproxy側で行う予定です。 こちらは現在検証中です。