Linux系統調優——網絡(四)


(1).查看網絡(Network)運行狀態相關工具

 1)nload監控總體帶寬使用情況

  nload需要自己安裝,而且在安裝前需要安裝epel-release

[root@youxi1 ~]# yum -y install epel-release
[root@youxi1 ~]# yum -y install nload

  安裝一個httpd,使用ab命令測試

[root@youxi1 ~]# yum -y install httpd
[root@youxi1 ~]# nload  //出現的頁面會實時刷新,后面可以跟-u <單位>來指定流量的單位,也支持h人類易讀
Device ens33 [192.168.5.101] (1/2):  //當前是哪一塊網卡,可以按<Enter>切換
================================================================================
Incoming:  //進入當前網卡的流量

Curr: 952.00 Bit/s  //當前流量
Avg: 1.52 kBit/s  //平均流量
Min: 944.00 Bit/s  //最小流量
Max: 19.27 kBit/s  //最大流量
Ttl: 18.99 MByte  //流量總和
Outgoing:  //從當前網卡出去的流量

Curr: 7.84 kBit/s
Avg: 8.46 kBit/s
Min: 3.53 kBit/s
Max: 41.29 kBit/s
Ttl: 490.19 kByte
//如果想要退出按q
//打開另一個窗口,使用ab命令測試
[root@youxi1 ~]# ab -n 1000 -c 2 http://www.baidu.com/index.html

  結果如下:

 2)nethogs找出使用帶寬最多的進程

  一樣需要下載安裝,不過這里需要下載rpm包

[root@youxi1 ~]# wget http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/n/nethogs-0.8.5-1.el7.x86_64.rpm
[root@youxi1 ~]# yum -y install nethogs  //會有依賴,所以我直接使用yum安裝

  使用nethogs查看使用帶寬最多的進程

[root@youxi1 ~]# nethogs  //這個也是實時刷新的,按q退出
Ethernet link detected
                      Waiting for first packet to arrive (see sourceforge.net bug 1019381)
NetHogs version 0.8.5

    PID USER     PROGRAM                    DEV        SENT      RECEIVED       
   1416 root     sshd: root@pts/0           ens33       0.147       0.059 KB/sec
      ? root     unknown TCP                            0.000       0.000 KB/sec

  TOTAL                                                 0.147       0.059 KB/sec
//打開另一個窗口下載一個文件進行測試
[root@youxi1 ~]# wget http://issuecdn.baidupcs.com/issue/netdisk/yunguanjia/BaiduNetdisk_5.5.3.exe

  結果如下:

  可以看到PID為1620的wget進程流量最多。

(2).網絡相關調優

 1)網卡綁定技術(Bonding)

  網卡綁定也稱作"網卡捆綁",就是使用多塊物理網卡虛擬成為一塊網卡,以提供負載均衡或者冗余,增加帶寬的作用。當一個網卡壞掉時,不會影響業務。這個聚合起來的設備看起來是一個單獨的以太網接口設備,也就是這幾塊網卡具有相同的IP地址而並行鏈接聚合成一個邏輯鏈路工作。這種技術在Cisco等網絡公司中,被稱為Trunking和Etherchannel 技術,在Linux的內核中把這種技術稱為bonding。

  負載均衡:對於bonding的網絡負載均衡是我們在文件服務器中常用到的,比如把三塊網卡,當做一塊來用,解決一個IP地址,流量過大,服務器網絡壓力過大的問題。為了解決同一個IP地址,突破流量的限制,畢竟網線和網卡對數據的吞吐量是有限制的。如果在有限的資源的情況下,實現網絡負載均衡,最好的辦法就是 bonding。

  網絡冗余:對於服務器來說,網絡設備的穩定也是比較重要的,特別是網卡。在生產型的系統中,網卡的可靠性就更為重要了。在生產型的系統中,大多通過硬件設備的冗余來提供服務器的可靠性和安全性,比如電源。bonding 也能為網卡提供冗余的支持。把多塊網卡綁定到一個IP地址,當一塊網卡發生物理性損壞的情況下,另一塊網卡自動啟用,並提供正常的服務,即:默認情況下只有一塊網卡工作,其它網卡做備份。

  這里做一個主備模式的綁定,即一個網卡處於活躍狀態,另一個處於備份狀態,當活躍網卡down掉時,啟用備份網卡。

  首先需要將主機調整為雙網卡(或者多網卡),重啟network

