機械翻訳について

NATモードでのロード・バランシングの設定

次の手順では、2つのサーバーに基本的なフェイルオーバーおよびロード・バランシング構成を実装するようにNATモードでKeepalivedを構成する方法について説明します。 1つのサーバーがプライマリとして、もう1つのサーバーがバックアップとして機能し、プライマリ・サーバーの優先度がバックアップ・サーバーよりも高くなります。 どちらのサーバーもVRRPを使用して現在のルーティング状態を監視します。 VRRPの詳細は、VRRPでのKeepalivedの使用を参照してください。

この手順では、サンプル・サーバーにはそれぞれ2つのネットワーク・インタフェースがあります。 最初のインタフェースは、外部ネットワーク(192.168.1.0/24)に接続されます。 2番目のインタフェースは、2つのwebサーバーにアクセスできる内部ネットワーク(10.0.0.0/24)に接続されています。

次の図は、Keepalivedプライマリ・サーバーのネットワーク・アドレス192.168.1.10192.168.1.1 (仮想)、10.0.0.10および10.0.0.100 (仮想)を示しています。

Keepalivedバックアップ・サーバーには次のネットワーク・アドレスがあります: 192.168.1.11および10.0.0.11

IPアドレスの場合、websrv1には10.0.0.71websrv2には10.0.0.72があります。

図3-1 NATモードでのロード・バランシングのためのKeepalived構成


