背景
需要虚拟1万个网元做性能测试,前提是已经有网元模拟器,可以在服务器上批量起虚拟IP, 每个虚拟IP对应一个网元进程,但是一台服务器的CPU数量有限,不可能起1万个模拟器进程。于是结合haproxy,将frontend的1万个IP映射到backend的40个虚拟IP (CPU数量>40)。
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
haproxy配置
/etc/haproxy/haproxy.cfg
global
...maxconn 10000 # 改大连接数 5000 -> 10000...defaultsmode tcp # http -> tcplog global#option httplog # 注释掉或删掉option tcplogoption dontlognull
...frontend pcscfsimmode tcp #tcpbind *:1830 #前端端口acl dst_ip1 dst 47.0.1.0/24acl dst_ip2 dst 47.0.2.0/24...acl dst_ip19 dst 47.0.19.0/24acl dst_ip20 dst 47.0.20.0/24use_backend backapp1 if dst_ip1use_backend backapp2 if dst_ip2...use_backend backapp1 if dst_ip19use_backend backapp2 if dst_ip20backend backapp1balance roundrobin #轮询方式server app1 47.0.1.1:1831 check #后端端口1831server app2 47.0.1.2:1831 check...server app19 47.0.1.19:1831 checkserver app20 47.0.1.20:1831 checkbackend backapp2balance roundrobinserver app21 47.0.2.1:1831 checkserver app22 47.0.2.2:1831 check...server app39 47.0.2.19:1831 checkserver 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个模拟器线程