[root@youxi1 ~]# systemctl restart network  //重啟是為了知道網卡名稱,后面綁定需要用到網卡名稱
[root@youxi1 ~]# ip a sh  //可以看到我這里是ens33和ens38
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:e6:d6:27 brd ff:ff:ff:ff:ff:ff
    inet 192.168.5.101/24 brd 192.168.5.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::201:7257:85b:7dc8/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:e6:d6:31 brd ff:ff:ff:ff:ff:ff
    inet 192.168.5.130/24 brd 192.168.5.255 scope global noprefixroute dynamic ens38
       valid_lft 1780sec preferred_lft 1780sec
    inet6 fe80::6993:89d:c392:b48e/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

  接着移動網卡配置文件,生成綁定配置文件

[root@youxi1 ~]# mkdir /network_bak  //創建一個網卡備份目錄
[root@youxi1 ~]# mv /etc/sysconfig/network-scripts/ifcfg-ens* /network_bak/
[root@youxi1 ~]# ls /network_bak/  //這個應該是我沒有重啟服務器,所以只有一個,最后我會重啟服務器測試一下
ifcfg-ens33
[root@youxi1 ~]# nmcli connection add type bond ifname bond0 con-name bond0 miimon 100 mode active-backup primary ens33 ip4 192.168.5.101/24
連接“bond0”(678abe85-7b3f-4192-a372-1101579e0897) 已成功添加。
[root@youxi1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond0
GATEWAY=192.168.5.2  //雖然生成了配置信息,但並不全,需要添加默認網關和DNS
DNS1=192.168.5.2

  nmcli說明:

add type bond ifname bond0

添加一個類型為bond,網卡名為bond0的設備。

其實在add和type之間還有一個隱藏參數[save {yes|no}],只不過默認是yes,所以可以不寫。

con-name bond0 配置名稱為bond0的鏈路
miimon 100 指定監控頻率為100毫秒
mode active-backup 指定模式為主備模式
primary ens33 指定主網卡為ens33
ip4 192.168.5.101/24 指定IP地址為192.168.5.101/24

  將網卡ens33和ens38綁定到band0上,注意ens33和ens38的類型應該為bond-slave,表示bond的子接口。

[root@youxi1 ~]# nmcli connection add type bond-slave ifname ens33 master bond0
連接“bond-slave-ens33”(47689691-697a-4370-bb2f-e8de9adbff26) 已成功添加。
[root@youxi1 ~]# nmcli connection add type bond-slave ifname ens38 master bond0 
連接“bond-slave-ens38”(a12c6f04-5b5a-4dee-adb5-b7eb0e71399c) 已成功添加。
[root@youxi1 ~]# ls /etc/sysconfig/network-scripts/ifcfg-bond*
/etc/sysconfig/network-scripts/ifcfg-bond0
/etc/sysconfig/network-scripts/ifcfg-bond-slave-ens33
/etc/sysconfig/network-scripts/ifcfg-bond-slave-ens38

  最后重啟網絡服務,使配置生效

[root@youxi1 ~]# systemctl restart network
[root@youxi1 ~]# nmcli connection show --active  //查看當前已激活的網絡接口
NAME              UUID                                  TYPE      DEVICE 
bond-slave-ens33  47689691-697a-4370-bb2f-e8de9adbff26  ethernet  ens33  
bond-slave-ens38  a12c6f04-5b5a-4dee-adb5-b7eb0e71399c  ethernet  ens38  
bond0             678abe85-7b3f-4192-a372-1101579e0897  bond      bond0  
[root@youxi1 ~]# cat /proc/net/bonding/bond0  //查看band0當前狀態
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: ens33 (primary_reselect always)
Currently Active Slave: ens33  //當前使用的從接口
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: ens33  //從接口
MII Status: up  //鏈接狀態
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:e6:d6:27
Slave queue ID: 0

Slave Interface: ens38
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:e6:d6:31
Slave queue ID: 0

  測試,將ens33的網絡斷開,然后再次查看bond0的狀態

[root@youxi1 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: ens33 (primary_reselect always)
Currently Active Slave: ens38  //可以看到有ens33變成了ens38
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: ens33
MII Status: down  //ens33是down狀態
Speed: Unknown
Duplex: Unknown
Link Failure Count: 1
Permanent HW addr: 00:0c:29:e6:d6:27
Slave queue ID: 0

Slave Interface: ens38
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:e6:d6:31
Slave queue ID: 0

   重啟之后依然有效,如下

[root@youxi1 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: ens33 (primary_reselect always)
Currently Active Slave: ens38
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: ens38
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:e6:d6:31
Slave queue ID: 0

Slave Interface: ens33
MII Status: down
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 00:0c:29:e6:d6:27
Slave queue ID: 0

(3).band類型下的七種模式(mode)

  常用的模式mode是0、1、4、6這幾種模式。具體如下:balance-rr (0) –輪詢模式,負載均衡(bond默認的模式);active-backup (1) –主備模式(常用);balance-xor (2);broadcast (3);802.3ad (4) –聚合模式;balance-tlb (5);balance-alb (6)。

  詳細如下:

    mode=0  默認是mode=0, 有高可用 (容錯) 和負載均衡的功能, 需要交換機的配置,每塊網卡輪詢發包 (流量分發比較均衡),mode 0下bond所綁定的網卡的IP都被修改成相同的mac地址,如果這些網卡都被接在同一個交換機,那么交換機的arp表里這個mac地址對應的端口就有多個,那么交換機接受到發往這個mac地址的包應該往哪個端口轉發呢?正常情況下mac地址是全球唯一的,一個mac地址對應多個端口肯定使交換機迷惑了。所以 mode0下的bond如果連接到交換機,交換機這幾個端口應該采取聚合方式(cisco稱為ethernetchannel),因為交換機做了聚合后,聚合下的幾個端口也被捆綁成一個mac地址。若我們不配置,我們的解 決辦法是,兩個網卡接入不同的交換機即可。

    mode=1  只有一個設備處於活動狀態,當一個宕掉另一個馬上由備份轉換為主設備。mac地址是外部可見得,從外面看來,bond的MAC地址是唯一的,以避免switch(交換機)發生混亂。此模式只提供了容錯能力;由此可見此算法的優點是可以提供高網絡連接的可用性,但是它的資源利用率較低,只有一個接口處於工作狀態,在有 N 個網絡接口的情況下,資源利用率為1/N

    mode=2  基於指定的傳輸HASH策略傳輸數據包。缺省的策略是:(源MAC地址 XOR 目標MAC地址) % slave數量。其他的傳輸策略可以通過xmit_hash_policy選項指定,此模式提供負載平衡和容錯能力。

    mode=3  在每個slave接口上傳輸每個數據包,此模式提供了容錯能力,非常不常用。

    mode=4  創建一個聚合組,它們共享同樣的速率和雙工設定。根據802.3ad規范將多個slave工作在同一個激活的聚合體下。外出流量的slave選舉是基於傳輸hash策略,該策略可以通過xmit_hash_policy選項從缺省的XOR策略改變到其他策略。需要幾個必要條件:ethtool支持獲取每個slave的速率和雙工設定;switch(交換機)支持IEEE 802.3ad Dynamic link aggregation;大多數switch(交換機)需要經過特定配置才能支持802.3ad模式。

    mode=5  不需要任何特別的switch(交換機)支持的通道bonding。在每個slave上根據當前的負載(根據速度計算)分配外出流量。如果正在接受數據的slave出故障了,另一個slave接管失敗的slave的MAC地址。該模式的必要條件:ethtool支持獲取每個slave的速率。

    mode=6  模式包含了balance-tlb(5)模式,同時加上針對IPV4流量的接收負載均衡(receive load balance, rlb),而且不需要任何switch(交換機)的支持。接收負載均衡是通過ARP協商實現的。bonding驅動截獲本機發送的ARP應答,並把源硬件地址改寫為bond中某個slave的唯一硬件地址,從而使得不同的對端使用不同的硬件地址進行通信。來自服務器端的接收流量也會被均衡。當本機發送ARP請求時,bonding驅動把對端的IP信息從ARP包中復制並保存下來。當ARP應答從對端到達 時,bonding驅動把它的硬件地址提取出來,並發起一個ARP應答給bond中的某個slave。使用ARP協商進行負載均衡的一個問題是:每次廣播 ARP請求時都會使用bond的硬件地址,因此對端學習到這個硬件地址后,接收流量將會全部流向當前的slave。這個問題可以通過給所有的對端發送更新 (ARP應答)來解決,應答中包含他們獨一無二的硬件地址,從而導致流量重新分布。當新的slave加入到bond中時,或者某個未激活的slave重新 激活時,接收流量也要重新分布。接收的負載被順序地分布(round robin)在bond中最高速的slave上當某個鏈路被重新接上,或者一個新的slave加入到bond中,接收流量在所有當前激活的slave中全部重新分配,通過使用指定的MAC地址給每個 client起ARP應答。下面介紹的updelay參數必須被設置為某個大於等於switch(交換機)轉發延時的值,從而保證發往對端的ARP應答 不會被switch(交換機)阻截。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM