linux負載均衡有:1、bond,它是linux內核自帶的多網卡聚合功能;2、iproute2中的多路由,使用ip命令中的nexthop選項從而實現負載均衡;3、iptables+iproute2,iptables是通過修改mark標記來實現負載均衡,而iproute2則用來針對數據包的不同mark定義專門的策略路由表;4、流量控制器TC,主要用來實現linux內核的流量控制;5、LVS,它是一套集成在linux內核中的負載均衡服務。
具體內容如下:
Linux系統的數據包處理能力相當強大,通過Netfilter框架或者策略路由系統,用戶可以非常靈活的定義數據包的處理規則。因此在Linux下實現負載均衡自然也是非常簡單,Linux下常用的幾種負載均衡技術:
1、bond
bond是Linux內核自帶的多網卡聚合功能。這個功能可以把多個網卡整合成一個虛擬網卡從而同時利用多塊網卡傳輸數據。bond有多種不同的模式用以適應不同的情況。bond主要是從L2鏈路層考慮的,因此可以bond的網卡通常要連到同一個交換機上。
2、iproute2(ip命令)中的多路由
可以使用ip命令中的nexthop選項非常簡單的實現負載均衡。nexthop可以為同一個目的地址指定多條路由,并可以指定每條路由的權重。之后系統會根據權重為數據選擇某條路由。
例如:ip route add default nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1
這條命令定義默認路由有ip1:if1和ip2:if2兩條路徑,且這兩條路徑的權重相同。
利用ip命令實現上邊這樣簡單的負載均衡是非常方便的,但是ip命令畢竟是一個網絡層命令,因此它是無法根據運輸層(端口號)進行負載均衡的。
3、iptables+iproute2
提起iptables大多數人都只用過其中的filter表和nat表,而對于mangle表則很少有人使用。然后使用mangle表是可以非常方便地實現靈活負載均衡的。
iptables的mangle表用來修改數據包的一些標識,可以修改的標識有:dscp(區分服務類型)、ToS(服務類型)、mark(標記)。前兩者是ip頭的QoS相關標志位,主要用于ip層的qos實現,但是目前這兩個標志位極少被用到,通常都會被忽略。而第三個(mark)則是由linux內核實現的對數據包的標記。因為是由linux內核實現的,因此這個標記只能在本機使用,并非數據包的一部分,出了本機這個標記就不存在了。
iptables實現負載均衡主要是通過修改mark標記來實現。iproute2可以針對數據包的不同mark定義專門的策略路由表,因此我們可以把去往不同接口的路由寫入適用不同mark的策略路由表中,之后linux就可以根據數據包的mark來決定數據包要走的路由了。
例如:
首先,為所有進入本機的目的端口號為25的tcp包打上“1”標記:iptables -A PREROUTING -t mangle -p tcp --dport 25 -j MARK --set-mark 1
添加路由規則規定標記為1的數據包使用路由表200
ip rule add fwmark 1 table 200
在200路由表中添加路由
ip route add default via 192.168.1.1 dev ppp0 table 200
同理,為所有進入本機的目的端口號為80的tcp包打上“2”標記
iptables -A PREROUTING -t mangle -p tcp --dport 80 -j MARK --set-mark 2
添加相關路由,方法同上:
ip rule add fwmark 2 table 200
ip route add default via 192.168.2.1 dev wlan0 table 200
這樣子一來以后所有的端口號為25的包都會走192.168.1.1 dev ppp0路由,而所有端口號為80的數據包則會走192.168.2.1 dev wlan0路由,從而實現了針對端口號的負載均衡。同理,也可以利用iptables實現針對源(目的)地址、協議、接口的負載均衡,真的非常的方便。
4、tc
流量控制器TC(Traffic Control)用于Linux內核的流量控制,它利用隊列規定建立處理數據包的隊列,并定義隊列中的數據包被發送的方式, 從而實現對流量的控制。TC命令通過建立篩選器(filter)、分類器(class)、隊列(qdisc)這三個對象來實現對流量的控制。具體的講就是,通過篩選器決定哪些數據包進入到哪些分類的隊列中,之后再按照一定的規則將數據包從各個分類的隊列中發送出去。盡管tc的主要功能在于流量控制,但是我們可以通過把一個隊列建立在多個網卡上來實現流量的負載均衡。
例如:
在eth1上建立一個隊列:tc qdisc add dev eth1 root teql0
在eth2上建立同樣的隊列
tc qdisc add dev eth2 root teql0
啟動設備teql0
ip link set dev teql0 up
通過這三條命令,所有發往teql0的流量都會在eth1和eth2之間進行負載均衡發送。
應該說,tc是一個相當強大復雜的工具,但是tc的主要功能還是在于流量控制。
5、LVS
LVS(Linux virtual machine)是一套集成在Linux內核中的負載均衡服務。LVS通過部署負載均衡服務器在網絡層截獲并修改報文并依據一定規則分發給服務器集群中服務器來實現負載均衡。LVS主要用于web服務器的負載均衡,通過LVS,用戶的請求可以被調度到服務器集群的多個服務器上去,并且用戶認為自己始終在跟唯一一臺服務器進行通信。LVS與前邊幾種負載均衡技術最大的差別在于,LVS有非常具體的應用場景,即web服務器集群。