5.12. 配置 teamd 运行程序

运行程序是创建实例时编译到成组连接守护进程中的代码单元。有关 teamd 运行程序的简介,请查看 第 5.4 节 “了解网络成组守护进程及“运行程序””

5.12.1. 配置 broadcast 运行程序

要配置 broadcast 运行程序,请作为 root 使用编辑器,在成组 JSON 格式配置文件中添加以下内容:
{
 "device": "team0",
 "runner": {"name": "broadcast"},
 "ports": {"em1": {}, "em2": {}}
}
详情请查看 teamd.conf(5) man page。

5.12.2. 配置 random 运行程序

Random 运行程序与 roundrobin 运行程序行为类似。
要配置 random 运行程序,请作为 root 使用编辑器,在成组 JSON 格式配置文件中添加以下内容:
{
 "device": "team0",
 "runner": {"name": "random"},
 "ports": {"em1": {}, "em2": {}}
}
详情请查看 teamd.conf(5) man page。

5.12.3. 配置 roundrobin 运行程序

要配置 roundrobin 运行程序,请作为 root 使用编辑器在成组 JSON 格式配置文件中添加以下内容:
{
 "device": "team0",
 "runner": {"name": "roundrobin"},
 "ports": {"em1": {}, "em2": {}}
}
Roundrobin 的最基本配置。
详情请查看 teamd.conf(5) man page。

5.12.4. 配置 active-backup 运行程序

active-backup 运行程序可使用所有链接监视程序确定成组中链接的状态。以下任意示例都可添加到成组 JSON 格式配置文件中:
{
   "device": "team0",
   "runner": {
      "name": "activebackup"
   },
   "link_watch": {
      "name": "ethtool"
   },
   "ports": {
      "em1": {
         "prio": -10,
         "sticky": true
      },
      "em2": {
         "prio": 100
      }
   }
}
这个示例配置使用 active-backup 运行程序 ethtool 作为链接监视程序。端口 em2 有较高优先权。这个粘性标签可保证 em1 处于 active 状态,只要链接处于连接状态,它就仍将保持 active 状态。
{
   "device": "team0",
   "runner": {
      "name": "activebackup"
   },
   "link_watch": {
      "name": "ethtool"
   },
   "ports": {
      "em1": {
         "prio": -10,
         "sticky": true,
         "queue_id": 4
      },
      "em2": {
         "prio": 100
      }
   }
}
这个示例配置添加了队列 ID 4。它使用 active-backup 运行程序,将 ethtool 作为链接监视程序。端口 em2 有较高的优先权。但粘性标签可保证 em1 处于 active 状态。只要链接处于连接状态,它就会处于 active 状态。
要使用 ethtool 配置 active-backup 运行程序,并应用延迟,请作为 root 使用编辑器在成组 JSON 格式配置文件中添加以下内容:
{
   "device": "team0",
   "runner": {
      "name": "activebackup"
   },
   "link_watch": {
      "name": "ethtool",
      "delay_up": 2500,
      "delay_down": 1000
   },
   "ports": {
      "em1": {
         "prio": -10,
         "sticky": true
      },
      "em2": {
         "prio": 100
      }
   }
}
这个示例配置使用 active-backup 运行程序,将 ethtool 作为链接监视程序使用。端口 em2 有较高优先权。但粘性标签保证如果 em1 处于 active 状态,则只要链接处于链接状态,它就会保持 active 状态。链接更改不会立即计入该运行程序,但会应用延迟。
详情请查看 teamd.conf(5) man page。

5.12.5. 配置 loadbalance 运行程序

这个运行程序可用于两种负载平衡,即主动和被动负载平衡。在主动模式中,通过使用最新流量统计不断进行流量再平衡,以便尽可能平均分配流量。在静态模式中,流量会在可用链接之间随机分配。鉴于较低的处理开销,这样有速度优势。在高流量应用程序中通常首选此方式,因为流量通常由多个要在可用链接间随机分配的流组成,使用这种方式时,无需 teamd 介入即可完成负载分布。
要为被动传送(Tx)负载平衡配置 loadbalance 运行程序,请作为 root 在成组 JSON 格式配置文件中添加以下内容:
{
 "device": "team0",
 "runner": {
   "name": "loadbalance",
   "tx_hash": ["eth", "ipv4", "ipv6"]
 },
 "ports": {"em1": {}, "em2": {}}
}
配置基于哈希的被动传送(Tx)负载平衡。
要为主动传送(Tx)负载平衡配置 loadbalance 运行程序,请作为 root 在成组 JSON 格式配置文件中添加以下内容:
{
   "device": "team0",
   "runner": {
     "name": "loadbalance",
     "tx_hash": ["eth", "ipv4", "ipv6"],
     "tx_balancer": {
       "name": "basic"
     }
   },
   "ports": {"em1": {}, "em2": {}}
}
使用基本负载平衡程序配置主动传送(Tx)负载平衡。
详情请查看 teamd.conf(5) man page。

