![Keepalived + LVS 無法從其他主機工作,但可以從 LB 上的本地主機工作](https://rvso.com/image/632757/Keepalived%20%2B%20LVS%20%E7%84%A1%E6%B3%95%E5%BE%9E%E5%85%B6%E4%BB%96%E4%B8%BB%E6%A9%9F%E5%B7%A5%E4%BD%9C%EF%BC%8C%E4%BD%86%E5%8F%AF%E4%BB%A5%E5%BE%9E%20LB%20%E4%B8%8A%E7%9A%84%E6%9C%AC%E5%9C%B0%E4%B8%BB%E6%A9%9F%E5%B7%A5%E4%BD%9C.png)
我已經設定了 keepalived + LVS 我正在嘗試開始工作
客戶端、LB和真實伺服器都在同一子網路中。
保持活動配置:
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 配置了 atm。
答案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 會處理它