基本的なWebシステムの高性能化手法
前回までで、スケールアウトに欠かせないアクセス分散について理解できたと思います。今回は、まずIPTablesとIPRoute2によるアクセス分散の実際を解説します。
IPTables/IPRoute2によるアクセス分散
IPTables(FreeBSDではNetFilter)は、TCP/IP ネットワークのパケットの受信/送信/ルーティングを制御するプログラムで、Firewall構築に利用されます。IPTablesは多くの機能をサポー トしていますが、中でもNAT(Network Address Translation)機能が負荷分散を行う機能を持っています。送信元のアドレスの変換を行うSNATと、送信先のアドレス変換を行うDNATの2種 類のNAT機能がありますが、このうちDNATがアクセス分散に利用できます。
図10の構成では、IPTablesを実行するコンピュータはFirewall(ルータ)のように動作させ、実際にネットワークリクエストを処理するサーバーは別のコンピュータで実行させる必要があります。

図10:IPTablesによるアクセスの分散
iptablesコマンドでDNATの設定を追加する書式は、リスト1のようになります。
リスト1:DNATの設定追加の書式
iptables -A PREROUTING -t nat -p tcp -i -d --dport 80 -j DNAT --to-distination - IPTablesを利用した負荷分散では、グローバルアドレスをプライベートIPアドレスに変換/分散します。リスト2の例では、グローバルアドレスを記述すべき箇所に、便宜上IPアドレス10.10.10.10を記述しています。
リスト2:DNATの設定追加の具体例
iptables -A PREROUTING -t nat -p tcp -i eth0 -d 10.10.10.10 --dport 80 -j DNAT --to-distination 192.168.1.100-192.168.1.200 この例では、10.10.10.10の80番ポート(http)へのアクセスは192.168.1.100〜192.168.1.200の範囲のIPアドレスのコンピュータへ分散されます。
IPTablesは、ネットワークの帯域制御やトンネリングを行うプログラムとして開発されました。よくIPRoute2の利用方法として紹介されるのが、複数のISPへの接続を行う例です(図11)。

図11:IPRoute2による複数のISPへの接続
この複数のISPへのアクセスを、ちょうどリバースプロキシのように逆にするとWebサーバーへのアクセス分散に利用できます(図12)。IPRoute2は、IPTablesよりルールベースの細かいネットワークトラフィック制御が可能です。

図12:IPRoute2による負荷分散