私はkeepalived + LVSをセットアップして動作させようとしています
クライアント、LB、実サーバーはすべて同じサブネット上にあります。
Keepalived 設定:
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id ukld5p500x
}
vrrp_instance some_service {
state MASTER
interface em1
virtual_router_id 100
priority 100
virtual_ipaddress {
10.0.0.75
}
track_script {
chk_fail
}
}
virtual_server 10.0.0.75 58563 {
delay_loop 10
lb_algo rr
lb_kind DR
protocol TCP
real_server 10.0.0.70 58563 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 58563
}
}
... more real_servers ...
}
したがって、lb_type を nat に設定すると、LB 自体から VIP/ポートに接続してデータが通過できますが、外部ホスト (クライアント) からは通過できません。lb_type を DR に設定すると、LB 自体に接続することも、外部クライアントに接続することもできなくなります。
sys.net.ipv4.ip_forward は 1 に設定されており、現時点で設定されている LB は 1 つだけです。
答え1
非常に古い質問なので、すでに回答が得られているかどうかはわかりませんが、DR (ダイレクト ルーティング) は NAT とは大きく異なります。NAT では、ロード バランサー (LB) がパケットを実際のサーバーに渡すことでルーターのように動作し、実際のサーバーはパケットを LB に返してクライアントに返します。
DRでは、LBは単なる疑似仲介者です。LBが持つVIPにパケットが到着すると、どのRS(実サーバ)に送信するかを決定します。書き直しMAC アドレスを変更してパケット ヘッダーを変更します。その後、パケットはスイッチに返され、スイッチは一致する MAC アドレスを持つ RS にパケットを配信します。
次に、RS を騙して、そのインターフェイス宛てのパケットを受け入れるようにする必要があります。通常、これを行うには、ループバック アダプタに VIP を追加し、ネットマスク 255.255.255.255 を指定します。サービス デーモンもこの VIP をリッスンするように構成する必要があります (Apache では、Listen xxxx:80 行を追加するだけです)。
さらに、ARPの問題にも対処する必要があります。通常、
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.eth0.arp_ignore = 1
sysctl.confに以下を追加すれば解決します