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





ふるた