Posted at
ReluxDay 4

Amazon RDS Read ReplicaをNLBでロードバランシングする

More than 1 year has passed since last update.

この記事は 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の構築

Screen Shot 0029-12-04 at 7.21.32.png

EC2 Load Balancersの設定画面から「Create Load Balancer」をクリック

Screen Shot 0029-12-04 at 7.21.58.png

Network Load Balancer を選択


NLBの基本設定

Screen Shot 0029-12-04 at 7.23.48.png

Nameには任意の名前を設定。

Schemeは、VPC内でのみ使用するのであれば internalを選択。

Listenerは、Aurora(MySQL)を対象とするので 3306/TCP

Availability Zoneでは使用するVPCを選択し、エンドポイントを置くサブネットを選択する。


ルーティングの設定

Screen Shot 0029-12-04 at 7.24.28.png

ALBと同じようにターゲットグループを作成する。

AuroraのReplicaをターゲットとする場合には、3306/TCP、Target typeは ip とする。


ターゲットの登録

Screen Shot 0029-12-04 at 7.25.26.png

ターゲットとして、ロードバランシングの対象としたいReplicaインスタンスのIPアドレスを登録する。

IPアドレスはReplicaインスタンスのDNS名をnslookupやdigで引いて調べる。


Security Groupの設定

Screen Shot 0029-12-04 at 7.35.59.png

NLBにはSecurity Groupを設定できない。

なので、NLBのAvailability Zoneに設定したサブネットのネットワークアドレスを許可するよう、RDSのSecurity Groupに設定をする。


疎通確認

Screen Shot 0029-12-04 at 8.07.04.png

アプリケーションサーバから接続可能なことを確認する。


最後に

今のところ、弊社では開発環境にのみ導入をし、試験運用を行なっております。

特に動作にが問題なく有用そうであれば、本番環境への導入を進めていきたいと思っています。