2009年10月 9日

[debian-users:53162] LVS NATでロードバランス

#help

私の不手際で話が有らぬ方向に進んだため前回の質問を締め切ることにしました。

竹林さまが負荷分散に付いて引き続き回答が可能と言う事であれば、此処で新たな質問をさせていただきます。

1)既存のネットワークは

- プロバイダーのROOTER-1(192.168.2.1/24)に市販のROOTER-2(192.168.0.1/24)を付ける。4台のパソコンをROOTER-2に繋ぎ、このルータに繋がるパソコンを使いネットワークの機能を確認する。ROOTER-1は、プロバイダーBとの契約でDHCPを使いアドレスを自動的に振り分けている。

- 上記の設定に、添付のurl

http://www.ultramonkey.org/papers/lvs_tutorial/html/

と同じ構成のLVS NATネットワークを構築する。プロバイダーAのパブリックアドレスが1つ使えるため、DebianのPPPoEを使い”Linux Director”(添付url)のWAN側にパブリックアドレスを付与す
る。インターフェスはppp0でパブリックアドレスが123.123.123.33である。LAN側のインターフェスをeth2としアドレスを192.168.10.1と付与する。

#ifconfig ppp0

ppp0 Link encap:Point-to-point Protocol

inet addr:123.123.123.33 P-t-P:124.155.69.36
Mask:255.255.255.255

以下省略

#whois 124.155.69.36

inetum: 124.155.64.0 ? 124.155.127.255

netname: abc net corp(プロバイダーAの社名)

以下省略

#cat /etc/network/interfaces

auto lo

iface lo inet loopback

auto dsl-porvider

iface dsl-provider inet ppp

pre-up /sbin/ifconfig eth0 up # line maintained by pppoeconf

provider dsl-provider

auto eth2

iface eth2 inet static

address 192.168.10.1

netmask 255.255.255.0

network 192.168.10.0

broadcast 192.168.10.255

2)この設定のeth2に、スイッチを介して2台のパソコンにapache2をインストールする。先ずはリアルサーバになる1台(192.168.10.5)で、インターネットに繋がるか試みる。“Linux Director”の/etc/init.d/firewall.shの
ダィレクトリーに下記のスクリプトを入れファイアーウォールを仕立てる。

#!/bin/sh

INTIF="eth2"

INTNET="192.168.10.0/24"

INTIP="192.168.10.1"

EXTIF="ppp0"

EXTIP="123.123.123.33"

/sbin/depmod -a

/sbin/modprobe ip_tables

/sbin/modprobe ip_conntrack

/sbin/modprobe ip_conntrack_ftp

sbin/modprobe iptable_nat

/sbin/modprobe ip_nat_ftp

echo "1" > /proc/sys/net/ipv4/ip_forward

echo "1" > /proc/sys/net/ipv4/ip_dynaddr

echo " External interface: $EXTIF"

echo " External interface IP address is: $EXTIP"

UNIVERSE="0.0.0.0/0"

iptables -P INPUT DROP

iptables -F INPUT

iptables -P OUTPUT DROP

iptables -F OUTPUT

iptables -P FORWARD DROP

iptables -F FORWARD

iptables -F -t nat

if [ "`iptables -L | grep drop-and-log-it`" ]; then

iptables -F drop-and-log-it

fi

iptables -X

iptables -Z

iptables -N drop-and-log-it

iptables -A drop-and-log-it -j LOG --log-level info

iptables -A drop-and-log-it -j REJECT

iptables -A INPUT -i lo -s $UNIVERSE -d $UNIVERSE -j ACCEPT

iptables -A INPUT -i $INTIF -s $INTNET -d $UNIVERSE -j ACCEPT

iptables -A INPUT -i $EXTIF -s $INTNET -d $UNIVERSE -j drop-and-log-it

iptables -A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -j ACCEPT

iptables -A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -m state --state
ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -s $UNIVERSE -d $UNIVERSE -j drop-and-log-it

iptables -A OUTPUT -o lo -s $UNIVERSE -d $UNIVERSE -j ACCEPT

