ロードバランサ― 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