网口bond的时候如何选择slave

在网口bond的时候如何选择slave呢?
这可以从下面的函数看出
static struct slave *bond_find_best_slave(struct bonding *bond)
{
	struct slave *slave, *bestslave = NULL;
	struct list_head *iter;
	int mintime = bond->params.updelay;
#这个函数决定继续用当前的slave还是切换slave
	slave = bond_choose_primary_or_current(bond);
	if (slave)
		return slave;
#如果前面没有决定的话,则遍历bond中的slave,选择第一个link up的slave
	bond_for_each_slave(bond, slave, iter) {
		if (slave->link == BOND_LINK_UP)
			return slave;
		if (slave->link == BOND_LINK_BACK && bond_slave_is_up(slave) &&
		    slave->delay < mintime) {
			mintime = slave->delay;
			bestslave = slave;
		}
	}

	return bestslave;
}
重点看一下bond_choose_primary_or_current
static struct slave *bond_choose_primary_or_current(struct bonding *bond)
{
	struct slave *prim = rtnl_dereference(bond->primary_slave);
	struct slave *curr = rtnl_dereference(bond->curr_active_slave);

	if (!prim || prim->link != BOND_LINK_UP) {
		if (!curr || curr->link != BOND_LINK_UP)
			return NULL;
		return curr;
	}

	if (bond->force_primary) {
		bond->force_primary = false;
		return prim;
	}

	if (!curr || curr->link != BOND_LINK_UP)
		return prim;
#正常情况下可以看到选择slave主要有三种方式
	/* At this point, prim and curr are both up */
	switch (bond->params.primary_reselect) {
#每次有包来的时候都切换,具体这里就从curr切换到prim
	case BOND_PRI_RESELECT_ALWAYS:
		return prim;
#选择速度快的,如果速度是一样的话,则选择全双工的
	case BOND_PRI_RESELECT_BETTER:
		if (prim->speed < curr->speed)
			return curr;
		if (prim->speed == curr->speed && prim->duplex <= curr->duplex)
			return curr;
		return prim;
#一直用当前的就不切换
	case BOND_PRI_RESELECT_FAILURE:
		return curr;
	default:
		netdev_err(bond->dev, "impossible primary_reselect %d\n",
			   bond->params.primary_reselect);
		return curr;
	}
}
从这里知道决定切换的就是params.primary_reselect这个参数,这个参数也只有三个有效值

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESXi是一种功能强大的虚拟化平台,它允许管理多个虚拟机并使用虚拟网络。当一个ESXi主机有两个网口时,我们可以使用bonding技术将它们绑定在一起,以增加带宽和提高网络的可用性。 网口bond是指将多个物理网口聚合为一个逻辑的网络接口来传输数据。通过绑定两个网口,我们可以在一个逻辑接口上实现负载均衡和冗余备份。具体来说,当一个网口负载过重或故障时,数据将自动转移到另一个正常工作的网口上。 在ESXi中设置网口bond需要遵循以下步骤: 1. 确保两个网口已正确连接到网络交换机,并且已被ESXi主机正确识别。 2. 登录到ESXi主机的管理界面,并导航到“网络适配器”设置页面。 3. 创建一个新的虚拟交换机,并将两个网口添加到其中。 4. 在主机上创建一个新的虚拟交换机端口组,并将该端口组绑定到虚拟交换机上。 5. 在ESXi主机上创建一个新的虚拟交换机,将其与虚拟交换机端口组进行关联。 6. 配置网口绑定模式,可以选择负载均衡模式或冗余备份模式,具体取决于您的需求。 7. 配置其他相关的网络设置,例如IP地址、子网掩码和网关。 通过以上步骤完成配置后,ESXi主机将会将两个网口绑定为一个逻辑接口,提供更高的吞吐量和更可靠的连接。同时,使用网口bond还可以实现对虚拟机的网络流量进行负载均衡,提高整体的性能和稳定性。 总之,通过使用ESXi的网口bond功能,可以将多个网口绑定在一起,以提供更高的带宽和更可靠的网络连接。这对于需要高性能和高可用性的应用场景非常有用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值