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 日志确认请求轮询到不同节点。

相关推荐
_OP_CHEN29 分钟前
【Linux系统编程】(十)从入门到精通!Linux 调试器 gdb/cgdb 超全使用指南,程序员必备调试神器
linux·运维·c/c++·linux开发工具·调试器·gdb/cgdb
本妖精不是妖精29 分钟前
在 CentOS 7 上部署 Node.js 18 + Claude Code
linux·python·centos·node.js·claudecode
李少兄30 分钟前
在 Linux 中精准查找名为 `xxx` 的文件或目录路径
android·linux·adb
7澄131 分钟前
Java Socket 网络编程实战:从基础通信到线程池优化
java·服务器·网络·网络编程·socket·多线程·客户端
Pocker_Spades_A32 分钟前
DeepCore:大模型统一网关,Claude 免费体验与跨模型技术洞察
java·服务器·数据库
不会kao代码的小王32 分钟前
突破局域网!OpenObserve,数据观测随时随地
linux·windows·后端
老条码新物联数字派33 分钟前
【学习Linux】 乌班图(UBuntu)和Linux
linux·运维·ubuntu
Lynnxiaowen34 分钟前
今天继续学习Kubernetes内容namespace资源对象和pod简介
linux·运维·学习·容器·kubernetes
我在人间贩卖青春38 分钟前
输入输出相关命令
linux·输入输出