RDS for MySQLでの可用性向上について構成検討するにあたりゆるりとまとめてみた
Auroraは素敵な機能がたくさん出ているけど今回は、RDS for MySQLの話
マスタのMultiAZ
概要
- 異なるAZにスタンバイインスタンスを配備し、同期データレプリケーションする(同期レプリなので書込性能は劣化する)
- Amazonのフェイルオーバーテクノロジーにより、インフラレイヤの障害時に自動でスタンバイインスタンスにフェイルオーバーする
下記がフェイルオーバー発生の条件
- アベイラビリティーゾーンの機能停止
- プライマリ DB インスタンスのエラー
- DB インスタンスのサーバータイプ変更
- DB インスタンスのオペレーティングシステムでソフトウェアのパッチ適用中
- DB インスタンスの手動フェイルオーバーが [Reboot with failover] を使用して開始された
うれしいポイント
- masterの可用性とデータの耐久性をメンテナンスレスで向上させる事が出来る
リードレプリカのMultiAZ
概要
- master-リードレプリカは非同期レプリだが、リードレプリカのAZ間は同期レプリ
- マスタのMultiAZと仕組みは同じ
うれしいポイント
- リードレプリカが一台構成の時に、可用性を向上させることができる
- リージョンをまたいだDR対応が可能(リージョン死んだ時に、MultiAZ構成でレプリカをmaster昇格させる)
- 本格的なDRサイト組むような環境だとたしかにうれしいかも
- アップグレードに使える(MultiAZレプリカをアップグレードした後に、master昇格させることでメンテ時間を短縮)
リードレプリカの負荷分散
概要
- masterからリードレプリカを複数台作る(非同期レプリ)
- 単一のソースインスタンスから最大5機のリードレプリカまで作れる
- チェーンすれば台数は増やせるが、その分レプリのタイムラグは大きくなる
- Route53 のホストゾーン機能で負荷分散するのがAWS推奨らしい
- リードレプリカを増やした時は、R53へのレコード追加が必要
- 重み付けratioでリクエスト数調整したり、ヘルスチェックも使えるのでL4LB相当のことが出来る(こんな簡単にできてもうなんかLVSとか運用してた時代が。。。)
うれしいポイント
- アプリケーションからのread処理をレプリカに向けることで、masterの負荷を下げれる
- 1エンドポイントに複数台レプリカ(AZも分離する)を構える事で、1台でも生きていれば処理継続出来る
- r53のヘルスチェックを入れる必要ある
- レプリカはスケールアウト戦略で負荷に対して対応することが可能
リードレプリカのMultiAZはアップグレード時以外はあまりおいしくないなといった印象。
MultiAZでmasterを構えて、リードレプリカを複数作って負荷分散するのが負荷対策とコスト考えた時によさそう。