[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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



丁寧な回答をしていただきありがとうございました。

次の質問が支離滅裂にならぬように、質問内容を考えていましたらお礼を書くのが遅くなってしまいした。申し訳ありませんでした。



‘ldirectord’の設定は問題なくできました。‘keepalived’も同様に試してみましたら、負荷分散は機能していました。理由は分かりませんが、試験のチェク用と考えていた私のPCが何故だか反応しなかっただけでした。外部のPCからのテストは問題が生じませんでした。



とりあえず、ご教授頂いた‘ldirector’の設定をメモして置きます。

ルターはNTTよりレンタルのRT-200KIです。



AA)DHCPサーバ設定

DHCPサーバ機能                           有効

割り当て開始 IPアドレス 192.168.2.2

割り当て終了 IPアドレス 192.168.2.11

固定IPアドレスで使用する端末の情報設定

 IPアドレス / MACアドレス       192.168.2.100 / 00:BC:2C:1D:21:3B



BB) 静的NAT設定

 WAN側 IPアドレス   WAN側ポート 開始 - 終了             -> LAN側転送IPアドレス

 123.123.123. 33 http(80) -> 192.168.2.100



CC) NAPT設定

  WAN側ポート 開始 - 終了 / プロトコル -> LAN側転送IPアドレス : ポート http(80)    / TCP    -> 192.168.2.100    : (80)



LVS-NAT での設定で.



 【環境】



               |

      [123.123.123. 33] パブリックIPアドレス

   +-----------------------+

   | Router DNAT  |上記のように設定済み

   +-----------------------+

      [192.168.2.1]

               |

               |

      [192.168.2.100]

    +---------------------+

    |  Debian BOX  |

    +---------------------+

      [192.168.10.1]

               |

    +----------+----------+

    |                     |

  [ *1 ]                [ *2 ]

 +--------+          +--------+

 +  RS 1  |          |  RS 2  |

 +--------+          +--------+



   *1 : 192.168.10.5

   *2 : 192.168.10.6





 【手順】



 (1) ip_forward を有効にする

     # vi /etc/sysctl.conf

     (下記を追加)

     net.ipv4.ip_forward = 1

     保存後,sysctl -pで反映.





 (2) ldirectord をインストールする

     # apt-get install ldirectord



 (3) ldirectord を設定する(ldirectord.cf を作成する)

     # mkdir /etc/ha.d/conf

     # vi /etc/ha.d/conf/ldirectord.cf

     virtual = 192.168.2.100:80

     real = 192.168.20.105:80 masq 1

     real = 192.168.20.106:80 masq 1

     protocol = tcp

     scheduler = rr

     checktype = connect



   ※ ECV チェックをする場合は・・・

     checktype = negotiate

     servite = http

     request = "/health.html"

     receive = "OK"



   virtual は行頭にスペースは入れないで,

   real 以降は行頭に「4 つ以上の半角スペース」 or「TAB」を入れる。



 (4) ifconfigでeth0:0に仮想IPアドレスをつけ足す

# ifconfig eth0:0 192.168.2.100 netmask 255.255.0.0 broadcast 192.168.2.255



 (4) ldirectord を起動する

   # /etc/init.d/ldirectord start



 (5) LVS の状況を確認する

   # ipvsadm -Ln

   IP Virtual Server version 1.2.1 (size=4096)

   Prot LocalAddress:Port Scheduler Flags

     -> RemoteAddress:Port         Forward Weight ActiveConn InActConn

   TCP  192.168.10.100:80 rr

-> 192.168.20.105:80 Masq 1 0 0

-> 192.168.20.106:80 Masq 1 0 0





尚、ルータ機能を使わず、“Debian Box”にプロバイダとPPPoEで直接に繋いでも結果は同じで外部のPCでの試験では問題は生じず、負荷分散されました。



お礼が送れた無礼をお詫びすると供に、改めて御礼を申し上げます。

ありがとうございました。





新たな質問になります。



上記設定で、“Debian Box”をサービスプロバイダと直接にPPPoEで繋いだ場合、下記の様な記述のitptablesで試みたのですが、リアルサーバの192.168.10.5には繋がりますが、192.168.10.6のリアルサーバには負荷分散しません。『Iptablesの記述の問題ではなく、パッチを宛がう必要があるのでは?』と考えます。



今使っているDebian/GNU Linux 2.6.26-2.486のOSに、添付URLのパッチ、(ipvs-nfct-2.6.26-1.diff - 2.6.26, July 17, 2008)を宛がうことが出きるか?

http://www.ssi.bg/~ja/nfct/

が質問になります。質問はこのipvs-nfct-2.6.26-1.diffであるパッチはDebian仕立てのkerenel (Debian/GNU Linux 2.6.26-2.486)では使用ができず、The Linux Kernel ArchivesからLinux 2.6.26-1のカーネルをインストールしないといけないのかです。



宜しくお願いします。



尚、iptablesの記述の問題であれば、下記を

#!/bin/sh

INTIF="eth1"

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 ip_conntrack_irc

/sbin/modprobe iptable_nat

/sbin/modprobe ip_nat_ftp

/sbin/modprobe ip_nat_irc

/sbin/modprobe ip_vs

