[Linux] haproxy地址映射实现性能测试

背景

需要虚拟1万个网元做性能测试,前提是已经有网元模拟器,可以在服务器上批量起虚拟IP, 每个虚拟IP对应一个网元进程,但是一台服务器的CPU数量有限,不可能起1万个模拟器进程。于是结合haproxy,将frontend的1万个IP映射到backend的40个虚拟IP (CPU数量>40)。

查看CPU数量

# grep -c ^processor /proc/cpuinfo
40

# lscpu | grep ^CPU\(s\)
CPU(s):                40

说明:grep -c 只输出匹配行的数量
 

IP地址规划

前端 1万个虚拟IP

47.0.1.1 ~ 47.0.1.250

47.0.2.1 ~ 47.0.2.250

...

47.0.40.1 ~ 47.0.40.250

后端  40个虚拟IP,对应40个线程(40个CPU)

47.0.1.1 ~ 47.0.1.20

47.0.2.1 ~ 47.0.2.20

修改ARP缓存表大小

# echo "512" > /proc/sys/net/ipv4/neigh/default/gc_thresh1
# echo "2048" > /proc/sys/net/ipv4/neigh/default/gc_thresh2
# echo "10240" > /proc/sys/net/ipv4/neigh/default/gc_thresh3

说明:

1.使用echo写入

2.gc_thresh1,gc_thresh2和gc_thresh3
gc_thresh1:最小可保留的邻居表项数量。如果邻居表项的数量小于此值,垃圾回收(Garbage Collector)不会执行回收操作。默认值为 128;
gc_thresh2:当邻居表项数量超过此值时,垃圾回收将会清空大于5秒的表项。默认值为 512;
gc_thresh3:表示最大可允许的非永久表项数量。如果系统拥有大量接口或直连了许多设备,应该增大此值。默认值为 1024。

haproxy配置

/etc/haproxy/haproxy.cfg

global
...
    maxconn     10000 # 改大连接数 5000 -> 10000

...

defaults
    mode                    tcp       # http -> tcp
    log                     global
    #option                  httplog  # 注释掉或删掉
    option                  tcplog
    option                  dontlognull
...

frontend pcscfsim
    mode tcp         #tcp
    bind *:1830      #前端端口
    acl dst_ip1 dst 47.0.1.0/24
    acl dst_ip2 dst 47.0.2.0/24
    ...
    acl dst_ip19 dst 47.0.19.0/24
    acl dst_ip20 dst 47.0.20.0/24

    use_backend backapp1          if dst_ip1
    use_backend backapp2          if dst_ip2
    ...
    use_backend backapp1          if dst_ip19
    use_backend backapp2          if dst_ip20

backend backapp1
    balance     roundrobin             #轮询方式
    server  app1 47.0.1.1:1831 check   #后端端口1831
    server  app2 47.0.1.2:1831 check
    ...
    server  app19 47.0.1.19:1831 check
    server  app20 47.0.1.20:1831 check

backend backapp2
    balance     roundrobin
    server  app21 47.0.2.1:1831 check
    server  app22 47.0.2.2:1831 check
    ...
    server  app39 47.0.2.19:1831 check
    server  app40 47.0.2.20:1831 check

说明:

前端 47.0.1.0/24 即模拟器对应的 47.0.1.1:1830 ~ 47.0.1.250:1830 等10段IP, 会以roundrobin的方式映射到后端的app1~app20,即47.0.1.1:1831 ~ 47.0.1.20:1831;

前端 47.0.2.0/24 即模拟器对应的 47.0.2.1:1830 ~ 47.0.2.250:1830 等10段IP, 会以roundrobin的方式映射到后端的app21~app40,即47.0.2.1:1831 ~ 47.0.2.20:1831

后端的 47.0.1.1:1831 ~ 47.0.1.20:1831 和 47.0.2.1:1831 ~ 47.0.2.20:1831 对应40个模拟器线程

上一篇:GPT-3.5和GPT-Plus的区别


下一篇:第十五届蓝桥杯题解-数字接龙