Keepalived + LVS 無法從其他主機工作,但可以從 LB 上的本地主機工作

Keepalived + LVS 無法從其他主機工作,但可以從 LB 上的本地主機工作

我已經設定了 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 會處理它

相關內容