Linux運維工程師 50個常見面試題

Linksla發表於2022-12-30
1、請簡述OSI七層網路模型有哪些層及各自的含義?

  • 物理層:底層資料傳輸,比如網線、網路卡標準
  • 資料鏈路層:定義資料的基本格式,如何傳輸,如何標識。比如網路卡MAC地址
  • 網路層:定義IP編碼,定義路由功能,比如不同裝置的資料轉發
  • 傳輸層:端到端傳輸資料的基本功能,比如TCP、UDP
  • 會話層:控制應用程式之間會話能力,比如不同軟體資料分發給不停軟體
  • 表示層:資料格式標識,基本壓縮加密功能。
  • 應用層:各種應用軟體,包括 Web 應用。

2、在Linux的LVM分割槽格式下,請簡述給根分割槽磁碟擴容的步驟?

這個分3種

第一種方法:

growpart /dev/vda 1

resize2fs /dev/vda1    

第二種方法:

partpeobe /dev/sda

resize2fs /dev/vda1    

第三種方法:

fdisk /dev/sdb   
# n p 1 1 回車 回車 t 8e w

pvcreate /dev/sdb1
vgextend datavg /dev/sdb1
lvextend -r -L +100%free /dev/mapper/datavg-lv01

3、講述一下Tomcat8005、8009、8080三個埠的含義?

  • 8005 關閉時使用
  • 8009為AJP埠,即容器使用,如Apache能透過AJP協議訪問Tomcat的8009埠來實現功能
  • 8080 一般應用使用

4、簡述DNS進行域名解析的過程?

迭代查詢(返回最優結果)、遞迴查詢(本地找DNS)使用者要訪問 ,會先找本機的host檔案,再找本地設定的DNS伺服器,如果也沒有找到,就去網路中找根伺服器,根伺服器反饋結果,說只能提供一級域名伺服器.cn,就去找一級域名伺服器,一級域名伺服器說只能提供二級域名伺服器.com.cn,就去找二級域名伺服器,二級域伺服器只能提供三級域名伺服器.baidu.com.cn,就去找三級域名伺服器,三級域名伺服器正好有這個網站,然後發給請求的伺服器,儲存一份之後,再發給客戶端。

5、講一下Keepalived的工作原理?

在一個虛擬路由器中,只有作為MASTER的VRRP(虛擬路由冗餘協議)路由器會一直髮送VRRP通告資訊,BACKUP不會搶佔MASTER,除非它的優先順序更高。當MASTER不可用時(BACKUP收不到通告資訊)多臺BACKUP中優先順序最高的這臺會被搶佔為MASTER。這種搶佔是非常快速的(<1s),以保證服務的連續性由於安全性考慮,VRRP包使用了加密協議進行加密。BACKUP不會傳送通告資訊,只會接收通告資訊。

6、LVS、Nginx、HAproxy有什麼區別?工作中你怎麼選擇?

LVS:

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

LVS的缺點:

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

Nginx:

  • 工作在第7層,應用層,可以針對http應用做一些分流的策略。比如針對域名、目錄結構。它的正則比HAProxy更為強大和靈活;
  • Nginx對網路的依賴非常小,理論上能ping通就就能進行負載功能
  • Nginx安裝和配置簡單
  • 可以承擔高的負載壓力且穩定,一般能支撐超過幾萬次的併發量;
  • Nginx不僅僅是一款優秀的負載均衡器/反向代理軟體,它同時也是功能強大的Web應用伺服器。Nginx在處理靜態頁面、特別是抗高併發方面相對apache有優勢;
  • Nginx作為Web反向代理加速快取越來越成熟,速度比傳統的Squid伺服器更快

Nginx的缺點:

  • Nginx不支援url來檢測。
  • Nginx僅能支援http、https和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種;

工作選擇:

HAproxy和Nginx由於可以做七層的轉發,所以URL和目錄的轉發都可以做在很大併發量的時候我們就要選擇LVS,像中小型公司的話併發量沒那麼大選擇HAproxy或者Nginx足已,由於HAproxy由是專業的代理伺服器配置簡單,所以中小型企業推薦使用HAproxy。

7、docker的工作原理是什麼,講一下

docker是一個Client-Server結構的系統,docker守護程式執行在宿主機上,守護程式從客戶端接受命令並管理執行在主機上的容器,容器是一個執行時環境,這就是我們說的集裝箱。

8、docker的組成包含哪幾大部分

一個完整的docker有以下幾個部分組成:

  • docker client,客戶端,為使用者提供一系列可執行命令,使用者用這些命令實現跟 docker daemon 互動;
  • docker daemon,守護程式,一般在宿主主機後臺執行,等待接收來自客戶端的請求訊息;
  • docker image,映象,映象run之後就生成為docker容器;
  • docker container,容器,一個系統級別的服務,擁有自己的ip和系統目錄結構;執行容器前需要本地存在對應的映象,如果本地不存在該映象則就去映象倉庫下載。

docker 使用客戶端-伺服器 (C/S) 架構模式,使用遠端api來管理和建立docker容器。docker 容器透過 docker 映象來建立。容器與映象的關係類似於物件導向程式設計中的物件與類。

