Ubuntu 16.04
 

LVS (Linux Virtual Server) 設定
2016/06/12
 
LVS (Linux Virtual Server) によるロードバランサの構築です。
ここでは以下のような環境を例に設定します。
        |
--------+--------------------------------------------------------------------
        |
        +-------------------+--------------------+
        |10.0.0.40(VIP)     |                    |
    eth0|10.0.0.30      eth0|10.0.0.51       eth0|10.0.0.52
 +------+-----+     +-------+------+     +-------+------+
 | LVS Server |     |   Backend#1  |     |   Backend#2  |
 |            |     |  Web Server  |     |  Web Server  |
 +------------+     +--------------+     +--------------+

 
LVSサーバーの 10.0.0.40(VIP)宛へ来た HTTP パケットを Backend#1, Backend#2 の Webサーバーへ DSR(Direct Server Return) 方式で負荷分散します。
[1] ipvsadm をインストールします。
root@dlp:~#
apt-get -y install ipvsadm
root@dlp:~#
vi /etc/default/ipvsadm
# 変更

AUTO="
true
"
# 変更

DAEMON="
master
"
# 利用するインターフェースに変更

IFACE="
eth0
"
root@dlp:~#
systemctl restart ipvsadm
[2] LVS サーバーで仮想IPアドレスを設定しておきます。
root@dlp:~#
vi /etc/network/interfaces
# 最終行に追記

auto eth0:0
iface eth0:0 inet static
address 10.0.0.40
network 10.0.0.0
netmask 255.255.255.0
root@dlp:~#
ifup eth0:0

root@dlp:~#
ip addr show eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP< mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:39:8a:e6 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.30/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.0.0.40/24 brd 10.0.0.255 scope global secondary eth0:0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe39:8ae6/64 scope link
       valid_lft forever preferred_lft forever
[3] DSR 方式の場合、バックエンドからクライアントへの戻りパケットはダイレクトになるため、以下のような設定が必要になります。 バックエンドサーバー全台で設定します。
# IP アドレスの部分は仮想IP を指定

root@node01:~#
iptables -t nat -A PREROUTING -d 10.0.0.40 -j REDIRECT
[4] LVS サーバーで負荷分散の設定をします。
# テーブルをクリア

root@dlp:~#
ipvsadm -C
# 仮想サービスを登録

# [ipvsadm -A -t (サービス用仮想IP:ポート) -s (分散方式)]

root@dlp:~#
ipvsadm -A -t 10.0.0.40:80 -s rr

# バックエンドサーバーを登録

# [ipvsadm -a -t (サービス用仮想IP:ポート) -r (実サーバのIP:ポート) -g])

root@dlp:~#
ipvsadm -a -t 10.0.0.40:80 -r 10.0.0.51:80 -g

root@dlp:~#
ipvsadm -a -t 10.0.0.40:80 -r 10.0.0.52:80 -g

# テーブル確認

root@dlp:~#
ipvsadm -l

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.40:http rr
  -> node01.srv.world:http     Route   1      0          0
  -> node02.srv.world:http     Route   1      0          0

# ルールを保存

root@dlp:~#
ipvsadm -S >> /etc/ipvsadm.rules
[5] 以上で設定完了です。任意のクライアントPC から Webブラウザで設定したサービス用IPにアクセスして動作確認してください。
なお、分散方式には以下のような種類があります。
分散方式 説明
rr Robin Robin
コネクションを等しく順番に各ノードへ負荷分散する。
wrr Weighted Round Robin
「-w weight」によって設定された weight に応じて負荷分散する。
lc Least-Connection
コネクション数が最も低いノードへ負荷分散する。
wlc Weighted Least-Connection
コネクション数と weight に応じて負荷分散する。
「-s (分散方式)」を指定しない場合のデフォルト分散方式。
lblc Locality-Based Least-Connection
同じIPからのコネクションは同じノードへ振り分ける。
ノードが過負荷状態の場合は、コネクション数の低いノードへ負荷分散する。
lblcr Locality-Based Least-Connection with Replication
同じIPからのコネクションは最も負荷の低いノードへ振り分ける。
全ノードが過負荷状態の場は、クラスタ内でコネクション数の低いノードを追加して負荷分散する。
dh Destination Hashing
ターゲットIPから静的に割り当てられたハッシュテーブルを検索して負荷分散する。
sh Source Hashing
ソースIPから静的に割り当てられたハッシュテーブルを検索して負荷分散する。
sed Shortest Expected Delay
応答速度が最も早いサーバーへ振り分ける。
nq Never Queue
アイドル状態のサーバーがあればそこへ振り分ける。
全サーバーがビジーであれば、最も応答速度が早いサーバーへ振り分ける。

 
Tweet