5.12.6. 配置 LACP (802.3ad) 运行程序

要使用 ethtool 作为链接监视器配置 LACP 运行程序,请作为 root 用户使用编辑器中成组 JSON 格式配置文件中添加以下内容:
{
   "device": "team0",
   "runner": {
       "name": "lacp",
       "active": true,
       "fast_rate": true,
       "tx_hash": ["eth", "ipv4", "ipv6"]
   },
     "link_watch": {"name": "ethtool"},
     "ports": {"em1": {}, "em2": {}}
}
配置可使用链接聚合控制协议LACP)对应连接。LCAP 运行程序应使用 ethtool 监控链接状态。使用 ethtool 以外的链接监控方法没有任何意义,因为使用 arp_ping 时,该链接可能永远无法激活。原因是必须首先建立该链接,也只有在建立链接后,数据包(包括 ARP)方可通过。使用 ethtool 可防止此类情况,因为它对每一层中的链接单独监控。
使用这个运行程序可能会以 loadbalance 运行程序类似的方式进行主动负载平衡。要启用主动传送(Tx)负载平衡,请添加以下内容:
"tx_balancer": {
       "name": "basic"
}
详情请查看 teamd.conf(5) man page。

5.12.8. 配置端口选择覆盖

该物理端口传输的帧一般由成组驱动程序内核部分选择,而不是由用户或系统管理员决定。输出端口由所选成组模式(teamd 运行程序)策略选择。但在实现较为复杂的策略时,偶尔将某些类型的传出流量指向某些物理接口有帮助。默认情况下,成组驱动程序可识别多队列,并在启动该驱动程序时创建 16 个队列。如果需要更多或较少的队列,可在创建成组驱动程序实例时,使用 Netlink 属性 tx_queues 更改这个数值。
可使用端口配置选项 queue_id 配置端口的队列 ID,如下:
{
  "queue_id": 3
}
这些队列 ID 可与 tc 工具程序一同使用,以便配置多队列原则和过滤器,倾向于将某些流量传送到某些端口设备中。流入:如果使用上述配置,并要强制所有绑定在 192.168.1.100 的流量使用成组中的 eth1 作为输出设备,则请作为 root 用户运行以下格式的命令:
~]# tc qdisc add dev team0 handle 1 root multiq
~]# tc filter add dev team0 protocol ip parent 1: prio 1 u32 match ip dst \
  192.168.1.100 action skbedit queue_mapping 3
这个机制覆盖运行程序选择逻辑,以便将流量绑定到具体端口,该机制适用于所有运行程序。

5.12.9. 配置基于 BPF 的 Tx 端口选择程序

loadbalance 和 LACP 运行程序使用数据包哈希为网络流量排序。这个哈希计算机制是基于伯克利数据包过滤器BPF)代码。BPF 代码是用来生成哈希,而不是决定传出数据包的策略。哈希长度为 8 字节,有 256 种变体。就是说很多不同的套接字缓冲SKB)可有相同的哈希,并因此将流量传递给同一链接。使用短哈希是将流量分入不同 stream 的快速方法,以便在多个链接间取得平衡负载。在静止模式中,只使用哈希决定应该向那个端口发送流量。在活动模式中,运行程序将继续创新将哈希分配给不同的端口,以达到最佳平衡状态。
可在数据包 Tx 哈希计算中使用以下碎片类型或字符串:
  • eth — 使用源和目标 MAC 地址。
  • vlan — 使用 VLAN ID。
  • ipv4 — 使用源和目标 IPv4 地址。
  • ipv6 — 使用源和目标 IPv6 地址。
  • ip — 使用源和目标 IPv4IPv6 地址。
  • l3 — 使用源和目标 IPv4IPv6 地址。
  • tcp — 使用源和目标 TCP 端口。
  • udp — 使用源和目标 UDP 端口。
  • sctp — 使用源和目标 SCTP 端口。
  • l4 — 使用源和目标 TCPUDPSCTP 端口。
可通过在负载平衡运行程序中添加如下格式的一行使用这些字符串:
"tx_hash": ["eth", "ipv4", "ipv6"]
。示例请参考 第 5.12.5 节 “配置 loadbalance 运行程序”