Linux運維工程師面試題(3)

来源:https://www.cnblogs.com/waluna/archive/2023/08/28/17663256.html
-Advertisement-
Play Games

目錄 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。

  1. ipvs (ip virtual server):一段代碼工作在內核空間,叫ipvs,是真正生效實現調度的代碼;

  2. 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 負載均衡的作用有哪些

  1. 轉發功能:按照一定的演算法【權重、輪詢】,將客戶端請求轉發到不同應用伺服器上,減輕單個伺服器壓力,提高系統併發量。
  2. 故障移除:通過心跳檢測的方式,判斷應用伺服器當前是否可以正常工作,如果伺服器期宕掉,自動將請求發送到其他應用伺服器。
  3. 恢復添加:如檢測到發生故障的應用伺服器恢復工作,自動將其添加到處理用戶請求隊伍中。

10 LVS、HAProxy、Nginx三款負載均衡的優缺點及區別

LVS 的優點:

  1. 抗負載能力強、工作在第4層僅作分發之用,沒有流量的產生,這個特點也決定了它在負載均衡軟體里的性能最強的;無流量,同時保證了均衡器IO的性能不會受到大流量的影響;
  2. 工作穩定,自身有完整的雙機熱備方案,如LVS+Keepalived和LVS+Heartbeat;
  3. 應用範圍比較廣,可以對所有應用做負載均衡;
  4. 配置性比較低,這是一個缺點也是一個優點,因為沒有可太多配置的東西,所以並不需要太多接觸,大大減少了人為出錯的幾率;

LVS的缺點:

  1. 軟體本身不支持正則處理,不能做動靜分離,這就凸顯了Nginx/HAProxy+Keepalived的優勢。
  2. 如果網站應用比較龐大,LVS/DR+Keepalived就比較複雜了,特別是後面有Windows Server應用的機器,實施及配置還有維護過程就比較麻煩,相對而言,Nginx/HAProxy+Keepalived就簡單多了。

Nginx的優點:

  1. 工作在OSI第7層,可以針對http應用做一些分流的策略。比如針對功能變數名稱、目錄結構。它的正則比HAProxy更為強大和靈活;
  2. Nginx對網路的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢所在;
  3. Nginx安裝和配置比較簡單,測試起來比較方便;
  4. 可以承擔高的負載壓力且穩定,一般能支撐超過幾萬次的併發量;
  5. Nginx可以通過埠檢測到伺服器內部的故障,比如根據伺服器處理網頁返回的狀態碼、超時等等,並且會把返回錯誤的請求重新提交到另一個節點;
  6. Nginx不僅僅是一款優秀的負載均衡器/反向代理軟體,它同時也是功能強大的Web應用伺服器。LNMP現在也是非常流行的web環境,大有和LAMP環境分庭抗禮之勢,Nginx在處理靜態頁面、特別是抗高併發方面相對apache有優勢;
  7. Nginx現在作為Web反向加速緩存越來越成熟了,速度比傳統的Squid伺服器更快,有需求的朋友可以考慮用其作為反向代理加速器;

Nginx的缺點:

  1. Nginx不支持url來檢測。
  2. Nginx僅能支持http和Email,這個它的弱勢。
  3. Nginx的Session的保持,Cookie的引導能力相對欠缺。

HAProxy的優點:

  1. HAProxy是支持虛擬主機的,可以工作在4、7層(支持多網段);
  2. 能夠補充Nginx的一些缺點比如Session的保持,Cookie的引導等工作;
  3. 支持url檢測後端的伺服器;
  4. 它跟LVS一樣,本身僅僅就只是一款負載均衡軟體;單純從效率上來講HAProxy更會比Nginx有更出色的負載均衡速度,在併發處理上也是優於Nginx的;
  5. HAProxy可以對Mysql讀進行負載均衡,對後端的MySQL節點進行檢測和負載均衡,不過在後端的MySQL slaves數量超過10台時性能不如LVS;
  6. 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).


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

-Advertisement-
Play Games
更多相關文章
  • ## 概述 Spring Cloud Zuul 是 Spring Cloud Netflix 子項目的核心組件之一,可以作為微服務架構中的 API 網關使用,有以下用途: - 鑒權:對於訪問每個服務的請求進行鑒權,拒絕鑒權失敗的請求 - 監控:對系統的請求進行監控,記錄請求響應日誌,實時統計當前系統 ...
  • RocketMQ 是一個純 Java、分散式、隊列模型的開源消息中間件;前身是 MetaQ,是阿裡參考 Kafka 研發的一個隊列模型的消息中間件,後開源給 Apache 基金會併成為 Apache 的頂級項目,具有高性能、高可靠、高實時、分散式的特點。 1、基本概念 1.1、主題(Topic) A ...
  • ### 歡迎訪問我的GitHub > 這裡分類和彙總了欣宸的全部原創(含配套源碼):[https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) ### 關於IDEA的預覽版 - IDEA會啟用新的UI,這事 ...
  • 本文將分享使用 GitHub Actions 完成對一個.Net Core+Vue 的前後端分離項目 zhontai 的構建,並使用 docker 部署到雲伺服器(阿裡雲),及對docker部署.Net Core+Vue的一些經驗分享。 ...
  • AgileConfig 已經好久好久沒有更新過比較大的功能了。一是 AgileConfig 本身的定位就是比較輕量,不想集成太多的功能。二是比較忙(懶)。但是本次升級給大家帶來了一個比較有用的功能 SSO。 ![](https://static.xbaby.xyz/%E5%BE%AE%E4%BF%A ...
  • TDengine 是國內比較流的時序庫之一,支持群集並且免費,在.NET中資料比較少,這篇文章主要介紹SqlSugar ORM來操作TDengine 優點: 1、SqlSugar支持ADO.NET操作來實現TDengine,並且支持了常用的時間函數、支持聯表、分頁和批量插入和刪等操作 2、使用了原生 ...
  • ****## 前言 在講述之工廠方法模式前,我們來先瞭解簡單工廠模式,簡單工廠模式是最簡單的設計模式之一,它雖然不屬於GoF的23種設計模式,但是應用也較為頻繁,同時它也是學習其他創建型模式的基礎。下麵我們來先瞭解下簡單工廠模式,然後針對它的缺點來引出工廠方法模式。 ## 簡單工廠模式定義 **簡單 ...
  • 經過一段時間的準備,新的一期【ASP.NET Core MVC開發實戰之商城系統】已經開始,在之前的文章中,講解了商城系統的整體功能設計,頁面佈局設計,環境搭建,系統配置,及首頁【商品類型,banner條,友情鏈接,降價促銷,新品爆款】,商品列表頁面,商品詳情,購物車等功能的開發,今天繼續講解訂單管... ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...