Welcome Guest 
メインメニュー
ログイン
ユーザー名:

パスワード:


パスワード紛失

新 あきら様のブログ
あきらのページ見るって事は暇しとんの?ブログ
ランキング参加用リンク
カウンター
累計:
本日:
昨日:
トップ (メニュー)  >  ロードバランサの作成(ipvsadmとldirectordを利用)

ロードバランサの作成(ipvsadmとldirectordを利用)

バーチャルサーバを作成して、apacheのリクエストに対して負荷分散を行います。

検証環境として、同じネットワーク内に、
apacheサーバとしてのUbuntuを2台(デフォルト設定+apache2)と
ロードバランサとしてのUbuntuを1台(デフォルト設定)を用意します。
1台めのapacheサーバのホスト名:web1
2台めのapacheサーバのホスト名:web2
ロードバランサのホスト名:ld1


web1のネットワークの設定をスタティックにします。
vi /etc/network/interfaces


検証環境に合わせて、ネットワークをスタティックに設定します。
auto eth0
#iface eth0 inet dhcp #(コメントアウト)
iface eth0 inet static
address 172.16.1.10
network 172.16.1.0
netmask 255.255.255.0
broadcast 172.16.1.255
gateway 172.16.1.254


ロードバランサ(ld1)から送られたパケットを処理できるようにiptablesの設定を行います。
iptables -t nat -A PREROUTING -p tcp -m tcp -d 172.16.1.100 - -dport 80 -j REDIRECT - -to-ports 80

[オプション]
-t nat :NATチェインにルールを設定する
-A PREROUTING :パケットを処理する前の段階でNATを実施する
-d 172.16.1.100 - -dport 80 :ldバランサの仮想IPアドレスのポート80へのパケットを、処理する
-j REDIRECT - -to-ports 80 :自ホストの80番ポートでNATをかけて転送する


iptablesの設定は、再起動すると消えるので、再起動しても消えないようにします。
iptables-save > /etc/iptable_rule


作業ディレクトリを変更します。
cd /etc/network/if-pre-up.d/

viで新しいファイルを作成します。
vi iptables


iptablesファイルに以下を記述します。

#!/bin/sh
/sbin/iptables-restore < /etc/iptable_rule (記述注意!!)


iptablesファイルのアクセス権を変更します。
chmod 700 iptables


ネットワークを再起動します。
/etc/ini.d/networking restart

※web1の設定は、以上です。


web2のネットワークの設定もスタティックにします。
vi /etc/network/interface


検証環境に合わせて、ネットワークをスタティックに設定します。
auto eth0
#iface eth0 inet dhcp #(コメントアウト)
iface eth0 inet static
address 172.16.1.11 #(IPアドレス注意)
network 172.16.1.0
netmask 255.255.255.0
broadcast 172.16.1.255
gateway 172.16.1.254

また、iptablesもweb1のときを参考に設定し、ネットワークを再起動します。

※web2の設定は、以上です。


ld1のネットワークの設定もスタティックにします。
vi /etc/network/interface


検証環境に合わせて、ネットワークをスタティックに設定します。
auto eth0
#iface eth0 inet dhcp #(コメントアウト)
iface eth0 inet static
address 172.16.1.20 #(IPアドレス注意)
network 172.16.1.0
netmask 255.255.255.0
broadcast 172.16.1.255
gateway 172.16.1.254

auto eth0:0 #(記述しないと自動的に起動しません)
iface eth0:0 inet static #(記述注意!!)
address 172.16.1.100 #(仮想IPアドレス)
network 172.16.1.0
netmask 255.255.255.0
broadcast 172.16.1.255
gateway 172.16.1.254


ネットワークを再起動します。
/etc/ini.d/networking restart


ipvsadmパッケージをインストールします。
apt-get install ipvsadm

ipvsadm -L
を実行し、エラーが表示されないことを確認します。


ldirectordパッケージをインストールします。
apt-get install ldirectord

