首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用模式2选择mac地址(balance-xor)

如何使用模式2选择mac地址(balance-xor)
EN

Server Fault用户
提问于 2013-04-17 14:34:52
回答 1查看 4.1K关注 0票数 2

几天前,我在这里写了一个问题,但这个问题含糊不清。因此,我将尝试重写这个问题,解释所有的细节。

我以前的消息(关闭消息):http://goo.gl/aJqQ2

你想做什么?

我试图了解如何在模式2 (Balance默认选项layer2)中选择正确的mac地址。

我在和司机联系一起工作。我试图理解所有模式的操作(模式0、1、2、3、4、5和6)。我理解所有模式是如何工作的,除了模式2(balance-xor)和模式4(802.3ad)。因为选项xmit_hash_policy是不清楚的!

我的主要问题是:我如何选择一个活动的从或其他的流量从一个对等点发送到其他对等点?

现在,我将用所有细节来描述我的怀疑:

在我的私人实验室,我有两台计算机(PC1和PC2,运行linux/ubuntu),每台计算机上都安装了两个网卡(网卡)。

PC1上的Mac地址(Bond0):

代码语言:javascript
复制
MAC1(eth1): 62:25:BC:06:4F:A6
MAC2(eth2): 62:25:BC:06:59:E6

PC2上的Mac地址(Bond0):

代码语言:javascript
复制
MAC4(eth1):62:25:BC:06:5A:1B
MAC3(eth2):62:25:BC:06:59:E9

因此,当加载驱动程序连接时,我可以在每台PC上看到3个接口(bond0、eth1和eth2) (eth1和eth2是从接口)。但是,我的问题从这里开始,因为我不明白内核是如何选择接口的。

有时,我注意到所有的流量都放在同一个奴隶上(例如,从PC1到PC2,所有的流量都会被放置在来自eth1 of PC1{MAC = 62:25:BC:06:4F:A6}的eth2 of PC2 {MAC = 62:25:BC:06:59:E9}上)。因此,按照上面的示例,如果禁用eth1 on PC2,即使存在禁用接口,也会发送通信量。

eth1在PC2上的接口是向上的还是向下的,这并不重要。

这种行为是意料之中的。但是,要选择正确的MAC地址(eth1或eth2),必须遵循什么策略?为什么选择eth2 on pc2?为什么eth1 on pc2没有被选中?我想说的是:我如何知道我使用哪个接口将流量从PC1发送到PC2?

我有一个公式,就是:

(source MAC XOR destination MAC) modulo slave count

(这个公式是从bonding.txt中提取的-见下面的引文,最后)

我知道哈希函数(我想感谢用户@Mark )

/* * Hash用于基于第二层数据*/静态int bond_xmit_hash_policy_l2(struct sk_buff *skb,int计数){ struct *data = (struct *)skb-> data;if (skb_headlen(skb) >=偏移(struct,h_proto))返回(data->h_dest5 ^ data->h_source5) %计数;}

根据上面的示例(我使用PC1上的eth1和PC2上的eth2向PC2发送流量)。因此,我的MAC地址是:

代码语言:javascript
复制
eth1 : 62:25:BC:06:4F:A6  (PC1)
eth2 : 62:25:BC:06:59:E9  (PC2)

那么,如何确定我必须在

上使用哪个mac地址呢?为什么要用eth2而不是eth1?

用户@Mark试图帮助我,他写了以下解释:

实际的哈希函数是:

基于第二层数据*/静态int bond_xmit_hash_policy_l2(struct sk_buff *skb,int计数){ struct *data = (struct *)skb->bond_xmit_hash_policy_l2的输出设备的Hash *Hash;

代码语言:javascript
复制
    if (skb_headlen(skb) >= offsetof(struct ethhdr, h_proto))
            return (data->h_dest[5] ^ data->h_source[5]) % count;

    return 0;

}

其中h_dest和h_source是MAC地址。假设默认情况下,您的债券的MAC地址是PC1: 62:25:BC:06:4F:A6和PC2: 62:25:BC:06:5A:1B。因此,散列函数返回:

0xA6 ^ 0x5A %2=0

但我不知道如何计算xor函数。有人能解释一下怎么算吗?

