負(fù)載均衡,英文名稱為Load
成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司與策劃設(shè)計,嶺東網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:嶺東等地區(qū)。嶺東做網(wǎng)站價格咨詢:13518219792
Balance,其意思就是分?jǐn)偟蕉鄠€操作單元上進(jìn)行執(zhí)行,例如Web服務(wù)器、FTP服務(wù)器、企業(yè)關(guān)鍵應(yīng)用服務(wù)器和其它關(guān)鍵任務(wù)服務(wù)器等,從而共同完成工作任務(wù)。
負(fù)載均衡作用是建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上,它提供了一種廉價有效透明的方法擴(kuò)展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性。
負(fù)載均衡與操作系統(tǒng)沒關(guān)系。
第一步:創(chuàng)建一個ifcfg-bondX
# touch /etc/sysconfig/network-scripts/ifcfg-bond0? 新建一個bond0配置文件
#? cat /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 BOOTPROTO=static IPADDR=1.1.1.2
NETMASK=255.255.255.0
BROADCAST=1.1.1.255
NETWORK=1.1.1.0
GATEWAY=1.1.1.1
ONBOOT=yes
TYPE=Ethernet
編輯ifcfg-bond0如上
第二步:修改/etc/sysconfig/network-scripts/ifcfg-ethX
這個實驗中把網(wǎng)卡1和2綁定,修改/etc/sysconfig/network-scripts/ifcfg-ethX相應(yīng)網(wǎng)卡配置如下:
#? cat? /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
DEVICE=eth1
HWADDR=00:d0:f8:40:f1:a0? 網(wǎng)卡1mac
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
MASTER=bond0
SLAVE=yes
#? cat? /etc/sysconfig/network-scripts/ifcfg-eth2
TYPE=Ethernet DEVICE=eth2
HWADDR=00:d0:f8:00:0c:0c? 網(wǎng)卡2mac
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
MASTER=bond0
SLAVE=yes
第三步:配置/etc/modprobe.conf,添加alias bond0 bonding
#? cat /etc/modprobe.conf alias eth0 e100
alias snd-card-0 snd-intel8x0
options snd-card-0 index=0?
options snd-intel8x0 index=0?
remove snd-intel8x0 { /usr/sbin/alsactl store 0 /dev/null 21 || : ; }; /sbin/modprobe -r --ignore-remove snd-intel8x0 alias eth1 8139too
options 3c501 irq=3?
alias eth2 tulip
上面是三網(wǎng)卡本身的配置如果要綁定和做lacp只要再加上下面兩條配置
alias bond0 bonding? ? ? ? ? ? ? ? 綁定
options bond0 miimon=100 mode=4? ? mode=4是lacp
第四步:配置/etc/rc.d/rc.local,添加需要綁定的網(wǎng)卡
# cat /etc/rc.d/rc.local?
touch /var/lock/subsys/local? 配置本身就有這條命令
ifenslave bond0 eth1 eth2? ? 這條命令是添加需要綁定的網(wǎng)卡1和2?
到這里就完成bonding的配置了可以查看一下
第五步:重啟網(wǎng)絡(luò)服務(wù)和重啟pc
#service network restart? ? 重啟網(wǎng)絡(luò)服務(wù)
# shutdown -r now? ? ? ? ? ? ? ? ? 重啟pc
重啟后可以查看bonding情況:網(wǎng)卡1和2 都綁定上了,模式為802.3ad
# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.0.3 (March 23, 2006)?
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0) MII Status: up
MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0?
802.3ad info
LACP rate: slow
Active Aggregator Info:? ? ? ?
? ? Aggregator ID: 1? ? ? ?
? ? Number of ports: 2? ? ? ?
? ? Actor Key: 9? ? ? ?
? ? Partner Key: 1
? ? Partner Mac Address: 00:d0:f8:22:33:ba Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:d0:f8:40:f1:a0
Aggregator ID: 1
Slave Interface: eth2
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:d0:f8:00:0c:0c
Aggregator ID: 1
接口配置信息:新增了bond0的配置信息,接口bond0和eth1,eth2,綁定后三個接口使用的mac都是同一個:00:D0:F8:40:F1:A0 # ifconfig
bond0? ? Link encap:Ethernet? HWaddr 00:D0:F8:40:F1:A0? ? ? ? ? ?
? ? ? ? ? inet addr:1.1.1.2? Bcast:1.1.1.255? Mask:255.255.255.0
? ? ? ? ? inet6 addr: fe80::2d0:f8ff:fe40:f1a0/64 Scope:Link
? ? ? ? ? UP BROADCAST RUNNING MASTER MULTICAST? MTU:1500? Metric:1? ? ? ? ?
? ? ? ? ? RX packets:128 errors:0 dropped:0 overruns:0 frame:0? ? ? ? ?
? ? ? ? ? TX packets:259 errors:0 dropped:0 overruns:0 carrier:0? ? ? ? ?
? ? ? ? ? collisions:0 txqueuelen:0?
? ? ? ? ? RX bytes:15466 (15.1 KiB)? TX bytes:39679 (38.7 KiB)
eth0? ? ? ? Link encap:Ethernet? HWaddr 00:11:11:EB:71:E2?
? ? ? ? ? inet addr:192.168.180.8? Bcast:192.168.180.15? Mask:255.255.255.240? ? ? ? ?
? ? ? ? ? inet6 addr: fe80::211:11ff:feeb:71e2/64 Scope:Link
? ? ? ? ? UP BROADCAST RUNNING MULTICAST? MTU:1500? Metric:1? ? ? ? ?
? ? ? ? ? RX packets:311 errors:0 dropped:0 overruns:0 frame:0? ? ? ? ? ?
? ? ? ? ? TX packets:228 errors:0 dropped:0 overruns:0 carrier:0? ? ? ? ?
? ? ? ? ? collisions:0 txqueuelen:1000?
? ? ? ? ? RX bytes:30565 (29.8 KiB)? TX bytes:35958 (35.1 KiB) eth1? ? ?
? ? ? ? ? Link encap:Ethernet? HWaddr 00:D0:F8:40:F1:A0? ? ? ? ? ?
? ? ? ? ? inet6 addr: fe80::2d0:f8ff:fe40:f1a0/64 Scope:Link
? ? ? ? ? UP BROADCAST RUNNING SLAVE MULTICAST? MTU:1500? Metric:1? ? ? ? ?
? ? ? ? ? RX packets:54 errors:0 dropped:0 overruns:0 frame:0? ? ? ? ? ?
? ? ? ? ? TX packets:97 errors:0 dropped:0 overruns:0 carrier:0? ? ? ? ?
? ? ? ? ? collisions:0 txqueuelen:1000?
? ? ? ? ? RX bytes:6696 (6.5 KiB)? TX bytes:13821 (13.4 KiB)? ? ? ? ?
? ? ? ? ? Interrupt:209 Base address:0x2e00?
eth2? ? ? ? Link encap:Ethernet? HWaddr 00:D0:F8:40:F1:A0?
? ? ? ? ? inet6 addr: fe80::2d0:f8ff:fe40:f1a0/64 Scope:Link
? ? ? ? ? UP BROADCAST RUNNING SLAVE MULTICAST? MTU:1500? Metric:1? ? ? ? ?
? ? ? ? ? RX packets:74 errors:0 dropped:0 overruns:0 frame:0? ? ? ? ?
? ? ? ? ? TX packets:162 errors:0 dropped:0 overruns:0 carrier:0? ? ? ? ?
? ? ? ? ? collisions:0 txqueuelen:1000?
? ? ? ? ? RX bytes:8770 (8.5 KiB)? TX bytes:25858 (25.2 KiB)? ? ? ? ?
? ? ? ? ? Interrupt:201 Base address:0x2f00?
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:6283 errors:0 dropped:0 overruns:0 frame:0? ? ? ? ?
? ? ? ? ? TX packets:6283 errors:0 dropped:0 overruns:0 carrier:0? ? ? ? ?
? ? ? ? ? collisions:0 txqueuelen:0?
? ? ? ? ? RX bytes:9783674 (9.3 MiB)? TX bytes:9783674 (9.3 MiB)
(二)銳捷交換機(jī)配置:
lacp system-priority 100? ? ? ? 全局配置lacp優(yōu)先級
interface GigabitEthernet 0/23
no switchport
lacp port-priority 100? ? ? ? ? 接口的lacp優(yōu)先級?
port-group 1 mode active? ? ? 接口下開啟lacp 主動模式
interface GigabitEthernet 0/24?
no switchport
lacp port-priority 100?
port-group 1 mode active
interface AggregatePort 1?
no switchport? no ip proxy-arp
ip address 1.1.1.1 255.255.255.0
和linux成功建立lacp后狀態(tài)信息如下:
Show? lacp summary?
System Id:100, 00d0.f822.33ba
Flags:? S - Device is requesting Slow LACPDUs? F - Device is requesting Fast LACPDUs. A - Device is in active mode.? ? ? ? P - Device is in passive mode. Aggregate port 1:
Local information:
LACP port? ? ? Oper? ? Port? ? Port
Port? ? ? Flags? ? State? ? ? Priority? ? ? ? Key? ? Number? State ----------------------------------------------------------------------
Gi0/23? ? SA? ? ? ? bndl? ? ? ? 100? ? ? ? ? ? 0x1? ? 0x17? ? 0x3d
Gi0/24? ? SA? ? ? ? bndl? ? ? ? 100? ? ? ? ? ? 0x1? ? 0x18? ? 0x3d
Partner information:
? ? ? ? ? ? ? ? LACP port? ? ? ? ? ? ? ? ? Oper? ? Port? ? Port
Port? ? ? Flags? ? Priority? ? ? Dev ID? ? ? Key? ? Number? State ---------------------------------------------------------------------
Gi0/23? ? SA? ? ? ? 255? ? ? 00d0.f840.f1a0? 0x9? ? 0x2? ? ? 0x3d
Gi0/24? ? SA? ? ? ? 255? ? ? 00d0.f840.f1a0? 0x9? ? 0x1? ? ? 0x3d
State表示狀態(tài)信息:bndl表示lacp建立成功,sup表示不成功。
建立成功后在交換機(jī)上去ping? linux 1.1.1.2
Ruijie#ping 1.1.1.2
Sending 5, 100-byte ICMP Echoes to 1.1.1.2, timeout is 2 seconds:? press Ctrl+C to break !!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms 在linux上ping交換機(jī)
[root@localhost ~]# ping 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=64 time=0.601 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=64 time=0.606 ms
64 bytes from 1.1.1.1: icmp_seq=3 ttl=64 time=0.608 ms
64 bytes from 1.1.1.1: icmp_seq=4 ttl=64 time=0.607 ms
--- 1.1.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms rtt min/avg/max/mdev = 0.601/0.605/0.608/0.024 ms
[root@localhost ~]#
可以ping通,lacp建立正常。
把原傳輸數(shù)據(jù)的那個網(wǎng)卡shut down異常測試時,需要等到lacp狀態(tài)超時才能切換到另一條鏈路。
Ruijie#sh lacp summary?
System Id:100, 00d0.f822.33ba
Flags:? S - Device is requesting Slow LACPDUs? F - Device is requesting Fast LACPDUs. A - Device is in active mode.? ? ? ? P - Device is in passive mode. Aggregate port 1:
Local information:
? ? ? ? ? ? ? ? ? ? ? ? ? ? LACP port? ? ? Oper? ? Port? ? Port
Port? ? ? Flags? ? State? ? ? Priority? ? ? ? Key? ? Number? State ----------------------------------------------------------------------
Gi0/23? ? SA? ? ? ? sups? ? ? ? 100? ? ? ? ? ? 0x1? ? 0x17? ? 0x45
Gi0/24? ? SA? ? ? ? bndl? ? ? ? 100? ? ? ? ? ? 0x1? ? 0x18? ? 0x3d
Partner information:
? ? ? ? ? ? ? ? LACP port? ? ? ? ? ? ? ? ? Oper? ? Port? ? Port
Port? ? ? Flags? ? Priority? ? ? Dev ID? ? ? Key? ? Number? State ---------------------------------------------------------------------
Gi0/23? ? SP? ? ? ? 0? ? ? ? 0000.0000.0000? 0x0? ? 0x0? ? ? 0x0
Gi0/24? ? SA? ? ? ? 255? ? ? 00d0.f840.f1a0? 0x9? ? 0x1? ? ? 0x3d
Linux的負(fù)載均衡常用的有三種技術(shù):中國人搞出來的大神級產(chǎn)品 LVS Linux Virtual Server,俄羅斯的Nginx,來發(fā)法國的HAProxy。都是基于Linux的開源免費(fèi)的負(fù)載均衡軟件。
1. 抗負(fù)載能力強(qiáng),性能高,能達(dá)到F5的60%,對內(nèi)存和CPU資源消耗比較低
2. 工作在網(wǎng)絡(luò)4層,通過VRRP協(xié)議(僅作代理之用),具體的流量是由linux內(nèi)核來處理,因此沒有流量的產(chǎn)生。
3. 穩(wěn)定,可靠性高,自身有完美的熱備方案(Keepalived+lvs)
4. 不支持正則處理,不能做動靜分離。
5. 支持多種負(fù)載均衡算法:rr(輪詢),wrr(帶權(quán)輪詢)、lc(最小連接)、wlc(帶權(quán)最小連接)
6. 配置相對復(fù)雜,對網(wǎng)絡(luò)依賴比較大,穩(wěn)定性很高。
7. LVS工作模式有4種:
(1) nat 地址轉(zhuǎn)換
(2) dr 直接路由
(3) tun 隧道
(4) full-nat
1. 工作在網(wǎng)絡(luò)7層,可以針對http應(yīng)用做一些分流的策略,比如針對域名,目錄結(jié)構(gòu)
2. Nginx對網(wǎng)絡(luò)的依賴較小,理論上能ping通就能進(jìn)行負(fù)載功能
3. Nginx安裝配置比較簡單,測試起來很方便
4. 也可以承擔(dān)較高的負(fù)載壓力且穩(wěn)定,nginx是為解決c10k問題而誕生的
5. 對后端服務(wù)器的健康檢查,只支持通過端口來檢測,不支持通過url來檢測
6. Nginx對請求的異步處理可以幫助節(jié)點(diǎn)服務(wù)器減輕負(fù)載壓力
7. Nginx僅能支持http、https和Email協(xié)議,這樣就在適用范圍較小。
8. 不支持Session的直接保持,但能通過ip_hash來解決。對Big request header的支持不是很好。
9. Nginx還能做Web服務(wù)器即Cache功能。
1.支持兩種代理模式:TCP(四層)和HTTP(七層),支持虛擬主機(jī);
2.能夠補(bǔ)充Nginx的一些缺點(diǎn)比如Session的保持,Cookie的引導(dǎo)等工作
3.支持url檢測后端的服務(wù)器出問題的檢測會有很好的幫助。
4.更多的負(fù)載均衡策略比如:動態(tài)加權(quán)輪循(DynamicRoundRobin),加權(quán)源地址哈希(Weighted SourceHash),加權(quán)URL哈希和加權(quán)參數(shù)哈希(WeightedParameterHash)已經(jīng)實現(xiàn)
5.單純從效率上來講HAProxy更會比Nginx有更出色的負(fù)載均衡速度。
6.HAProxy可以對Mysql進(jìn)行負(fù)載均衡,對后端的DB節(jié)點(diǎn)進(jìn)行檢測和負(fù)載均衡。
7.支持負(fù)載均衡算法:Round-robin(輪循)、Weight-round-robin(帶權(quán)輪循)、source(原地址保持)、RI(請求URL)、rdp-cookie(根據(jù)cookie)
8.不能做Web服務(wù)器即Cache。
1. 負(fù)載能力
lvs抗負(fù)載能力最強(qiáng),因為僅作分發(fā)不處理請求,相當(dāng)于只作轉(zhuǎn)發(fā)不做進(jìn)一步處理直接在內(nèi)核中完成,對系統(tǒng)資源消耗低(LVS DR模式);
nginx和haproxy相對來說會弱,但是日PV2000萬也沒什么問題,因為不僅接受客戶端請求,還與后端upstream節(jié)點(diǎn)進(jìn)行請求并獲取響應(yīng),再把響應(yīng)返回給客戶端,對系統(tǒng)資源和網(wǎng)絡(luò)資源消耗高;
注:建議如果公司網(wǎng)站流量日PV在2000萬以上,并發(fā)在7,8萬以上才考慮用lvs+keepalived架構(gòu)
2. 功能性
lvs僅支持4層tcp負(fù)載均衡,haproxy可以支持4層tcp和7層http負(fù)載均衡,nginx可以支持7層http負(fù)載均衡(新版本也支持7層負(fù)載均衡);
nginx功能強(qiáng)大,配置靈活,可做web靜態(tài)站點(diǎn),靜態(tài)緩存加速,動靜分離,并支持域名,正則表達(dá)式,Location匹配,rewrite跳轉(zhuǎn),配置簡單直觀明了,還可以結(jié)合etc或consule做發(fā)布自動化上下線等等;
haproxy相對nginx的7層負(fù)載均衡會弱一些,靈活性不足,個人建議一般用haproxy做TCP負(fù)載均衡更合適一些;
3. 運(yùn)維復(fù)雜度
lvs相對來說部署架構(gòu)更復(fù)雜一些,lvs對網(wǎng)絡(luò)是有要求,lvs必須與real server在同一個網(wǎng)段,也更費(fèi)資源,需要多2臺服務(wù)器成本;
nginx和haproxy部署架構(gòu)更簡單,對網(wǎng)絡(luò)也沒要求,更便于后續(xù)維護(hù);
像對于大型的,需要進(jìn)行高并發(fā)的網(wǎng)站或者對網(wǎng)絡(luò)不太嚴(yán)格的時候,可以使用nginx;
對于大型的Web服務(wù)器的時候可以使用haproxy;
對性能有嚴(yán)格要求的時候可以使用lvs,就單純從負(fù)載均衡的角度來說,lvs也許會成為主流,更適合現(xiàn)在大型的互聯(lián)網(wǎng)公司。
注:lvs,nginx,haproxy要實現(xiàn)高可用,都需要借助keepalived軟件
1. iptables實現(xiàn)負(fù)載均衡的方式:
在Linux中使用iptables完成tcp的負(fù)載均衡有兩種模式:隨機(jī)、輪詢
The statistic module support two different modes:
random:(隨機(jī))
the rule is skipped based on a probability
nth:(輪詢)
the rule is skipped based on a round robin algorithm
2. example
本文主要解決3個問題:
第一、鏈路聚合的定義和作用是什么?
第二、如何配置鏈路聚合?
第三、鏈路聚合的實際應(yīng)用場景有那些?
第一、鏈路聚合的定義和作用是什么?
答:鏈路聚合的定義:鏈路聚合,官方稱聚合鏈接,民間又稱網(wǎng)卡組隊,具體指的是將多個網(wǎng)卡綁定在一起組建一個虛擬網(wǎng)卡,外界與虛擬網(wǎng)卡進(jìn)行通信,虛擬網(wǎng)卡再將信息進(jìn)行分發(fā);
鏈路聚合的作用:可以實現(xiàn)輪詢式的流量負(fù)載均衡和熱備份的作用;
舉個栗子:
鏈路聚合就好比是一個包工頭,這個包工頭為了多賺錢,多接訂單,肯定需要找多個小弟;
這樣就可以保障,萬一有一個小弟感冒了,不能上班,這時有其他小弟可以頂上;
當(dāng)客戶需要蓋房子的時候,直接找包工頭就好了,不需要一個一個的去找建筑工人;
第二、如何配置鏈路聚合?
答:
1、配置鏈路聚合的命令是:
nmcli connection add type team con-name team0 ifname team0 autoconnect ?yes ?config ?'{"runner": {"name": "activebackup"}}'
譯為:nmcli connection 添加 類型 team(組隊)
配置文件名? team0? 網(wǎng)卡名? team0? 每次開機(jī)自動啟用
配置運(yùn)行模式? 熱備份模式
整體譯為:為系統(tǒng)網(wǎng)卡添加一個 team (團(tuán)隊),團(tuán)隊名稱叫 team0 ,配置文件也叫 team0 , 并且設(shè)置為開機(jī)自動啟動,配置運(yùn)行模式為熱備份模式;
2、為鏈路聚合添加成員的命令是:
nmcli connection add type team-slave ?con-name team0-1 ?ifname eth1 master team0 ;
nmcli connection add type team-slave con-name team0-2 ifname eth2 master team0;
注釋:nmcli connection 添加 類型為 team的成員
? ? ? 配置文件名? team0-1? 網(wǎng)卡為 eth1? 主設(shè)備為? team0
整體譯為:為主設(shè)備team0添加兩張網(wǎng)卡,eth1和eth2;
3、為tem0配置ip地址的命令是:
nmcli connection modify team0 ipv4.method manual ipv4.addresses?
“IP 地址 / 子網(wǎng)掩碼”????connection.autoconnect yes
4、激活team0的命令是: ? ? ?
nmcli connection up team0
第三、鏈路聚合的實際應(yīng)用場景有那些?
答:當(dāng)服務(wù)器提供比較重要的服務(wù)時,只準(zhǔn)備一張網(wǎng)卡是遠(yuǎn)遠(yuǎn)不夠的,因為一但網(wǎng)卡出現(xiàn)故障,客戶就無法訪問,這就會造成客戶流失,體驗感差;
這個時候就可以運(yùn)用鏈路聚合的方法來解決,將多張網(wǎng)卡綁定在一起創(chuàng)建一張?zhí)摂M網(wǎng)卡,從而實現(xiàn)網(wǎng)卡熱備份,流量輪詢式負(fù)載均衡;
以此來保障服務(wù)器能夠正常提供服務(wù),給用戶以良好的體驗;
注意事項:
在創(chuàng)建虛擬網(wǎng)卡和添加成員時,如果命令敲錯了,一定要刪除錯誤的信息,以免造成通信混亂;
刪除的命令是:nmcli ?connection delete team0 ?(team0或team x)
查看team0的信息命令是: ? ? teamdctl ? team0 ?state ?
以上.......
(本篇完)
祝:開心!
羅貴
2019-03-24