一川背、Linux Bridge網(wǎng)橋管理
網(wǎng)絡(luò)虛擬化是虛擬化技術(shù)中最復(fù)雜的部分贰拿,也是非常重要的資源。
第一節(jié)中我們創(chuàng)建了一個(gè)名為br0的linux-bridge網(wǎng)橋熄云,如果在此網(wǎng)橋上新建一臺(tái)vm膨更,如下圖:
VM2 的虛擬網(wǎng)卡 vnet1 也連接到了 br0 上。 現(xiàn)在 VM1 和 VM2 之間可以通信缴允,同時(shí) VM1 和 VM2 也都可以與外網(wǎng)通信荚守。
查看網(wǎng)絡(luò)狀態(tài):
用brctl show 顯示當(dāng)前網(wǎng)橋連接狀態(tài):
brctl命令:
二、Vlan介紹
LAN 表示 Local Area Network,本地局域網(wǎng)矗漾,通常使用 Hub 和 Switch 來(lái)連接 LAN 中的計(jì)算機(jī)锈候。一般來(lái)說(shuō),兩臺(tái)計(jì)算機(jī)連入同一個(gè) Hub 或者 Switch 時(shí)缩功,它們就在同一個(gè) LAN 中晴及。
一個(gè) LAN 表示一個(gè)廣播域。 其含義是:LAN 中的所有成員都會(huì)收到任意一個(gè)成員發(fā)出的廣播包嫡锌。
VLAN 表示 Virtual LAN虑稼。一個(gè)帶有 VLAN 功能的switch 能夠?qū)⒆约旱亩丝趧澐殖龆鄠€(gè) LAN。計(jì)算機(jī)發(fā)出的廣播包可以被同一個(gè) LAN 中其他計(jì)算機(jī)收到势木,但位于其他 LAN 的計(jì)算機(jī)則無(wú)法收到蛛倦。 簡(jiǎn)單地說(shuō),VLAN 將一個(gè)交換機(jī)分成了多個(gè)交換機(jī)啦桌,限制了廣播的范圍溯壶,在二層將計(jì)算機(jī)隔離到不同的 VLAN 中。
比方說(shuō)甫男,有兩組機(jī)器且改,Group A 和 B,我們想配置成 Group A 中的機(jī)器可以相互訪問(wèn)板驳,Group B 中的機(jī)器也可以相互訪問(wèn)又跛,但是 A 和 B 中的機(jī)器無(wú)法互相訪問(wèn)。 一種方法是使用兩個(gè)交換機(jī)若治,A 和 B 分別接到一個(gè)交換機(jī)慨蓝。 另一種方法是使用一個(gè)帶 VLAN 功能的交換機(jī),將 A 和 B 的機(jī)器分別放到不同的 VLAN 中端幼。
VLAN 的隔離是二層上的隔離礼烈,A 和 B 無(wú)法相互訪問(wèn)指的是二層廣播包(比如 arp)無(wú)法跨越 VLAN 的邊界。但在三層上(比如IP)是可以通過(guò)路由器讓 A 和 B 互通的婆跑。
現(xiàn)在的交換機(jī)幾乎都是支持 VLAN 的此熬。 通常交換機(jī)的端口有兩種配置模式: Access 和 Trunk。如下圖
Access 口
這些端口被打上了 VLAN 的標(biāo)簽滑进,表明該端口屬于哪個(gè) VLAN摹迷。 不同 VLAN 用 VLAN ID 來(lái)區(qū)分,VLAN ID 的 范圍是 1-4096郊供。 Access 口都是直接與計(jì)算機(jī)網(wǎng)卡相連的,這樣從該網(wǎng)卡出來(lái)的數(shù)據(jù)包流入 Access 口后就被打上了所在 VLAN 的標(biāo)簽近哟。 Access 口只能屬于一個(gè) VLAN驮审。
Trunk 口
假設(shè)有兩個(gè)交換機(jī) A 和 B。 A 上有 VLAN1(紅)、VLAN2(黃)疯淫、VLAN3(藍(lán))地来;B 上也有 VLAN1、2熙掺、3未斑,那如何讓 AB 上相同 VLAN 之間能夠通信呢?
辦法是將 A 和 B 連起來(lái)币绩,而且連接 A 和 B 的端口要允許 VLAN1蜡秽、2、3 三個(gè) VLAN 的數(shù)據(jù)都能夠通過(guò)缆镣。這樣的端口就是Trunk口了芽突。 VLAN1, 2, 3 的數(shù)據(jù)包在通過(guò) Trunk 口到達(dá)對(duì)方交換機(jī)的過(guò)程中始終帶著自己的 VLAN 標(biāo)簽。
三董瞻、Linux Bridge實(shí)現(xiàn)Vlan原理
KVM 虛擬化環(huán)境下實(shí)現(xiàn) VLAN 架構(gòu)寞蚌,如下圖
eth0 是宿主機(jī)上的物理網(wǎng)卡,有一個(gè)命名為 eth0.10 的子設(shè)備與之相連钠糊。 eth0.10 就是 VLAN 設(shè)備了挟秤,其 VLAN ID 就是 VLAN 10。 eth0.10 掛在命名為 brvlan10 的 Linux Bridge 上抄伍,虛機(jī) VM1 的虛擬網(wǎng)卡 vent0 也掛在 brvlan10 上艘刚。
這樣的配置其效果就是: 宿主機(jī)用軟件實(shí)現(xiàn)了一個(gè)交換機(jī)(當(dāng)然是虛擬的),上面定義了一個(gè) VLAN10逝慧。 eth0.10昔脯,brvlan10 和 vnet0 都分別接到 VLAN10 的 Access口上。而 eth0 就是一個(gè) Trunk 口笛臣。VM1 通過(guò) vnet0 發(fā)出來(lái)的數(shù)據(jù)包會(huì)被打上 VLAN10 的標(biāo)簽云稚。
eth0.10 的作用是:定義了 VLAN10
brvlan10 的作用是:Bridge 上的其他網(wǎng)絡(luò)設(shè)備自動(dòng)加入到 VLAN10 中
增加一個(gè) VLAN20,如下圖
這樣虛擬交換機(jī)就有兩個(gè) VLAN 了沈堡,VM1 和 VM2 分別屬于 VLAN10 和 VLAN20静陈。
對(duì)于新創(chuàng)建的虛機(jī),只需要將其虛擬網(wǎng)卡放入相應(yīng)的 Bridge诞丽,就能控制其所屬的 VLAN鲸拥。
VLAN 設(shè)備總是以母子關(guān)系出現(xiàn),母子設(shè)備之間是一對(duì)多的關(guān)系僧免。 一個(gè)母設(shè)備(eth0)可以有多個(gè)子設(shè)備(eth0.10刑赶,eth0.20 ……),而一個(gè)子設(shè)備只有一個(gè)母設(shè)備懂衩。
四撞叨、Linux Bridge實(shí)現(xiàn)Vlan
(1)查看核心是否提供VLAN 功能金踪,執(zhí)行
dmesg | grep -i 802
或者檢查/proc/net/vlan目錄是否存在。
如果沒(méi)有提供VLAN 功能牵敷,/proc/net/vlan目錄是不存在的胡岔。
如果8021q模塊沒(méi)有載入系統(tǒng),則可以通過(guò)使用modprobe模組命令載入802.1q模組枷餐,並且利用lsmod命令確認(rèn)模組是否已經(jīng)載入到核心內(nèi)靶瘸。
modprobe 8021q
lsmod | grep 8021q
設(shè)置開(kāi)機(jī)載入8021q模塊(可選)
在/etc/sysconfig/modules下增加一個(gè)8021q.modules文件,文件內(nèi)容為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)創(chuàng)建vlan接口
創(chuàng)建vlan接口前毛肋,在設(shè)備上添加一塊網(wǎng)卡ens34怨咪,
網(wǎng)絡(luò)配置如右圖:
注意:
將BOOTPROTO=static
基于網(wǎng)卡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 -- 創(chuàng)建ens33.10接口配置文件
編輯ifcfg-ens34.10文件惊暴,增加/修改下面內(nèi)容:
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文件,增加/修改下面內(nèi)容:
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)分別建立網(wǎng)橋brvlan-10趁桃,brvlan-20
brctl addbr brvlan-10
brctl addbr brvlan-20
(5)編輯網(wǎng)橋brvlan-10配置文件:
vim ifcfg-brvlan-10
TYPE=bridge
BOOTPROTO=static
NAME=brvlan-10
DEVICE=brvlan-10
ONBOOT=yes
編輯網(wǎng)橋brvlan-20配置文件:
vim ifcfg-brvlan-20
TYPE=bridge
BOOTPROTO=static
NAME=brvlan-20
DEVICE=brvlan-20
ONBOOT=yes
(6)將網(wǎng)橋brvlan-10接到網(wǎng)口ens34.10辽话,brvlan-20接到網(wǎng)口ens34.20
brctl addif brvlan-10 ens34.10
brctl addif brvlan-20 ens34.20
(7)重新啟動(dòng)網(wǎng)絡(luò)服務(wù)
systemctl restart network
五、Vlan模式測(cè)試虛機(jī)
先將NetworkManager服務(wù)關(guān)閉
(1)在宿主機(jī)中已經(jīng)提前創(chuàng)建好了虛機(jī) VM1
在 virt-manager 中將 VM1 的虛擬網(wǎng)卡掛到 brvlan-10 上
(2)從VM1克隆一臺(tái)虛機(jī)VM2
virst-clone -o vm1 -n vm2 -f /var/lib/libvirt/images/vm2.qcow2
(3)啟動(dòng)VM1和VM2卫病,并配置ip
(4)查看 Bridge油啤,發(fā)現(xiàn) brvlan10 已經(jīng)連接了 vnet0 vnet1設(shè)備。
六蟀苛、網(wǎng)卡配置bond(綁定)
(1)網(wǎng)卡bond(綁定)益咬,也稱作網(wǎng)卡捆綁。就是將兩個(gè)或者更多的物理網(wǎng)卡綁定成一個(gè)虛擬網(wǎng)卡帜平。網(wǎng)卡是通過(guò)把多張網(wǎng)卡綁定為一個(gè)邏輯網(wǎng)卡幽告,實(shí)現(xiàn)本地網(wǎng)卡的冗余,帶寬擴(kuò)容和負(fù)載均衡裆甩,在應(yīng)用部署中是一種常用的技術(shù)冗锁。
多網(wǎng)卡綁定實(shí)際上需要提供一個(gè)額外的軟件的bond驅(qū)動(dòng)程序?qū)崿F(xiàn)。通過(guò)驅(qū)動(dòng)程序可以將多塊網(wǎng)卡屏蔽嗤栓。對(duì)TCP/IP協(xié)議層只存在一個(gè)Bond網(wǎng)卡冻河,在Bond程序中實(shí)現(xiàn)網(wǎng)絡(luò)流量的負(fù)載均衡,即將一個(gè)網(wǎng)絡(luò)請(qǐng)求重定位到不同的網(wǎng)卡上茉帅,來(lái)提高總體網(wǎng)絡(luò)的可用性叨叙。
(2)網(wǎng)卡綁定的目的:
1.提高網(wǎng)卡的吞吐量。
2.增強(qiáng)網(wǎng)絡(luò)的高可用堪澎,同時(shí)也能實(shí)現(xiàn)負(fù)載均衡擂错。
(3)網(wǎng)卡配置bond(綁定)bond模式:
1、Mode=0(balance-rr) 表示負(fù)載分擔(dān)round-robin樱蛤,平衡輪詢策略马昙,具有負(fù)載平衡和容錯(cuò)功能
bond的網(wǎng)卡MAC為當(dāng)前活動(dòng)的網(wǎng)卡的MAC地址桃犬,需要交換機(jī)設(shè)置聚合模式,將多個(gè)網(wǎng)卡綁定為一條鏈路行楞。
2、Mode=1(active-backup) 表示主備模式土匀,具有容錯(cuò)功能子房,只有一塊網(wǎng)卡是active,另外一塊是備的standby,這時(shí)如果交換機(jī)配的是捆綁就轧,將不能正常工作证杭,因?yàn)榻粨Q機(jī)往兩塊網(wǎng)卡發(fā)包,有一半包是丟棄的妒御。
3解愤、Mode=2(balance-xor) 表示XOR Hash負(fù)載分擔(dān)(異或平衡策略),具有負(fù)載平衡和容錯(cuò)功能
每個(gè)slave接口傳輸每個(gè)數(shù)據(jù)包和交換機(jī)的聚合強(qiáng)制不協(xié)商方式配合乎莉。(需要xmit_hash_policy)送讲。
4、Mode=3(broadcast) 表示所有包從所有interface發(fā)出惋啃,廣播策略哼鬓,具有容錯(cuò)能力,這個(gè)不均衡边灭,只有冗余機(jī)制...和交換機(jī)的聚合強(qiáng)制不協(xié)商方式配合异希。
5、Mode=4(802.3ad) 表示支持802.3ad協(xié)議(IEEE802.3ad 動(dòng)態(tài)鏈接聚合) 和交換機(jī)的聚合LACP方式配合(需要xmit_hash_policy)绒瘦。
6称簿、Mode=5(balance-tlb) 適配器傳輸負(fù)載均衡,并行發(fā)送惰帽,無(wú)法并行接收憨降,解決了數(shù)據(jù)發(fā)送的瓶頸。 是根據(jù)每個(gè)slave的負(fù)載情況選擇slave進(jìn)行發(fā)送善茎,接收時(shí)使用當(dāng)前輪到的slave券册。
7、Mode=6(balance-alb) 在5的tlb基礎(chǔ)上增加了rlb垂涯。適配器負(fù)載均衡模式并行發(fā)送烁焙,并行接收數(shù)據(jù)包。
5和6不需要交換機(jī)端的設(shè)置耕赘,網(wǎng)卡能自動(dòng)聚合骄蝇。4需要支持802.3ad。0操骡,2和3理論上需要靜態(tài)聚合方式九火,但實(shí)測(cè)中0可以通過(guò)mac地址欺騙的方式在交換機(jī)不設(shè)置的情況下不太均衡地進(jìn)行接收赚窃。
常用的有三種:
mode=0:平衡負(fù)載模式,有自動(dòng)備援岔激,但需要”Switch”支援及設(shè)定勒极。
mode=1:自動(dòng)備援模式,其中一條線若斷線虑鼎,其他線路將會(huì)自動(dòng)備援辱匿。
mode=6:平衡負(fù)載模式,有自動(dòng)備援炫彩,不必”Switch”支援及設(shè)定匾七。
(4)網(wǎng)卡配置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
BONDING_OPTS="mode=6 miimon=100"
BRIDGE=br1
3、查看網(wǎng)橋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
4夺颤、重啟系統(tǒng)
查看網(wǎng)卡信息:
ethtool bond0
七痢缎、網(wǎng)卡配置bond+vlan實(shí)踐
(1)創(chuàng)建bond0,并創(chuàng)建配置文件
(2)將bond0橋接到br1世澜,并創(chuàng)建br1配置文件独旷,重啟網(wǎng)絡(luò)服務(wù)
(3)在br1上,創(chuàng)建虛擬vlan網(wǎng)口:br1.10寥裂,br1.20嵌洼,并創(chuàng)建配置文件
(4)創(chuàng)建brvlan-10,brvlan-10封恰,并創(chuàng)建配置文件
(5)將網(wǎng)橋與虛擬vlan網(wǎng)口連接
brctl addif brvlan-10 br1.10
brctl addif brvlan-20 br1.20
(6)重啟網(wǎng)絡(luò)服務(wù)
課堂實(shí)驗(yàn)架構(gòu)圖:
實(shí)驗(yàn)步驟:
[root@yunwei2 network-scripts]# cat ifcfg-ens37
TYPE=Ethernet
BOOTPROTO=none
DEVICE=ens37
ONBOOT=yes
MASTER=bond0
SLAVE=yes
[root@yunwei2 network-scripts]# modprobe bonding
[root@yunwei2 network-scripts]# cat ifcfg-bond0
DEVICE=bond0
TYPE=Bond
NAME=bond0
BONDING_MASTER=yes
BOOTPROTO=static
USERCTL=no
ONBOOT=yes
BONDING_OPTS="mode=6 miimon=100"
BRIDGE=br1
[root@yunwei2 network-scripts]# brctl addbr br1
[root@yunwei2 network-scripts]# cat ifcfg-br1
TYPE=Bridge
NAME=br1
DEVICE=br1
ONBOOT=yes
BOOTPROTO=static
[root@yunwei2 network-scripts]# vconfig add br1 10
[root@yunwei2 network-scripts]# vconfig add br1 20
[root@yunwei2 network-scripts]# cat ifcfg-br1.10
VLAN=yes
TYPE=vlan
PHYSDEV=br1
VLAN_ID=10
NAME=br1.10
ONBOOT=yes
ZONE=trusted
DEVICE=br1.10
BRIDGE=brvlan-10
[root@yunwei2 network-scripts]# brctl addbr brvlan-10
[root@yunwei2 network-scripts]# brctl addbr brvlan-20
[root@yunwei2 network-scripts]# cat ifcfg-brvlan-10
TYPE=bridge
BOOTPROTO=static
NAME=brvlan-10
DEVICE=brvlan-10
ONBOOT=yes
[root@yunwei2 network-scripts]# brctl addif brvlan-10 br1.10
[root@yunwei2 network-scripts]# brctl addif brvlan-20 br1.20
[root@yunwei2 network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29a1940e no ens33
br1 8000.000c29a19418 no bond0
brvlan-10 8000.000c29a19418 no br1.10
brvlan-20 8000.000c29a19418 no br1.20
virbr0 8000.525400de6b4d yes virbr0-nic
[root@yunwei2 network-scripts]# systemctl restart network