主集群::***,9节点,硬件规格:12C64GB(31GBJVM)
备集群::***,9节点,硬件规格:12C64GB(31GBJVM)
网关服务器1(公网IP:120.92.43.31,内网IP:192.168.0.24)硬件规格:40
压测服务器1(内网IP:10.0.0.117)硬件规格:24C48GB
压测服务器2(内网IP:10.0.0.69)硬件规格:24C48GB
测试说明本次测试主要验证网关索引加速的可操作性,以及评估达到不同性能所需要的硬件规格,用于实际生产环境的部署配置参考。
场景描述网关通过将请求按照目标节点来重新组合,实现请求快慢分离,从而提高整体集群的写入吞吐。
数据描述以Loadgen自动生成的Nginx数据为例来介绍,分别就直接写Elasticsearch和走网关来写Elasticsearch,对比他们的速度差异,执行步骤依次说明。数据样例:
{"_index":"test-10","_type":"_doc","_id":"cak5emoke01flcq9q760","_source":{"batch_number":"2328917","id":"cak5emoke01flcq9r19g","ip":"192.168.0.1","message":"175.10.75.216-webmaster[29/Jul/2020:17:01:26+0800]\"GET/rest/system/statusHTTP/1.1\"2001838\"\"\"Mozilla/5.0(Macintosh;IntelMacOSX10_15_6)AppleWebKit/537.36(KHTML,likeGecko)Chrome/84.0.4147.89Safari/537.36\"","now_local":"2022-06-1417:39:39.420724895+0800CST","now_unix":"1655199579","random_no":"13","routing_no":"cak5emoke01flcq9pvu0"}}数据架构极限网关可以本地计算每个索引文档对应后端Elasticsearch集群的目标存放位置,从而能够精准的进行请求定位,在一批bulk请求中,可能存在多个后端节点的数据,bulk_reshuffle过滤器用来将正常的bulk请求打散,按照目标节点或者分片进行拆分重新组装,避免Elasticsearch节点收到请求之后再次进行请求分发,从而降低Elasticsearch集群间的流量和负载,也能避免单个节点成为热点瓶颈,确保各个数据节点的处理均衡,从而提升集群总体的索引吞吐能力。
我们分别对比测试3分片和30分片的场景。
测试准备部署网关程序系统调优
参考这里的文档:
下载程序
[root@iZbp1gxkifg8uetb33pvcoZ~]cd/opt/gateway/[root@iZbp1gxkifg8uetb33pvcoZgateway]cpsample-configs/
修改集群的注册信息,如下:
根据需要修改网关监听的端口,以及是否开启TLS(如果应用客户端通过http://协议访问ES,请将值改为false),如下:
不同的集群可以使用不同的配置,分别监听不同的端口,用于业务的分开访问。
启动网关
启动网关并指定刚刚创建的配置,如下:
[root@iZbp1gxkifg8uetb33pvcoZgateway]./gateway-linux-amd64-serviceinstallSuccess[root@iZbp1gxkifg8uetb33pvcpZconsole]_
2.修改配置
使用[]()作为Console的系统集群,保留监控指标和元数据信息,修改配置如下:
[root@iZbp1gxkifg8uetb33pvcpZconsole]./console-linux-amd64-serviceinstallSuccess[root@iZbp1gxkifg8uetb33pvcpZconsole]_
2.下载一个Nginx日志样本,保存为,如下:
[root@vm10-0-0-69opt]:-name:iptype:filepath:dict/:messagetype:filepath::usertype:filepath:dict/:idtype:sequence-name:uuidtype:uuid-name:now_localtype:now_local-name:now_utctype:now_utc-name:now_unixtype:now_unix-name:suffixtype:rangefrom:10to:13requests:-request:method:POSTruntime_variables:batch_no:idruntime_body_line_variables:routing_no:uuidbasic_auth:username:elasticpassword:xxxxurl::"{\"create\":{\"_index\":\"test-$[[suffix]]\",\"_type\":\"_doc\",\"_id\":\"$[[uuid]]\"}}\n{\"id\":\"$[[uuid]]\",\"routing_no\":\"$[[routing_no]]\",\"batch_number\":\"$[[batch_no]]\",\"message\":\"$[[message]]\",\"random_no\":\"$[[suffix]]\",\"ip\":\"$[[ip]]\",\"now_local\":\"$[[now_local]]\",\"now_unix\":\"$[[now_unix]]\"}\n"启动Loadgen进行测试
指定相关运行时间参数-d和并发参数-c,开启请求压缩,如下:
[root@vm10-0-0-117opt]./loadgen-linux-amd64-d60000-c200--compress观察吞吐限制CPU
为了测试不同CPU资源下的网关性能,我们使用taskset来绑定进程的CPU,如下:
测试过程网关配置:
直写ESLoadgen配置
[root@vm10-0-0-69opt]url:http://localhost:8000/_search?q=$[[id]]url::"{\"create\":{\"_index\":\"test-$[[suffix]]\",\"_type\":\"_doc\",\"_id\":\"$[[uuid]]\"}}\n{\"id\":\"$[[uuid]]\",\"routing_no\":\"$[[routing_no]]\",\"message\":\"$[[message]]\",\"batch_number\":\"$[[batch_no]]\",\"random_no\":\"$[[suffix]]\",\"ip\":\"$[[ip]]\",\"now_local\":\"$[[now_local]]\",\"now_unix\":\"$[[now_unix]]\"}\n"第二台Loadgen的配置:
[root@vm10-0-0-117opt]./[root@vm10-0-0-117opt]./
性能无提升,网关CPU吃不满。
直写ES-32分片删除所有,并修改模板,默认30分片:
DELETEtest-10DELETEtest-11DELETEtest-12DELETEtest-13DELETEtest-14DELETEtest-15PUT_template/test{"index_patterns":["test*"],"settings":{"":"async","refresh_interval":"-1","number_of_shards":30,"number_of_replicas":0},"mappings":{"dynamic_templates":[{"strings":{"mapping":{"ignore_above":256,"type":"keyword"},"match_mapping_type":"string"}}]}}继续压测:
30分片,直接ES稳定在~750keps。
网关1C-32分片网关2C-32分片网关4C-32分片网关6C-32分片网关8C-32分片流量和写入比较大。开启压缩:
修改消息压缩到磁盘:
注意:开启流量或者磁盘压缩会耗费额外的开销,吞吐有一定的下降。
网关12C-32分片恢复去掉压缩,扩大CPU到12C,吞吐没有变化,已到极限。
分片Level测试结果3分片*4索引,直接写ES600keps.
网关CPU核数
吞吐能力(eventsperseond)
备注
网关1C
~180k
网关2C
~350k
网关4C
~650k
网关6C
~770k
网关8C
~930k
后端ES处理能力已接近饱和
30分片*4索引,直接写ES750keps.
网关CPU核数
吞吐能力(eventsperseond)
备注
网关1C
~200k
网关2C
~400k
网关4C
~760k
网关6C
~1000k
后端ES处理能力已接近饱和
网关8C
~930k
后端ES处理能力已接近饱和
小结网关性能强悍,使用简单,通过使用网关,有30%~50%的吞吐提升。





