keepalived を使って CentOS 上でインフラ負荷分散を構築する方法について説明します。今回は具体的な構築方法というよりも事前準備としてのネットワーク構成の説明になります。
Web ベースシステムの負荷分散を実現する例
負荷分散をミドルウェアから行う場合、BIG-IP だとプールを作ったりとミドルウェアによって様々になります。今回はオープンソースだけで構築可能な keepalived + CentOS を例にとって考えてみます。
インフラの負荷分散自体の説明については こちら 等を参照頂いた方が話しが早いですが、一般的には代表のサーバ(バーチャルサーバという)が前に立ってアクセスを後ろのサーバ(リアルサーバという)に振り分けます。
この時、リアルサーバは何台でも実現可能です。また、バーチャルサーバからリアルサーバへはそのままパケットを通す DSR という構成と全てのパケットをバーチャルサーバに中継させる NAT の 2種類の構成があります。
DSR 構成の負荷分散
DSR ではバーチャルサーバはパケットをそのまま通過させるだけなのでクライアントはリアルサーバと通信した後のパケットの戻りもリアルサーバからクライアントへ直接行われます。その為、リアルサーバはクライアントへ直接接続できなければならないことになります。
例えば、バーチャルサーバのみをグローバル IP で公開していてリアルサーバは後ろ側に隠しているといったケースの場合、リアルサーバはクライアントへと通信できない為、DSR 構成は役に立ちません。
ただ、逆にリアルサーバからクライアントへ直接接続可能なシステムの場合(ローカルネットワーク等)では DSR がよく使われます。DSR ではリアルサーバがクライアントへ直接通信を行うため、バーチャルサーバ側の負荷が軽減される為です。
NAT 構成の負荷分散
DSR がリアルサーバがクライアントへ接続可能な状態を必要とするのに対して NAT はその逆です。パケットの戻りについても常にバーチャルサーバを経由します。その為、グローバル IP を使って外部に公開しなければならないサーバはバーチャルサーバだけでいいことになります。
NAT 構成の場合、リアルサーバはバーチャルサーバへ全てパケットを返す必要がある為、ルーティングの設定を変更する必要があります。一方 DSR ではそのままの通信で利用可能な為、リアルサーバへの作業は発生しません。ここも DSR と NAT の大きな違いになります。