9、docker與傳統虛擬機器的區別什麼?

  • 傳統虛擬機器是需要安裝整個作業系統的,然後再在上面安裝業務應用,啟動應用,通常需要幾分鐘去啟動應用,而docker是直接使用映象來執行業務容器的,其容器啟動屬於秒級別;
  • Docker需要的資源更少,Docker在作業系統級別進行虛擬化,Docker容器和核心互動,幾乎沒有效能損耗,而虛擬機器執行著整個作業系統,佔用物理機的資源就比較多;
  • Docker更輕量,Docker的架構可以共用一個核心與共享應用程式庫,所佔記憶體極小;同樣的硬體環境,Docker執行的映象數遠多於虛擬機器數量,對系統的利用率非常高;
  • 與虛擬機器相比,Docker隔離性更弱,Docker屬於程式之間的隔離,虛擬機器可實現系統級別隔離;
  • Docker的安全性也更弱,Docker的租戶root和宿主機root相同,一旦容器內的使用者從普通使用者許可權提升為root許可權,它就直接具備了宿主機的root許可權,進而可進行無限制的操作。虛擬機器租戶root許可權和宿主機的root虛擬機器許可權是分離的,並且虛擬機器利用如Intel的VT-d和VT-x的ring-1硬體隔離技術,這種技術可以防止虛擬機器突破和彼此互動,而容器至今還沒有任何形式的硬體隔離;
  • Docker的集中化管理工具還不算成熟,各種虛擬化技術都有成熟的管理工具,比如:VMware vCenter提供完備的虛擬機器管理能力;
  • Docker對業務的高可用支援是透過快速重新部署實現的,虛擬化具備負載均衡,高可用、容錯、遷移和資料保護等經過生產實踐檢驗的成熟保障機制,Vmware可承諾虛擬機器99.999%高可用,保證業務連續性;
  • 虛擬化建立是分鐘級別的,Docker容器建立是秒級別的,Docker的快速迭代性,決定了無論是開發、測試、部署都可以節省大量時間;
  • 虛擬機器可以透過映象實現環境交付的一致性,但映象分發無法體系化,Docker在Dockerfile中記錄了容器構建過程,可在叢集中實現快速分發和快速部署。from wljslmz

10、docker技術的三大核心概念是什麼?

  • 映象:映象是一種輕量級、可執行的獨立軟體包,它包含執行某個軟體所需的所有內容,我們把應用程式和配置依賴打包好形成一個可交付的執行環境(包括程式碼、執行時需要的庫、環境變數和配置檔案等),這個打包好的執行環境就是image映象檔案。
  • 容器:容器是基於映象建立的,是映象執行起來之後的一個例項,容器才是真正執行業務程式的地方。如果把映象比作程式裡面的類,那麼容器就是物件。
  • 映象倉庫:存放映象的地方,研發工程師打包好映象之後需要把映象上傳到映象倉庫中去,然後就可以執行有倉庫許可權的人拉取映象來執行容器了。

11、centos映象幾個G,但是docker centos映象才幾百兆,這是為什麼?

一個完整的Linux作業系統包含Linux核心和rootfs根檔案系統,即我們熟悉的/dev、/proc/、/bin等目錄。我們平時看到的centOS除了rootfs,還會選裝很多軟體,服務,圖形桌面等,所以centOS映象有好幾個G也不足為奇。

而對於容器映象而言,所有容器都是共享宿主機的Linux 核心的,而對於docker映象而言,docker映象只需要提供一個很小的rootfs即可,只需要包含最基本的命令,工具,程式庫即可,所有docker映象才會這麼小。

12、講一下映象的分層結構以及為什麼要使用映象的分層結構?

一個新的映象其實是從 base 映象一層一層疊加生成的。每安裝一個軟體,dockerfile中使用RUM命令,就會在現有映象的基礎上增加一層,這樣一層一層的疊加最後構成整個映象。所以我們docker pull拉取一個映象的時候會看到docker是一層層拉去的。

分層機構最大的一個好處就是 : 共享資源。比如:有多個映象都從相同的 base 映象構建而來,那麼 Docker Host 只需在磁碟上儲存一份 base 映象;同時記憶體中也只需載入一份 base 映象,就可以為所有容器服務了。而且映象的每一層都可以被共享。

13、講一下容器的copy-on-write特性,修改容器裡面的內容會修改映象嗎?

我們知道,映象是分層的,映象的每一層都可以被共享,同時,映象是隻讀的。當一個容器啟動時,一個新的可寫層被載入到映象的頂部,這一層通常被稱作“容器層”,“容器層”之下的都叫“映象層”。

所有對容器的改動 - 無論新增、刪除、還是修改檔案,都只會發生在容器層中,因為只有容器層是可寫的,容器層下面的所有映象層都是隻讀的。映象層數量可能會很多,所有映象層會聯合在一起組成一個統一的檔案系統。如果不同層中有一個相同路徑的檔案,比如 /a,上層的 /a 會覆蓋下層的 /a,也就是說使用者只能訪問到上層中的檔案 /a。在容器層中,使用者看到的是一個疊加之後的檔案系統。

  • 新增檔案:在容器中建立檔案時,新檔案被新增到容器層中。
  • 讀取檔案:在容器中讀取某個檔案時,Docker 會從上往下依次在各映象層中查詢此檔案。一旦找到,立即將其複製到容器層,然後開啟並讀入記憶體。
  • 修改檔案:在容器中修改已存在的檔案時,Docker 會從上往下依次在各映象層中查詢此檔案。一旦找到,立即將其複製到容器層,然後修改之。
  • 刪除檔案:在容器中刪除檔案時,Docker 也是從上往下依次在映象層中查詢此檔案。找到後,會在容器層中記錄下此刪除操作。

