简介

创建时间:2025-10-24 最近修改时间:2025-10-24

#1. 简介

本指南为 DeepFlow 采集器 Vxlan 隧道卸载模式(river/rosen)的部署和配置方法。

当用户的第三方工具不能解析来自 Agent 分发过来的 VxLAN 流量时,river 和 rosen 可用于隧道解封装。二者的差别在于:

  • river 可安装于任意 Linux 操作环境下,无任何运行依赖,性能极限为 2Gbps / 200Kpps
  • rosen 需要运行于独立的物理或虚拟服务器中,且服务器需要安装 DeepFlow 提供的 Linux 内核,性能极限为 10Gbps / 10Mpps
  • 隧道解封装采集器注册
    • 从 6.1.8 开始,新部署的隧道解封装采集器需要在页面手工录入。
    • deepflow管理界面进入系统 - 采集器列表选项卡中点击齿轮选择新增隧道解封装采集器进行录入。

新增隧道解封装采集器

新增隧道解封装采集器

注意:

  • 不支持运行于 DPDK 环境中
  • 不支持 VXLAN 以外的协议解封装

#2. 部署安装 - River

将控制器中的river*.rpm复制到分发节点上:

scp deepflow-controller:/usr/local/deepflow/yum/7/river*.rpm /tmp/
1

安装river:

rpm -ivh /tmp/river*.rpm
1

添加tap0虚拟口用于发送解隧道后的流量:

ip link add tap0 type dummy
ip link set tap0 up
1
2

警告

警告:请勿将解封装流量发送到物理接口,有可能会造成网络环路!

修改配置文件/etc/river.yaml

# 控制器IP
controller-ips:
  - 172.20.1.128
enable-profiler: false
# river从该网卡接受vxlan流量
interfaces:
  - p4p2
# river将vxlan解封装后,将还原的的流量发送到该网卡
output-interfaces:
  - tap0
1
2
3
4
5
6
7
8
9
10

启动river:

systemctl enable river
systemctl start river
1
2

#3. 部署安装 - rosen

点击查看

注意:Rosen暂不支持对 IPv6 隧道的解封装。

#3.1 服务器规格

推荐配置:

  • CPU:16个逻辑核
  • 内存:16G内存
  • 磁盘:50G系统盘
  • 控制面网口:1xGE
  • 数据面网口:2x10GE(一进一出)

上述配置下的物理服务器性能参数:

  • 10Mpps / 10Gbps

支持的物理网卡驱动:

  • Intel ixgbe* drivers (支持Intel 82599系列10G网卡)
  • Intel i40e driver (不支持Intel X722 10Gb, Intel X710 10Gb 网卡)
  • Intel ixgbevf driver
  • Intel ixgbevf driver
  • Mellanox mlx4 driver
  • Mellanox mlx5 driver
  • Netronome nfp driver
  • QLogic (Cavium) qed* drivers
  • Broadcom bnxt_en driver
  • Cavium thunderx driver