iptables -A OUTPUT -o $INTIF -s $EXTIP -d $INTNET -j ACCEPT

iptables -A OUTPUT -o $INTIF -s $INTIP -d $INTNET -j ACCEPT

iptables -A OUTPUT -o $EXTIF -s $UNIVERSE -d $INTNET -j drop-and-log-it

iptables -A OUTPUT -o $EXTIF -s $EXTIP -d $UNIVERSE -j ACCEPT

iptables -A OUTPUT -s $UNIVERSE -d $UNIVERSE -j drop-and-log-it

iptables -A FORWARD -i $EXTIF -o $INTIF -m state --state
ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT

iptables -A FORWARD -j drop-and-log-it

iptables -A FORWARD -i $EXTIF -o $INTIF -d 192.168.10.105 -p tcp --deport
80 -j ACCEPT

iptables -t nat -A POSTROUTING -o $EXTIF -j SNAT --to $EXTIP

iptables -t nat -A PREROUTING -i $EXTIF -d $EXTIP -p tcp --dport 80 -j
DNAT --to 192.168.10.105

試験用のパソコンにドメイン http://xxxx.comとhttp;//123.123.123.33を入力すると


/var/www/index.htmlファイルの“It works”が現れる。ファイアーウォールもapache2も問題なく機能することが分かる。試しに友人[外部]のPCで試してみても、”I works“が現れ192.168.10.5のウェブサーバに
つながることが確認できる。

3)2台目(192.168.10.6)のindex.htmlは“It is working”と記述を変えどちらのapache2に繋がるか分かるようにする。

Linux Directorにあるfirewall.shのスクリプトを削除する。

# rm /etc/init.d/firewall.sh

新しく下記のパッケジをインストールする。

# aptitude install ipvsadm
# aptitude install keepalived

/etc/keepalived/keepalived.confのディレクトリーに下記のスクリプトを書き込む。


virtual_server_group HTTP100 {

192.168.10.100 80

}

virtual_server group HTTP100 {

delay_loop 3

lvs_sched rr

lvs_method NAT

protocol TCP

virtualhost xxxxx.com

sorry_server 192.168.10.100 80

real_server 192.168.10.5 80 {

weight 1

inhibit_on_failure

HTTP_GET {

url {

path /health.html

status_code 200

}

connect_timeout 3

}

}

real_server 192.168.10.6 80 {

weight 1

inhibit_on_failure

HTTP_GET {

url {

path /health.html

status_code 200

}

connect_timeout 3

}

}

}

# nano /etc/sysctl.conf で下記の記述の#をuncommentする。

net.ipv4.ip_forward = 1

仮想アドレスの設定

#ifconfig eth0:0 192.168.10.100 netmask 255.255.255.0 broadcast
192.168.10.255

LVSの設定

#ipvsadm -A -t 172.17.60.201:80

#ipvsadm -a -t 172.17.60.201:80 -r 192.168.6.4:80 -m

#ipvsadm -a -t 172.17.60.201:80 -r 192.168.6.5:80 -m

以上の設定で、試験用のパソコンに仮想アドレス 192.168.10.100を入力すると、ロードバランスが機能する。数回繰返すと“It works”から”It is working”が現れる。此処までの設定は
想像していた結果が現れる。

4)この設定に上記のfirewall.shのスクリプトを絡ませたいのですが、スクリプトの書き換えをどのようにして良いのか見当がつきません。

http://www.keepalived.org/Keepalived-LVS-NAT-Director-ProxyArp-Firewall-HOWTO.html

上記urlにLVS NATのファイアーウォールの例がありますが、この場合はパブリックアドレスを数十ヶ使用した場合の記述になるようです。

私のようにパブリックアドレスが1つしかない場合はファイアーウォールを絡ませた、LVS NATの負荷分散もしくはロードバランスは不可能と言うことですか?それとも、
このスクリプトをベースに私のネットワークに合うプライベートアドレスに書き換えることで、機能する可能性が有るのか、ご教授頂ければ幸いです。

ふるた

投稿者 xml-rpc : 2009年10月 9日 01:08
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/89313
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。