KVM虚拟化网络管理(4)
一、Linux Bridge网桥管理
网络虚拟化是虚拟化技术中最复杂的部分,也是非常重要的资源。
第一节中我们创建了一个名为br0的linux-bridge网桥,如果在此网桥上新建一台vm,如下图:
VM2 的虚拟网卡 vnet1 也连接到了 br0 上。 现在 VM1 和 VM2 之间可以通信,同时 VM1 和 VM2 也都可以与外网通信。
查看网络状态:
用brctl show 显示当前网桥连接状态:
brctl命令:
二、Vlan介绍
LAN 表示 Local Area Network,本地局域网,通常使用 Hub 和 Switch 来连接 LAN 中的计算机。一般来说,两台计算机连入同一个 Hub 或者 Switch 时,它们就在同一个 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。如下图
Access 口
这些端口被打上了 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原理
KVM 虚拟化环境下实现 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 的作用是:定义了 VLAN10
brvlan10 的作用是:Bridge 上的其他网络设备自动加入到 VLAN10 中
增加一个 VLAN20,如下图
这样虚拟交换机就有两个 VLAN 了,VM1 和 VM2 分别属于 VLAN10 和 VLAN20。
对于新创建的虚机,只需要将其虚拟网卡放入相应的 Bridge,就能控制其所属的 VLAN。
VLAN 设备总是以母子关系出现,母子设备之间是一对多的关系。 一个母设备(eth0)可以有多个子设备(eth0.10,eth0.20 ……),而一个子设备只有一个母设备。
四、Linux Bridge实现Vlan
(1)查看核心是否提供VLAN 功能,执行
# dmesg | grep -i 802
或者检查/proc/net/vlan目录是否存在。
如果沒有提供VLAN 功能,/proc/net/vlan目录是不存在的。
如果8021q模块没有载入系统,则可以通过使用modprobe模组命令载入802.1q模组,並且利用lsmod命令确认模组是否已经载入到核心内。
# modprobe 8021q
# lsmod | grep 8021q
设置开机载入8021q模块(可选)
在/etc/sysconfig/modules下增加一个8021q.modules文件,文件内容为modprobe 8021q
# vi /etc/sysconfig/modules/8021q.modules
modprobe 8021q
(2)安装查看用于查看Vlan配置的工具————vconfig
提前装备好vconfig-1.9-16.el7.x86_64.rpm
#rpm -ivh vconfig-1.9-16.el7.x86_64.rpm
#rpm -qa vconfig
(3)创建vlan接口
创建vlan接口前,在设备上添加一块网卡ens34,
网络配置如右图:
注意:
将BOOTPROTO=static
基于网卡ens34建立vlan10,vlan20接口:ens34.10,ens34.20:
#vconfig add ens34 10
#vconfig add ens34 20
#cd /etc/sysconfig/network-scripts/
#cp ifcfg-ens34 ifcfg-ens34.10 -- 创建ens33.10接口配置文件
编辑ifcfg-ens34.10文件,增加/修改下面内容:
#vim ifcfg-ens34.10
VLAN=yes
TYPE=vlan
PHYSDEV=ens34
VLAN_ID=10
NAME=ens34.10
ONBOOT=yes
ZONE=trusted
DEVICE=ens34.10
BRIDGE=brvlan-10
#cp ifcfg-ens34.10 ifcfg-ens34.20
编辑ifcfg-ens34.20文件,增加/修改下面内容:
#vim ifcfg-ens34.20
VLAN=yes
TYPE=vlan
PHYSDEV=ens34
VLAN_ID=20
NAME=ens34.20
ONBOOT=yes
ZONE=trusted
DEVICE=ens34.20
BRIDGE=brvlan-20
(4)分别建立网桥brvlan-10,brvlan-20
#brctl addbr brvlan-10
#brctl addbr brvlan-20
(5)编辑网桥brvlan-10配置文件:
#vim ifcfg-brvlan-10
TYPE=bridge
BOOTPROTO=static
NAME=brvlan-10
DEVICE=brvlan-10
ONBOOT=yes
编辑网桥brvlan-20配置文件:
#vim ifcfg-brvlan-20
TYPE=bridge
BOOTPROTO=static
NAME=brvlan-20
DEVICE=brvlan-20
ONBOOT=yes
(6)将网桥brvlan-10接到网口ens34.10,brvlan-20接到网口ens34.20
#brctl addif brvlan-10 ens34.10
#brctl addif brvlan-20 ens34.20
(7)重新启动网络服务
#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)启动VM1和VM2,并配置ip
(4)查看 Bridge,发现 brvlan10 已经连接了 vnet0 vnet1设备。
六、网卡配置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”支援及设定。
(4)网卡配置bond(绑定)
1、eth1,eth2,eth3都配置绑定为bond0,例如:
#cat ifcfg-eth1
TYPE=Ethernet
BOOTPROTO=none
DEVICE=eth1
ONBOOT=yes
MASTER=bond0
SLAVE=yes
载入bond模块:
#modprobe bonding
2、查看bond0,并桥接到br1
#cat ifcfg-bond0
DEVICE=bond0
TYPE=Bond
NAME=bond0
BONDING_MASTER=yes
BOOTPROTO=static
USERCTL=no
ONBOOT=yes
#IPADDR=192.168.10.10
#PREFIX=24
#GATEWAY=192.168.10.19
BONDING_OPTS="mode=6 miimon=100"
BRIDGE=br1
3、查看网桥br0
cat ifcfg-br1
TYPE=Bridge
DEVICE=br1
ONBOOT=yes
IPADDR=192.168.10.1
IPADDR1=192.168.20.1
IPADDR2=192.168.30.1
IPADDR3=192.168.40.1
IPADDR4=192.168.50.1
PREFIX3=24
PREFIX4=24
#GATEWAY=172.16.0.1
#DNS1=172.16.254.251
#DNS2=223.5.5.5
4、重启系统
查看网卡信息:
ethtool bond0
七、网卡配置bond+vlan实践
(1)创建bond0,并创建配置文件
(2)将bond0桥接到br1,并创建br1配置文件,重启网络服务
(3)在br1上,创建虚拟vlan网口:br1.10,br1.20,并创建配置文件
(4)创建brvlan-10,brvlan-10,并创建配置文件
(5)将网桥与虚拟vlan网口连接
brctl addif brvlan- 10 br1.10
brctl addif brvlan-20 br1.20
(6)重启网络服务
KVM虚拟化网络管理(4)的更多相关文章
- kvm虚拟化网络管理(5)
一.Linux Bridge网桥管理 网络虚拟化是虚拟化技术中最复杂的部分,也是非常重要的资源. 第一节中我们创建了一个名为br0的linux-bridge网桥,如果在此网桥上新建一台vm,如下图: ...
- kvm虚拟化网络管理
Linux Bridge 网桥管理 VM2 的虚拟网卡 vnet1 也连接到了 br0 上. 现在 VM1 和 VM2 之间可以通信,同时 VM1 和 VM2 也都可以与外网通信 # Vlan LAN ...
- [原] KVM 虚拟化原理探究(1)— overview
KVM 虚拟化原理探究- overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验.同时希望借此系列博客,能够对KVM底层 ...
- [原] KVM 虚拟化原理探究 —— 目录
KVM 虚拟化原理探究 -- 目录 标签(空格分隔): KVM KVM 虚拟化原理探究(1)- overview KVM 虚拟化原理探究(2)- QEMU启动过程 KVM 虚拟化原理探究(3)- CP ...
- [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化
KVM 虚拟化原理探究(6)- 块设备IO虚拟化 标签(空格分隔): KVM [toc] 块设备IO虚拟化简介 上一篇文章讲到了网络IO虚拟化,作为另外一个重要的虚拟化资源,块设备IO的虚拟化也是同样 ...
- [原] KVM 虚拟化原理探究(5)— 网络IO虚拟化
KVM 虚拟化原理探究(5)- 网络IO虚拟化 标签(空格分隔): KVM IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理.作为一个完整的风诺依曼计算机系统,必然有输 ...
- [原] KVM 虚拟化原理探究(4)— 内存虚拟化
KVM 虚拟化原理探究(4)- 内存虚拟化 标签(空格分隔): KVM 内存虚拟化简介 前一章介绍了CPU虚拟化的内容,这一章介绍一下KVM的内存虚拟化原理.可以说内存是除了CPU外最重要的组件,Gu ...
- [原] KVM 虚拟化原理探究(3)— CPU 虚拟化
KVM 虚拟化原理探究(3)- CPU 虚拟化 标签(空格分隔): KVM [TOC] CPU 虚拟化简介 上一篇文章笼统的介绍了一个虚拟机的诞生过程,从demo中也可以看到,运行一个虚拟机再也不需要 ...
- [原] KVM 虚拟化原理探究(2)— QEMU启动过程
KVM 虚拟化原理探究- QEMU启动过程 标签(空格分隔): KVM [TOC] 虚拟机启动过程 第一步,获取到kvm句柄 kvmfd = open("/dev/kvm", O_ ...
随机推荐
- 24.stark组件全部
admin组件: 博客里面的图片的是在太难弄了,有大哥会弄给我贴一片博客,我一个一个加太累了,没有加 admin参考:https://www.cnblogs.com/yuanchenqi/articl ...
- .net大文件上传断点续传解决方案
HTML部分 <%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="index.aspx. ...
- Mockito 2 参数匹配器
Mockito 通过使用 equals() 这种自然的 Java 样式来校验参数值.有时候,当需要有其他一些灵活性的时候,你可能会要求使用参数匹配(argument matchers). 请参考下面的 ...
- 什么是SYN Flood攻击?
SYN Flood (SYN洪水) 是种典型的DoS (Denial of Service,拒绝服务) 攻击.效果就是服务器TCP连接资源耗尽,停止响应正常的TCP连接请求. 说到原理,还得从TCP如 ...
- TTTTTTTTTTTTTT CF 95 B 构造4,7幸运数字 贪心 构造 string
B. Lucky Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- AcWing:145. 超市(贪心 + 小根堆 or 贪心 + 并查集)
超市里有N件商品,每个商品都有利润pipi和过期时间didi,每天只能卖一件商品,过期商品(即当天di<=0di<=0)不能再卖. 求合理安排每天卖的商品的情况下,可以得到的最大收益是多少 ...
- Java线程之Dump
什么是线程dump Java Thread dump记录了线程在jvm中的执行信息,可以看成是线程活动的日志.Java线程转储文件有助于分析应用程序和死锁情况中的瓶颈. 如何获取线程转储文件 在这里, ...
- vxWorks下常用的几种延时方法
在应用编程的时候,通常会碰到需要一个任务在特定的延时之后执行一个指定的动作,如等待外设以确保数据可靠,控制扬声器发声时间以及串口通信超时重发等.这就需要利用定时器机制来计量特定长度的时间段. ...
- vuex 讲解
vuex 状态的管理状态,它采用集中式存储管理应用的所有组件的状态,尤其是在中大型项目,则是很好的开发利器 vuex 的流程图 vuex 的优势: 1. vuex 的存储状态,响应式的 2. 他是所有 ...
- Python中函数的使用
函数让代码的编写,阅读,测试和修改都变得更容易,提高代码的复用性,python中使用def关键字定义函数 如下代码在python3.7.3的Genay开发工具中编写测试通过. 一.简单函数定义及调用 ...