#3.2 部署Rosen

  • 队列设置

    如果网卡使用的是82599系列10G网卡执行下面操作,否则跳过此项设置。

    • 若部署机器的CPU数量大于48,需要BIOS关闭超线程, 否则不需要设置。

    • 执行完上面步骤之后,若CPU数量大于32,需要设置出接口队列的数量:

      ethtool -L <出接口名字> combined <queue_number>
      
      1

      其中 queue_number = 62 - cpu数量

  • 安装包获取

    • 如果使用salt部署,从控制器 /usr/local/deepflow/yum/7/获取安装包
    • 如果使用docker部署, 从ISO中的extra-artifaces目录下寻找相应的安装包
  • Centos 7

    • 更新内核

      安装 rosen 的节点机器需要4.19内核, 如果非4.19内核需要找到 kernel-4.19.*.el7.x86_64.rpm 安装包进行内核更新,安装命令如下:

      # 先把旧版本删除,然后安装新版本。
      /usr/bin/rpm -e kernel-4.19.*-*.el7.x86_64 --nodeps
      rpm -ivh ./kernel-*.rpm
      
      1
      2
      3

      安装完内核之后重启服务器,确保在 4.19.17 内核中运行rosen。

    • 找到rosen-*.el7.*.rpm, bpftool*.rpm, tcpdump*.rpm, libpcap*.rpm 复制到分发节点上(复制到/tmp目录下):

    • 安装rosen以及依赖项

      rpm -ivh  /tmp/{rosen,bpftool,tcpdump,libpcap}-*.rpm
      
      1
  • Centos 8

    • 找到rosen-*.el8.*.rpm复制到分发节点上(复制到/tmp目录下):

    • 安装rosen

      rpm -ivh  /tmp/rosen-*.el8.*.rpm
      
      1
  • 修改配置文件 /etc/rosen.conf

    global_defs {
    
        # 日志文件
        log_file        /var/log/rosen.log
    
        # mtu < 3050
        mtu  1500
    
        # 模式设置
        # 0: DRV 高性能模式,需要网卡支持,详细支持列表参考用户手册
        # 1: SKB 普通模式,对网卡没有要求
        mode 0
    
        # 控制器IP:Port, 可以填写多个 如:10.30.1.128:20035,10.33.49.29:3000,10.33.49.23:5000
        # 用逗号分割,注意逗号两边不要有空格。
        env_sync_addr 10.30.1.128:20035
    
        # 控制器上报时间间隔 unit: second (秒)
        env_sync_period 60
    
        # 请求超时时间 unit : millisecond (毫秒)
        sync_timeout 10000
    }
    
    # 接口定义
    interface_defs {
    
        # 接口总数量 < 64
    
        # 配置遵循出口写在前面,入口写在后面的顺序。
    
        # 出口配置
        <init> interface p2p1  {
            # 接口不进行转发,转发的目的端口使用'none'
            int_fwd   none
        }
    
        # 入口配置
        <init> interface p2p2  {
            # 接口转发的目的接口,注意:接口都是一对一转发。
            int_fwd   p2p1
        }
    }
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
  • 运行

    • systemctl enable rosen.service
    • systemctl start rosen.service
    • 查看版本使用:rosen -v

#3.3 在虚拟机中部署

点击查看

这里使用出口为veth设备的方式,把数据解封装到虚拟机中进行处理。

  • 入口使用驱动为virtio\_net driver虚拟网卡。可使用ethtool查看设备驱动名称,如:ethtool -i eth0
  • 出口使用vethpair网络设备。执行下面命令创建veth设备,并追加到/sbin/ifup-local中,使其机器重启时能够创建。
#创建 vethpair 设备
ip link add name veth0 type veth peer name veth1
ip link set dev veth0 up
ip link set dev veth1 up
1
2
3
4

/sbin/ifup-local设置一下权限:

chmod 755 /sbin/ifup-local
1
  • 修改配置文件 /etc/rosen.conf, 例如:
global_defs {
  ... ...
  # 选用SKB模式
  mode 1
  ... ...
}

interface_defs {
  # 出口配置
  <init> interface veth0  {
    int_fwd   none
  }

  # 入口配置
  <init> interface eth0  {
    int_fwd   veth0
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
点击查看

注意:① 模式选用1,使用 mode 1 ② 可使用tcpdump -i veth1 -ne查看转换后的数据。

#3.4 如何调试

日志文件:/var/log/rosen.log

抓包调试:rosen使用XDP收发包,网卡不再支持tcpdump。额外提供rosen-dump用于抓包调试。

rosen-dump -i interface [OPTS]

OPTS:
 -h        help
 -x        Show packet payload
 -w file   Write the raw packets to file rather than parsing and printing them out.
1
2
3
4
5
6

注意: 运行rosen-dump,确保禁用SELinux

setenforce 0
1