ロードバランサ― KeepAlived - maki51/CentOS GitHub Wiki

KeepAlivedでLBを作る

環境

ホスト

  • FTPサーバ WINDOWS2016 IIS
  • LB CentOS 7 keepalived + ipvsadm
  • cient 192.168.0.57 (windows10)

IP

  • FTP-server 192.168.0.161 (real IP)
  • LB 192.168.0.57(real ip) + virtual ip (192.168.0.160)

その他

  • keepalived:DSR方式
  • FTP接続方式:ACTIVE

ゴール

client から FTP 192.168.0.160宛に接続できる

インストール

CentOS7では keepalived の他に ipvsadm をインストールが必要。

[root@LB1 ~]# yum install keepalived

[root@LB1 ~]# yum install ipvsadm

[root@LB1 ~]# keepalived --version

今回はLB1台なので不要だが もしLBが2台なら それぞれのLBでVRRPのパケット受信と送信を許可する。

Firewall

LB1でVRRPパケットの受信を許可する。

[root@LB1 ~]# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -i enp0s3 -d 224.0.0.18 -p vrrp -j ACCEPT

[root@LB1 ~]# firewall-cmd --direct --add-rule ipv4 filter OUTPUT 1 -o enp0s3 -d 224.0.0.18 -p vrrp -j ACCEPT

設定を永続ルールとして登録する。

[root@LB1 ~]# firewall-cmd --runtime-to-permanent

ルールを確認する。

[root@LB1 ~]# firewall-cmd --direct --get-all-rules

ipv4 filter OUTPUT 1 -o eth0 -d 224.0.0.18 -p vrrp -j ACCEPT

ipv4 filter INPUT 1 -i eth0 -d 224.0.0.18 -p vrrp -j ACCEPT

参考サイト: https://qiita.com/hana_shin/items/bda169d8d24f5954a992

ipvsadm -CONF

カラのCONFIGファイルを作成しておく。これがないとipvsadm が起動しない。

[root@LB1 ~]# touch /etc/sysconfig/ipvsadm

サービスの起動

[root@LB1 ~]# systemctl start ipvsadm

[root@LB1 ~]# systemctl enable ipvsadm

サービスが起動しているか /var/log/message にエラーが出ていないことを確認する。

カーネルパラメータの変更

サーバーへの振り分けを許可するため、カーネルのパラメータを変更。

[root@LB1 ~]# vi /etc/sysctl.conf

以下のパラメータを記載する。

net.ipv4.ip_nonlocal_bind = 1

net.ipv4.ip_forward = 1

net.ipv4.conf.default.rp_filter = 0

LBサーバで変更後、以下のコマンドで有効化。

[root@LB1 ~]# sysctl -p

パラメータが有効になっているか確認するコマンド。

[root@LB1 ~]# /usr/sbin/sysctl net.ipv4.ip_forward

keepalived.conf

KeepAlived のConfigファイルを作成する。

vi /etc/keepalived/keepalived.conf


! Configuration File for keepalived
 global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   #smtp_server 192.168.200.1
   #smtp_connect_timeout 30
   router_id LVS_DEVEL
   #vrrp_skip_check_adv_addr
   #vrrp_strict
   #vrrp_garp_interval 0
   #vrrp_gna_interval 0
}  
vrrp_instance VI_1 {
    state MASTER
    interface enp0s3
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.0.160 dev enp0s3
    }
 } 
virtual_server 192.168.0.160 80 {
        delay_loop 6
        lb_algo rr
        lb_kind DR
        protocol TCP
        real_server 192.168.0.161 80 {
                weight 1
                HTTP_GET {
                        url {
                         path /
                         status_code 200
                        }
                        connect_timeout 5
                } 
        }
}
 virtual_server 192.168.0.160 21 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP 
    real_server 192.168.0.161 21 {
        weight 1
   } 
        MISC_CHECK {
        misc_path "echo -en 'NOOP\r\nQUIT\r\n' | nc -w 5 -n 192.168. 0.161 21 | egrep '221 Goodbye'"
                misc_timeout 15
        } 
 }

WindowsFTPサーバ側の設定

Windowsサーバの場合。

LoopBackインターフェイスを作成する。

参考サイト:https://manual.sakura.ad.jp/cloud/network/load-balancer.html#id15

””LoopBackにIPアドレスを登録する際、サブネットは32ビットなので注意!

コマンドプロンプトで下記を設定。

「イーサネット」が通常のNIC。「イーサネット 3」が作成したLoopBackインターフェイス。インターフェイス名称は それぞの環境で読み替えのこと。

netsh interface ipv4 set interface イーサネット weakhostreceive=enabled

netsh interface ipv4 set interface "イーサネット 3" weakhostreceive=enabled

netsh interface ipv4 set interface "イーサネット 3" weakhostsend=enabled

KeepAlivedの開始

[root@LB1 ~] systemctl start keepalived

[root@LB1 ~] systemctl enable keepalived

動作確認

次のコマンドでActiveになってるか確認。

[root@LB1 ~] systemctl is-active keepalived

起動時のログは /vat/log/message に出力されるので うまく動かない時はそのログを見る

keepalived.conf で設定したポートで待ち受けしているか確認

[root@localhost ~]# ipvsadm -l

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  localhost.localdomain:ftp rr persistent 50
  -> 192.168.0.161:ftp            Route   1      0          0
TCP  localhost.localdomain:http rr
  -> 192.168.0.161:http           Route   1      1          0