KVM虚拟化网卡管理
brctl常用命令
查看当前虚拟网桥状态
brctl show
添加一个网桥
addbr
删除一个网桥
delbr
添加网口
addif
删除网口
delif
VALN
LAN 表示 Local Area Network,本地局域网,通常使用 Hub (集线器)和 Switch(交换机) 来连接 LAN 中的计算机。一般来说,两台计算机连入同一个 Hub 或者 Switch 时,它们就在同一个 LAN 中。(就是说你的网络如果是从一个交换机之下分出来的这几根弦线,那么大家所连的网络是在这一个LAN里面)
一个 LAN 表示一个广播域(路由器组播广播域)。 其含义是:LAN 中的所有成员都会收到任意一个成员发出的广播包。
VLAN 表示 Virtual LAN(虚拟的网络段)。一个带有 VLAN 功能的switch 能够将自己的端口划分出多个 LAN。计算机发出的广播包可以被同一个 LAN 中其他计算机收到,但位于其他 LAN 的计算机则无法收到。 简单地说,VLAN 将一个交换机分成了多个交换机,限制了广播的范围,在二层将计算机隔离到不同的 VLAN 中。
比方说,有两组机器,Group A 和 B,我们想配置成 Group A 中的机器可以相互访问,Group B 中的机器也可以相互访问,但是 A 和 B 中的机器无法互相访问。 一种方法是使用两个交换机,A 和 B 分别接到一个交换机。 另一种方法是使用一个带 VLAN 功能的交换机,将 A 和 B 的机器分别放到不同的 VLAN 中。
VLAN 的隔离是二层上的隔离,A 和 B 无法相互访问指的是二层广播包(比如 arp)无法跨越 VLAN 的边界。但在三层上(比如IP)是可以通过路由器让 A 和 B 互通的。
现在的交换机几乎都是支持 VLAN 的。 通常交换机的端口有两种配置模式: Access 和 Trunk。
ccess 口
这些端口被打上了 VLAN 的标签,表明该端口属于哪个 VLAN。 不同 VLAN 用 VLAN ID 来区分,VLAN ID 的 范围是 1-4096。 Access 口都是直接与计算机网卡相连的,这样从该网卡出来的数据包流入 Access 口后就被打上了所在 VLAN 的标签。 Access 口只能属于一个 VLAN。
Trunk 口
假设有两个交换机 A 和 B。 A 上有 VLAN1(红)、VLAN2(黄)、VLAN3(蓝);B 上也有 VLAN1、2、3,那如何让 AB 上相同 VLAN 之间能够通信呢?
办法是将 A 和 B 连起来,而且连接 A 和 B 的端口要允许 VLAN1、2、3 三个 VLAN 的数据都能够通过。这样的端口就是Trunk口了。 VLAN1, 2, 3 的数据包在通过 Trunk 口到达对方交换机的过程中始终带着自己的 VLAN 标签。
Linux Bridge实现Vlan原理
eth0 是宿主机上的物理网卡,有一个命名为 eth0.10 的子设备与之相连。 eth0.10 就是 VLAN 设备了,其 VLAN ID 就是 VLAN 10。 eth0.10 挂在命名为 brvlan10
Linux Bridge 上,虚机 VM1 的虚拟网卡 vent0 也挂在 brvlan10 上。
这样的配置其效果就是: 宿主机用软件实现了一个交换机(当然是虚拟的),上面定义了一个 VLAN10。 eth0.10,brvlan10 和 vnet0 都分别接到 VLAN10 的 Access口上。而 eth0 就是一个 Trunk 口。VM1 通过 vnet0 发出来的数据包会被打上 VLAN10 的标签。
eth0.10 的作用是:定义了 VLAN10brvlan10 的作用是:Bridge 上的其他网络设备自动加入到 VLAN10 中增加一个 VLAN20,如下图
这样虚拟交换机就有两个 VLAN 了,VM1 和 VM2 分别属于 VLAN10 和 VLAN20。
对于新创建的虚机,只需要将其虚拟网卡放入相应的 Bridge,就能控制其所属的 VLAN。
VLAN 设备总是以母子关系出现,母子设备之间是一对多的关系。 一个母设备(eth0)可以有多个子设备(eth0.10,eth0.20 ……),而一个子设备只有一个母设备。
操作步骤
第一步 查看当前宿主机核心是否提供VLAN功能
dmesg | grep –i
或者检查/proc/net/vlan目录是否存在,如果沒有提供VLAN 功能,/proc/net/vlan目录是不存在的
第二步 查看8021q模块是否载入系统
lsmod | grep 8021q
第三步 如果没有载入请载入
modprobe 8021q
第四步 安装VLAN配置工具---vconfig,需提前准备好安装包vconfig-1.9-16.el7.x86_64.rpm
rpm -ivh vconfig-1.9-.el7.x86_64.rpm rpm -qa vconfig
第五步 添加一块网卡,使用ip a查看
第六步 使用nmtui填写配置文件,重启网卡
第七步 基于新添加的网卡建立vlan10,vlan20接口:ens39.10 ens39.20
vconfig add ens39 vconfig add ens39
第八步 创建刚添加vlan10和vlan20接口的配置文件
vim ifcfg-ens39. vim ifcfg-ens39. VLAN=yes VLAN=yes TYPE=vlan TYPE=vlan PHYSDEV=ens39 PHYSDEV=ens39 VLAN_ID= VLAN_ID= NAME=ens39. NAME=ens39. ONBOOT=yes ONBOOT=yes ZONE=trusted ZONE=trusted DEVICE=ens39. DEVICE=ens39. BRIDGE=brvlan- BRIDGE=brvlan-
第九步 建立网桥brvlan-10和brvlan-20
brctl addbr brvlan- brctl addbr brvlan-
编辑网桥配置文件
vim ifcfg-brvlan- TYPE=bridge BOOTPROTO=static NAME=brvlan- DEVICE=brvlan- ONBOOT=yes vim ifcfg-brvlan- TYPE=bridge BOOTPROTO=static NAME=brvlan- DEVICE=brvlan- ONBOOT=yes
第十一步 将网桥brvlan-10接到网口ens39.10,将网桥brvlan-20接到网口ens39.20
brctl addif brvlan- ens34. brctl addif brvlan- ens34.
第十二步 重启网络服务
systemctl restart network
第十三步 虚机测试VLAN
先将NetworkManager服务关闭
(1)在宿主机中已经提前创建好了虚机 VM1
在 virt-manager 中将 VM1 的虚拟网卡挂到 brvlan-10 上
(2)从VM1克隆一台虚机VM2
virst-clone -o vm1 -n vm2 -f /var/lib/libvirt/images/vm2.qcow2
(3)在 virt-manager 中将 VM2 的虚拟网卡挂到 brvlan-10 上
(4)启动VM1和VM2,并配置ip
(5)查看 Bridge,发现 brvlan10 已经连接了 vnet0 vnet1设备。
(6)当两台虚机处于同一vlan,就可以相互ping通,处于不同vlan,就不能ping通
第十四步 如何使两台虚机ping通外网
(1)再分别添加一块网卡
(2)将添加的网卡挂到br0上即可
网卡配置bond(绑定)
就是说将多张网卡通过一个额外的软件的bond驱动实现绑定,这样,可以提高网卡的吞吐量,实现高可用和负载均衡。
(1)网卡bond(绑定),也称作网卡捆绑。就是将两个或者更多的物理网卡绑定成一个虚拟网卡。网卡是通过把多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在应用部署中是一种常用的技术。
多网卡绑定实际上需要提供一个额外的软件的bond驱动程序实现。通过驱动程序可以将多块网卡屏蔽。对TCP/IP协议层只存在一个Bond网卡,在Bond程序中实现网络流量的负载均衡,即将一个网络请求重定位到不同的网卡上,来提高总体网络的可用性。
(2)网卡绑定的目的:
1.提高网卡的吞吐量。
2.增强网络的高可用,同时也能实现负载均衡。
(3)网卡配置bond(绑定)bond模式:
1、Mode=0(balance-rr) 表示负载分担round-robin,平衡轮询策略,具有负载平衡和容错功能
bond的网卡MAC为当前活动的网卡的MAC地址,需要交换机设置聚合模式,将多个网卡绑定为一条链路。(就是说我每个网卡负载能力都是一样的,轮着来负责请求,而且给你提供请求的网卡也是随机的)
2、Mode=1(active-backup) 表示主备模式,具有容错功能,只有一块网卡是active(激活),另外一块是备的standby(备份),这时如果交换机配的是捆绑,将不能正常工作,因为交换机往两块网卡发包,有一半包是丢弃的。(就是说有两块网卡,一个是主,一个是备,交换机的网卡做了捆绑以后,交换机会同时往这两快网卡发数据,因为第二块网卡是备的网卡,这个时间段它是没有对外提供服务的,只有第一块网卡对外提供服务,所以,交换机往这两块网卡发包,第二块网卡的包就丢弃了)
3、Mode=2(balance-xor) 表示XOR Hash负载分担(异或平衡策略),具有负载平衡和容错功能
每个slave接口传输每个数据包和交换机的聚合强制不协商方式配合。(需要xmit_hash_policy)。
4、Mode=3(broadcast) 表示所有包从所有interface发出,广播策略,具有容错能力,这个不均衡,只有冗余机制...和交换机的聚合强制不协商方式配合。(选用此模式,多块网卡同时对外提供服务,只不过可能第一块负担的多一些,第二块负担的少一些)(需要配置交换机)
5、Mode=4(802.3ad) 表示支持802.3ad协议(IEEE802.3ad 动态链接聚合) 和交换机的聚合LACP方式配合(需要xmit_hash_policy)。
6、Mode=5(balance-tlb) 适配器传输负载均衡,并行发送,无法并行接收(当服务器发送数据的时候,是多块网卡同时发送,但在接收的时候,只有一块网卡在接收数据),解决了数据发送的瓶颈。 是根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave。
7、Mode=6(balance-alb) 在5的tlb基础上增加了rlb。适配器负载均衡模式并行发送,并行接收数据包。(既可以同时发送也可以同时接收数据)
5和6不需要交换机端的设置,网卡能自动聚合。4需要支持802.3ad。0,2和3理论上需要静态聚合方式,但实测中0可以通过mac地址欺骗的方式在交换机不设置的情况下不太均衡地进行接收。
常用的有三种:
mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。
mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。
mode=6:平衡负载模式,有自动备援,不必”Switch”支援及设定。
实现多块网卡绑定bond
第一步 因为我们之前的实验是做的vlan,所以要恢复ens39网卡,并添加额外的3张网卡
(1)关掉绑定的虚拟机
(2)将虚拟机的网卡绑定至br0
(3)断开虚拟网桥,断开虚拟网口
brctl delif brvlan- ens39. brctl delif brvlan- ens39.
(4)删除虚拟网桥和网口
vconfig rem ens39. vconfig rem ens39. brctl delbr brvlan- brctl delbr brvlan-
(5)删除网桥配置文件
rm –rf ifcfg-ens39.*
第二步 修改每个网卡的配置文件
TYPE=Ethernet BOOTPROTO=none DEVICE=每个网卡名 ONBOOT=yes MASTER=bond0 SLAVE=yes
第三步 载入bond模块
modprobe bonding
第四步 创建bond0网卡
DEVICE=bond0 TYPE=Bond NAME=bond0 BONDING_MASTER=yes BOOTPROTO=static USERCTL=no ONBOOT=yes #IPADDR=192.168.10.10 #PREFIX= #GATEWAY=192.168.10.19 BONDING_OPTS="mode=6 miimon=100" BRIDGE=br1
第五步 创建桥接的网卡br1
vim ifcfg-br1 TYPE=Bridge DEVICE=br1 ONBOOT=yes IPADDR=192.168.66.2 #IPADDR1=192.168.20.1 #IPADDR2=192.168.30.1 #IPADDR3=192.168.40.1 #IPADDR4=192.168.50.1 #PREFIX3= #PREFIX4= #GATEWAY=172.16.0.1 #DNS1=172.16.254.251 #DNS2=223.5.5.5
第六步 重启网络服务
在bond上做VLAN
第一步 在原先bond实验的基础上进行实验,先对虚拟网卡br1进行修改
TYPE=Bridge DEVICE=br1 ONBOOT=yes BOOTPROTO=static NAME=br1
第二步 创建虚拟网口br1 10 和 br1 20
vconfig add br1 vconfig add br1
第三步 为虚拟网口创建配置文件
vim ifcfg-br1. VLAN=yes TYPE=vlan PHYSDEV=br1 VLAN_ID= NAME=br1. ONBOOT=yes ZONE=trusted DEVICE=br1. BRIDGE=brvlan- vim ifcfg-br1.
第四步 编辑网桥配置文件 brvlan-10 和 brvaln-20
vim ifcfg-brvlan- TYPE=bridge BOOTPROTO=static NAME=brvlan- DEVICE=brvlan- ONBOOT=yes vim ifcfg-brvlan- TYPE=bridge BOOTPROTO=static NAME=brvlan- DEVICE=brvlan- ONBOOT=yes
第五步 网口连接网桥
brctl addif brvlan- br1. brctl addif brvlan- br1.
第六步 重启网络服务
第七步 开启虚拟机验证
KVM虚拟化网卡管理的更多相关文章
- KVM虚拟化储存管理(3)
一.KVM 存储虚拟化介绍 KVM 的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的. Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种型: Vo ...
- kvm虚拟化管理平台WebVirtMgr部署-完整记录(0)
打算部署kvm虚拟机环境,下面是虚拟化部署前的一些准备工作: 操作系统环境安装1)修改内核模式为兼容内核启动[root@ops ~]# uname -aLinux openstack 2.6.32-4 ...
- kvm虚拟化环境的搭建
首先搭建kvm的虚拟化环境,我选择的环境是在vmvare上的Centos 7的虚拟机,在该环境上搭建kvm的虚拟化环境 1:安装虚拟机(该过程自行安装) 2:操作系统环境的设置 (1)修改内核模式为兼 ...
- kvm虚拟化学习笔记(一)之kvm虚拟化环境安装
平时一直玩RHEL/CentOS/OEL系列的操作,玩虚拟化也是采这一类系统,kvm在RHEL6系列操作系统支持比较好,本文采用采用OEL6.3操作系统,网上所有文章都说KVM比xen简单,我怎么感觉 ...
- [原创]KVM虚拟化管理平台的实现
KVM虚拟化管理平台的实现 源码链接:https://github.com/wsjhk/IaaS_admin.git 根据KVM虚拟化管理的要求,设计并实现网页操作管理KVM虚拟机.设计原理架构如下图 ...
- kvm虚拟化管理
虚拟化 KVM (kernel-based virtual machine) 常见的一些虚拟化的软件xen kvm vmware esx openVZ Oracle VM VirtualBox vsp ...
- kvm虚拟化管理平台WebVirtMgr部署-完整记录(3)
继下面三篇文章完成了kvm虚拟化管理平台webvirtmgr环境的部署安装:kvm虚拟化管理平台WebVirtMgr部署-虚拟化环境安装-完整记录(0)kvm虚拟化管理平台WebVirtMgr部署-完 ...
- kvm虚拟化管理平台WebVirtMgr部署-完整记录(2)
继上一篇kvm虚拟化管理平台WebVirtMgr部署-完整记录(1),接下来说说WebVirtMgr的日常配置:添加宿主机,创建虚机,磁盘扩容,快照等具体操作记录如下: 一.配置宿主机1.登录WebV ...
- kvm虚拟化关闭虚拟网卡virbr0的方法
我们知道:kvm虚拟化环境安装好后,ifconfig会发现多了一个虚拟网卡virbr0这是由于安装和启用了libvirt服务后生成的,libvirt在服务器(host)上生成一个 virtual ne ...
随机推荐
- C++ Map实践
实践如下: #include <iostream> #include <map> #include <string> #include <typeinfo&g ...
- c# 单元测试 ,对静态方法(static)和私有方法(private) 进行单元测试
利用反射: /// <summary> /// 调用静态方法 /// </summary>akf /// <param name="t">类全名 ...
- Android 夜间模式的实现
package com.loaderman.daynightdemo; import android.os.Bundle; import android.support.v7.app.AppCompa ...
- 谈谈 UI 中, Padding 和 Margin 有什么区别?
android:padding 和 android:layout_margin 的区别,其实概念很简单,padding 是站在父 view 的角度描述问题,它规定它里面的内容必须与这个父 view 边 ...
- GestureDetector手势识别器
package com.loaderman.gesturedetectordemo; import android.os.Bundle; import android.support.v7.app.A ...
- Fiddler抓取APP接口
1.获取本机IP地址 2.打开手机设置无线连接(需要和电脑在同一局域网) 长按wifi连接修改无线连接 打开高级选项,设置主机名和端口后保存 3.设置Fiddler 从下图可以看出,抓到的全是HTTP ...
- sql server 查询存储过程返回值
SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO CREATE proc [dbo].[is_yy] ) out, ), ) as begin ' begin ...
- Redis 常用命令 大全
Redis 常用命令 发现几个很好的 Redis 常用命令汇总大全网页,分享给小伙伴们~ 1.Redis 命令参考 http://redisdoc.com/string/index.html 2.W3 ...
- Java Array数组 遍历 四种方式(包含 Lambda 表达式遍历)
示例代码如下: package com.miracle.luna.lambda; import java.util.Arrays; /** * @Author Miracle Luna * @Date ...
- ElasticSearch的中文分词器ik
一.前言 为什么要在elasticsearch中要使用ik这样的中文分词呢,那是因为es提供的分词是英文分词,对于中文的分词就做的非常不好了,因此我们需要一个中文分词器来用于搜索和使用. 二.IK ...