この記事は Relux AdventCalendar 4日目の記事です。
RDS Read Replicaのロードバランシング
複数のRead Replicaをロードバランシングする方法はいくつか考えられます。
- Reader Endpointを使用する
- HAProxyやNginxなどのソフトウェアを使用する
- NLBを使用する
Reader Endpoint
Reader EndpointはAWS RDSの機能として用意されたもので、特別な設定をすることなく利用できます。
クラスタ内のRead Replica全てに均一に分散するもので、特定のRead Replicaを対象から外すといったことはできません。
短い時間(1秒ごと)でCNAMEを切り替えてラウンドロビンするような実装となっており、実際はロードバランサではありません。
HAProxyやNginx
AWSで行うとしたら、専用のEC2インスタンスを用意し、自分でインストール・設定・管理をする必要があります。
NLBを使用する
2017年9月ごろに、ELBの一種としてリリースされた Network Load Balancerは、EC2インスタンスだけでなく、任意のIPアドレスをターゲットとしてTCPロードバランサを構築できます。
これを使用することで、特定のRead Replicaのみをターゲットとした負荷分散環境を簡単に実装することができます。
NLB で Read Replica のロードバランシングを行う
NLBの構築
EC2 Load Balancersの設定画面から「Create Load Balancer」をクリック Network Load Balancer を選択NLBの基本設定
Nameには任意の名前を設定。 Schemeは、VPC内でのみ使用するのであれば internalを選択。Listenerは、Aurora(MySQL)を対象とするので 3306/TCP
Availability Zoneでは使用するVPCを選択し、エンドポイントを置くサブネットを選択する。
ルーティングの設定
ALBと同じようにターゲットグループを作成する。
AuroraのReplicaをターゲットとする場合には、3306/TCP、Target typeは ip とする。
ターゲットの登録
ターゲットとして、ロードバランシングの対象としたいReplicaインスタンスのIPアドレスを登録する。
IPアドレスはReplicaインスタンスのDNS名をnslookupやdigで引いて調べる。
Security Groupの設定
NLBにはSecurity Groupを設定できない。
なので、NLBのAvailability Zoneに設定したサブネットのネットワークアドレスを許可するよう、RDSのSecurity Groupに設定をする。
疎通確認
アプリケーションサーバから接続可能なことを確認する。
最後に
今のところ、弊社では開発環境にのみ導入をし、試験運用を行なっております。
特に動作にが問題なく有用そうであれば、本番環境への導入を進めていきたいと思っています。