只有當需要修改時才複製一份資料,這種特性被稱作 Copy-on-Write。可見,容器層儲存的是映象變化的部分,不會對映象本身進行任何修改。

14、簡單描述一下Dockerfile的整個構建映象過程

  • 首先,建立一個目錄用於存放應用程式以及構建過程中使用到的各個檔案等;
  • 然後,在這個目錄下建立一個Dockerfile檔案,一般建議Dockerfile的檔名就是Dockerfile;
  • 編寫Dockerfile檔案,編寫指令,如,使用FORM指令指定基礎映象,COPY指令複製檔案,RUN指令指定要執行的命令,ENV設定環境變數,EXPOSE指定容器要暴露的埠,WORKDIR設定當前工作目錄,CMD容器啟動時執行命令,等等指令構建映象;
  • Dockerfile編寫完成就可以構建映象了,使用docker build -t 映象名:tag . 命令來構建映象,最後一個點是表示當前目錄,docker會預設尋找當前目錄下的Dockerfile檔案來構建映象,如果不使用預設,可以使用-f引數來指定dockerfile檔案,如:docker build -t 映象名:tag -f /xx/xxx/Dockerfile ;
  • 使用docker build命令構建之後,docker就會將當前目錄下所有的檔案傳送給docker daemon,順序執行Dockerfile檔案裡的指令,在這過程中會生成臨時容器,在臨時容器裡面安裝RUN指定的命令,安裝成功後,docker底層會使用類似於docker commit命令來將容器儲存為映象,然後刪除臨時容器,以此類推,一層層的構建映象,執行臨時容器安裝軟體,直到最後的映象構建成功。

15、Dockerfile構建映象出現異常,如何排查?

首先,Dockerfile是一層一層的構建映象,期間會產生一個或多個臨時容器,構建過程中其實就是在臨時容器裡面安裝應用,如果因為臨時容器安裝應用出現異常導致映象構建失敗,這時容器雖然被清理掉了,但是期間構建的中間映象還在,那麼我們可以根據異常時上一層已經構建好的臨時映象,將臨時映象執行為容器,然後在容器裡面執行安裝命令來定位具體的異常。

16、Dockerfile的基本指令有哪些?

  • FROM 指定基礎映象(必須為第一個指令,因為需要指定使用哪個基礎映象來構建映象);
  • MAINTAINER 設定映象作者相關資訊,如作者名字,日期,郵件,聯絡方式等;
  • COPY 複製檔案到映象;
  • ADD 複製檔案到映象(ADD與COPY的區別在於,ADD會自動解壓tar、zip、tgz、xz等歸檔檔案,而COPY不會,同時ADD指令還可以接一個url下載檔案地址,一般建議使用COPY複製檔案即可,檔案在宿主機上是什麼樣子複製到映象裡面就是什麼樣子這樣比較好);
  • ENV 設定環境變數;
  • EXPOSE 暴露容器程式的埠,僅僅是提示別人容器使用的哪個埠,沒有過多作用;
  • VOLUME 資料卷持久化,掛載一個目錄;
  • WORKDIR 設定工作目錄,如果目錄不在,則會自動建立目錄;
  • RUN 在容器中執行命令,RUN指令會建立新的映象層,RUN指令經常被用於安裝軟體包;
  • CMD 指定容器啟動時預設執行哪些命令,如果有多個CMD,則只有最後一個生效,另外,CMD指令可以被docker run之後的引數替換;
  • ENTRYOINT 指定容器啟動時執行哪些命令,如果有多個ENTRYOINT,則只有最後一個生效,另外,如果Dockerfile中同時存在CMD和ENTRYOINT,那麼CMD或docker run之後的引數將被當做引數傳遞給ENTRYOINT;

17、如何進入容器?使用哪個命令

進入容器有兩種方法: docker attachdocker exec

18、什麼是k8s?說出你的理解

K8s是kubernetes的簡稱,其本質是一個開源的容器編排系統,主要用於管理容器化的應用,其目標是讓部署容器化的應用簡單並且高效(powerful),Kubernetes提供了應用部署,規劃,更新,維護的一種機制。

說簡單點:k8s就是一個編排容器的系統,一個可以管理容器應用全生命週期的工具,從建立應用,應用的部署,應用提供服務,擴容縮容應用,應用更新,都非常的方便,而且還可以做到故障自愈,所以,k8s是一個非常強大的容器編排系統。

19、k8s的元件有哪些,作用分別是什麼?

k8s主要由master節點和node節點構成。master節點負責管理叢集,node節點是容器應用真正執行的地方。

  • master節點包含的元件有:kube-api-server、kube-controller-manager、kube-scheduler、etcd。
  • node節點包含的元件有:kubelet、kube-proxy、container-runtime。