この図は、Keepalivedプライマリ・サーバーのネットワーク・アドレスが192.168.1.10、192.168.1.1 (仮想)、10.0.0.10および10.0.0.100 (仮想)であることを示しています。 Keepalivedバックアップ・サーバーのネットワーク・アドレスは192.168.1.11および10.0.0.11です。 IPアドレスの場合、websrv1には10.0.0.71、websrv2には10.0.0.72があります。
  1. プライマリ・サーバーを構成します。

    次に、プライマリ・サーバーの/etc/keepalived/keepalived.confファイルの構成の例を示します。

    global_defs {
       notification_email {
         root@example.com
       }
       notification_email_from srv1@example.com
       smtp_server localhost
       smtp_connect_timeout 30
    }
    
    vrrp_sync_group VRRP1 {
    #   Group the external and internal VRRP instances so they fail over together
        group {
            external
            internal
            }
    }
    
    vrrp_instance external {
        state MASTER
        interface enp0s8
        virtual_router_id 91
        priority 200
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1215
        }
    #   Define the virtual IP address for the external network interface
        virtual_ipaddress {
            192.168.1.1/24
        }
    }
    
    vrrp_instance internal {
        state MASTER
        interface enp0s9
        virtual_router_id 92
        priority 200
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1215
        }
    #   Define the virtual IP address for the internal network interface
        virtual_ipaddress {
            10.0.0.100/24
        }
    }
    
    # Define a virtual HTTP server on the virtual IP address 192.168.1.1
    virtual_server 192.168.1.1 80 {
        delay_loop 10
        protocol TCP
    #   Use round-robin scheduling in this example
        lb_algo rr
    #   Use NAT to hide the back-end servers
        lb_kind NAT
    #   Persistence of client sessions times out after 2 hours
        persistence_timeout 7200
    
        real_server 10.0.0.71 80 {
            weight 1
            TCP_CHECK {
              connect_timeout 5
              connect_port 80
            }
        }
    
        real_server 10.0.0.72 80 {
           weight 1
           TCP_CHECK {
              connect_timeout 5
              connect_port 80
            }
        }
    }

    構成には、ネットワーク・インタフェースがフェイルオーバー時に同時に割り当てられるようにvrrp_sync_groupセクションと、Keepalivedがロード・バランシングに使用する実際のバックエンド・サーバーを定義するvirtual_serverセクションの両方が含まれます。 lb_kindの値はNATを使用するように設定されます。これは、Keepalivedサーバーがバックエンド・サーバーのかわりにクライアントとの間のインバウンド・ネットワーク・トラフィックとアウトバウンド・ネットワーク・トラフィックの両方を処理することを意味します。

  2. 構成ファイルが有効であることを確認します。
    sudo keepalived -t
  3. バックアップ・サーバーを構成します。

    バックアップ・サーバーの構成は、notification_email_fromstatepriorityおよびinterface, (システム・ハードウェア構成が異なる場合)の値を除けば同じです。

    global_defs {
       notification_email {
         root@example.com
       }
       notification_email_from srv2@example.com
       smtp_server localhost
       smtp_connect_timeout 30
    }
    
    vrrp_sync_group VRRP1 {
    #   Group the external and internal VRRP instances so they fail over together
        group {
            external
            internal
            }
    }
    
    vrrp_instance external {
        state BACKUP
        interface enp0s8
        virtual_router_id 91
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1215
        }
    #   Define the virtual IP address for the external network interface
        virtual_ipaddress {
            192.168.1.1/24
        }
    }
    
    vrrp_instance internal {
        state BACKUP
        interface enp0s9
        virtual_router_id 92
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1215
        }
    #   Define the virtual IP address for the internal network interface
        virtual_ipaddress {
            10.0.0.100/24
        }
    }
    
    # Define a virtual HTTP server on the virtual IP address 192.168.1.1
    virtual_server 192.168.1.1 80 {
        delay_loop 10
        protocol TCP
    #   Use round-robin scheduling in this example
        lb_algo rr
    #   Use NAT to hide the back-end servers
        lb_kind NAT
    #   Persistence of client sessions times out after 2 hours
        persistence_timeout 7200
     
        real_server 10.0.0.71 80 {
            weight 1
            TCP_CHECK {
              connect_timeout 5
              connect_port 80
            }
        }
    
        real_server 10.0.0.72 80 {
            weight 1
            TCP_CHECK {
              connect_timeout 5
              connect_port 80
            }
        }
    }
  4. 構成ファイルが有効であることを確認します。
    sudo keepalived -t
  5. 各サーバーでファイアウォール・ルールを構成します。

    ロード・バランサとして構成する各Keepalivedサーバー(プライマリおよびバックアップ)でファイアウォール・ルールを構成します。 Keepalived NATモード・ロード・バランシングのためのファイアウォール・ルールの構成を参照してください。

  6. ロード・バランサの内部ネットワーク・インタフェースの仮想IPアドレスを使用するように、各サーバーでデフォルト・ルートを構成します。

    Keepalivedロード・バランサで使用する各バックエンド・サーバーで、ロード・バランサの内部ネットワーク・インタフェースの仮想IPアドレスのデフォルト・ルートを構成します。 Keepalived NATモード・ロード・バランシングのためのバックエンド・サーバー・ルーティングの構成を参照してください。

すべてのサーバーの構成ステップを完了した後、いずれかのkeepalivedサーバーで次のコマンドを実行して、サービスが正しく実行されていることを確認します:
sudo journalctl -u keepalived

Keepalived NATモード・ロード・バランシングのためのファイアウォール・ルールの構成

内部ネットワーク上のサーバーでロード・バランシングにNATモードを使用するようにKeepalivedを構成した場合、Keepalivedサーバーはすべてのインバウンド・ネットワーク・トラフィックとアウトバウンド・ネットワーク・トラフィックを処理し、送信パケット内のバックエンド・サーバーのソースIPアドレスを外部ネットワーク・インタフェースの仮想IPアドレスでリライトすることにより既存のバックエンド・サーバーを非表示にします。

次の例は、どのようにインタフェースenp0s9internalゾーンに移動し、インタフェースenp0s8publicゾーンに残すかを示しています。

