LoginSignup
8
9

More than 5 years have passed since last update.

Vagrant で CentOS6.6, LVS (IPVS) の NAT 転送方法をためしてみる, その1

Last updated at Posted at 2015-04-10

LVS (Linux Virtual Server)

ちょっと勉強する時間ができたので、ロードバランサの勉強をしてみた。LVS は。。。というか wiki の説明が詳しいので説明はそちらを参考、なのですがvagrant で NAT転送した場合にすこしハマッタとこがあるので毎度の自分メモ。今回、vagrant の nic についてちょっとした小ネタ発見したので結構よかったw

varant の 複数nic指定

public_network, private_network を同時に指定できるって知らんかった。ただし順番あるのでそこは注意すること。

config.vm.define :nictest do |node|
  node.vm.network :public_network, ip: "192.168.0.201" 
  node.vm.network :private_network, ip: "192.168.11.117" 
end

と指定した場合、public_network が「eth1」、private_network が「eth2」でnicが作成される。これ便利やw

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:4f:b8:06 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
    inet6 fe80::a00:27ff:fe4f:b806/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:e0:ee:d2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.201/24 brd 192.168.0.255 scope global eth1
    inet6 fe80::a00:27ff:fee0:eed2/64 scope link 
       valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:10:b4:f6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.117/24 brd 192.168.11.255 scope global eth2
    inet6 fe80::a00:27ff:fe10:b4f6/64 scope link 
       valid_lft forever preferred_lft forever

ネットワーク構成

図のようなネットワーク構成を作成してみます。①にアクセスするのは、同一ネットワークないの他の機器を想定してます。

lvs.png

# lvs
  config.vm.define :nictest do |node|
    node.vm.hostname = "lvs"
    node.vm.network :public_network, ip: "192.168.0.201" 
    node.vm.network :private_network, ip: "192.168.11.117" 
  end

  # node1 
  config.vm.define :node1 do |node|
    node.vm.hostname = "node1"
    node.vm.network :private_network, ip: "192.168.11.118" 
  end

  # node2
  config.vm.define :node2 do |node|
    node.vm.hostname = "node2"
    node.vm.network :private_network, ip: "192.168.11.119" 
  end

lvs(ロードバランサー)側の設定

ipvsadm のインストールと、ポート転送の設定をします。

$ sudo yum install ipvsadm
$ sudo vi /etc/sysctl.conf
net.ipv4.ip_forward = 1  ← 0を1に
$ sudo /sbin/sysctl -p
$ sudo /sbin/sysctl -a | grep net.ipv4.ip_forward

ipvsadm の設定。DNSラウンドロビン&NATの設定をします。

$ sudo ipvsadm -C
$ sudo ipvsadm -A -t 192.168.0.201:80 -s rr
$ sudo ipvsadm -a -t 192.168.0.201:80 -r 192.168.11.118:80 -m
$ sudo ipvsadm -a -t 192.168.0.201:80 -r 192.168.11.119:80 -m
$ sudo /etc/init.d/ipvsadm save
$ sudo cat /etc/sysconfig/ipvsadm
$ sudo chkconfig ipvsadm on
$ sudo ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.201:http rr
  -> 192.168.11.118:http          Masq    1      0          0         
  -> 192.168.11.119:http          Masq    1      0          0         

node1, node2 側の設定

Apache, nginx, node.js なんでもいいですw
が、まあ無難に Apache をインストールしておきますかね。

$ sudo su
# yum install httpd
# sudo service httpd start
# chkconfig httpd on
# echo "node" > /var/www/html/index.html

gw の設定をします。lvs の eth2(192.168.11.117) を指定しますが、node1, node2 側から外部(インタネットー側)にアクセスすることができなくなるので注意が必要です。

$ sudo route add default gw 192.168.11.117
$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.11.0    0.0.0.0         255.255.255.0   U         0 0          0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth1
0.0.0.0         192.168.11.117  0.0.0.0         UG        0 0          0 eth1

アクセスしてみる

curl 192.168.0.201 にアクセスしてみてみるべし。うまく node1, node2 にアクセスされると思います(Apacheのログを見るのもいいね)。

動作が不安定

なにが原因か不明なのですが、10分経過すると突然アクセスできなくなる現象があります。
まあこれきっと、vagrant のなにか?が悪さしてるんだろうな?って感じでみてますが、nat は調子悪いので DSR を使っています。

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9