Help us understand the problem. What is going on with this article?

keepaliveでセグメントを超える時の設定ハマりどころ

More than 3 years have passed since last update.

初心者がkeepaliveを設定していたらドハマりしたのでメモ。

環境

  • CentOS6.9
  • keepalived.x86_64 1.2.13-5.el6_6

iptables

iptables -A FORWARD -j REJECT を打ち消す
セグメントを超えた負荷分散の場合、パケットをフォワードする必要がある。
その際、CentOS6のデフォルト設定のiptablesではWebサーバからの帰りパケットがリジェクトされてしまう。

iptables -A FORWARD -j ACCEPTはスマートじゃないので、必要な分だけ許可。
以下はeth1(外)側のネットワークからeth2(内)側へhttp通信する場合の記述

-A FORWARD -i eth1 -o eth2 -p tcp --sport 80 -j ACCEPT  # <- 追記
-A FORWARD -j REJECT --reject-with icmp-host-prohibited # <- 元からある

net.ipv4.ip_forward=1を設定するのは様々なサイトで情報があったが、この設定は無くてハマった。
そんなこと記載する価値もない常識だという可能性もあるが…

設定ファイル

括弧の前には空白必須
本当は必須じゃないかもしれないけれど、空白置いといて損はない。
なおセグメントには一切関係ない。

NG

urlの後ろに空白を入れず括弧をした場合、何故か一番目のreal_serverだけ反映される。 何故だ…

virtual_server 172.16.0.5 80 {
    lb_algo wlc
    lb_kind NAT

    real_server 192.168.254.132 80 {
        HTTP_GET {
            url{
                path /
                status_code 200
            }
        }
    }
    real_server 192.168.254.133 80 {
        HTTP_GET {
            url{
                path /
                status_code 200
            }
        }
    }
    real_server 192.168.254.134 80 {
        HTTP_GET {
            url{
                path /
                status_code 200
            }
        }
    }
}
---------------------------------------------------------------------
[vagrant@LVS1 ~]$ sudo ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.0.5:80 wlc
  -> 192.168.254.132:80           Masq    1      0          0

OK

virtual_server 172.16.0.5 80 {
    lb_algo wlc
    lb_kind NAT

    real_server 192.168.254.132 80 {
        HTTP_GET {
            url {
                path /
                status_code 200
            }
        }
    }
    real_server 192.168.254.133 80 {
        HTTP_GET {
            url {
                path /
                status_code 200
            }
        }
    }
    real_server 192.168.254.134 80 {
        HTTP_GET {
            url {
                path /
                status_code 200
            }
        }
    }
}
---------------------------------------------------------------------
[vagrant@LVS1 ~]$ sudo ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
UDP  172.16.0.5:80 wlc
  -> 192.168.254.132:80           Masq    1      0          0
  -> 192.168.254.133:80           Masq    1      0          0
  -> 192.168.254.134:80           Masq    1      0          0
0Delta
インフラエンジニアからプログラマーへ再転生したひと。 Golangはいいぞ
infra-workshop
インフラ技術を勉強したい人たちのためのオンライン勉強会です
https://wp.infra-workshop.tech/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away