/sbin/modprobe ip_vs_rr

/sbin/modprobe ip_vs_wlc

/sbin/modprobe ip_nfct



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"



# Clear any existing rules and setting default policy to DROP

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



# Flush the user chain.. if it exists

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

  iptables -F drop-and-log-it

fi



# Delete all User-specified chains

iptables -X



# Reset all IPTABLES counters

iptables -Z



# Creating a DROP chain

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



#######################################################################

# INPUT: Incoming traffic from various interfaces.  All rulesets are

#        already flushed and set to a default policy of DROP.

#



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



################### LVS のための設定

#iptables -A -INPUT -p tcp --dport 80 -j ACCEPT

iptables -A -INPUT -p tcp -d 192.168.2.100 --dport 80 -j ACCEPT

iptables -A -INPUT -p tcp -d 192.168.2.100 -m state --state RELATED, ESTABLISHED -j ACCEPT

iptables -A -INPUT -p tcp -d 192.168.2.100 -j DROP



#######################################################################

# OUTPUT: Outgoing traffic from various interfaces.  All rulesets are

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



#######################################################################

# FORWARD: Enable Forwarding and thus IPMASQ

#          Allow all connections OUT and only existing/related IN



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

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

# Catch all rule, all other forwarding is denied and logged.

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



# Enable SNAT (MASQUERADE) functionality on $EXTIF

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



##################  LVS のための設定

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

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

iptables -A FORWARD -m state --state RELATED,ESTABLIHSED -j ACCEPT

iptables -A FORWARD -j DROP





##################  LVSのための設定



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

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





----- Original Message ----- From: <makoto@xxxxxxxxxxxx>
To: <debian-users@debian.or.jp>
Sent: Tuesday, October 13, 2009 12:55 AM
Subject: [debian-users:53179] Re: LVS NATでロードバランス


竹林です.


> アウトバウンドはマスカレードにしておいて、インバウンドをhttp
> (80番ポート)に限定して、静的マスカレードで負荷分散している
> サーバへ流してあげれば、各サーバのファイアーウォール設定は無
> くてもセキュリティ上、さほど問題にはならないと思います。


「パブリックIPアドレスをppp0でロードバランスをするパソコンに繋ぐのではなく、ルー
タのWAN側に繋ぎ、80番ポートに限定して、仮想IPアドレスに仕向けたら問題は解決するの
では?」との考えと理解しました。

なるほど、試してみます。
スレットはこのままopenにしておき、追加質問または結果を報告いたします。

 ルータ上の DNAT を使うことで解決する/しないという問題ではなく,
ご自身が「どうしたいか」を決めないといけないと思いますが.


 とりあえず HTTP(80/tcp)をバランシングする例だけ示してみます.
 以下,keepalived ではなく ldirectord で LVS-NAT での設定となります.
# ldirectord の方が keepalived より設定が簡単なので


 【環境】

               |
      [ 123.123.123. 33 ]
   +-----------------------+
   | Router DNAT 設定済み  |
   +-----------------------+
      [ 192.168. 10.200 ]
               |
               |
      [ 192.168. 10.100 ]
    +---------------------+
    |     Debian BOX      |
    +---------------------+
      [ 192.168. 20.100 ]
               |
    +----------+----------+
    |                     |
  [ *1 ]                [ *2 ]
 +--------+          +--------+
 +  RS 1  |          |  RS 2  |
 +--------+          +--------+

   *1 : 192.168.20.105
   *2 : 192.168.20.106


 【手順】

 (1) ip_forward を有効にする

   # vi /etc/sysctl.conf

   (下記を追加)

     net.ipv4.ip_forward = 1

   保存後,sysctl -p あたりで反映.


 (2) ldirectord をインストールする

   # apt-get install ldirectord


 (3) ldirectord を設定する(ldirectord.cf を作成する)

   # mkdir /etc/ha.d/conf
   # vi /etc/ha.d/conf/ldirectord.cf

   virtual = 192.168.10.100:80
        real = 192.168.20.105:80 masq 1
        real = 192.168.20.106:80 masq 1
        protocol = tcp
        scheduler = rr
        checktype = connect

   ※ ECV チェックをする場合は・・・

        checktype = negotiate
        servite = http
        request = "/health.html"
        receive = "OK"

      などとしてください

     ちなみに virtual は行頭にスペースは入れないで,
   real 以降は行頭に「4 つ以上の半角スペース」 or「TAB」を
   入れてください.


 (4) ldirectord を起動する

   # /etc/init.d/ldirectord start


 (5) LVS の状況を確認する

   # ipvsadm -Ln
   IP Virtual Server version 1.2.1 (size=4096)
   Prot LocalAddress:Port Scheduler Flags
     -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
   TCP  192.168.10.100:80 rr
     -> 192.168.20.105:80            Masq    1      0          0
     -> 192.168.20.106:80            Masq    1      0          0

----------------------------------------------------------------
Shinya TAKEBAYASHI

E-mail : makoto@xxxxxxxxxxxx
GPG ID : FFD20D1F
GPG FP : 7B5B E0FC B785 7457 683C  47D6 5564 DDDD FFD2 0D1F
----------------------------------------------------------------