ロード・バランシングにNATモードを使用するようにKeepalivedサーバーを構成するには:

  1. システム上のアクティブなファイアウォール・ゾーンの状態を確認します。
    次のコマンドを実行します。
    sudo firewall-cmd --get-active-zones

    次のような出力が表示されます。

    public
      interfaces: enp0s8 enp0s9
  2. ファイアウォール・インタフェースが適切なゾーンに属するように構成します。

    外部ネットワーク側のインタフェースが、内部ネットワーク側のインタフェースとは異なるゾーンに存在するようにファイアウォールを構成します:

    sudo firewall-cmd --zone=public --remove-interface=enp0s9
    sudo firewall-cmd --zone=internal --add-interface=enp0s9
    sudo firewall-cmd --permanent --zone=public --remove-interface=enp0s9
    sudo firewall-cmd --permanent --zone=internal --add-interface=enp0s9

    変更が適用されたことを確認します。

    sudo firewall-cmd --get-active-zones

    次のような出力が表示されます。

    internal
      interfaces: enp0s9
    public
      interfaces: enp0s8
  3. 外部ネットワーク・インタフェースでNATモード(マスカレード)を構成します。

    たとえば、次を実行します。

    sudo firewall-cmd --zone=public --add-masquerade
    sudo firewall-cmd --permanent --zone=public --add-masquerade
    sudo firewall-cmd --reload

    オプションで、各NATモードを問い合せて、両方が正しく設定されていることを確認できます。 publicゾーンの問合せはyesレスポンスを返し、internalゾーンの問合せはnoレスポンスを返します。

    sudo firewall-cmd --zone=public --query-masquerade
    sudo firewall-cmd --zone=internal --query-masquerade
  4. 内部インタフェースと外部インタフェース間の転送ルールを構成します。

    ファイアウォールに対してまだ有効にしていない場合、外部ネットワーク・インタフェースと内部ネットワーク・インタフェースの間の転送ルールを構成します。次に例を示します。

    sudo firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 \
      -i enp0s8 -o enp0s9 -m state --state RELATED,ESTABLISHED -j ACCEPT
    sudo firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 \
      -i enp0s9 -o enp0s8 -j ACCEPT
    sudo firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 \
      -j REJECT --reject-with icmp-host-prohibited
    sudo firewall-cmd --reload
  5. Keepalivedにより処理するサービスまたはポートへのアクセスを有効にします。

Keepalived NATモード・ロード・バランシングのためのバックエンド・サーバー・ルーティングの構成

Keepalivedロード・バランサで使用する各サーバーで、ロード・バランサの内部ネットワーク・インタフェースの仮想IPアドレスのデフォルト・ルートがルーティング表に含まれていることを確認します。 このタスクでは、インタフェースのデフォルト・ルートを構成する方法を示します。
  1. 構成しているネットワーク・デバイスを特定します。
    nmcli device statusコマンドを使用して、すべてのデバイスをリストします。
    nmcli device status

    デバイスは、仮想IPアドレスが構成されているのと同じネットワークに接続されている必要があります。

    nmcli device showコマンドを使用して、リストされているデバイスの詳細を表示できます。 たとえば、次を実行します。
    nmcli device show enp0s8
  2. nmcliコマンドを使用して、ロード・バランサで構成した仮想IPアドレスと一致するようにデバイス上のデフォルト・ルートを設定します。

    たとえば、enp0s8デバイスのデフォルト・ゲートウェイを、10.0.0.100の仮想IPアドレスと一致するように構成するには、次を実行します:

    nmcli connection modify enp0s8 ipv4.gateway 10.0.0.100
  3. ネットワーク・インタフェース接続を再ロードします。
    次を実行して、ネットワーク接続を再起動し、新しい構成を取得します:
    nmcli connection down enp0s8
    nmcli connection up enp0s8
  4. デバイスに正しいデフォルト・ルートが表示されていることを確認します。

    たとえば、仮想IPアドレスが10.0.0.100で、これをデフォルト・ゲートウェイとして構成した場合、ipコマンドを使用してルーティング表を確認します:

    sudo ip route show

    次のような出力が表示されます

    default via 10.0.0.100 dev enp0s8 
    10.0.0.0/24 dev enp0s8  proto kernel  scope link  src 10.0.0.71