kube-api-server:以下簡稱api-server,api-server是k8s最重要的核心元件之一,它是k8s叢集管理的統一訪問入口,提供了RESTful API介面, 實現了認證、授權和准入控制等安全功能;api-server還是其他元件之間的資料互動和通訊的樞紐,其他元件彼此之間並不會直接通訊,其他元件對資源物件的增、刪、改、查和監聽操作都是交由api-server處理後,api-server再提交給etcd資料庫做持久化儲存,只有api-server才能直接操作etcd資料庫,其他元件都不能直接操作etcd資料庫,其他元件都是透過api-server間接的讀取,寫入資料到etcd。

kube-controller-manager:以下簡稱controller-manager,controller-manager是k8s中各種控制器的的管理者,是k8s叢集內部的管理控制中心,也是k8s自動化功能的核心;controller-manager內部包含replication controller、node controller、deployment controller、endpoint controller等各種資源物件的控制器,每種控制器都負責一種特定資源的控制流程,而controller-manager正是這些controller的核心管理者。

kube-scheduler:以下簡稱scheduler,scheduler負責叢集資源排程,其作用是將待排程的pod透過一系列複雜的排程演算法計算出最合適的node節點,然後將pod繫結到目標節點上。shceduler會根據pod的資訊(關注微信公眾號:網路技術聯盟站),全部節點資訊列表,過濾掉不符合要求的節點,過濾出一批候選節點,然後給候選節點打分,選分最高的就是最佳節點,scheduler就會把目標pod安置到該節點。

Etcd:etcd是一個分散式的鍵值對儲存資料庫,主要是用於儲存k8s叢集狀態資料,比如,pod,service等資源物件的資訊;etcd可以是單個也可以有多個,多個就是etcd資料庫叢集,etcd通常部署奇數個例項,在大規模叢集中,etcd有5個或7個節點就足夠了;另外說明一點,etcd本質上可以不與master節點部署在一起,只要master節點能透過網路連線etcd資料庫即可。

kubelet:每個node節點上都有一個kubelet服務程式,kubelet作為連線master和各node之間的橋樑,負責維護pod和容器的生命週期,當監聽到master下發到本節點的任務時,比如建立、更新、終止pod等任務,kubelet 即透過控制docker來建立、更新、銷燬容器;每個kubelet程式都會在api-server上註冊本節點自身的資訊,用於定期向master彙報本節點資源的使用情況。

kube-proxy:kube-proxy執行在node節點上,在Node節點上實現Pod網路代理,維護網路規則和四層負載均衡工作,kube-proxy會監聽api-server中從而獲取service和endpoint的變化情況,建立並維護路由規則以提供服務IP和負載均衡功能。簡單理解此程式是Service的透明代理兼負載均衡器,其核心功能是將到某個Service的訪問請求轉發到後端的多個Pod例項上。

container-runtime:容器執行時環境,即執行容器所需要的一系列程式,目前k8s支援的容器執行時有很多,如docker、rkt或其他,比較受歡迎的是docker,但是新版的k8s已經宣佈棄用docker。

20、kubelet的功能、作用是什麼?(重點,經常會問)

kubelet部署在每個node節點上的,它主要有4個功能:

  • 節點管理。kubelet啟動時會向api-server進行註冊,然後會定時的向api-server彙報本節點資訊狀態,資源使用狀態等,這樣master就能夠知道node節點的資源剩餘,節點是否失聯等等相關的資訊了。master知道了整個叢集所有節點的資源情況,這對於 pod 的排程和正常執行至關重要。
  • pod管理。kubelet負責維護node節點上pod的生命週期,當kubelet監聽到master的下發到自己節點的任務時,比如要建立、更新、刪除一個pod,kubelet 就會透過CRI(容器執行時介面)外掛來呼叫不同的容器執行時來建立、更新、刪除容器;常見的容器執行時有docker、containerd、rkt等等這些容器執行時,我們最熟悉的就是docker了,但在新版本的k8s已經棄用docker了,k8s1.24版本中已經使用containerd作為容器執行時了。
  • 容器健康檢查。pod中可以定義啟動探針、存活探針、就緒探針等3種,我們最常用的就是存活探針、就緒探針,kubelet 會定期呼叫容器中的探針來檢測容器是否存活,是否就緒,如果是存活探針,則會根據探測結果對檢查失敗的容器進行相應的重啟策略;
  • Metrics Server資源監控。在node節點上部署Metrics Server用於監控node節點、pod的CPU、記憶體、檔案系統、網路使用等資源使用情況,而kubelet則透過Metrics Server獲取所在節點及容器的上的資料。

21、kube-api-server的埠是多少?各個pod是如何訪問kube-api-server的?

kube-api-server的埠是8080和6443,前者是http的埠,後者是https的埠,以我本機使用kubeadm安裝的k8s為例:

在名稱空間的kube-system名稱空間裡,有一個名稱為kube-api-master的pod,這個pod就是執行著kube-api-server程式,它繫結了master主機的ip地址和6443埠,但是在default名稱空間下,存在一個叫kubernetes的服務,該服務對外暴露埠為443,目標埠6443,這個服務的ip地址是clusterip地址池裡面的第一個地址,同時這個服務的yaml定義裡面並沒有指定標籤選擇器,也就是說這個kubernetes服務所對應的endpoint是手動建立的,該endpoint也是名稱叫做kubernetes,該endpoint的yaml定義裡面代理到master節點的6443埠,也就是kube-api-server的IP和埠。這樣一來,其他pod訪問kube-api-server的整個流程就是:pod建立後嵌入了環境變數,pod獲取到了kubernetes這個服務的ip和443埠,請求到kubernetes這個服務其實就是轉發到了master節點上的6443埠的kube-api-server這個pod裡面。

