IT运维面试问题总结-运维工具、开源应用(Ansible、Ceph、Docker、Apache、Nginx等)
1、簡述Ansible及其優勢?
Ansible是一款極其簡單的開源的自動化運維工具,基于Python開發,集合了眾多運維工具(puppet, cfengine, chef, func, fabric)的優點。實現了批量系統配置,批量程序部署,批量運行命令等功能。同時Ansible是基于模塊工作,其實現批量部署的是ansible所運行的模塊。
Ansible其他重要的優勢:
-
跨平臺支持:Ansible在物理、虛擬、云和容器環境中為Linux、Windows、UNIX和網絡設備提供無代理支持。
-
人類可讀的自動化:Ansible playbook以YAML文本文件的形式編寫,易于閱讀,有助于確保每個人都理解他們將要做的事情。
-
對應用程序的完美描述:Ansible playbook可以進行任何更改,并且可以描述和記錄應用程序環境的每個細節。
-
易于管理的版本控制:Ansible劇本和項目是純文本。它們可以像源代碼一樣處理,并放在現有的版本控制系統中。
-
支持動態庫存:Ansible管理的機器列表可以從外部資源動態更新,以便隨時捕獲所有受管服務器的正確的當前列表,無論基礎設施或位置如何。
-
易于與其他系統集成的編排:HP SA、Puppet、Jenkins、Red Hat Satellite,以及存在于環境中的其他系統,都可以被利用并集成到Ansible工作流中。
2、簡述Ansible工作機制及其特性?
Ansible是一款自動化運維工具,基于Python開發,具有批量系統配置, 批量程序部署, 批量運行命令等功能。
其工作機制如下:
1、用戶使用Ansible或Playbook,在服務器中斷輸入Ansible的Ad-Hoc命令集或Playbook;
2、Ansible遵循預先編排的規則將Playbooks逐條拆解為Play;
3、Play組織成Ansible可識別的任務(Task);
4、Task會調用任務所涉及的所有模塊(Module)和插件(Plugin);
5、讀取Inventroy中定義的主機列表;
6、通過SSH認證(默認)將任務集以臨時文件或命令的形式傳輸到遠程客戶端執行并返回執行結果。
其特性如下:
7、no agents:不需要在被管控主機上安裝任何客戶端,只需SSH、Python即可,建議Python版本為2.6.6以上;
8、no server:無服務器端, 使用時直接運行命令即可;
9、modules in any languages:基于模塊工作, 豐富的內置模塊,可使用任意語言開發模塊;
10、yaml, not code:使用yaml語言定制劇本playbook,易于管理,API簡單明了;
11、ssh by default:基于SSH工作,整個過程簡單、方便、安全,建議使用公鑰方式認證;
12、strong multi-tier solution:可實現多級指揮。
3、簡述Ansible中如何保存敏感數據?
在ansible內容中保留秘密數據并仍然公開共享,那么可以在playbooks中使用Vault。Ansible Vault,它包含在Ansible中,可以加密和解密Ansible使用的任何結構化數據文件。
4、簡述Ansible適合的場景?
Ansible將編排與配置管理、供應和應用程序部署結合并統一在一個易于使用的平臺上。
Ansible的一些主要場景包括:
-
配置管理:集中配置文件管理和部署是Ansible的一個常見場景。
-
應用程序部署:當使用Ansible定義應用程序,并使用Ansible Tower管理部署時,團隊可以有效地管理從開發到生產的整個應用程序生命周期。
-
部署:當在系統上部署或安裝應用程序時,Ansible和Ansible Tower可以幫助簡化供應系統的流程,無論是PXE啟動的裸金屬服務器或虛擬機,還是從模板創建虛擬機或云實例。
-
持續交付:創建CI/CD管道需要許多團隊的協調和參與。如果沒有一個簡單的自動化平臺,團隊協作很難完成。而Ansible playbook在應用程序的整個生命周期中可以保持適當的部署(和管理)
-
安全性和審計:當安全策略在Ansible中定義時,可以將站點范圍的安全策略的掃描和修復集成到其他自動化流程中。安全性是部署的所有內容中不可或缺的一部分。
-
編排:配置本身不能定義環境,需要定義多個配置如何交互,并確??梢詫⒉煌牟糠肿鳛橐粋€整體來管理。
5、簡述Ansible Inventory?
Ansible中受管主機列在主機清單(inventory)文本文件中,清單還將這些系統組織成group,以便更容易地進行批量管理。一個Inventory定義了Ansible將管理的主機集合。這些主機還可以分配至組,可以對組進行批量管理。組可以包含子組,主機可以是多個組的成員。Inventory根據類型可分為靜態清單和動態清單:
-
靜態主機Inventory可以由文本文件定義。
-
動態主機Inventory可以由腳本或其他程序根據需要使用外部信息提供者生成。
6、簡述Ansible配置文件優先級?
Ansible 只使用最高優先級配置文件中的設置,其它配置文件中的設置將被忽略。即使存在其他優先級較低的文件,它們的設置也將被忽略,并且不會與所選配置文件中的設置相結合。
$ANSIBLE_CONFIG環境變量指定的任何文件都將覆蓋所有其他配置文件。如果沒有設置該變量,接下來將檢查運行ansible命令的目錄以查找ansible.cfg文件。如果該文件不存在,則檢查用戶的主目錄以查找.ansible.cfg文件。如上配置文件都不存在時,才使用全局/etc/ansible/ansible.cfg文件。
7、簡述Ansible ad-hoc命令?
Ad-Hoc命令是一種快速執行單個Ansible任務的方法,適合于不需要永久保存該任務,臨時執行的場景。Ad-Hoc是簡單的控制臺操作,無需編寫劇本就可以運行。它們對于快速測試和更改非常有用。
8、簡述Ansible ad-hoc和playbook的區別?
-
Ad-Hoc 命令可以作為一次性命令對一組目標主機運行單個、簡單的任務。
-
Ad-Hoc 不適合復雜配置管理或編配場景,Ad-Hoc 一次只能調用一個模塊和一組參數。當需要多個操作時,必須使用多個 Ad-Hoc 來執行。
-
playbook可以實現以一種簡易重復的方式對一組目標主機運行多個復雜的任務。
-
Playbook 是描述要在受管主機上實施的必要配置或程序性步驟的文件。
-
Playbook 為配置管理和部署提供了強大而靈活的解決方案。
-
Playbook 可以將冗長而復雜的管理任務轉變為可輕松重復的歷程,并且可預測成果然而。
-
playbook 是一個文本文件,其中包含一個或多個按順序運行的play的列表。
-
playbook中,可以將playbook中的tasks保存為人類可讀且可立即運行的形式。
-
play 是一組有序的任務,應該對從目錄中選擇的主機運行。
9、簡述Ansible變量?
Ansible 利用變量存儲整個 Ansible 項目文件中可重復使用的值,從而可以簡化項目的創建和維護,并減少錯誤的發生率。在定義Ansible變量時,通常有如下三種范圍的變量:
-
global范圍:從命令行或Ansible配置中設置的變量;
-
play范圍:在 play 和相關結構中設置的變量;
-
host范圍:inventory、facts 或 register 的變量,在主機組和個別主機上設置的變量。
10、簡述Ansible如何實現任務的循環?
簡單循環:
-
Ansible支持使用loop在一組item上迭代任務;
-
loop可以使用列表中的每個項、列表中每個文件的內容、生成的數字序列或使用更復雜的結構來重復任務。
-
使用loop使管理員不必編寫使用相同模塊的多個任務。
復雜(嵌套)循環:
-
with_nested鍵用于嵌套循環,循環在循環中運行。它需要一個包含兩個或多個列表的列表。例如,將一個列表劃分為兩個列表,任務將迭代第一個列表中的每一項與第二個列表中的每一項。
11、簡述Ansible hanlder?
Ansible模塊被設計成冪等的,即在一個適當編寫的劇本中,劇本及其任務可以在不更改受管主機的情況下多次運行,除非它們需要進行更改以使受管主機達到所需的狀態。
然而,有時當一個任務對系統進行了更改后同時需要運行另一個任務。例如,對服務的配置文件的更改可能需要重新加載服務,以便更改后的配置生效。此時就需要使用hanlder程序。handler程序是響應由其他任務組成的通知的任務。每個handler程序都有一個全局惟一的名稱,并在劇本中任務塊的末尾觸發。
如果沒有任務通過名稱調用handler程序,它將不會運行。
如果一個或多個任務都調用handler程序,它將在劇中的所有其他任務完成后僅運行一次。
因為handler程序是任務,所以可以在handler程序中使用與處理任何其他任務相同的模塊。通常,handler程序用于重新啟動主機和重新啟動服務。
handler程序可以視為非活動任務,只有在使用notify語句顯式調用時才會觸發這些任務。
12、簡述Ansible Block?
在 playbook 中, blocks 是囊括了任務的子句;
blocks 允許對任務進行邏輯分組,并可用于控制任務的執行方式,例如,管理員可以定義一組主要任務和一組附加任務,附加任務僅在第一組失敗時執行。為此,可利用三個關鍵字在 playbook 中使用塊:
-
block:定義要運行的主要任務;
-
rescue:定義將在 block 子句中定義的任務失敗時運行的任務;
-
always:定義始終都獨立運行的任務,不論 block 和 rescue 子句中定義的任務是成功還是失敗。
13、簡述Ansible如何處理play錯誤的?
Ansible審查每個任務的返回代碼,以確定任務是否成功或失敗。默認情況下,當一個任務失敗時,Ansible會立即中止該主機上的其他操作,并跳過所有后續任務。
實際生產中,若希望即使任務失敗也能繼續執行play,Ansible也包含了多種特性用于管理任務錯誤:
忽略任務失敗:在任務中使用ignore_errors關鍵字忽略錯誤,即使任務失敗,也繼續在主機上執行playbook。
14、簡述Ansible角色?
數據中心有各種不同類型的主機。如web服務器、數據庫服務器,基于開發環境的服務器。隨著時間的推移,具有處理所有這些情況的任務和人員的Ansible playbook將變得龐大而復雜。
-
角色允許將復雜的劇本組織成獨立的、更小的劇本和文件。
-
角色提供了一種從外部文件加載任務、處理程序和變量的方法。
-
角色也可關聯和引用靜態的文件和模板。
-
角色可以編寫成滿足普通用途需求,并且能被重復利用。
-
定義角色的文件具有特定的名稱,并以嚴格的目錄結構進行組織。
15、簡述Ansible Galaxy?
Ansible Galaxy是一個由各種Ansible管理員和用戶編寫的Ansible角色的公共庫。它是一個包含數千個Ansible角色的歸檔文件,并且有一個可搜索的數據庫,幫助Ansible用戶識別可能幫助他們完成管理任務的角色。Ansible Galaxy包括指向新用戶和角色開發人員的文檔和視頻的鏈接。
16、簡述Ansible如何控制任務的并行執行?
通過在所有主機上并行運行任務,Ansible可以對劇本的執行進行更多的控制。默認情況下,Ansible默認最多并行5個,因此它將同時在5臺不同的機器上運行一個特定的任務。Ansible可以通過配置forks來設置并行執行任務數量。
同時Ansible也可以通過serial來減少ork數量所指定的并行書,serial關鍵字主要用于控制滾動更新,避免一次性更新過多的節點。
17、簡述Ansible故障后的排查思路?
-
日志判斷:默認情況下,Ansible沒有配置為將其輸出,記錄到任何日志文件中??赏ㄟ^ansible.cfg配置文件default部分中的log_path參數或$ANSIBLE_LOG環境變量進行配置。然后通過日志進行定位。
-
Debug模塊:調試模塊是Ansible可用的模塊之一,它可以更好地了解控制節點上正在進行的操作。這個模塊可以在playbook執行時為某個變量提供值。
-
syntax-check:通過ansible-playbook 命令的 --syntax-check命選項檢查劇本的YAML語法。
-
diff:Ansible還提供了--diff選項。此選項報告對受管主機上的模板文件所做的更改。如果與--check選項一起使用,這些更改將顯示出來,而不是實際執行。從而判斷Ansible整個過程需要做何種更改。
一文詳解 Ansible 自動化運維!
Ceph
1、簡述Ceph的優勢及其特點?
Ceph是一個分布式的數據對象存儲,Ceph相對其他存儲系統具有如下優勢:
-
CRUSH算法:ceph摒棄了傳統的集中式存儲元數據尋址的方案,而使用CRUSH算法完成數據的尋址操作。能夠實現各類負載的副本放置規則,例如跨機房、機架感知等。Crush算法有相當強大的擴展性,理論上支持數千個存儲節點,從而增強了Ceph彈性擴展和高可用性。
-
高可用:通過CRUSH算法指定副本的物理存儲位置以分隔故障域,支持數據強一致性,ceph可以忍受多種故障場景并自動嘗試并行修復。
-
高擴展性:Ceph本身并沒有主控節點,擴展起來比較容易,并且理論上,它的性能會隨著磁盤數量的增加而線性增長。
-
特性豐富:Ceph支持三種調用接口:對象存儲,塊存儲,文件系統掛載。三種方式可以一同使用。
Ceph主要特點如下:
-
統一存儲;
-
無任何單點故障;
-
數據多份冗余;
-
存儲容量可擴展;
-
自動容錯及故障自愈。
2、簡述Ceph存儲體系架構?
Ceph體系架構主要由RADOS和RADOS GW和RBD以及CephFS構成。
-
RADOS(Reliable, Autonomic Distributed Object Store)是Ceph的底層核心,RADOS本身也是分布式存儲系統,CEPH所有的存儲功能都是基于RADOS實現。RADOS由兩個組件組成:OSD和Monitor。
OSD主要提供存儲資源,每一個disk、SSD、RAID group或者一個分區都可以成為一個OSD,而每個OSD還將負責向該對象的復雜節點分發和恢復;
Monitor維護Ceph集群并監控Ceph集群的全局狀態,提供一致性的決策。
-
RADOS GW和RBD:RADOS GateWay、RBD其作用是在librados庫的基礎上提供抽象層次更高、更便于應用或客戶端使用的上層接口。其中,RADOS GW是一個提供與Amazon S3和Swift兼容的RESTful API的gateway,以供相應的對象存儲應用開發使用。RBD則提供了一個標準的塊設備接口,常用于在虛擬化的場景下為虛擬機創建volume。
-
CEPHFS:CEPHFS則提供了POSIX接口,用戶可直接通過客戶端掛載使用。
3、簡述Ceph Pool有幾種類型?
Ceph存儲池Pool是Ceph存儲集群用于存儲對象的邏輯分區。
Pool中存在一定的數量的PG,PG將對象存儲在一組由CRUSH算法確定的osd中。
Ceph使用CRUSH算法將對象分配給池中的一個PG,根據池的配置和CRUSH算法,PG自動映射到一組OSDs。
一個PG里包含一堆對象,一個對象只能屬于一個PG。
4、簡述Ceph節點的角色?
所有Ceph存儲集群的部署都始于部署一個個Ceph節點、網絡和Ceph存儲集群。Ceph存儲集群至少需要一個Ceph Monitor和兩個OSD守護進程。而運行Ceph文件系統客戶端時,則必須要有元數據服務器(Metadata Server)。
-
Ceph OSDs:Ceph OSD守護進程( Ceph OSD )的功能是存儲數據,處理數據的復制、恢復、回填、再均衡,并通過檢查其他OSD守護進程的心跳來向Ceph Monitors提供一些監控信息。當Ceph存儲集群設定為有2個副本時,至少需要2個OSD守護進程,集群才能達到active+clean狀態(Ceph默認有3個副本)。
-
Monitors:Ceph Monitor維護著展示集群狀態的各種圖表,包括監視器圖、OSD圖、歸置組(PG)圖、和CRUSH 圖。
-
MDSs:Ceph元數據服務器(MDS)為Ceph文件系統存儲元數據(也就是說,Ceph塊設備和Ceph 對象存儲不使用MDS)。元數據服務器使得POSIX文件系統的客戶端,可以在不對Ceph存儲集群造成負擔的前提下,執行諸如ls、find等基本命令。
5、簡述Ceph的適應場景?
Ceph的應用場景主要由它的架構確定,Ceph提供對象存儲、塊存儲和文件存儲。
-
LIBRADOS應用
Librados提供了應用程序對RADOS的直接訪問,目前Librados已經提供了對C、C++、Java、Python、Ruby和PHP的支持。
-
RADOSGW應用
此類場景基于Librados之上,增加了HTTP協議,提供RESTful接口并且兼容S3、Swfit接口。RADOSGW將Ceph集群作為分布式對象存儲,對外提供服務。
-
RBD應用
此類場景也是基于Librados之上的,細分為下面兩種應用場景。
第一種應用場景為虛擬機提供塊設備。通過Librbd可以創建一個塊設備(Container),然后通過QEMU/KVM附加到VM上。通過Container和VM的解耦,使得塊設備可以被綁定到不同的VM上。
第二種應用場景為主機提供塊設備。這種場景是傳統意義上的理解的塊存儲。
以上兩種方式都是將一個虛擬的塊設備分片存儲在RADOS中,都會利用數據條帶化提高數據并行傳輸,都支持塊設備的快照、COW(Copy-On-Write)克隆。最重要的是RBD還支持Live migration。
-
CephFS(Ceph文件系統)
此類應用是基于RADOS實現的PB級分布式文件系統,其中引入MDS(Meta Date Server),它主要為兼容POSIX文件系統提供元數據,比如文件目錄和文件元數據。
Docker
1、簡述Docker的特性?
Docker主要有如下特性:
標準化
-
保證一致的運行環境
-
彈性伸縮,快速擴容
-
方便遷移
-
持續集成、持續交付與持續部署
高性能
-
不需要進行硬件虛擬以及運行完整的操作系統
輕量級
-
快速啟動
-
隔離性
-
進程隔離
2、簡述Docker容器的幾種狀態?
Docker容器可以有四種狀態:
-
運行
-
已暫停
-
重新啟動
-
已退出
3、簡述Dockerfile、Docker鏡像和Docker容器的區別?
Dockerfile 是軟件的原材料,Docker 鏡像是軟件的交付品,而 Docker 容器則可以認為是軟件的運行態。從應用軟件的角度來看,Dockerfile、Docker 鏡像與 Docker 容器分別代表軟件的三個不同階段,Dockerfile 面向開發,Docker 鏡像成為交付標準,Docker 容器則涉及部署與運維。
4、簡述Docker與KVM(虛擬機)的區別?
-
容器部署簡單,虛擬機部署相對復雜。
虛擬化技術依賴物理CPU和內存,是硬件級別的;
而docker構建在操作系統上,利用操作系統的containerization技術,所以docker甚至可以在虛擬機上運行。
-
容器秒級啟動,虛擬機通常分鐘級啟動。
傳統的虛擬化技術在構建系統的時候較為復雜,需要大量的人力;
而docker可以通過Dockfile來構建整個容器,重啟和構建速度很快。
-
容器需要的資源(如磁盤、CPU、內存)相對更少。
-
容器比較輕便,虛擬機相對較重。
虛擬化系統一般都是指操作系統級概念,比較復雜,稱為“系統”;
而docker開源而且輕量,稱為“容器”,單個容器適合部署少量應用,比如部署一個redis、一個memcached。
5、簡述Docker主要使用的技術?
容器主要使用如下技術:
-
Cgroup:資源控制
-
Namespace:訪問隔離
-
rootfs:文件系統隔離
-
容器引擎(用戶態工具):生命周期控制
6、簡述Docker體系架構?
Docker體系相對簡單,主要涉及如下5個組件:
-
Docker客戶端 – Docker
docker客戶端則扮演著docker服務端的遠程控制器,可以用來控制docker的服務端進程。
-
Docker服務端 – Docker Daemon
docker服務端是一個服務進程,管理著所有的容器。
-
Docker鏡像 – Image
docker鏡像,一個能夠運行在docker容器上的一組程序文件,是一個只讀的模板,不包含任何動態數據。
-
Docker容器 – Docker Container
docker容器,就是運行程序的載體,容器是鏡像運行時的實體。
-
Docker鏡像倉庫 -- Registry
Docker倉庫是集中存放鏡像文件的場所,Docker倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。
7、簡述Docker如何實現網絡隔離?
Docker利用了網絡的命名空間特性,實現了不同容器之間的網絡隔離。命名空間可以支持網絡協議棧的多個實例,獨立的協議棧被隔離到不同的命名空間中。
因此處于不同命名空間中的網絡棧是完全隔離的,彼此之間無法通信。每個獨立的命名空間中可以有自己獨立的路由表及獨立的iptables設置來提供包轉發、NAT及IP包過濾等功能。
8、簡述Linux文件系統和Docker文件系統?
Linux文件系統:由bootfs和rootfs組成,bootfs主要包含bootloader和kernel,bootloader主要是引導加載kernel,當kernel被加載到內存之后bootfs就被卸載掉了。rootfs包含的就是典型linux系統中/dev,/proc,/bin,/etc等標準目錄。
Docker文件系統:Docker容器是建立在Aufs分層文件系統基礎上的,Aufs支持將不同的目錄掛載到同一個虛擬文件系統下,并實現一種layer的概念。Aufs將掛載到同一虛擬文件系統下的多個目錄分別設置成read-only,read-write以及whiteout-able權限。docker 鏡像中每一層文件系統都是read-only。
9、簡述Docker網絡模式?
Docker使用Linux的Namespaces技術來進行資源隔離,其中Network Namespace實現隔離網絡。
一個Network Namespace提供了一份獨立隔離的網絡環境,包括網卡、路由、Iptable規則等,Docker網絡有如下四種模式:
-
host模式:host模式下容器將不會獲得獨立的Network Namespace,該模式下與宿主機共用一個Network Namespace。容器將不會虛擬出自己的網卡,不會配置獨有的IP等,而是使用宿主機的IP和端口。
-
container模式:Container 網絡模式是 Docker 中一種較為特別的網絡的模式,處于container模式下的 Docker 容器會共享其他容器的網絡環境,因此,兩個或以上的容器之間不存在網絡隔離,而配置container模式的容器又與宿主機以及除此之外其他的容器存在網絡隔離。
-
none模式:none模式下,Docker容器擁有自己的Network Namespace,但是,并不為Docker容器進行任何網絡配置和構造任何網絡環境。Docker 容器采用了none 網絡模式,那么容器內部就只能使用loopback網絡設備,不會再有其他的網絡資源。Docker Container的none網絡模式意味著不給該容器創建任何網絡環境,容器只能使用127.0.0.1的本機網絡。
-
bridge模式:bridge模式是Docker默認的網絡設置,此模式會為每一個容器分配Network Namespace、設置IP等,并將該宿主機上的Docker容器連接到一個虛擬網橋上。
10、簡述Docker跨主機通信的網絡實現方式?
docker跨主機通信按原理可通過以下三種方式實現:
-
直接路由方式:直接在不同宿主機之間添加靜態路由;
-
橋接方式(如pipework):通過靜態指定容器IP為宿主機IP同一個網絡的形式,即可實現。
-
Overlay隧道方式:使用overlay網絡實現,Overlay網絡指在現有網絡層之上疊加的虛擬化技術,實現應用在網絡上的承載,并能與其他網絡業務分離,并且以基于IP的網絡技術為主,如flannel、ovs+gre。
11、簡述flannel網絡模型實現原理?
Flannel為每個host分配一個subnet,容器從subnet中分配IP,這些IP可以在host間路由,容器間無需使用nat和端口映射即可實現跨主機通信。每個subnet都是從一個更大的IP池中劃分的,flannel會在每個主機上運flanneld的agent,負責從池子中分配subnet。
Flannel使用etcd存放網絡配置、已分配的subnet、host的IP等信息,Flannel數據包在主機間轉發是由backend實現的,目前已經支持UDP、VxLAN、host-gw、AWS VPC和GCE路由等多種backend。
高中生也能讀懂的Docker入門教程
Docker 入門終極指南:邊學邊用
10 個冷門但又非常實用的 Docker 使用技巧!
Docker 入門看這一篇就夠了!
Apache 與 Nginx
1、簡述什么是Apache服務器?
Apache服務器是一個非常流行、功能強大并且開源的Web服務器,基于HTTP超文本傳輸協議運行,這一協議提供了服務器和客戶端Web瀏覽器通信的標準。它支持SSL、CGI文件、虛擬主機等許多功能特性。
2、簡述Apache虛擬主機?
Apache虛擬主機相當于一個在同一臺服務器中卻相互獨立的站點,從而實現一臺主機對外提供多個 web 服務,每個虛擬主機之間是獨立的,互不影響的。Apache具有兩種類型的虛擬主機:基于名稱的虛擬主機和基于IP的虛擬主機。
3、簡述Apache的Worker MPM和Prefork MPM之間的區別?
它們都是MPM,Worker和Prefork有它們各自在Apache上的運行機制,取決于哪種模式啟動Apache。Worker MPM和Prefork MPM基本的區別在于它們產生子進程的處理過程。
1、Prefork MPM中,一個主httpd進行被啟動,這個主進程會管理所有其它子進程為客戶端請求提供服務。Worker MPM中一個httpd進程被激活,則會使用不同的線程來為客戶端請求提供服務。
2、Prefork MPM使用多個子進程,每一個進程帶有一個線程,Worker MPM使用多個子進程,每一個進程帶有多個線程。
3、Prefork MPM中的連接處理,每一個進程一次處理一個連接而在Worker MPM中每一個線程一次處理一個連接。
4、內存占用Prefork MPM占用龐大的內存,而Worker MPM占用更小的內存。
詳解 Linux 環境下部署 HTTPD 服務
如何在 Linux 環境下部署 AWStats 分析系統來監控 Web 站點?
一文讀懂 HTTPD 服務的訪問控制
4、簡述Nginx是什么及其主要特點?
Nginx是一款自由的、開源的、高性能的HTTP服務器和反向代理服務器??梢宰鳛橐粋€HTTP服務器進行網站的發布處理,同時也可以作為反向代理進行負載均衡的實現。其主要特點有:
-
占有內存少,并發能力強。
-
Nginx使用基于事件驅動架構,使得其可以支持數以百萬級別的TCP連接。
-
高度的模塊化和自由軟件許可證使得第三方模塊非常豐富。
-
Nginx是一個跨平臺服務器,可以運行在Linux,Windows,FreeBSD,Solaris,AIX,Mac OS等操作系統上。
5、簡述Nginx和Apache的差異?
-
Nginx是一個基于事件的Web服務器,Apache是一個基于流程的服務器;
-
Nginx所有請求都由一個線程處理,Apache單個線程處理單個請求;
-
Nginx避免子進程的概念,Apache是基于子進程的;
-
Nginx在內存消耗和連接方面更好,Apache在內存消耗和連接方面一般;
-
Nginx的性能和可伸縮性不依賴于硬件,Apache依賴于CPU和內存等硬件;
-
Nginx支持熱部署,Apache不支持熱部署;
-
Nginx對于靜態文件處理具有更高效率,Apache相對一般;
-
Nginx在反向代理場景具有明顯優勢,Apache相對一般。
6、簡述Nginx主要應用的場景?
基于Nginx的特性,Nginx的應用場景主要有:
-
http服務器:Nginx是一個http服務可以獨立提供http服務,可以做網頁靜態服務器。
-
虛擬主機:可以實現在一臺服務器虛擬出多個網站。
-
正反代理:負載均衡或加速,當網站的訪問量達到一定程度后,單臺服務器不能滿足用戶的請求時,需要用多臺服務器集群可以使用Nginx做反向代理,并且多臺服務器可以平均分擔負載。
7、簡述Nginx HTTP連接和請求的關系?
HTTP是建立在TCP上,一次HTTP請求需要先建立TCP三次握手(稱為TCP連接),在連接的基礎上再進行HTTP請求。
HTTP請求建立在一次TCP連接基礎上,對于HTTP會話,一次TCP連接可以建立多次HTTP請求。
8、簡述Nginx支持哪些訪問控制方式?
-
連接限制:Nginx自帶的limit_conn_module模塊(TCP連接頻率限制模塊)和limit_req_mudule模塊(HTTP請求頻率限制模塊)支持對連接頻率以及請求頻率、來源進行限制,通??煽梢杂脕矸乐笵DOS攻擊。
-
IP限制:Nginx使用http_access_module模塊可實現基于IP的訪問控制,但通過代理可以繞過限制。
-
賬號限制:Nginx使用http_auth_basic_module模塊可實現用戶密碼的登錄限制。
-
流量限制:Nginx使用http_core_moduleblock模塊可實現客戶端傳送響應的速率限制。
9、簡述Nginx Master進程和Worker節點?
master進程主要用來管理worker進程,包含:接收來自外界的信號,向各worker進程發送信號,監控worker進程的運行狀態,當worker進程退出后(異常情況下),會自動重新啟動新的worker進程。
worker進程則是處理基本的網絡事件。多個worker進程之間是對等的,他們同等競爭來自客戶端的請求,各進程互相之間是獨立的。一個請求,只可能在一個worker進程中處理,一個worker進程,不可能處理其它進程的請求。
10、簡述Nginx如何處理HTTP請求?
-
首先,Nginx 在啟動時,會解析配置文件,獲取需要監聽的端口與 IP 地址,然后在 Nginx 的 Master 進程里面先初始化好這個監控的Socket(創建 Socket,設置 addr、綁定ip和端口,然后listen 監聽)。
-
然后,再 fork 出多個子進程出來。
-
之后,子進程會競爭 accept 新的連接。此時,客戶端就可以向 nginx 發起連接了。當客戶端與nginx完成TCP三次握手,與 nginx 建立好一個連接后。此時,某一個子進程會 accept 成功,得到這個建立好的連接的 Socket ,然后創建 nginx 對連接的封裝。
-
接著,設置讀寫事件處理函數,并添加讀寫事件來與客戶端進行數據的交換。
-
最后,Nginx 或客戶端來主動關掉連接,完成整個HTTP請求的處理。
11、簡述Nginx對于HTTP請求采用哪兩種機制進行處理?
Nginx 是一個高性能的 Web 服務器,能夠同時處理大量的并發請求。它結合多進程機制和異步非阻塞機制 。
-
多進程機制:服務器每當收到一個客戶端請求時,就有服務器主進程 (master process)生成一個子進程(worker process)和客戶端建立連接進行交互,直到連接斷開,該子進程就結束了。
使用進程的好處是各個進程之間相互獨立,不需要加鎖,減少了使用鎖對性能造成影響。
其次,采用獨立的進程,可以讓進程互相之間不會影響 ,如果一個進程發生異常退出時,其它進程正常工作,master進程則很快啟動新的worker進程,確保服務不會中斷,從而將風險降到最低。
缺點是操作系統生成一個子進程需要進行 內存復制等操作,在資源和時間上會產生一定的開銷。當有大量請求時,會導致系統性能下降 。
-
異步非阻塞機制:每個工作進程使用異步非阻塞方式,可以處理多個客戶端請求 。
當某個工作進程接收到客戶端請求以后,調用 IO 進行處理,如果不能立即得到結果,就去處理其他請求(即為非阻塞 )。而客戶端在此期間也無需等待響應,可以進行其他任務(即為 異步 )。
當IO返回時,就會通知此工作進程。該進程得到通知,暫時掛起當前處理的事務去響應客戶端請求 。
12、簡述Nginx支持哪些類型的虛擬主機?
對于Nginx而言,每一個虛擬主機相當于一個在同一臺服務器中卻相互獨立的站點,從而實現一臺主機對外提供多個 web 服務,每個虛擬主機之間是獨立的,互不影響的。通過 Nginx 可以實現虛擬主機的配置,Nginx 支持三種類型的虛擬主機配置:
-
基于 IP 的虛擬主機(較少使用)
-
基于域名的虛擬主機
-
基于端口的虛擬主機
13、簡述Nginx緩存及其作用?
緩存對于Web至關重要,尤其對于大型高負載Web站點。Nginx緩存可作為性能優化的一個重要手段,可以極大減輕后端服務器的負載。通常對于靜態資源,即較少經常更新的資源,如圖片,css或js等進行緩存,從而在每次刷新瀏覽器的時候,不用重新請求,而是從緩存里面讀取,這樣就可以減輕服務器的壓力。
14、簡述Nginx作為代理緩存后,客戶端訪問的過程?
使用Nginx作為代理緩存后,可加快客戶端的訪問,其過程大致如下:
-
第一步:客戶端第一次向Nginx請求數據A;
-
第二步:當Nginx發現緩存中沒有數據A時,會向服務端請求數據A;
-
第三步:服務端接收到Nginx發來的請求,則返回數據A到Nginx,并且緩存在Nginx;
-
第四步:Nginx返回數據A給客戶端應用;
-
第五步:客戶端第二次向Nginx請求數據A;
-
第六步:當Nginx發現緩存中存在數據A時,則不會請求服務端;
-
第七步:Nginx把緩存中的數據A返回給客戶端應用。
15、簡述Nginx代理及其類型?
代理(forward)是一個位于客戶端和原始服務器(origin server)之間的服務器,即代理服務器。為了從原始服務器取得內容,客戶端向代理服務器發送一個請求并指定目標原始服務器,然后代理服務器向原始服務器轉交請求并將獲得的內容返回給客戶端。
其通常有如下三種代理模式:
-
正向代理(forward proxy):一個位于客戶端和原始服務器(origin server)之間的服務器,為了從原始服務器取得內容,客戶端向代理發送一個請求并指定目標(原始服務器),然后代理向原始服務器轉交請求并將獲得的內容返回給客戶端。
-
反向代理(reverse proxy):指以代理服務器來接受 Internet上的連接請求,然后將請求,發給內部網絡上的服務器并將從服務器上得到的結果返回給 Internet 上請求連接的客戶端,此時代理服務器對外就表現為一個反向代理服務器。
-
透明代理
16、簡述Nginx盜鏈及如何防護?
盜鏈指的是在自己的界面展示非本服務器上的內容,通過技術手段獲得其他服務器的資源。繞過他人資源展示頁面,在自己頁面向用戶提供此內容,從而減輕自己服務器的負擔,因為真實的空間和流量來自其他服務器。
因此,通常為了避免被盜鏈,通常Web服務器建議配置防盜鏈。Nginx防盜鏈其主要防盜鏈思路是能區別哪些請求是非正常用戶請求,對于非正常用戶的請求直接反饋403或重定向至其他頁面。
17、簡述Nginx負載均衡的意義?
負載均衡是將負載分攤到多個操作單元上執行,從而提高服務的可用性和響應速度,帶給用戶更好的體驗。對于Web應用,通過負載均衡,可以將一臺服務器的工作擴展到多臺服務器中執行,提高整個網站的負載能力。其本質采用一個調度者,保證所有后端服務器都將性能充分發揮,從而保持服務器集群的整體性能最優,這就是負載均衡。
18、簡述Nginx負載均衡的優勢?
Nginx作為負載均衡器具有極大的優勢,主要體現在:
-
高并發連接
-
內存消耗少
-
配置文件非常簡單
-
成本低廉
-
支持Rewrite重寫規則
-
內置的健康檢查功能
-
節省帶寬
-
穩定性高
19、簡述Nginx負載均衡主要的均衡機制(策略)?
Nginx作為負載均衡器具有極大的優勢,其負載均衡策略可以劃分為兩大類:內置策略和擴展策略,擴展策略為第三方提供。
內置策略
-
輪詢(默認):Nginx根據請求次數,將每個請求均勻分配到每臺服務器;
-
weight:加權輪詢,加權輪詢則是在第一種輪詢的基礎上對后臺的每臺服務賦予權重,服務器的權重比例越大,被分發到的概率也就越大。
-
least_conn:最少連接,將請求分配給連接數最少的服務器。Nginx會統計哪些服務器的連接數最少。
-
ip_hash:IP 哈希,綁定處理請求的服務器。第一次請求時,根據該客戶端的IP算出一個HASH值,將請求分配到集群中的某一臺服務器上。后面該客戶端的所有請求,都將通過HASH算法,找到之前處理這臺客戶端請求的服務器,然后將請求交給它來處理。
擴展策略
-
fair:按后端服務器的響應時間來分配請求,響應時間短的優先分配。
-
url_hash:按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效。
20、簡述Nginx負載均衡(反向代理)通過什么方式實現后端RS的健康檢查?
nginx負載均衡(反向代理)包含內置的或第三方擴展來實現服務器健康檢測的。如果后端某臺服務器響應失敗,nginx會標記該臺服務器失效,在特定時間內,請求不分發到該臺上。
-
fail_timeout:該指令定義了多長時間服務器將被標記為失敗。在fail_timeout后,服務器還是failed,nginx將檢測該服務器是否存活,如果探測成功,將標記為活的。
-
max_fails:該指令設置在fail_timeout期間內連續的失敗嘗試。默認情況下,max_fails為1。如果被設置為0,該服務器的健康檢測將禁用。
21、簡述Nginx動靜分離?
為了提高網站的響應速度,減輕程序服務器(Tomcat,Jboss等)的負載,對于靜態資源,如圖片、js、css等文件,可以在反向代理服務器中進行緩存,這樣瀏覽器在請求一個靜態資源時,代理服務器就可以直接處理,而不用將請求轉發給后端服務器。對于用戶請求的動態文件,如servlet、jsp,則轉發給Tomcat,Jboss服務器處理,這就是動靜分離。即動態文件與靜態文件的分離。
22、簡述Nginx動靜分離的原理?
動靜分離可通過location對請求url進行匹配,將網站靜態資源(HTML,JavaScript,CSS,img等文件)與后臺應用分開部署,提高用戶訪問靜態代碼的速度,降低對后臺應用訪問。通常將靜態資源放到nginx中,動態資源轉發到tomcat服務器中。
23、簡述Nginx同源策略?
同源策略是一個安全策略。同源,指的是協議,域名,端口相同。瀏覽器處于安全方面的考慮,只允許本域名下的接口交互,不同源的客戶端腳本,在沒有明確授權的情況下,不能讀寫對方的資源。
24、簡述Nginx跨域及如何實現?
從一個域名的網頁去請求另一個域名的資源,或任何協議、域名、端口有一處不同的請求,就被當作是跨域,即都被當成不同源。
通?;诎踩紤],Nginx啟用了同源策略,即限制了從同一個源加載的文檔或腳本如何與來自另一個源的資源進行交互。這是一個用于隔離潛在惡意文件的重要安全機制。
Nginx若要實現跨域訪問,可通過JSONP和CORS進行實現。
25、簡述Nginx重定向及其使用的場景?
重定向(Redirect)指通過各種方法將各種網絡請求重新定個方向轉到其它位置(如:網頁重定向、域名的重定向、路由選擇的變化也是對數據報文經由路徑的一種重定向)。
URL重寫是指通過配置conf文件,以讓網站的URL中達到某種狀態時則定向/跳轉到某個規則,比如常見的偽靜態、301重定向、瀏覽器定向等。當客戶端瀏覽某個網址時,將其訪問導向到另一個網址的技術。
其主要場景有如下兩個:
-
將一串很長的網址,轉成較短的網址,從而實現便于傳播、易于記憶。
-
調整或更換Web服務器,網址(域名)又必須要變更(如訪問目錄、訪問擴展名HTML變為PHP、訪問域名),為了能使舊的訪問依舊生效,從而實現自動重定向到新的網站。
26、簡述Nginx地址重寫、地址轉發、反向代理?
-
地址重寫:為了實現地址的標準化,如地址欄中中輸入 www.baidu.com. 也可以輸入 www.baidu.cn。最后都會被重寫到 www.baidu.com 上。瀏覽器的地址欄也會顯示www.baidu.com。即nginx把收到客戶端請求的內容所對應的服務器地址發給客戶端,讓客戶端自己去獲取,nginx同時返回302正確信息。
-
地址轉發:指在網絡數據傳輸過程中數據分組到達路由器或橋接器后,該設備通過檢查分組地址并將數據轉發到最近的局域網的過程。
-
反向代理:當瀏覽器訪問網站時,nginx反向代理服務器會代替客戶端向后端服務器查找所需的內容,然后nginx反向代理服務器會把查找的內容返回給客戶端。
27、簡述Nginx地址重寫和地址轉發的差異?
地址重寫和地址轉發有以下不同點:
-
地址重寫會改變瀏覽器中的地址,使之變成重寫成瀏覽器最新的地址。而地址轉發不會改變瀏覽器的地址的。
-
地址重寫會產生兩次請求,而地址轉發只會有一次請求。
-
地址轉發一般發生在同一站點項目內部,而地址重寫且不受限制。
-
地址轉發的速度比地址重定向快。
28、簡述Nginx 301和302重定向及其區別?
301和302狀態碼都表示重定向,表示瀏覽器在拿到服務器返回的這個狀態碼后會自動跳轉到一個新的URL地址,這個地址可以從響應的Location首部中獲取(客戶端輸入的地址A瞬間變成了另一個地址B)。其主要差異為:
-
301:代表永久性轉移(Permanently Moved):舊地址A的資源已經被永久地移除了(這個資源不可訪問了),搜索引擎在抓取新內容的同時也將舊的網址交換為重定向之后的網址;
-
302:代表暫時性轉移(Temporarily Moved):舊地址A的資源還在(仍然可以訪問),這個重定向只是臨時地從舊地址A跳轉到地址B,搜索引擎會抓取新的內容而保存舊的網址。
29、簡述Nginx高可用的常見方案?
Keepalived + Nginx 實現Nginx的高可用:通過Keepalived來實現同一個虛擬IP映射到多臺Nginx代理服務器,從而實現Nginx的高可用性。
Heartbeat + Nginx 實現Nginx的高可用:通過Heartbeat的心跳檢測和資源接管、集群中服務的監測、失效切換等功能,結合Nginx來實現高可用性。
Nginx系列教程(一)| 手把手教你在Linux環境下搭建Nginx服務
Nginx系列教程(二)| 一文帶你讀懂Nginx的正向與反向代理
Nginx系列教程(三)| 一文帶你讀懂Nginx的負載均衡
Nginx系列教程(四)| 一文帶你讀懂Nginx的動靜分離
Nginx系列教程(五)| 利用 Nginx+Keepalived 實現高可用技術
Nginx系列教程(六)| 手把手教你搭建 LNMP 架構并部署天空網絡電影系統
30、簡述SSL和HTTPS?
SSL(Secure Socket Layer)安全套接字層是一種數字證書,它使用ssl協議在瀏覽器和web server之間建立一條安全通道,數據信息在client與server之間的安全傳輸。
HTTPS(Hypertext Transfer Protocol Secure)是超文本傳輸協議和SSL/TLS的組合,用以提供加密通訊及對網絡服務器身份的鑒定。
HTTPS也可以理解為HTTP over SSL,即HTTP連接建立在SSL安全連接之上。
總結
以上是生活随笔為你收集整理的IT运维面试问题总结-运维工具、开源应用(Ansible、Ceph、Docker、Apache、Nginx等)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VMware ubuntu20.04 s
- 下一篇: 《Introduction to Com