【驚雷】Linux下多網卡冗餘的實現

来源:http://www.cnblogs.com/helonlihsmcn/archive/2017/12/13/8032024.html
-Advertisement-
Play Games

Linux下多網卡冗餘的實現 一、簡介 所謂多網卡冗餘就是通過工具把多張網卡綁定成一個IP地址(bond0屬於虛擬網卡)使用。這項技術在大中小企業都無比受用。如下圖: 多網卡的綁定的優點: 1、擴大伺服器的網路帶寬 2、可以有效均衡負載和提高容錯能力,避免單點失效 3、一旦發生故障,無縫切換網卡。 ...


Linux下多網卡冗餘的實現

一、簡介

所謂多網卡冗餘就是通過工具把多張網卡綁定成一個IP地址(bond0屬於虛擬網卡)使用。這項技術在大中小企業都無比受用。如下圖:

多網卡的綁定的優點:

1、擴大伺服器的網路帶寬

2、可以有效均衡負載和提高容錯能力,避免單點失效

3、一旦發生故障,無縫切換網卡。

二、實現環境

虛擬機環境下加上本地的和添加的一共3張網卡分別是:eth0、eth1、eth2

IP:192.168.0.153/24

(同樣物理機的不過是物理添加網卡,或者是多網卡伺服器,一樣可以作綁定)

三、搭建

首先大家可以看到主機上面的幾張網卡,列出來