22、k8s中名稱空間的作用是什麼?

amespace是kubernetes系統中的一種非常重要的資源,namespace的主要作用是用來實現多套環境的資源隔離,或者說是多租戶的資源隔離。

k8s透過將叢集內部的資源分配到不同的namespace中,可以形成邏輯上的隔離,以方便不同的資源進行隔離使用和管理。不同的名稱空間可以存在同名的資源,名稱空間為資源提供了一個作用域。

可以透過k8s的授權機制,將不同的namespace交給不同的租戶進行管理,這樣就實現了多租戶的資源隔離,還可以結合k8s的資源配額機制,限定不同的租戶能佔用的資源,例如CPU使用量、記憶體使用量等等來實現租戶可用資源的管理。

23、pod資源控制器型別有哪些?

  • Deployments:Deployment為Pod和ReplicaSet提供宣告式的更新能力。
  • ReplicaSet:ReplicaSet的目的是維護一組在任何時候都處於執行狀態的Pod副本的穩定集合。因此,它通常用來保證給定數量的、完全相同的Pod的可用性。
  • StatefulSets:和Deployment類似,StatefulSet管理基於相同容器規約的一組Pod。但和Deployment不同的是,StatefulSet為它們的每個Pod維護了一個有粘性的ID。這些Pod是基於相同的規約來建立的,但是不能相互替換:無論怎麼排程,每個Pod都有一個永久不變的ID。
  • DaemonSet:DaemonSet確保全部(或者某些)節點上執行一個Pod的副本。當有節點加入叢集時,也會為他們新增一個Pod。當有節點從叢集移除時,這些Pod也會被回收。刪除DaemonSet將會刪除它建立的所有Pod。
  • Jobs:Job會建立一個或者多個Pod,並將繼續重試Pod的執行,直到指定數量的Pod成功終止。隨著Pod成功結束,Job跟蹤記錄成功完成的Pod個數。當數量達到指定的成功個數閾值時,任務(即Job)結束。刪除Job的操作會清除所建立的全部Pod。掛起Job的操作會刪除Job的所有活躍Pod,直到Job被再次恢復執行。
  • Automatic Clean-up for Finished Jobs:TTL-after-finished控制器提供了一種TTL機制來限制已完成執行的資源物件的生命週期。TTL控制器目前只處理Job。
  • CronJob:一個CronJob物件就像crontab(crontable)檔案中的一行。它用Cron格式進行編寫,並週期性地在給定的排程時間執行Job。
  • ReplicationController:ReplicationController確保在任何時候都有特定數量的Pod副本處於執行狀態。換句話說,ReplicationController確保一個Pod或一組同類的Pod總是可用的。

24、nginx演算法策略

輪詢(預設)

加權輪詢(輪詢+weight)

ip_hash

每一個請求的訪問IP,都會對映成一個hash,再透過hash演算法(hash值%node_count),分配到不同的後端伺服器,訪問ip相同的請求會固定訪問同一個後端伺服器,這樣可以做到會話保持,解決session同步問題。

least_conn(最少連線)

使用最少連線的負載平衡,nginx將嘗試不會使繁忙的應用程式伺服器超載請求過多,而是將新請求分發給不太繁忙的伺服器。

25、nignx常用模組

  • upstream
  • rewrite
  • location
  • proxy_pass

26、如何檢視並且殺死殭屍程式?

top —> task (line)—> zombie.

把父程式殺掉,父程式死後,過繼給1號程式init,init 始終負責清理殭屍程式,它產生的所有殭屍程式跟著消失;如果你使用kill ,一般都不能殺掉 defunct程式.。用了kill -15,kill -9以後 之後反而會多出更多的殭屍程式。

27、搜尋某個使用者執行的程式

pgrep -au neteagle

28、檢視某個埠正在被哪個程式使用

lsof -i :[port]

29、埠轉發

iptables -t nat -A PREROUTING -d 10.0.0.8 -p tcp --dport 80 -j REDIRECT --to-ports 8080

30、檢視http的併發請求數與其TCP連線狀態

etstat-n|awk
'/^tcp/{++b[$NF]}END{for(ainb)printa,b[a]}'

31、檢視/var/log目錄下檔案數

ls/var/
log/-lR|grep
"^-"|wc
-l

32、linux系統啟動流程

  • 第一步:開機自檢,載入BIOS
  • 第二步:讀取MBR
  • 第三步:Boot Loader grub引導選單
  • 第四步:載入kernel核心
  • 第五步:init程式依據inittab資料夾來設定執行級別
  • 第六步:init程式執行rc.sysinit
  • 第七步:啟動核心模組
  • 第八步:執行不同執行級別的指令碼程式
  • 第九步:執行/etc/rc.d/rc.lo

