上一章说到由于单核性能不足,导致ntopng单网卡抓包只能到400-600M的问题,这个问题ntopng官方是有几种解决方案的,大家如果想详细了解可以看看官方文档PF_RING Load Balancing / RSS
文档里面有三种方案,其中PF_RING ZC性能最高,可以支持到100G镜像,但是是付费软件,一般都是商业用。我们这里用第一种,网卡RSS硬件多队列方案
RSS网卡多队列,是一种分流机制,简单说就是高速网卡为了提高多核cpu利用率,将流量通过特定hash算法,分开不同的队列提供给不同的cpu核心处理的一种技术,目前主流的万兆卡都支持这种技术,但ntopng仅支持intel的网卡,原因是流量分析,同一个流的包是源和目的刚好相反的,原厂提供的网卡rss驱动hash算法无法保证将源、目的相反的包聚合到同一组rss中,导致后续流分析结果不准确,所以需要修改网卡驱动,ntopng目前只提供了intel网卡的重写驱动,具体支持驱动类型有e1000e\i40e\iavf\ice\igb\ixgbe\ixgbevf这几种。
1、首先我们要确定网卡驱动类型,使用以下命令
ethtool -i 网卡编号
[root@localhost ~]# ethtool -i p2p1
driver: ixgbe
version: 5.1.0-k
firmware-version: 0x800006db, 1.1197.0
expansion-rom-version:
bus-info: 0000:41:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes
可以看到网卡是ixgbe驱动,支持ntopng
2、编译ntopng专用驱动
上github下载pf_ring代码,编译drive目录下面的驱动
git clone https://github.com/ntop/PF_RING
cd PF_RING/
cd drivers/
cd intel/
./configure
make
3、加载新驱动
这里要注意,RSS=参数后面是每个网口队列数量,按网口编号顺序,逗号分隔,我这边因为万兆网卡是2口的,p2p1和p2p2,这个配置的意思是p2p1是6队列,p2p2是63队列,镜像口接p2p1,为什么只配置6队列呢,因为ntopng社区版最大只支持8个接口,ntopng最终是需要通过rss虚拟接口功能将多个虚拟接口分开处理来实现多个cpu核处理流量的,所以这里只设置6通道,对应到ntopng后面配置6个虚拟接口
rmmod和insmod是临时卸载/加载,服务器重启需要重新执行这两个命令
#卸载当前驱动
rmmod ixgbe.ko
#加载驱动,具体驱动文件路径要看你们的编译目录路径
cd /root/PF_RING/drivers/intel/ixgbe/ixgbe-5.19.6-zc/src
insmod ixgbe.ko RSS=6,63
4、确定驱动是否更新及队列数量
[root@localhost]# ethtool -i p2p1
driver: ixgbe
version: 5.19.6
firmware-version: 0x800006db, 1.1197.0
expansion-rom-version:
bus-info: 0000:41:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes
[root@localhost]# ethtool -l p2p1
Channel parameters for p2p1:
Pre-set maximums:
RX: 0
TX: 0
Other: 1
Combined: 63
Current hardware settings:
RX: 0
TX: 0
Other: 1
Combined: 6
可以看到驱动版号变了,网卡当前队列是6
5、修改ntopng配置
虚拟接口用网卡编号@队列编号表示,比如p2p1@0表示p2p1网卡的第一个队列,我们需要把所有队列都监控上,然后最后增加一个view:all表示把所有网卡监控结果都合并到view下面,如果你们想剔除某些网卡,就view:逐个网卡加上去,用逗号分隔
修改配置文件
vi /etc/ntopng/ntopng.conf
注释掉原来的监听接口,增加新接口
#-i=p2p1
-i=p2p1@0
-i=p2p1@1
-i=p2p1@2
-i=p2p1@3
-i=p2p1@4
-i=p2p1@5
-i=view:all
改完重启ntopng
systemctl restart ntopng
登陆后可以看到ntop里面有6个网卡,一个view视图,流量准确显示为1.4g
进入服务器top看cpu占用,可以看到负载分流到了多个核心,每个核心不超过35%,从当前流量及cpu占用估计,最高可以应该抓到3-4G的流量,具体要看pps,更高就要买专业版许可才行了,不过也能满足大部分普通用户要求了