[root@YuanLiu-153 ~]# ifconfig -a 
eth0      Link encap:Ethernet  HWaddr 00:0C:29:1D:7A:25  
          inet addr:192.168.0.153  Bcast:192.168.3.255  Mask:255.255.252.0
          inet6 addr: fe80::20c:29ff:fe1d:7a25/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:315026 errors:0 dropped:0 overruns:0 frame:0
          TX packets:160536 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:313603361 (299.0 MiB)  TX bytes:12994253 (12.3 MiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:1D:7A:2F  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

eth2      Link encap:Ethernet  HWaddr 00:0C:29:1D:7A:39  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
[root@YuanLiu-153 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:1d:7a:25 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.153/22 brd 192.168.3.255 scope global eth0
    inet6 fe80::20c:29ff:fe1d:7a25/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 00:0c:29:1d:7a:2f brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 00:0c:29:1d:7a:39 brd ff:ff:ff:ff:ff:ff

下麵我們把eth0-2都綁成bond0的虛擬網卡,先去修改eth0-2的網卡配置信息

[root@YuanLiu-153 network-scripts]# cd /etc/sysconfig/network-scripts

eth0-2:

[root@YuanLiu-153 network-scripts]# cat ifcfg-eth0 
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
MASTER=bond0 
SLAVE=yes 
[root@YuanLiu-153 network-scripts]# cat ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
[root@YuanLiu-153 network-scripts]# cat ifcfg-eth2
DEVICE=eth2
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes

bond0:

[root@YuanLiu-153 network-scripts]# cat ifcfg-bond0 
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.0.153
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=8.8.8.8

# DEVICE=物理設備名   
IPADDR=IP地址    
NETMASK=掩碼值    
NETWORK=網路地址    
BROADCAST=廣播地址    
GATEWAY=網關地址    
ONBOOT=[yes|no](引導時是否激活設備)    
USERCTL=[yes|no](非root用戶是否可以控制該設備)    
BOOTPROTO=[none|static|bootp|dhcp](引導時不使用協議|靜態分配|BOOTP協議|DHCP協議)    
HWADDR = 你的MAC地址

有的參數並非必需。

http://blog.chinaunix.net/uid-9967220-id-1995610.html

還有其實參數,比如PEERDNS=[yes|no],如果是通過DHCP獲取IP,是否要將DNS寫入/etc/resolv.conf,應該會覆蓋原來的內容!

【註意1】

Max_bonds=2  多個bonding的情況下需要這個參數等於2代表有兩個bond0  比如:4個網卡,兩兩綁定

如果系統存在多塊網卡,eth0,eth1,eth2,eth3,我們現在希望兩兩做備份,這樣在系統就可以配置多個bonding了,需要在載入bonding的時候載入一個參數,max_bonds,比如:
modprobe bonding max_bonds=2

我們可以加入
alias bond0 bonding

   options bonding mod=blance-rr miimon=100 max_bonds=2

   alias bond1 bonding

   options bonding mod=active-backup miimon=100 primary=eth2 max_bonds=2

多個bonding,最好加上這個參數,否則可能在網路重啟後會提示找不到BOND1之類的消息!

【註意2】

如果網卡參數里不寫MASTER=bond0和SLAVE=yes,就要執行

在/etc/rc.d/rc.local 加入如下一行(啟動時執行此行命令)   
  ifenslave bond0 eth0 eth1

如果寫了的話,這一步就可有可無了!我這裡都寫了!

所以網卡的配置信息完畢,下麵配置bond0模式綁定:

[root@YuanLiu-153 network-scripts]# vim /etc/modprobe.d/bonding.conf 
#增加這兩條信息,相關的網卡驅動
alias bond0 bonding options bond0 miimon
=120 mode=1

【bonding.conf配置文件解析以及綁定的模式】

modprobe.conf配置文件中的解釋:

miimon是用來進行鏈路檢測的。比如miimon=100,那麼系統每隔100毫秒就檢測一次鏈路的 鏈接狀態,如果一條線路不通就轉入另外一天鏈路

mode的值表示bonding的工作模式,一個有0、1、2、3、4、5、6七種模式,常用的有0、1兩種,可以根據工作模式適當的選擇:

0、(balance-rr)Round-robin policy:(平衡輪迴圈策略):傳輸數據包的順序是一次傳輸,知道最後一個傳輸完畢,此模式提供負載均衡和容錯能力(這個好像要交換機支持,不知道什麼意思), 在這種情況下,帶寬理論上是雙倍的,斷開一個網卡只是帶寬減少了

1、(active-backup)Active-backup policy:(主-備策略):只有一個設備處於活動的狀態。一個如果宕掉了則立馬有備份轉移到另外一個主設備。mac地址是外部可見的。這個模式提供了容錯能力,在這種情況下,ETH1作為備份,是NO ARP狀態的,可以使用ifconfig查看到,只有ETH0斷開,它才會接管

2、(blance-xor)XOR policy:(廣播策略):將所有數據包傳輸給所有介面。此模式提供了容錯能力

3、(blance-xor)XOR policy:(平衡策略):傳輸根據源地址布爾值選擇傳輸設備。此模式提供負載平衡和容錯能力

4、(802.3 ad)IEEE 802.3ad Dynamic link aggregation:(IEEE 802.3ad動態鏈接聚合):創建共用相同的速度和雙工設置的聚合組

5、(balance-tlb)Adaptive transmit load balancing:(適配器傳輸負載均衡):沒有特殊策略,第一個設備傳不通就用另一個設備接管第一個設備正在處理的mac地址,幫助第一個進行傳輸

6、(balance-alb)Adaptive load balancing:(適配器傳輸負載均衡):大致意思是包括mod5,bonding驅動程式截獲ARP在本地系統發送的請求,用其中之一的硬體地址覆蓋從屬設備的原地址。就像是伺服器上不同的人使用不同的硬體地址一樣(這個好像不用交換機支持)

最後執行命令生效或者重啟:

modprobe bonding
[root@YuanLiu-153 network-scripts]# service network restart
正在關閉介面 bond0:                                       [確定]
關閉環回介面:                                             [確定]
彈出環回介面:                                             [確定]
彈出界面 bond0: Determining if ip address 192.168.0.153 is already in use for device bond0...
                                                           [確定]
[root@YuanLiu-153 network-scripts]# ifconfig -a
bond0     Link encap:Ethernet  HWaddr 00:0C:29:1D:7A:25  
          inet addr:192.168.0.153  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe1d:7a25/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:554253 errors:0 dropped:0 overruns:0 frame:0
          TX packets:309064 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:632576726 (603.2 MiB)  TX bytes:26435542 (25.2 MiB)

eth0      Link encap:Ethernet  HWaddr 00:0C:29:1D:7A:25  
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:554254 errors:0 dropped:0 overruns:0 frame:0
          TX packets:309065 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:632576786 (603.2 MiB)  TX bytes:26435776 (25.2 MiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:1D:7A:25  
          UP BROADCAST SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

eth2      Link encap:Ethernet  HWaddr 00:0C:29:1D:7A:25  
          UP BROADCAST SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
[root@YuanLiu-153 network-scripts]# lsmod | grep bonding
bonding               128245  0 
8021q                  25349  1 bonding
ipv6                  317340  282 bonding,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6

說明網卡冗餘已經起效了。

最後再把這個配置做到rc.local下,開機啟動:

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
ifensalve bond0 eth0 eth1 eth2  #添加

四、總結

如果是在物理機上面做測試是非常方便的,比如綁定4個網卡eth0-3

那麼4跟網線都接上了,然後ping著網關。你只要不是4跟網線都拔完,隨機的拔掉3根都不會影響它的連通性。

這就是冗餘容錯的效果,1根網線100M的話。插上4根就是400M的出口流量了。

註意:配置的時候看清楚參數

 

 

[上述若是有錯誤或者不明瞭的地方,希望大家指出]


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 昨天有寫過一個單例模式的練習。《單例模式(C#)》 寫得較為複雜,今天再使用另外的方法來實現: class Au { private static readonly Au instance = new Au(); public static Au Instance { get { return in ...
  • 在C#中,我們對集合的數據,可以創建一個索引器的方法來訪問集合。如: class AS { public string[] Autos = { "德系","歐系","美系","日系","韓系"}; public string this[int index] { get { return Autos[ ...
  • 1.cat 顯示檔案內容,此命令是從檔案的開始依次顯示 加上-n或者-b可以顯示行號,如下 參數-n和-b的區別在於: -n是所有行都顯示行號,包括空白行。 -b是非空白行顯示行號。 2.tac 同cat一樣,只是tac是從檔案的末行開始向前依次顯示 不管是cat還是tac常用於查看內容較少的檔案, ...
  • 1.gdb和gdbserver調試原理 通過linux虛擬機里的gdb,來向開發板里的gdbserver發送命令,比如設置斷點,運行setp等,然後開發板上的gdbserver收到命令後,便會執行應用程式做相應的動作,來實現調試的功能 和之前學的裸板GDB調試 一樣,只不過之前學的是在win下的,本 ...
  • 1.strace簡介 strace常用來跟蹤進程執行時的系統調用和所接收的信號。通過strace可以知道應用程式打開了哪些文件,以及讀寫了什麼內容,包括消耗的時間以及返回值等 2.安裝strace命令 首先需要以下兩個文件: strace-4.5.15.tar.bz2 strace-fix-arm- ...
  • 又來了,上頭讓小軒我在伺服器中寫一個Shell腳本,主要用來在機器B中定時備份機器A中的一些文件。那麼,小軒是怎麼想的呢? 1. 在小軒的知識庫里,現在有scp和ssh兩個玩具。別的還真沒有其他什麼東西了。那就想直接用scp去遠程複製好了,但是scp複製的時候還要輸入密碼。那就搞搞讓使用scp的時候 ...
  • 一、備份與恢覆文檔 Linux系統中較常用的壓縮命令工具包括gzip、bzip2,最常用的歸檔命令為tar、使用tar命令可以調用Gzip或Bzip程式,gzip和bzip2是Linux系統中使用最多的兩個壓縮工具,可以壓縮指定文件,也可以解壓。兩者使用的壓縮演算法不同,但命令格式類似。 1.gzip ...
  • Linux下設置時間 提供兩種最根本有效的方式,就是更改時區。這裡以更改為國內上海時間例子,其他地方時區同理。 方法一 這裡選擇了亞洲下的上海時區,可ls查看各文件夾下的時區文件。 3.查看當前時間 是否已經是正確時間啦。一般建議使用第二種建立鏈接方式 方法二 查看當前時間 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...