33、Linux檔案型別

  • -:常規檔案,即file
  • d:目錄檔案
  • b:block device 即塊裝置檔案,如硬碟;支援以block為單位進行隨機訪問
  • c:character device 即字元裝置檔案,如鍵盤支援以character為單位進行線性訪問
  • l:symbolic link 即符號連結檔案(關注微信公眾號:網路技術聯盟站),又稱軟連結檔案
  • p:pipe 即命名管道檔案
  • s:socket 即套接字檔案,用於實現兩個程式進行通訊

34、簡述lvm,如何給使用lvm的/分割槽擴容?

功能:可以對磁碟進行動態管理。動態按需調整大小

概念

  • PV 物理卷:物理卷在邏輯卷管理中處於最底層,它可以是實際物理硬碟上的分割槽,也可以是整個物理硬碟,也可以是raid裝置。
  • VG 卷組:卷組建立在物理卷之上,一個卷組中至少要包括一個物理卷,在卷組建立之後可動態新增物理捲到卷組中。一個邏輯卷管理系統工程中可以只有一個卷組,也可以擁有多個卷組。
  • LV 邏輯卷:邏輯卷建立在卷組之上,卷組中的未分配空間可以用於建立新的邏輯卷,邏輯卷建立後可以動態地擴充套件和縮小空間。系統中的多個邏輯卷可以屬於同一個卷組,也可以屬於不同的多個卷組。

給/分割槽擴容步驟:

  • 新增磁碟
  • 使用fdisk命令對新增加的磁碟進行分割槽
  • 分割槽完成後修改分割槽型別為lvm
  • 使用pvcreate建立物理卷
  • 使用vgextend命令將新增加的分割槽加入到根目錄分割槽中
  • 使用lvextend命令進行擴容
  • 使用xfs_growfs調整卷分割槽大小

35、如何在文字里面進行復制、貼上,刪除行,刪除全部,按行查詢和按字母查詢。

以下操作全部在vi/vim命令列狀態操作,不要在編輯狀態操作:

  • 在文字里 移動到想要複製的行按yy想複製到哪就移動到哪,然後按P就黏貼了
  • 刪除行  移動到改行 按dd
  • 刪除全部dG這裡注意G一定要大寫
  • 按行查詢  :90 這樣就是找到第90行
  • 按字母查詢 /path 這樣就是找到path這個單詞所在的位置,文字里可能存在多個,多次查詢會顯示在不同的位置。

36、符號連結與硬連結的區別

  • 我們可以把符號連結,也就是軟連線 當做是 windows系統裡的 快捷方式。
  • 硬連結 就好像是 又複製了一份.
  • ln 3.txt 4.txt   這是硬連結,相當於複製,不可以跨分割槽,但修改3,4會跟著變,若刪除3,4不受任何影響。
  • ln -s 3.txt 4.txt  這是軟連線,相當於快捷方式。修改4,3也會跟著變,若刪除3,4就壞掉了。不可以用了。

37、什麼是正向代理?

一個位於客戶端和原始伺服器(origin server)之間的伺服器,為了從原始伺服器取得內容,客戶端向代理傳送一個請求並指定目標(原始伺服器),然後代理向原始伺服器轉交請求並將獲得的內容返回給客戶端。

客戶端才能使用正向代理。正向代理總結就一句話:代理端代理的是客戶端。例如說:我們使用的OpenVPN 等等。

38、什麼是反向代理?

反向代理(Reverse Proxy)方式,是指以代理伺服器來接受 Internet上的連線請求,然後將請求,發給內部網路上的伺服器並將從伺服器上得到的結果返回給 Internet 上請求連線的客戶端,此時代理伺服器對外就表現為一個反向代理伺服器。

反向代理總結就一句話:代理端代理的是服務端。

39、什麼是動態資源、靜態資源分離?

動態資源、靜態資源分離,是讓動態網站裡的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以後我們就可以根據靜態資源的特點將其做快取操作,這就是網站靜態化處理的核心思路。

動態資源、靜態資源分離簡單的概括是:動態檔案與靜態檔案的分離。

在我們的軟體開發中,有些請求是需要後臺處理的(如:.jsp,.do 等等),有些請求是不需要經過後臺處理的(如:css、html、jpg、js 等等檔案),這些不需要經過後臺處理的檔案稱為靜態檔案,否則動態檔案。

因此我們後臺處理忽略靜態檔案。這會有人又說那我後臺忽略靜態檔案不就完了嗎?當然這是可以的,但是這樣後臺的請求次數就明顯增多了。在我們對資源的響應速度有要求的時候,我們應該使用這種動靜分離的策略去解決動、靜分離將網站靜態資源(HTML,JavaScript,CSS,img等檔案)與後臺應用分開部署,提高使用者訪問靜態程式碼的速度,降低對後臺應用訪問

這裡我們將靜態資源放到 Nginx 中,動態資源轉發到 Tomcat 伺服器中去。

當然,因為現在七牛、阿里雲等 CDN 服務已經很成熟,主流的做法,是把靜態資源快取到 CDN 服務中,從而提升訪問速度。

相比本地的 Nginx 來說,CDN 伺服器由於在國內有更多的節點,可以實現使用者的就近訪問。並且,CDN 服務可以提供更大的頻寬,不像我們自己的應用服務,提供的頻寬是有限的。

