Keepalived + LVS 无法从其他主机运行,但可以从 LB 上的本地主机运行

Keepalived + LVS 无法从其他主机运行,但可以从 LB 上的本地主机运行

我已经设置了 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

不知道您是否已经得到答案,因为它已经很老了,但 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 会处理这个问题

相关内容