[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[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の負荷分散もしくはロードバランスは不可能と言うことですか?それとも、
このスクリプトをベースに私のネットワークに合うプライベートアドレスに書き換えることで、機能する可能性が有るのか、ご教授頂ければ幸いです。
ふるた