LVS-NATを使用したロードバランサの構築手順

LVS (Linux Virtual Server) のNATモードを使用して、複数のリアルサーバにトラフィックを分散させる負荷分散環境を構築します。本構成ではKVM(Kernel-based Virtual Machine)を仮想化基盤として利用します。

1. ネットワーク構成の設計

以下の4台の仮想マシンを使用します。

役割 ネットワークモード インターフェース IPアドレス
クライアント (Client) Host-Only eth0 1.1.1.99
LVS Director (Load Balancer) Host-Only / NAT eth0 / eth1 1.1.1.100 (VIP) / 192.168.122.100 (DIP)
Real Server 1 (RS1) NAT eth0 192.168.122.101
Real Server 2 (RS2) NAT eth0 192.168.122.102

2. KVM 仮想ネットワークの設定

Host-Onlyネットワークを定義し、クライアントとLVSの外側インターフェースを接続します。

# /etc/libvirt/qemu/networks/private-net.xml
<network>
    <name>private-net</name>
    <bridge name='virbr-priv'/>
    <ip address='1.1.1.1' netmask='255.255.255.0'>
        <dhcp>
            <range start='1.1.1.2' end='1.1.1.253'/>
        </dhcp>
    </ip>
</network>

設定を反映させます。

sudo virsh net-define /etc/libvirt/qemu/networks/private-net.xml
sudo virsh net-start private-net
sudo virsh net-autostart private-net

3. LVS Directorの設定

LVSノードでは、パケット転送を有効にし、NATの設定を行います。

3.1 IPフォワーディングの有効化

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

3.2 iptablesによるマスカレード設定

外部からのリクエストを内部ネットワークに中継するためのルールを追加します。

iptables -t nat -F
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
# 内部ネットワーク(192.168.122.0/24)からの応答を外部(eth0)へ転送
iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -o eth0 -j MASQUERADE

4. リアルサーバ (RS) の設定

RS1およびRS2でWebサービスを稼働させ、デフォルトゲートウェイをLVSのDIPに設定します。

4.1 Webサービスのセットアップ

各RSで以下の操作を行います。

yum -y install httpd
systemctl enable --now httpd
# 識別用のコンテンツ作成
echo "Response from RS1" > /var/www/html/index.html # RS1の場合

4.2 ネットワークゲートウェイの設定

LVS-NATでは、RSの応答パケットが必ずLVS Directorを経由する必要があるため、ゲートウェイ設定が重要です。

# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
ONBOOT="yes"
BOOTPROTO="static"
IPADDR=192.168.122.101
NETMASK=255.255.255.0
GATEWAY=192.168.122.100 # LVSの内部IP(DIP)を指定
systemctl restart network

5. IPVSルールの適用

LVS Directorに負荷分散ルールを定義します。

yum install -y ipvsadm

# 仮想サービスの追加 (ラウンドロビン方式)
ipvsadm -A -t 1.1.1.100:80 -s rr

# リアルサーバの登録 (-mオプションでNATモードを指定)
ipvsadm -a -t 1.1.1.100:80 -r 192.168.122.101:80 -m
ipvsadm -a -t 1.1.1.100:80 -r 192.168.122.102:80 -m

6. 動作確認

クライアントマシンからVIPに対してリクエストを送信し、異なるサーバから応答が返ってくることを確認します。

[root@client ~]# curl 1.1.1.100
Response from RS1
[root@client ~]# curl 1.1.1.100
Response from RS2
[root@client ~]# curl 1.1.1.100
Response from RS1

タグ: LVS LoadBalancing Networking KVM linux

10月13日 06:20 投稿