40、網站登陸緩慢是什麼原因?

  • 網路頻寬,這是一個很常見的瓶頸。
  • cpu、硬碟、記憶體配置過低,伺服器負載不起來。
  • 網站的開發程式碼不夠完善,例如mysql語句沒有進行最佳化,導致資料庫的讀寫相當耗費時間。
  • 資料庫的瓶頸。當我們的資料庫的資料變得越來越多的時候,那麼對於資料庫的讀寫壓力肯定會變大。

41、a與b伺服器不在同一網段怎麼設定?設定完還ping不通怎麼排查?

  • AB伺服器不在同一個網段
  • 首先把不同IP段的伺服器劃分給不同的vlan
  • 在透過透過三層交換機新增虛擬IP路由實在不同網段的vlan的連線

42、在AB兩臺伺服器之間透過一個伺服器c做軟路由使用給路由器c配置兩塊網路卡並開啟自身的路由功能

vi /etc/sysconfig/network-scripts/ifcfg-eth0

檢視網路卡狀況IP -a -s 網路卡的名字

A伺服器設定相關網路卡資訊

子網掩碼:255.255.255.0

IP=10.0.0.1
閘道器=10.0.0.254
重啟網路卡生效
檢視路由資訊
route -n
新增對應路由
route add -net 10.0.1.0/24 gw 10.0.0.11

B伺服器的設定相關資訊

IP=10.0.1.10

閘道器10.0.1.254
重啟網路卡生效
route -n
新增對應的路由
route add -net 10.0.0.0/24 gw 10.0.1.11

C伺服器的兩塊網路卡

網路卡1

IP=10.0.0.11
閘道器=10.0.0.254


網路卡2
IP=10.0.1.11
閘道器=10.0.1.254
重啟網路卡生效
route -n
vi /etc/sysctl.conf
net.ipv4.ip_forword = 1

43、如果PING不通怎麼排查

  • 首先先看看是不是網路介面故障水晶頭或是網路卡介面接觸不良造成,其次檢查交換機和路由等網路裝置是有故障
  • 是否關閉了防火牆和selinux機制
  • 然後檢視網路卡和路由和閘道器是否配置正確

44、docker容器ping不通是什麼原因?

ifconfig 檢視一下docker0網橋,ping一下網橋看看是否通,有可能是網橋配置問題

weave路由器埠6783

  • 安裝docker容器的伺服器沒有關閉防火牆(訪問一下安裝docker物理機的,是否能訪問,如果不能訪問就變不能訪問docker)
  • docker在建立映象的時候沒有做埠對映(出現這種情況能訪問物理機不能訪問docker)使用dockers ps 檢視映象的埠對映情況
  • 埠對映不正確
  • 檢視網路配置ping網橋看是否能ping通,有可能是網橋的原因

45、如果一臺辦公室內主機無法上網(打不開網站),請給出你的排查步驟?

  • 首先確定物理鏈路是否聯通正常。
  • 檢視本機IP,路由,DNS的設定情況是否達標。
  • telnet檢查伺服器的WEB有沒有開啟以及防火牆是否阻攔。
  • ping一下閘道器,進行最基礎的檢查,通了,表示能夠到達伺服器。
  • 測試到閘道器或路由器的通常情況,先測閘道器,然後再測路由器一級一級的測試。
  • 測試ping公網ip的通常情況(記住幾個外部IP),
  • 測試DNS的通暢。ping出對應IP。
  • 透過以上檢查後,還在網管的路由器上進行檢查。

46、如果我們的網站開啟速度慢請說下您的排查思路?

判斷原因

首先我要以使用者的身份登入我們的網站,判斷問題出現在我們自身原因,還是使用者那邊的原因。

如果是使用者問題有以下幾個原因:

  • 使用者那邊的頻寬
  • 使用者的瀏覽器器版本低,安裝外掛太多
  • 中毒和電腦裡的垃圾檔案過多
  • 使用者主機的主機的效能和作業系統

如果是我們的網站自身問題有一下幾個原因

  • 網路頻寬
  • 伺服器的cpu、硬碟、記憶體過低伺服器負載不起來也就是說伺服器自身的效能方面
  • 網站程式碼不夠完善。如mysql語句沒有進行最佳化導致資料庫讀寫耗時
  • 伺服器未開啟圖片壓縮
  • 網頁臺下
  • 死連線過多外掛使用及js檔案呼叫頻繁網站伺服器的速度或是租用空間所在的伺服器速度

解決思路

1、檢測伺服器速度的快慢

  • ping命令檢視連線到伺服器的時間和丟包情況(ping 測試網址的)
  • 檢視丟包率(1000個包沒有丟一個是最理想的、一般一個速度好的機房丟包率不超過1%)
  • ping值要小同城電信adsl ping平均值絕對不能超過20,一般都在10,跨省的平均值20-40屬於正常
  • ping值要均勻最小值和最大值相差太大說明路由不穩定的表現

2、檢視伺服器自身效能

檢視cpu的使用率 uptime

檢視記憶體情況  free -m

檢視I/O讀寫iostat 磁碟I/O讀寫等看看是那個程式大量佔用系統資源導致我的伺服器變慢

3、看看訪問最多的URL和IP有什麼特徵,如果是惡意URL和IP就把他遮蔽掉如果是善意的就限流有可能是CDN回源量大造成網站無法訪問