谢谢!

*附录:

bonding.txt公式

layer2使用硬件MAC地址的异或来生成哈希。公式是(源MAC XOR目标MAC)模块从计数算法将所有流量放置到同一从服务器上的特定网络对等点。该算法与802.3ad兼容。

异或真值表:http://www.tomshardware.com/reviews/safer-6-raid-controllers,1199-2.html

EN

回答 1

Server Fault用户

发布于 2013-04-22 22:54:24

让我帮你简化一下。当查看xmit_hash_policy时,请考虑:

  • 第2层= MAC
  • 第3层= IP
  • 第4层=港口

接下来,考虑“每个层的单个会话”。示例:

  • 源MAC到目标MAC =单会话=单接口
  • 源IP到目标IP =单会话=单接口
  • 源端口到目的地端口=单个会话=单个接口

换句话说:

  • 单MAC =使用的单个接口
  • 单IP =使用的单接口
  • 单端口=使用的单一接口

通常,当您在两个节点之间进行通信时,只有一个MAC和一个IP。因此,您将只会看到一个单独的接口正在使用。

假设您希望使用1GbE提高两个服务器之间的吞吐量。每个服务器使用4个NIC和一个单一的绑定接口进行连接。bond0说,这个连接接口有一个IP和一个MAC。在这个场景中,两个服务器之间的最大值为120 In /S。

接下来,添加一个子接口。这基本上是一个虚拟接口,为您提供另一个IP地址。这将在相同的绑定接口上产生两个IP地址。例如,在linux中,根据配置方式的不同,可以使用bond0和键0:1。

如果你是在第二层“哈希”,那么多个If不会给你任何东西。您仍然只能使用单一源MAC和单一目标MAC。但是,如果您在第三层散列,驱动程序现在很可能会平衡您的传输。

如果您有一个多线程应用程序正在使用多个端口,比如TCP端口,那么您希望在第4层进行散列,这将进一步平衡负载。

您可以通过使用netperf这样的工具来说明这一点。在每个场景中,您都可以使用多个IP地址或多个端口运行netperf,您将看到多个端口的流量平衡。

但是请记住,这只是传输。接收由开关控制。Cisco允许您自定义散列策略。低端开关允许你做第二层和第三层,高端让你做第二层、第三层和第四层。

设想情况:

您有一个备份服务器,并将数据发送到NAS备份设备。您在备份服务器上使用模式4和xmit_hash_policy=layer3+4,并且在绑定中有4个1GbENIC。您的备份软件配置为将数据发送到备份设备的IP,但它是通过多个具有多个流的TCP端口发送数据的。

有了这个配置数据,所有的接口都会被发送出去,前提是您有足够的流来平衡。它是如何决定哪里去的?我想你知道答案,但我不会假装明白。我只是从经验中知道这一点。

因此,假设您现在可以在120 at /S*4(每1GbE接口120 at/S)传输数据。但是现在数据到达交换机,交换机有一个以太通道(聚合组),在第三层配置了散列策略(在Cisco上可以是src、dst-ip或src ip)。我们将在本例中使用src ip。因此,现在交换机基于源IP地址和目标IP地址进行散列,这些地址总是相同的,因此它总是只选择交换机上的单个目标端口。

因此,当您可以在450+ MB/s传输时,目标只能接收到120 MB/S。

如果交换机可以在第4层散列(Cisco将是src-port、dst-port或src-dst-port),那么您现在可以使用所有4个端口将数据从备份服务器传输到设备。这是假定备份设备也是绑定的。

但是,如果您没有昂贵的Cisco交换机,并且无法在第4层进行散列,怎么办?您可以创建额外的IP地址!然后,将备份服务器配置为使用4个不同的IP地址运行作业,这将平衡,因为交换机将基于源IP地址和目标IP地址进行散列。

其他交换机供应商有自己的哈希算法,通常是基于IP和MAC (第2层和第3层)的混合。过去,我必须为这样的交换机创建静态arp条目,这样就有多个IP地址和多个MAC地址。

希望这有助于您更好地理解xmit_hash_policy是如何工作的,至少在实践中是这样的。

票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/500224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档