Do you want to continue[Y/n]?
Y
を入力します。


作業ディレクトリを移動します。
cd /etc/ha.d/

ldirectord.cfファイルを作成します。
cp /usr/share/doc/ldirectord/ldirectord.cf.gz . (←’.’を忘れずに。)

ファイルを解凍します。
gzip -d ldirectord.cf.gz

lsでファイルが解凍されたことを確認します。

vi で解凍されたファイルを開きます。
vi ldirectord.cf


以下のように設定します。(※最小構成です。)
virtual=172.16.1.100:80 (仮想IPアドレスとポートを指定)
real=172.16.1.10:80 gate (転送方法をgateに設定)
real=172.16.1.11:80 gate
scheduler=rr (web1,web2への転送方法で、ラウンドロビンを指定)
protocol=tcp (サービスで使用するプロトコル(udp/tcp)を指定)
# service=http (監視タイプを指定。ftp,smtp,http,popなどが指定できます。)
# request="check.html" (監視のリクエストで使うファイルを指定)
# receive="This server is active" (監視で比較する文字列を指定)

[記述方法]
real = <host><method><weight><check>

[schedulerのオプション]
rr(ラウンドロビン):実サーバへ順番にリクエストを転送する
wrr(重み付けに応じたラウンドロビン):実サーバに、<weght>指定した重みでリクエストを転送する
lc(最小コネクション):最小接続数の実サーバにリクエストを転送する
wlc(重み付けに応じた最小コネクション):実サーバに、<weight>指定した重みと最小接続数を考慮してリクエストを転送する。
lblc(ロケーションベースの最小コネクション):最小接続数で実サーバへリクエストを転送する。ただし同一クライアントからは同じ実サーバへリクエストを転送する。
lblcr(ロケーションベースの最小コネクション):lblcと同様のポリシーでリクエストを転送するが、負荷が高くなった場合は、リクエストを転送する実サーバを言って期間切り替えて処理する。
dh(接続先ハッシュ):接続先IPから計算したハッシュ値に基づいて、リクエストを転送する。
sh(送信先ハッシュ):送信元クライアントのIPから計算したハッシュ値に基づいて、リクエストを転送する。
sed(応答速度):最も応答が早いサーバにリクエストを転送する。
nq(アイドルサーバ優先):アイドル中の実サーバがある場合は、そのサーバにリクエストを転送する。

※web1,web2上にチェック用のページを配置
check.html
This server is alive


ldirectordを実行します。
/etc/init.d/ldirectord start


パケットの転送処理を行えるようにします。
vi /etc/sysctl.conf


sysctl.confファイルに以下を記述します。

net.ipv4.ip_forward=1


設定を反映させます。
sysctl -p


仮想インターフェイスが起動していることを確認します。
ifconfig eth0:0

※起動していれば、IPアドレスなどが表示されます。

ipvsadm -L

起動していば,仮想IPアドレス、web1のアドレス、web2のアドレスが表示されます。


実際に動きを確認します。
IEなどのブラウザを起動し、
http://172.16.1.100/
にアクセスします。


web1のページが表示されることを確認します。

※仮想IPアドレス(172.16.1.100)にアクセスして、web1(172.16.1.10)
が表示された。


新しい、ブラウザを開き再び
http://172.16.1.100/
にアクセスします。
web2のページが表示されたことを確認します。

※今度は、仮想IPアドレス(172.16.1.100)にアクセスして、web2(172.16.1.11)
が表示された。


負荷分散の状況を確認します。
ipvsadm -L
ActiveConnカウンターがあがっていることを確認できます。
(注意:しばらくすると消えてしまう)
このことから、負荷分散できていることが確認できます。

ActiveConn:現在アクティブなセッションの数
InActConn:接続が完了してから一定時間内のセッションの数





押し頂けるとありがたい
旅先でのパンク対応に
あとお水はいかがですか
XOOPS Cube PROJECT