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