lvs+keepalived轮询访问doris集群

1. LVS DR 模式与 NAT 模式核心区别

LVS(Linux Virtual Server)的 DR(Direct Routing)模式和 NAT(Network Address Translation)模式是两种最常用的负载均衡模式,核心差异体现在数据转发方式、网络路径、性能、部署要求等维度,以下是详细对比:

对比维度 DR 模式(直接路由) NAT 模式(网络地址转换)
数据转发原理 仅修改数据包的 MAC 地址,IP 头不变;Real Server 直接将响应包发给客户端,不经过 LVS 节点 改写数据包的 IP 地址(请求时目标 IP 改为 Real Server,响应时源 IP 改为 VIP);所有请求 / 响应都经过 LVS 节点转发
网络路径 客户端 → LVS(仅改写 MAC)→ Real Server → 客户端(直连) 客户端 → LVS → Real Server → LVS → 客户端
端口支持 可转发任意端口(无需端口映射) 需做端口映射(LVS 端口→Real Server 端口),单节点端口数受限
性能 性能极高(LVS 仅处理请求包的 MAC 改写,无 IP 改写 / 转发开销;响应包不回传),支持 10 万 + 并发 性能较低(LVS 是所有流量的瓶颈,响应包需二次转发),并发量受 LVS 节点带宽 / 性能限制
Real Server 网络要求 1. Real Server 必须与 LVS 节点在同一物理网络(二层可达);2. Real Server 需配置 VIP 的 lo 回环地址(避免 ARP 冲突);3. 关闭 Real Server 的 ARP 响应(防止 VIP 暴露) 1. Real Server 可与 LVS 节点跨网段(只需路由可达);2. Real Server 的网关必须指向 LVS 节点;3. 无需配置 VIP 到 lo 口
部署复杂度 稍高(需配置 ARP 抑制、lo 口 VIP) 简单(仅需配置 LVS 转发规则 + Real Server 网关)
扩展性 支持大规模 Real Server(无带宽瓶颈) 扩展性差(LVS 节点是流量瓶颈)
适用场景 高并发、大流量场景(如你的 Doris FE 节点负载均衡) 小规模、Real Server 跨网段、需端口映射的场景

2.部署

本文采用DR模式部署

2.1 节点规划

|----------------|-----|------------|-------|-----|
| 主机ip | lvs | keepalived | doris | vip |
| 172.21.241.165 | ⭐ | ⭐ | | |
| 172.21.241.78 | ⭐ | ⭐ | | |
| 172.21.241.133 | | | ⭐ | |
| 172.21.241.54 | | | ⭐ | |
| 172.21.241.120 | | | ⭐ | |
| 172.21.241.188 | | | | ⭐ |

2.2 lvs节点配置

2.2.1 安装 ipvsadm、keepalived

bash 复制代码
yum install -y ipvsadm keepalived

2.2.2 开启路由转发

bash 复制代码
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

2.2.3 LVS DR 模式核心配置

(1)配置 VIP(虚拟 IP)

在两台 LVS 节点上绑定 VIP 到 lo:0(DR 模式要求 VIP 仅在 LVS 节点可见,Real Server 需抑制 ARP 响应):

bash 复制代码
# 绑定VIP到lo:0
ifconfig lo:0 172.21.241.188 netmask 255.255.255.255 broadcast 172.21.241.188 up
# 添加路由(避免VIP路由异常)
route add -host 172.21.241.188 dev lo:0
# 配置开机自启(写入/etc/rc.local)
echo "ifconfig lo:0 172.21.241.188 netmask 255.255.255.255 broadcast 172.21.241.188 up" >> /etc/rc.local
echo "route add -host 172.21.241.188 dev lo:0" >> /etc/rc.local

2.2.4 配置keepalived

(1)主节点

复制代码
! Configuration File for keepalived
global_defs {
   router_id LVS_MASTER
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0  # 替换为实际网卡名(如ens33)
    virtual_router_id 51
    priority 100    # 主节点优先级更高
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.21.241.188  # VIP绑定到网卡
    }
}