4、檢視同臺伺服器上其他網站的開啟速度,可以透過查詢工具檢視和自己在同一臺伺服器上的網站個數和網址可以看他們開啟快慢

5、電信和聯通互訪的問題

如果是空間開啟時快時慢,有時打不開那就是空間不穩定找空間商解決或是換空間傷,如果是有的地方快有的地方慢應該是網路線路問題,比如電信使用者訪問放在聯通伺服器上的網站,聯通使用者訪問放在電信伺服器上的網站,解決辦吧是:使用雙線空間或是多線空間

6、從網站自身的原因

  • 網站的程式設計結構是否合理是否由於幻燈片程式碼影響網站開啟速度(找程式設計相關人士解決)
  • 網頁的設計結構和程式碼錯誤(請專業人士進行修改)
  • 網頁的內容如:大尺寸圖片、大尺寸flash、過多的引用其他網站內容,如果被引用內容的網站速度慢,也影響自身網站把。譬如友情連線可以把對方 的圖片放到自己網站上

解決辦法

  • 最佳化圖片,限制圖片大小尺寸,降低圖片質量,減少圖片數量
  • 限定圖片的格式:jpg,png,gif
  • 減少http的請求數(當開啟網頁時瀏覽器會發出很多物件請求,每個物件的載入都會有所延時,如果網頁上的物件很多就會花費大量的時間,去除不必要的物件,將臨近的圖片合成一張,合併css檔案) f r o m :w l j s l m z

46、如何檢視二進位制檔案的內容

我們一般透過 hexdump 命令 來檢視二進位制檔案的內容。

hexdump -C XXX(檔名)  -C 是引數 不同的引數有不同的意義

-C  是比較規範的 十六進位制和 ASCII 碼顯示

-c  是單位元組字元顯示

-b  單位元組八進位制顯示

-o  是雙位元組八進位制顯示

-d  是雙位元組十進位制顯示

-x  是雙位元組十六進位制顯示

等等等等

47、你是怎麼備份資料的,包括資料庫備份?

在生產環境下,不管是應用資料、還是資料庫資料首先在部署的時候就會有主從架構、或者叢集,這本身就是屬於資料的熱備份;其實考慮冷備份,用專門一臺伺服器做為備份伺服器,比如可以用rsync+inotify配合計劃任務來實現資料的冷備份,如果是發版的包備份,正常情況下有臺釋出伺服器,每次發版都會儲存好發版的包。

48、zabbix常用術語你知道幾個?

  • 主機(host):要監控的網路裝置,可由IP或DNS名稱指定;
  • 主機組(hostgroup):主機的邏輯容器,可以包含主機和模板,但同一個組織內的主機和模板不能互相連結;主機組通常在給使用者或使用者組指派監控許可權時使用;
  • 監控項(item):一個特定監控指標的相關的資料;這些資料來自於被監控物件;item是zabbix進行資料收集的核心,相對某個監控物件,每個item都由"key"標識;
  • 觸發器(trigger):一個表示式,用於評估某監控物件的特定item內接收到的資料是否在合理範圍內,也就是閾值;接收的資料量大於閾值時,觸發器狀態將從"OK"轉變為"Problem",當資料再次恢復到合理範圍,又轉變為"OK";
  • 事件(event):觸發一個值得關注的事情,比如觸發器狀態轉變,新的agent或重新上線的agent的自動註冊等;
  • 動作(action):指對於特定事件事先定義的處理方法,如傳送通知,何時執行操作;
  • 報警升級(escalation):傳送警報或者執行遠端命令的自定義方案,如每隔5分鐘傳送一次警報,共傳送5次等;
  • 媒介(media):傳送通知的手段或者通道,如Email、Jabber或者SMS等;
  • 通知(notification):透過選定的媒介向使用者傳送的有關某事件的資訊;遠端命令(remote command):預定義的命令,可在被監控主機處於某特定條件下時自動執行;
  • 模板(template):用於快速定義被監控主機的預設條目集合,通常包含了item、trigger、graph、screen、application以及low-level
  • discovery rule;模板可以直接連結至某個主機;應用(application):一組item的集合;
  • web場景(webscennario):用於檢測web站點可用性的一個活多個HTTP請求;前端(frontend):Zabbix的web介面;

49、虛擬化技術有哪些表現形式

  • 完全擬化技術:透過軟體實現對作業系統的資源再分配,比較成熟,完全虛擬化代表技術:KVM、ESXI、Hyper-V。
  • 半虛擬化技術:透過程式碼修改已有的系統,形成一種新的可虛擬化的系統,呼叫硬體資源去安裝多個系統,整體速度上相對高一點,半虛擬化代表技術:Xen。
  • 輕量級虛擬化:介於完全虛擬化、半虛擬化之間,輕量級虛擬化代表技術:Docker。

50、修改線上業務配置檔案流程

  • 先告知運維經理和業務相關開發人員
  • 在測試環境測試,並備份之前的配置檔案
  • 測試無誤後修改生產環境配置
  • 觀察生產環境是否正常,是否有報警
  • 完成配置檔案更改


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70013542/viewspace-2930253/,如需轉載,請註明出處,否則將追究法律責任。

相關文章