-
Linux運(yùn)維工程師面試題(3)
- 1 LVS 的工作模式有幾種,分別是什么
- 2 LVS 由哪幾部分組成
- 3 LVS 相關(guān)的術(shù)語(yǔ)有哪些
- 4 LVS 集群的負(fù)載調(diào)度算法有哪些
- 5 使用LVS 可不可以把iptables給禁用刪除
- 6 haproxy 調(diào)度算法有哪些
- 7 nginx 實(shí)現(xiàn)負(fù)載均衡的分發(fā)策略有那些
- 8 四層負(fù)載和七層負(fù)載的區(qū)別
- 9 負(fù)載均衡的作用有哪些
- 10 LVS、HAProxy、Nginx三款負(fù)載均衡的優(yōu)缺點(diǎn)及區(qū)別
Linux運(yùn)維工程師面試題(3)
祝各位小伙伴們?cè)缛照业阶约盒膬x的工作。
持續(xù)學(xué)習(xí)才不會(huì)被淘汰。
地球不爆炸,我們不放假。
機(jī)會(huì)總是留給有有準(zhǔn)備的人的。
加油,打工人!
1 LVS 的工作模式有幾種,分別是什么
三種:
- NAT 模式:修改請(qǐng)求報(bào)文的目標(biāo)IP,多目標(biāo)IP的DNAT
- DR 模式(默認(rèn)模式):操縱封裝新的MAC地址
- TUN 模式:在原請(qǐng)求IP報(bào)文之外新加—個(gè)IP首部
2 LVS 由哪幾部分組成
LVS 由 2 部分程序組成,包括 ipvs 和 ipvsadm。
-
ipvs (ip virtual server):一段代碼工作在內(nèi)核空間,叫ipvs,是真正生效實(shí)現(xiàn)調(diào)度的代碼;
-
ipvsadm:另外一段是工作在用戶(hù)空間,叫ipvsadm,負(fù)責(zé)為ipvs內(nèi)核框架編寫(xiě)規(guī)則,定義誰(shuí)是集群服務(wù),而誰(shuí)是后端真實(shí)的服務(wù)器(Real Server)。
3 LVS 相關(guān)的術(shù)語(yǔ)有哪些
- DS:Director Server,指的是前端負(fù)載均衡器節(jié)點(diǎn)。
- RS:Real Server,后端真實(shí)的工作服務(wù)器。
- VIP:Virtual IP,向外部直接面向用戶(hù)請(qǐng)求,作為用戶(hù)請(qǐng)求的目標(biāo)的IP地址。
- DIP:Director Server IP,主要用于和內(nèi)部主機(jī)通訊的IP地址。
- RIP:Real Server IP,后端服務(wù)器的IP地址。
- CIP:Client IP,訪問(wèn)客戶(hù)端的IP地址。
4 LVS 集群的負(fù)載調(diào)度算法有哪些
- 輪叫(輪詢(xún)、輪流)調(diào)度(Round-Robin Scheduling)rr
- 加權(quán)輪叫(輪詢(xún))調(diào)度(Weighted Round-Robin Scheduling)wrr
- 最小連接調(diào)度(Least-Connection Scheduling)lc
- 加權(quán)最小連接調(diào)度(Weighted Least-Connection Scheduling)wlc(默認(rèn)調(diào)度算法)
- 基于局部性的最少鏈接(Locality-Based Least Connections Scheduling)lblc
- 帶復(fù)制的基于局部性最少鏈接(Locality-Based Least Connections with Replication Scheduling)lblcr
- 目標(biāo)地址散列調(diào)度(Destination Hashing Scheduling)dh
- 源地址散列調(diào)度(Source Hashing Scheduling)sh
5 使用LVS 可不可以把iptables給禁用刪除
可以,禁用iptables并不會(huì)影響LVS的使用。LVS是在Linux內(nèi)核層面實(shí)現(xiàn)的負(fù)載均衡技術(shù),其底層并不依賴(lài)于iptables進(jìn)行流量轉(zhuǎn)發(fā)。LVS使用IP隧道或網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)等技術(shù)將來(lái)自客戶(hù)端的流量轉(zhuǎn)發(fā)到后端服務(wù)器上,而不依賴(lài)于iptables規(guī)則。
6 haproxy 調(diào)度算法有哪些
tcp代表四層負(fù)載,http代表七層負(fù)載。
靜態(tài)算法:
- static-rr-------->tcp/http:基于權(quán)重的輪詢(xún)調(diào)度,不支持運(yùn)行時(shí)利用socat進(jìn)行權(quán)重的動(dòng)態(tài)調(diào)整(只支持0和1,不支持其它值及后端服務(wù)器慢啟動(dòng),其后端主機(jī)數(shù)量沒(méi)有限制,相當(dāng)于LVS中的wrr。
- first------------->tcp/http:根據(jù)服務(wù)器在列表中的位置,自上而下進(jìn)行調(diào)度,但是其只會(huì)當(dāng)?shù)谝慌_(tái)服務(wù)器的連接數(shù)達(dá)到上限,新請(qǐng)求才會(huì)分配給下一臺(tái)服務(wù),因此會(huì)忽略服務(wù)器的權(quán)重設(shè)置,此方式使用較少。不支持用socat進(jìn)行動(dòng)態(tài)修改權(quán)重,可以設(shè)置0和1,可以設(shè)置其它值但無(wú)效。
動(dòng)態(tài)算法:
- roundrobin------->tcp/http:基于權(quán)重的輪詢(xún)動(dòng)態(tài)調(diào)度算法,支持權(quán)重的運(yùn)行時(shí)調(diào)整,不同于lvs中的rr輪訓(xùn)模式,haproxy中的roundrobin支持慢啟動(dòng)(新加的服務(wù)器會(huì)逐漸增加轉(zhuǎn)發(fā)數(shù)),其每個(gè)后端backend中最多支持4095個(gè)real server,支持對(duì)real server權(quán)重動(dòng)態(tài)調(diào)整,roundrobin為默認(rèn)調(diào)度算法,此算法使用廣泛。
- leastconn--------->tcp/http:加權(quán)的最少連接的動(dòng)態(tài),支持權(quán)重的運(yùn)行時(shí)調(diào)整和慢啟動(dòng),即:根據(jù)當(dāng)前連接最少的后端服務(wù)器而非權(quán)重進(jìn)行優(yōu)先調(diào)度(新客戶(hù)端連接),比較適合長(zhǎng)連接的場(chǎng)景使用,比如:MySQL等場(chǎng)景。
- random------------>tcp/http:在1.9版本開(kāi)始增加random的負(fù)載平衡算法,其基于隨機(jī)數(shù)作為一致性hash的key,隨機(jī)負(fù)載平衡對(duì)于大型服務(wù)器場(chǎng)或經(jīng)常添加或刪除服務(wù)器非常有用,支持weight的動(dòng)態(tài)調(diào)整,weight較大的主機(jī)有更大概率獲取新請(qǐng)求。
其他算法:以下靜態(tài)和動(dòng)態(tài)取決于hash_type是否consistent
- source---------->tcp/http:源地址hash,基于用戶(hù)源地址hash并將請(qǐng)求轉(zhuǎn)發(fā)到后端服務(wù)器,后續(xù)同一個(gè)源地址請(qǐng)求將被轉(zhuǎn)發(fā)至同一個(gè)后端web服務(wù)器。此方式當(dāng)后端服務(wù)器數(shù)據(jù)量發(fā)生變化時(shí),會(huì)導(dǎo)致很多用戶(hù)的請(qǐng)求轉(zhuǎn)發(fā)至新的后端服務(wù)器,默認(rèn)為靜態(tài)方式,但是可以通過(guò)hash-type支持的選項(xiàng)更改。
這個(gè)算法一般是在不插入Cookie的TCP模式下使用,也可給拒絕會(huì)話cookie的客戶(hù)提供最好的會(huì)話粘性,適用于session會(huì)話保持但不支持cookie和緩存的場(chǎng)景。
源地址有兩種轉(zhuǎn)發(fā)客戶(hù)端請(qǐng)求到后端服務(wù)器的服務(wù)器選取計(jì)算方式,分別是取模法和一致性hash。 - uri--------------->http:基于對(duì)用戶(hù)請(qǐng)求的URI的左半部分或整個(gè)uri做hash,再將hash結(jié)果對(duì)總權(quán)重進(jìn)行取模后,根據(jù)最終結(jié)果將請(qǐng)求轉(zhuǎn)發(fā)到后端指定服務(wù)器,適用于后端是緩存服務(wù)器場(chǎng)景,默認(rèn)是靜態(tài)算法,也可以通過(guò)hash-type指定map-based和consistent,來(lái)定義使用取模法還是一致性hash。
- url_param---->http:url_param對(duì)用戶(hù)請(qǐng)求的url中的params部分中的一個(gè)參數(shù)key對(duì)應(yīng)的value值作hash計(jì)算,并由服務(wù)器總權(quán)重相除以后派發(fā)至某挑出的服務(wù)器;通常用于追蹤用戶(hù),以確保來(lái)自同一個(gè)用戶(hù)的請(qǐng)求始終發(fā)往同一個(gè)real server,如果無(wú)沒(méi)key,將按roundrobin算法。
- hdr-------------->http:針對(duì)用戶(hù)每個(gè)http頭部(header)請(qǐng)求中的指定信息做hash,此處由name指定的http首部將會(huì)被取出并做hash計(jì)算,然后由服務(wù)器總權(quán)重取模以后派發(fā)至某挑出的服務(wù)器,如果無(wú)有效值,則會(huì)使用默認(rèn)的輪詢(xún)調(diào)度。
- rdp-cookie---->tcp:rdp-cookie 對(duì)windows遠(yuǎn)程桌面的負(fù)載,使用cookie保持會(huì)話,默認(rèn)是靜態(tài),也可以通過(guò)hash-type指定map-based和consistent,來(lái)定義使用取模法還是—致性hash。
各算法使用場(chǎng)景
first # 使用較少
static-rr # 做了session共享的web集群
roundrobin
random
leastconn # 數(shù)據(jù)庫(kù)
source # 基于客戶(hù)端公網(wǎng)IP的會(huì)話保持
uri--------->http # 緩存服務(wù)器,CDN服務(wù)商,藍(lán)汛、百度、阿里云、騰訊
url_param--->http # 可以實(shí)現(xiàn)session保持
hdr # 基于客戶(hù)端請(qǐng)求報(bào)文頭部做下一步處理
rdp-cookie # 基于windows主機(jī),很少使用
7 nginx 實(shí)現(xiàn)負(fù)載均衡的分發(fā)策略有那些
- 輪詢(xún)(默認(rèn)):每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端某個(gè)服務(wù)器宕機(jī),能自動(dòng)剔除故障系統(tǒng)。
- 權(quán)重 weight:weight 的值越大,被訪問(wèn)概率越高,主要用于后端每臺(tái)服務(wù)器性能不均衡的情況下。其次是為在主從的情況下設(shè)置不同的權(quán)值,達(dá)到合理有效的地利用主機(jī)資源。
- ip_hash(IP綁定):每個(gè)請(qǐng)求按訪問(wèn)IP的哈希結(jié)果分配,使來(lái)自同一個(gè)IP的訪客固定訪問(wèn)一臺(tái)后端服務(wù)器,并且可以有效解決動(dòng)態(tài)網(wǎng)頁(yè)存在的session共享問(wèn)題
- url_hash(第三方插件):必須安裝Nginx的hash軟件包,按訪問(wèn)url的hash結(jié)果來(lái)分配請(qǐng)求,使每個(gè)url定向到同一個(gè)后端服務(wù)器,可以進(jìn)一步提高后端緩存服務(wù)器的效率。
- fair(第三方插件):必須安裝upstream_fair模塊。對(duì)比 weight、ip_hash更加智能的負(fù)載均衡算法,fair算法可以根據(jù)頁(yè)面大小和加載時(shí)間長(zhǎng)短智能地進(jìn)行負(fù)載均衡,響應(yīng)時(shí)間短的優(yōu)先分配。
8 四層負(fù)載和七層負(fù)載的區(qū)別
- 四層:IP+PORT轉(zhuǎn)發(fā)
- 七層:協(xié)議+內(nèi)容交換
四層負(fù)載:
在四層負(fù)載設(shè)備中,把client發(fā)送的報(bào)文目標(biāo)地址(原來(lái)是負(fù)載均衡設(shè)備的IP地址),根據(jù)均衡設(shè)備設(shè)置的選擇web服務(wù)器的規(guī)則選擇對(duì)應(yīng)的web服務(wù)器IP地址,這樣client就可以直接跟此服務(wù)器建立TCP連接并發(fā)送數(shù)據(jù),而四層負(fù)載自身不參與建立連接,而和LVS不同,haproxy是偽四層負(fù)載均衡,因?yàn)閔aproxy需要分別和前端客戶(hù)端及后端服務(wù)器建立連接。
七層負(fù)載:
七層負(fù)載均衡服務(wù)器起了一個(gè)反向代理服務(wù)器的作用,服務(wù)器建立一次TCP連接要三次握手,而client要訪問(wèn)Web Server要先與七層負(fù)載設(shè)備進(jìn)行三次握手后建立TCP連接,把要訪問(wèn)的報(bào)文信息發(fā)送給七層負(fù)載均衡;然后七層負(fù)載均衡再根據(jù)設(shè)置的均衡規(guī)則選擇特定的Web Server,然后通過(guò)三次握手與此臺(tái)Web Server建立TCP連接,然后Web Server把需要的數(shù)據(jù)發(fā)送給七層負(fù)載均衡設(shè)備,負(fù)載均衡設(shè)備再把數(shù)據(jù)發(fā)送給client;所以,七層負(fù)載均衡設(shè)備起到了代理服務(wù)器的作用,七層代理需要和Client和后端服務(wù)器分別建立連接。
簡(jiǎn)單說(shuō):4層是修改用戶(hù)請(qǐng)求的目標(biāo)路由直接轉(zhuǎn)發(fā)到服務(wù)器;7層是把用戶(hù)的報(bào)文拆分開(kāi),由負(fù)載均衡替代用戶(hù)發(fā)送到服務(wù)端。同樣的返回報(bào)文的時(shí)候先發(fā)給負(fù)載均衡器,然后負(fù)載均衡修改報(bào)文后再發(fā)給用戶(hù)。所以我們看到的日志的用戶(hù)ip是負(fù)載均衡器的ip地址,因此需要做ip透?jìng)鱴-forward。
9 負(fù)載均衡的作用有哪些
- 轉(zhuǎn)發(fā)功能:按照一定的算法【權(quán)重、輪詢(xún)】,將客戶(hù)端請(qǐng)求轉(zhuǎn)發(fā)到不同應(yīng)用服務(wù)器上,減輕單個(gè)服務(wù)器壓力,提高系統(tǒng)并發(fā)量。
- 故障移除:通過(guò)心跳檢測(cè)的方式,判斷應(yīng)用服務(wù)器當(dāng)前是否可以正常工作,如果服務(wù)器期宕掉,自動(dòng)將請(qǐng)求發(fā)送到其他應(yīng)用服務(wù)器。
- 恢復(fù)添加:如檢測(cè)到發(fā)生故障的應(yīng)用服務(wù)器恢復(fù)工作,自動(dòng)將其添加到處理用戶(hù)請(qǐng)求隊(duì)伍中。
10 LVS、HAProxy、Nginx三款負(fù)載均衡的優(yōu)缺點(diǎn)及區(qū)別
LVS 的優(yōu)點(diǎn):
- 抗負(fù)載能力強(qiáng)、工作在第4層僅作分發(fā)之用,沒(méi)有流量的產(chǎn)生,這個(gè)特點(diǎn)也決定了它在負(fù)載均衡軟件里的性能最強(qiáng)的;無(wú)流量,同時(shí)保證了均衡器IO的性能不會(huì)受到大流量的影響;
- 工作穩(wěn)定,自身有完整的雙機(jī)熱備方案,如LVS+Keepalived和LVS+Heartbeat;
- 應(yīng)用范圍比較廣,可以對(duì)所有應(yīng)用做負(fù)載均衡;
- 配置性比較低,這是一個(gè)缺點(diǎn)也是一個(gè)優(yōu)點(diǎn),因?yàn)闆](méi)有可太多配置的東西,所以并不需要太多接觸,大大減少了人為出錯(cuò)的幾率;
LVS的缺點(diǎn):
- 軟件本身不支持正則處理,不能做動(dòng)靜分離,這就凸顯了Nginx/HAProxy+Keepalived的優(yōu)勢(shì)。
- 如果網(wǎng)站應(yīng)用比較龐大,LVS/DR+Keepalived就比較復(fù)雜了,特別是后面有Windows Server應(yīng)用的機(jī)器,實(shí)施及配置還有維護(hù)過(guò)程就比較麻煩,相對(duì)而言,Nginx/HAProxy+Keepalived就簡(jiǎn)單多了。
Nginx的優(yōu)點(diǎn):
- 工作在OSI第7層,可以針對(duì)http應(yīng)用做一些分流的策略。比如針對(duì)域名、目錄結(jié)構(gòu)。它的正則比HAProxy更為強(qiáng)大和靈活;
- Nginx對(duì)網(wǎng)絡(luò)的依賴(lài)非常小,理論上能ping通就就能進(jìn)行負(fù)載功能,這個(gè)也是它的優(yōu)勢(shì)所在;
- Nginx安裝和配置比較簡(jiǎn)單,測(cè)試起來(lái)比較方便;
- 可以承擔(dān)高的負(fù)載壓力且穩(wěn)定,一般能支撐超過(guò)幾萬(wàn)次的并發(fā)量;
- Nginx可以通過(guò)端口檢測(cè)到服務(wù)器內(nèi)部的故障,比如根據(jù)服務(wù)器處理網(wǎng)頁(yè)返回的狀態(tài)碼、超時(shí)等等,并且會(huì)把返回錯(cuò)誤的請(qǐng)求重新提交到另一個(gè)節(jié)點(diǎn);
- Nginx不僅僅是一款優(yōu)秀的負(fù)載均衡器/反向代理軟件,它同時(shí)也是功能強(qiáng)大的Web應(yīng)用服務(wù)器。LNMP現(xiàn)在也是非常流行的web環(huán)境,大有和LAMP環(huán)境分庭抗禮之勢(shì),Nginx在處理靜態(tài)頁(yè)面、特別是抗高并發(fā)方面相對(duì)apache有優(yōu)勢(shì);
- Nginx現(xiàn)在作為Web反向加速緩存越來(lái)越成熟了,速度比傳統(tǒng)的Squid服務(wù)器更快,有需求的朋友可以考慮用其作為反向代理加速器;
Nginx的缺點(diǎn):
- Nginx不支持url來(lái)檢測(cè)。
- Nginx僅能支持http和Email,這個(gè)它的弱勢(shì)。
- Nginx的Session的保持,Cookie的引導(dǎo)能力相對(duì)欠缺。
HAProxy的優(yōu)點(diǎn):
- HAProxy是支持虛擬主機(jī)的,可以工作在4、7層(支持多網(wǎng)段);
- 能夠補(bǔ)充N(xiāo)ginx的一些缺點(diǎn)比如Session的保持,Cookie的引導(dǎo)等工作;
- 支持url檢測(cè)后端的服務(wù)器;
- 它跟LVS一樣,本身僅僅就只是一款負(fù)載均衡軟件;單純從效率上來(lái)講HAProxy更會(huì)比Nginx有更出色的負(fù)載均衡速度,在并發(fā)處理上也是優(yōu)于Nginx的;
- HAProxy可以對(duì)Mysql讀進(jìn)行負(fù)載均衡,對(duì)后端的MySQL節(jié)點(diǎn)進(jìn)行檢測(cè)和負(fù)載均衡,不過(guò)在后端的MySQL slaves數(shù)量超過(guò)10臺(tái)時(shí)性能不如LVS;
- HAProxy的算法較多,達(dá)到8種;
LVS:是基于四層的轉(zhuǎn)發(fā)
HAproxy:是基于四層和七層的轉(zhuǎn)發(fā),是專(zhuān)業(yè)的代理服務(wù)器
Nginx:是WEB服務(wù)器,緩存服務(wù)器,又是反向代理服務(wù)器,可以做七層的轉(zhuǎn)發(fā)
區(qū)別:LVS由于是基于四層的轉(zhuǎn)發(fā)所以只能做端口的轉(zhuǎn)發(fā),而基于URL的、基于目錄的這種轉(zhuǎn)發(fā)LVS就做不了
工作選擇:HAproxy和Nginx由于可以做七層的轉(zhuǎn)發(fā),所以URL和目錄的轉(zhuǎn)發(fā)都可以做,在很大并發(fā)量的時(shí)候我們就要選擇LVS,像中小型公司的話并發(fā)量沒(méi)那么大,選擇HAproxy或者Nginx足已,由于HAproxy由是專(zhuān)業(yè)的代理服務(wù)器,配置簡(jiǎn)單,所以中小型企業(yè)推薦使用HAproxy
關(guān)于我
全網(wǎng)可搜《阿賢Linux》
CSDN、知乎、嗶哩嗶哩、博客園、51CTO、掘金、思否、開(kāi)源中國(guó)、阿里云、騰訊云、華為云、今日頭條、GitHub、個(gè)人博客
公眾號(hào):阿賢Linux
個(gè)人博客:blog.waluna.top
https://blog.waluna.top/文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-677877.html
原文鏈接: Linux運(yùn)維工程師面試題(3).文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-677877.html
到了這里,關(guān)于Linux運(yùn)維工程師面試題(3)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!