# 配置ipvsadm规则(与前文一致)
virtual_server 172.21.241.188 9031 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 0
    protocol TCP

    real_server 172.21.241.133 9031 {
        weight 1
        TCP_CHECK {
            connect_port 9031
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.21.241.54 9031 {
        weight 1
        TCP_CHECK {
            connect_port 9031
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.21.241.120 9031 {
        weight 1
        TCP_CHECK {
            connect_port 9031
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 172.21.241.188 8031 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 0
    protocol TCP

    real_server 172.21.241.133 8031 {
        weight 1
        TCP_CHECK {
            connect_port 8031
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.21.241.54 8031 {
        weight 1
        TCP_CHECK {
            connect_port 8031
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.21.241.120 8031 {
        weight 1
        TCP_CHECK {
            connect_port 8031
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

(2)备节点

仅需修改state BACKUPpriority 90,router_id LVS_BACKUP其余与主节点一致。

(3)启动keepalived

bash 复制代码
systemctl enable keepalived && systemctl start keepalived

2.3 Real Server(Doris FE)配置

DR 模式要求 Real Server 抑制 ARP 响应(避免 VIP 被客户端直接解析到 Real Server),并绑定 VIP 到 lo:0:

bash 复制代码
# 1. 配置ARP抑制(关键)
echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
echo "net.ipv4.conf.lo.arp_ignore = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf
sysctl -p

# 2. 绑定VIP到lo:0(仅回环可见)
ifconfig lo:0 172.21.241.188 netmask 255.255.255.255 broadcast 172.21.241.188 up
route add -host 172.21.241.188 dev lo:0

# 3. 开机自启配置
echo "ifconfig lo:0 172.21.241.188 netmask 255.255.255.255 broadcast 172.21.241.188 up" >> /etc/rc.local
echo "route add -host 172.21.241.188 dev lo:0" >> /etc/rc.local

2.4 验证配置

2.4.1 查看 LVS 规则是否生效

bash 复制代码
ipvsadm -Ln
# 预期输出包含:
# TCP  172.21.241.188:9031 rr
#   -> 172.21.241.133:9031   Gateway  1      0          0         
#   -> 172.21.241.54:9031    Gateway  1      0          0         
#   -> 172.21.241.120:9031   Gateway  1      0          0         
# TCP  172.21.241.188:8031 rr
#   -> 172.21.241.133:8031   Gateway  1      0          0         
#   -> 172.21.241.54:8031    Gateway  1      0          0         
#   -> 172.21.241.120:8031   Gateway  1      0          0

2.4.2 测试端口转发

从客户端执行多次telnet 172.21.241.188 9031curl 172.21.241.188:8031/api/bootstrap,查看 Doris FE 日志确认请求轮询到不同节点。

相关推荐
pride.li5 小时前
开发板和Linux--nfs服务挂载
linux·运维·服务器
looking_for__5 小时前
【Linux】应用层协议
linux·服务器·网络
BB_CC_DD5 小时前
Linux截图工具(ubuntu18.04+flameshot(火焰截图))
linux
云泽8086 小时前
不止是命令:Linux 高频指令实战 + 芯片架构底层逻辑
linux·运维·服务器
j_xxx404_6 小时前
Linux:基础IO
linux·运维·服务器
wdfk_prog7 小时前
[Linux]学习笔记系列 -- [drivers][i2c]i2c-dev
linux·笔记·学习
Trouvaille ~8 小时前
【Linux】网络编程基础(二):数据封装与网络传输流程
linux·运维·服务器·网络·c++·tcp/ip·通信
万邦科技Lafite9 小时前
一键获取京东商品评论信息,item_reviewAPI接口指南
java·服务器·数据库·开放api·淘宝开放平台·京东开放平台
旅途中的宽~9 小时前
【深度学习】通过nohup后台运行训练命令后,如何通过日志文件反向查找并终止进程?
linux·深度学习
dump linux10 小时前
内核驱动调试接口与使用方法入门
linux·驱动开发·嵌入式硬件