Tomcat面試題+http面試題+Nginx面試題+常見面試題

Tomcat面試題

1、Tomcat的缺省端口是多少?怎麼修改?
答:缺省端口是8080,若要修改,可以進入Tomcat的安裝目錄下找到conf目錄下的server.xml文件,找到該文件中的Connector字段中的port。
2、Tomcat有哪幾種connector運行模式(服務的請求方式)?
答:三種。修改它的運行模式需要在主配置文件中找到connector字段中的protocol進行修改

這三種不同運行模式的性能相差很大,具體如下:

BIO:阻塞型I/O操作,一個線程處理一個請求。缺點:併發量高時,線程數較多,浪費資源。Tomcat7或以下,默認使用這種方式。
NIO:基於緩衝區,能提供非阻塞I/O操作,和傳統的BIO相比,具備更好的抗併發性能;
APR(Apache portable run-time libraries):簡單理解,就是從操作系統級別解決異步IO問題,大幅度的提高服務器的處理和相應性能,也是Tomcat運行高併發的首選模式,在Linux中需要安裝APR動態庫纔可以使用這種模式。

3、如何避免用戶在訪問一個不存在的頁面時,Tomcat將其詳細版本信息返回給用戶。
答:解決辦法就是將404狀態碼進行重定向,以便我們自定義返回的頁面信息。
4、優化tomcat可以從哪些方面着手?

答:
1、內存優化;
2、線程池的優化
3、禁用DNS查詢;
4、開啓日誌切割功能;
5、關閉404錯誤返回的版本信息;

————————————————————————————————————————————————————————————————————————————————————————————————————————

httpd服務面試題

1、請說一下你對httpd服務的瞭解?
答:Apache是一個模塊化服務,支持的模塊比較多,採用servlet處理模型,同步阻塞模型,工作模式多變,對於高併發的場景處理速度會比較慢,運行穩定。支持異步讀寫,可以通過正則表達式做動靜分離。

2、httpd服務的三種工作模式你瞭解多少?
答:httpd有三種工作模式。

prefork:預派生子進程
prefork模式可以算是很古老但是很穩定的模式。httpd服務在剛啓動時,就會fork出一些子進程(默認爲5個),一個子進程對應一個線程,然後等待request進來,並且總是試圖保持一些空閒的子進程,之所以這樣做,是爲了減少頻繁創建和銷燬進程的開銷。在同一個時間點內,一個線程只能處理一個進程。

worker工作模式
worker模式和prefork模式比起來,是使用了多進程+多線程的模式,它也是預先fork了幾個子進程,每個子進程能夠生成一些服務線程和一個監聽線程,該監聽線程及接入請求並傳遞給服務線程處理和應答。worker工作模式佔用的內存較少,在高併發下表現還算優異。不過必須要考慮線程安全的問題,因爲多個子進程是共享父進程的內存地址的。如果使用keep-alive的長連接方式,也許中間幾乎沒有請求,這是就會發生阻塞,線程被掛起,需要一直等待到超時纔會被釋放。如果過多的線程,就這樣被佔據,也會導致在高併發場景下的無服務線程可用。(該問題同樣會發生在prefork模式)。

event工作模式
這是Apache最新的工作模式,它和worker模式很像,最大的區別在於,它解決了keep-alive場景下,線程被長期被佔用的的資源浪費問題。

event工作模式中,會有一個專門的線程來管理這些keep-alive類型的線程,當有真實請求過來的時候偶,將請求傳遞給服務線程,執行完畢後,又允許它釋放。這樣,一個線程就能處理多個請求了,實現異步非阻塞。

event工作模式在遇到某些不兼容的模塊時,它會失效,並退回到worker模式,一個工作線程處理一個請求。官方自帶的模塊,全部都是支持event工作模式的。

3、可以從哪幾個方面着手優化httpd?
合理配置其進程及線程數;
開啓httpd的deflate壓縮功能;
開啓expires緩存功能;
禁止httpd進行目錄遍歷;
隱藏httpd的版本信息;
開啓日誌切割功能;
配置防盜鏈;
————————————————————————————————————————————————————————————————————————————————————————————————————————————

Nginx面試題

1、缺省安裝的Nginx+php-fpm環境,假設用戶瀏覽一個耗時的網頁,但是卻在服務端渲染頁面的中途中關閉了瀏覽器,那麼請問服務端的PHP腳本是繼續執行還是退出執行?
答:正常情況下,如果client異常退出了,Server端的程序還是會繼續執行,直到與IO進行了兩次交互操作。Server端發現client端已經斷開連接,這個時候會出發一個User_abort,如果這個沒有設置ignore_user_abort,那麼這個php-fpm的程序纔會被中斷。

2、nginx是如何實現高併發的?
答:nginx之所以可以實現高併發,與它採用的epoll模型有很大的關係。epoll模型採用異步非阻塞的事件處理機制。這種機制可讓nginx進程同時監控多個事件。

簡單來說,就是異步非阻塞,使用了epoll模型和大量的底層代碼優化。如果深入一點的話,就是nginx的特殊進程模型和事件模型的設計,才使其可以實現高併發。

進程模型

它是採用一個master進程和多個worker進程的工作模式。
1、master進程主要負責收集、分發請求。當一個請求過來時,master拉起一個worker進程負責處理這個請求。;
2、master進程也要負責監控worker的狀態,保證高可靠性;
3、worker進程議案設置爲和CPU核心數一致或者其二倍。nginx的worker進程和Apache的不一樣。apache的進程在同一時間只能處理一個請求,所以它會開啓很多個進程,幾百甚至幾千個。而nginx的worker進程在同一時間可以處理的請求數只受內存限制,因此可以處理更多請求。

事件模型
nginx是異步非阻塞的。

一個master進程,多個worker進程,每個worker進程可以處理多個請求。每進來一個request,都會有worker進程去處理。但不是全程的處理,那麼處理到的程度就是可能發生阻塞的地方,比如向後端服務器轉發request,並等待請求返回。那麼,在等待期間,這個處理的worker不會這麼傻等着,他會在發送完請求後,註冊一個事件:“如果upstream返回了,告訴我一聲,我再接着幹”。於是它就去休息了,此時,如果再有request進來,它就可以很快再按這種方式處理。而一旦後端服務器返回了,就會觸發這個事件,worker纔會來接手,這個request纔會接着往下走。
由於nginx的的這個工作性質決定了每個請求大部分的生命都是在網絡傳輸中,所以實際上花費在nginx 服務器上的時間並不多,這就是它幾進程就能解決高併發的祕密所在。

3、已知nginx和php-fpm安裝在同一臺服務器上,nginx連接php-fpm有兩種方式:一種是類似127.0.0.1:9000的TCP socket,另一種是類似/tmp/php-fpm.sock的Unix domain socket,請問如何選擇?需要注意什麼?
Unix domain socket的流程不會走到TCP那層,直接以文件的形式,以stream socket通信。如果是TCP Socket,則需要走到IP層。說的通俗一點,追求可靠性就是選擇TCP(需要佔用一個端口,更穩定,如:127.0.0.1:9000),追求高性能就是Unix Socket(不需要佔用端口,更快,但可靠性不如TCP的方式)。

4、nginx和Apache的區別?
兩者最核心的區別在於apache是同步多進程模型,一個request對應一個進程,而nginx是異步的,多個連接(萬級別)可以對應一個進程。

一般來說,需要性能的web服務,用nginx,如果不需要性能只求穩定,更考慮Apache,後者的各種模塊實現的比前者好很多,epoll網絡IO模型是nginx處理性能高的根本,但並不是所有情況下epoll大獲全勝的,如果本身提供靜態服務的只有幾個文件,apache的select模型或許比epoll更高性能。當然,這只是一個假設,真正還需要實測了再說。

更通用的方案是,前端nginx抗併發,後端apache集羣,配合起來會更好。

5、nginx的調度算法有哪些?

sticky:通過nginx-sticky模塊,來實現cookie黏貼的方式將來自同一個客戶端的請求發送到同一個後端服務器上處理,這樣一定程度上可以解決多個後端服務器的session會話同步的問題;
round-robin(RR):輪詢,每個請求按時間順序依次分配到不同的後端服務器,如果後端某臺服務器死機,自動剔除故障系統,使用戶訪問不受影響;
weight:輪詢權重,weight的值越大分配到的訪問概率就越高,主要用於後端每臺服務器性能不均衡的情況下,或者僅僅爲在主從的情況下設置不同的權重,達到合理有效的利用主機資源。
least_conn:請求被髮送到當前活躍連接最少的realserver上,會考慮到weight的值;
ip_hash:每個請求按照IP的哈希結果分配,使來自同一個IP的訪客固定訪問後端服務器,可以有效的解決動態網頁存在的session共享問題。
fair:比weight、ip_hash更加智能的負載均衡算法,fair算法可以根據頁面的大小和加載時間長短智能地進行負載均衡,也就是根據後端服務器的響應時間來分配請求,相應時間短的優先分配。nginx本身不支持fair,如果需要使用這種調度算法,則必須安裝upstream_fair模塊。
url_hash:按訪問的URL的哈希結果來分配請求,使每個URL定向到後端服務器,可以進一步提高後端緩存服務器的效率。同樣,nginx本身不支持url_hash,如果需要這種調度算法,則必須安裝nginx的hash軟件包。

6、nginx負載均衡調度狀態
在nginx upstream模塊中,可以設定每臺後端服務器在負載均衡調度中的狀態。

常用的狀態有:

down:表示當前的server暫時不參與負載均衡;
backup:預留的備份機器。當其他所有的非backup機器出現故障或者繁忙的時候,纔會請求backup機器,因此這臺機器的訪問壓力最低;
max_fails:允許請求失敗的次數,默認爲1,當超過最大次數時,返回proxy_next_upstraem模塊定義的錯誤;
fail_timeout:請求失敗超時時間,在經歷了max_fails次失敗後,暫停服務的時間。max_fails和fail_timeout可以一起使用。

7、如何查看nginx已添加的模塊?如果需要添加某個模塊,應該如何實現?
查看已添加的模塊:nginx -V;
如果需要添加某個模塊,需要將工作目錄切換至nginx的源碼包中,執行“nginx -V”命令查看之前配置時的選項進行復制,然後增加需要添加的模塊配置項,進行配置並編譯,將新生成的nginx命令覆蓋掉原有的nginx命令,然後重載nginx服務,即可實現在線添加模塊。

8、可以從哪些方面來優化nginx服務?

配置nginx的proxy緩存;
對靜態頁面開啓壓縮功能,如br壓縮或者gzip壓縮;
調整nginx運行工作進程個數,最多開啓8個,8個以上話性能就不會再提升了,而且穩定性變得更低,所以8個足夠用了;
調整nginx運行CPU的親和力;
修改nginx最多可打開的文件數,若超過系統限制的最多打開文件數(ulimit -n命令查看系統的最多打開文件數),還需要修改系統默認的文件數;
修改單個worker的最大連接數;
開啓高效傳輸;
設置連接超時時間,以便保護服務器資源,因爲建立連接也是需要消耗資源的;
優化fastCGI的一個超時時間,也可以根據實際情況對其配置緩存動態頁面;
expires緩存調優,主要針對圖片、css、js等元素更改較少的情況下使用。
配置防盜鏈;
優化內核參數,如進程可以同時打開的最大句柄數;開啓tcp重用機制,以便允許TIME_WAIT sockets重新用於新的TCP連接....還有好多,記不住。

————————————————————————————————————————————————————————————————————————————————————————————————

Linux運維常見面試題

1、什麼是運維?什麼是遊戲運維?
1)運維是指大型組織已經建立好的網絡軟硬件的維護,就是要保證業務的上線與運作的正常,
在他運轉的過程中,對他進行維護,他集合了網絡、系統、數據庫、開發、安全、監控於一身的技術
運維又包括很多種,有DBA運維、網站運維、虛擬化運維、監控運維、遊戲運維等等
2)遊戲運維又有分工,分爲開發運維、應用運維(業務運維)和系統運維
開發運維:是給應用運維開發運維工具和運維平臺的
應用運維:是給業務上線、維護和做故障排除的,用開發運維開發出來的工具給業務上線、維護、做故障排查
系統運維:是給應用運維提供業務上的基礎設施,比如:系統、網絡、監控、硬件等等
總結:開發運維和系統運維給應用運維提供了“工具”和“基礎設施”上的支撐
開發運維、應用運維和系統運維他們的工作是環環相扣的
——————————————————————————————————————————————————————————————————————————————————
2、在工作中,運維人員經常需要跟運營人員打交道,請問運營人員是做什麼工作的?
遊戲運營要做的一個事情除了協調工作以外
還需要與各平臺溝通,做好開服的時間、開服數、用戶導量、活動等計劃
————————————————————————————————————————————————————————————————————————————————————————
3、現在給你三百臺服務器,你怎麼對他們進行管理?
管理3百臺服務器的方式:
1)設定跳板機,使用統一賬號登錄,便於安全與登錄的考量。
2)使用saltstark、ansiable、puppet進行系統的統一調度與配置的統一管理。
3)建立簡單的服務器的系統、配置、應用的cmdb信息管理。便於查閱每臺服務器上的各種信息記錄
————————————————————————————————————————————————————————————————————————————————————————————————————————————
4、簡述raid0 raid1 raid5 三種工作模式的工作原理及特點
RAID,可以把硬盤整合成一個大磁盤,還可以在大磁盤上再分區,放數據
還有一個大功能,多塊盤放在一起可以有冗餘(備份)
RAID整合方式有很多,常用的:0 1 5 10
RAID 0,可以是一塊盤和N個盤組合
其優點讀寫快,是RAID中最好的
缺點:沒有冗餘,一塊壞了數據就全沒有了
RAID 1,只能2塊盤,盤的大小可以不一樣,以小的爲準
10G+10G只有10G,另一個做備份。它有100%的冗餘,缺點:浪費資源,成本高
RAID 5 ,3塊盤,容量計算10*(n-1),損失一塊盤
特點,讀寫性能一般,讀還好一點,寫不好
冗餘從好到壞:RAID1 RAID10 RAID 5 RAID0
性能從好到壞:RAID0 RAID10 RAID5 RAID1
成本從低到高:RAID0 RAID5 RAID1 RAID10
單臺服務器:很重要盤不多,系統盤,RAID1
數據庫服務器:主庫:RAID10 從庫 RAID5\RAID0(爲了維護成本,RAID10)
WEB服務器,如果沒有太多的數據的話,RAID5,RAID0(單盤)
有多臺,監控、應用服務器,RAID0 RAID5
我們會根據數據的存儲和訪問的需求,去匹配對應的RAID級別
—————————————————————————————————————————————————————————————————————————————————————————————————————————
5、LVS、Nginx、HAproxy有什麼區別?工作中你怎麼選擇?
LVS: 是基於四層的轉發
HAproxy: 是基於四層和七層的轉發,是專業的代理服務器
Nginx: 是WEB服務器,緩存服務器,又是反向代理服務器,可以做七層的轉發
區別: LVS由於是基於四層的轉發所以只能做端口的轉發
而基於URL的、基於目錄的這種轉發LVS就做不了
工作選擇:
HAproxy和Nginx由於可以做七層的轉發,所以URL和目錄的轉發都可以做
在很大併發量的時候我們就要選擇LVS,像中小型公司的話併發量沒那麼大
選擇HAproxy或者Nginx足已,由於HAproxy由是專業的代理服務器
配置簡單,所以中小型企業推薦使用HAproxy
————————————————————————————————————————————————————————————————————————————————————————————————————————————————
6、Squid、Varinsh和Nginx有什麼區別,工作中你怎麼選擇?
Squid、Varinsh和Nginx都是代理服務器
什麼是代理服務器:
能當替用戶去訪問公網,並且能把訪問到的數據緩存到服務器本地,等用戶下次再訪問相同的資
源的時候,代理服務器直接從本地迴應給用戶,當本地沒有的時候,我代替你去訪問公網,我接
收你的請求,我先在我自已的本地緩存找,如果我本地緩存有,我直接從我本地的緩存裏回覆你
如果我在我本地沒有找到你要訪問的緩存的數據,那麼代理服務器就會代替你去訪問公網
區別:
1)Nginx本來是反向代理/web服務器,用了插件可以做做這個副業
但是本身不支持特性挺多,只能緩存靜態文件
2)從這些功能上。varnish和squid是專業的cache服務,而nginx這些是第三方模塊完成
3)varnish本身的技術上優勢要高於squid,它採用了可視化頁面緩存技術
在內存的利用上,Varnish比Squid具有優勢,性能要比Squid高。
還有強大的通過Varnish管理端口,可以使用正則表達式快速、批量地清除部分緩存
它是內存緩存,速度一流,但是內存緩存也限制了其容量,緩存頁面和圖片一般是挺好的
4)squid的優勢在於完整的龐大的cache技術資料,和很多的應用生產環境
工作中選擇:
要做cache服務的話,我們肯定是要選擇專業的cache服務,優先選擇squid或者varnish。
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
7、Tomcat和Resin有什麼區別,工作中你怎麼選擇?
區別:Tomcat用戶數多,可參考文檔多,Resin用戶數少,可考慮文檔少
最主要區別則是Tomcat是標準的java容器,不過性能方面比resin的要差一些
但穩定性和java程序的兼容性,應該是比resin的要好
工作中選擇:現在大公司都是用resin,追求性能;而中小型公司都是用Tomcat,追求穩定和程序的兼容
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
8、什麼是中間件?什麼是jdk?
中間件介紹:
中間件是一種獨立的系統軟件或服務程序,分佈式應用軟件藉助這種軟件在不同的技術之間共享資源
中間件位於客戶機/ 服務器的操作系統之上,管理計算機資源和網絡通訊
是連接兩個獨立應用程序或獨立系統的軟件。相連接的系統,即使它們具有不同的接口
但通過中間件相互之間仍能交換信息。執行中間件的一個關鍵途徑是信息傳遞
通過中間件,應用程序可以工作於多平臺或OS環境。
jdk:jdk是Java的開發工具包
它是一種用於構建在 Java 平臺上發佈的應用程序、applet 和組件的開發環境
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
9、講述一下Tomcat8005、8009、8080三個端口的含義?
8005==》 關閉時使用
8009==》 爲AJP端口,即容器使用,如Apache能通過AJP協議訪問Tomcat的8009端口
8080==》 一般應用使用
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
10、什麼叫CDN?
即內容分發網絡
其目的是通過在現有的Internet中增加一層新的網絡架構,將網站的內容發佈到
最接近用戶的網絡邊緣,使用戶可就近取得所需的內容,提高用戶訪問網站的速度
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
11、什麼叫網站灰度發佈?
灰度發佈是指在黑與白之間,能夠平滑過渡的一種發佈方式
AB test就是一種灰度發佈方式,讓一部用戶繼續用A,一部分用戶開始用B
如果用戶對B沒有什麼反對意見,那麼逐步擴大範圍,把所有用戶都遷移到B上面 來灰度發佈可以保證整體系統的穩定,在初始灰度的時候就可以發現、調整問題,以保證其影響度
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
12、簡述DNS進行域名解析的過程?
用戶要訪問 www.baidu.com,會先找本機的host文件,再找本地設置的DNS服務器,如果也沒有的話,就去網絡中找根服務器,根服務器反饋結果,說只能提供一級域名服務器.cn,就去找一級域名服務器,一級域名服務器說只能提供二級域名服務器.com.cn,就去找二級域名服務器,二級域服務器只能提供三級域名服務器.baidu.com.cn,就去找三級域名服務器,三級域名服務器正好有這個網站www.baidu.com,然後發給請求的服務器,保存一份之後,再發給客戶端

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
13、RabbitMQ是什麼東西?
RabbitMQ也就是消息隊列中間件,消息中間件是在消息的傳息過程中保存消息的容器
消息中間件再將消息從它的源中到它的目標中標時充當中間人的作用
隊列的主要目的是提供路由並保證消息的傳遞;如果發送消息時接收者不可用
消息隊列不會保留消息,直到可以成功地傳遞爲止,當然,消息隊列保存消息也是有期限地
————————————————————————————————————————————————————————————————————————————————————————
14、講一下Keepalived的工作原理?
在一個虛擬路由器中,只有作爲MASTER的VRRP(虛擬路由冗餘協議)路由器會一直髮送VRRP通告信息,
BACKUP不會搶佔MASTER,除非它的優先級更高。當MASTER不可用時(BACKUP收不到通告信息)
多臺BACKUP中優先級最高的這臺會被搶佔爲MASTER。這種搶佔是非常快速的(<1s),以保證服務的連續性
由於安全性考慮,VRRP包使用了加密協議進行加密。BACKUP不會發送通告信息,只會接收通告信息
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

15、講述一下LVS三種模式的工作過程?
LVS 有三種負載均衡的模式,分別是VS/NAT(nat 模式) VS/DR(路由模式) VS/TUN(隧道模式)
一、NAT模式(VS-NAT)
原理:就是把客戶端發來的數據包的IP頭的目的地址,在負載均衡器上換成其中一臺RS的IP地址
併發至此RS來處理,RS處理完後把數據交給負載均衡器,負載均衡器再把數據包原IP地址改爲自己的IP
將目的地址改爲客戶端IP地址即可期間,無論是進來的流量,還是出去的流量,都必須經過負載均衡器
優點:集羣中的物理服務器可以使用任何支持TCP/IP操作系統,只有負載均衡器需要一個合法的IP地址
缺點:擴展性有限。當服務器節點(普通PC服務器)增長過多時,負載均衡器將成爲整個系統的瓶頸
因爲所有的請求包和應答包的流向都經過負載均衡器。當服務器節點過多時
大量的數據包都交匯在負載均衡器那,速度就會變慢!
二、IP隧道模式(VS-TUN)
原理:首先要知道,互聯網上的大多Internet服務的請求包很短小,而應答包通常很大
那麼隧道模式就是,把客戶端發來的數據包,封裝一個新的IP頭標記(僅目的IP)發給RS
RS收到後,先把數據包的頭解開,還原數據包,處理後,直接返回給客戶端,不需要再經過
負載均衡器。注意,由於RS需要對負載均衡器發過來的數據包進行還原,所以說必須支持
IPTUNNEL協議,所以,在RS的內核中,必須編譯支持IPTUNNEL這個選項
優點:負載均衡器只負責將請求包分發給後端節點服務器,而RS將應答包直接發給用戶
所以,減少了負載均衡器的大量數據流動,負載均衡器不再是系統的瓶頸,就能處理很巨大的請求量
這種方式,一臺負載均衡器能夠爲很多RS進行分發。而且跑在公網上就能進行不同地域的分發。
缺點:隧道模式的RS節點需要合法IP,這種方式需要所有的服務器支持”IP Tunneling”
(IP Encapsulation)協議,服務器可能只侷限在部分Linux系統上
三、直接路由模式(VS-DR)
原理:負載均衡器和RS都使用同一個IP對外服務但只有DR對ARP請求進行響應
所有RS對本身這個IP的ARP請求保持靜默也就是說,網關會把對這個服務IP的請求全部定向給DR
而DR收到數據包後根據調度算法,找出對應的RS,把目的MAC地址改爲RS的MAC(因爲IP一致)
並將請求分發給這臺RS這時RS收到這個數據包,處理完成之後,由於IP一致,可以直接將數據返給客戶
則等於直接從客戶端收到這個數據包無異,處理後直接返回給客戶端
由於負載均衡器要對二層包頭進行改換,所以負載均衡器和RS之間必須在一個廣播域
也可以簡單的理解爲在同一臺交換機上
優點:和TUN(隧道模式)一樣,負載均衡器也只是分發請求,應答包通過單獨的路由方法返回給客戶端
與VS-TUN相比,VS-DR這種實現方式不需要隧道結構,因此可以使用大多數操作系統做爲物理服務器。
缺點:(不能說缺點,只能說是不足)要求負載均衡器的網卡必須與物理網卡在一個物理段上。
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

16、mysql的innodb如何定位鎖問題,mysql如何減少主從複製延遲?
mysql的innodb如何定位鎖問題:
在使用 show engine innodb status檢查引擎狀態時,發現了死鎖問題
在5.5中,information_schema 庫中增加了三個關於鎖的表(MEMORY引擎)
innodb_trx ## 當前運行的所有事務
innodb_locks ## 當前出現的鎖
innodb_lock_waits ## 鎖等待的對應關係
mysql如何減少主從複製延遲:
如果延遲比較大,就先確認以下幾個因素:
從庫硬件比主庫差,導致複製延遲

主從複製單線程,如果主庫寫併發太大,來不及傳送到從庫

就會導致延遲。更高版本的mysql可以支持多線程複製
慢SQL語句過多

網絡延遲

master負載
主庫讀寫壓力大,導致複製延遲,架構的前端要加buffer及緩存層
slave負載
一般的做法是,使用多臺slave來分攤讀請求,再從這些slave中取一臺專用的服務器
只作爲備份用,不進行其他任何操作.另外, 2個可以減少延遲的參數:
–slave-net-timeout=seconds 單位爲秒 默認設置爲 3600秒
#參數含義:當slave從主數據庫讀取log數據失敗後,等待多久重新建立連接並獲取數據
–master-connect-retry=seconds 單位爲秒 默認設置爲 60秒
#參數含義:當重新建立主從連接時,如果連接建立失敗,間隔多久後重試
通常配置以上2個參數可以減少網絡問題導致的主從數據同步延遲
MySQL數據庫主從同步延遲解決方案
最簡單的減少slave同步延時的方案就是在架構上做優化,儘量讓主庫的DDL快速執行
還有就是主庫是寫,對數據安全性較高,比如sync_binlog=1,innodb_flush_log_at_trx_commit
= 1 之類的設置,而slave則不需要這麼高的數據安全,完全可以講sync_binlog設置爲0或者關閉binlog
innodb_flushlog也可以設置爲0來提高sql的執行效率。另外就是使用比主庫更好的硬件設備作爲slave
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
17、如何重置mysql root密碼?
一、 在已知MYSQL數據庫的ROOT用戶密碼的情況下,修改密碼的方法:
1、 在SHELL環境下,使用mysqladmin命令設置:
mysqladmin –u root –p password “新密碼” 回車後要求輸入舊密碼
2、 在mysql>環境中,使用update命令,直接更新mysql庫user表的數據:
Update mysql.user set password=password(‘新密碼’) where user=’root’;
flush privileges;
注意:mysql語句要以分號”;”結束
3、 在mysql>環境中,使用grant命令,修改root用戶的授權權限。
grant all on . to root@’localhost’ identified by ‘新密碼’;
二、 如查忘記了mysql數據庫的ROOT用戶的密碼,又如何做呢?方法如下:
1、 關閉當前運行的mysqld服務程序:service mysqld stop(要先將mysqld添加爲系統服務)
2、 使用mysqld_safe腳本以安全模式(不加載授權表)啓動mysqld 服務
/usr/local/mysql/bin/mysqld_safe --skip-grant-table &
3、 使用空密碼的root用戶登錄數據庫,重新設置ROOT用戶的密碼
#mysql -u root
Mysql> Update mysql.user set password=password(‘新密碼’) where user=’root’;
Mysql> flush privileges;
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
18、lvs/nginx/haproxy優缺點
Nginx的優點是:
1、工作在網絡的7層之上,可以針對http應用做一些分流的策略,比如針對域名、目錄結構
它的正則規則比HAProxy更爲強大和靈活,這也是它目前廣泛流行的主要原因之一
Nginx單憑這點可利用的場合就遠多於LVS了。
2、Nginx對網絡穩定性的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢之一
相反LVS對網絡穩定性依賴比較大,這點本人深有體會;
3、Nginx安裝和配置比較簡單,測試起來比較方便,它基本能把錯誤用日誌打印出來
LVS的配置、測試就要花比較長的時間了,LVS對網絡依賴比較大。
4、可以承擔高負載壓力且穩定,在硬件不差的情況下一般能支撐幾萬次的併發量,負載度比LVS相對小些。
5、Nginx可以通過端口檢測到服務器內部的故障,比如根據服務器處理網頁返回的狀態碼、超時等等,並且會把返回錯誤的請求重新提交到另一個節點,不過其中缺點就是不支持url來檢測。比如用戶正在上傳一個文件,而處理該上傳的節點剛好在上傳過程中出現故障,Nginx會把上傳切到另一臺服務器重新處理,而LVS就直接斷掉了
如果是上傳一個很大的文件或者很重要的文件的話,用戶可能會因此而不滿。
6、Nginx不僅僅是一款優秀的負載均衡器/反向代理軟件,它同時也是功能強大的Web應用服務器
LNMP也是近幾年非常流行的web架構,在高流量的環境中穩定性也很好。
7、Nginx現在作爲Web反向加速緩存越來越成熟了,速度比傳統的Squid服務器更快,可考慮用其作爲反向代理加速器
8、Nginx可作爲中層反向代理使用,這一層面Nginx基本上無對手,唯一可以對比Nginx的就只有lighttpd了
不過lighttpd目前還沒有做到Nginx完全的功能,配置也不那麼清晰易讀,社區資料也遠遠沒Nginx活躍
9、Nginx也可作爲靜態網頁和圖片服務器,這方面的性能也無對手。還有Nginx社區非常活躍,第三方模塊也很多
Nginx的缺點是:
1、Nginx僅能支持http、https和Email協議,這樣就在適用範圍上面小些,這個是它的缺點
2、對後端服務器的健康檢查,只支持通過端口來檢測,不支持通過url來檢測
不支持Session的直接保持,但能通過ip_hash來解決
LVS:使用Linux內核集羣實現一個高性能、高可用的負載均衡服務器
它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)
LVS的優點是:
1、抗負載能力強、是工作在網絡4層之上僅作分發之用,沒有流量的產生
這個特點也決定了它在負載均衡軟件裏的性能最強的,對內存和cpu資源消耗比較低
2、配置性比較低,這是一個缺點也是一個優點,因爲沒有可太多配置的東西
所以並不需要太多接觸,大大減少了人爲出錯的機率
3、工作穩定,因爲其本身抗負載能力很強,自身有完整的雙機熱備方案
如LVS+Keepalived,不過我們在項目實施中用得最多的還是LVS/DR+Keepalived
4、無流量,LVS只分發請求,而流量並不從它本身出去,這點保證了均衡器IO的性能不會收到大流量的影響。
5、應用範圍較廣,因爲LVS工作在4層,所以它幾乎可對所有應用做負載均衡,包括http、數據庫、在線聊天室等
LVS的缺點是:
1、軟件本身不支持正則表達式處理,不能做動靜分離
而現在許多網站在這方面都有較強的需求,這個是Nginx/HAProxy+Keepalived的優勢所在
2、如果是網站應用比較龐大的話,LVS/DR+Keepalived實施起來就比較複雜了
特別後面有Windows Server的機器的話,如果實施及配置還有維護過程就比較複雜了
相對而言,Nginx/HAProxy+Keepalived就簡單多了。
HAProxy的特點是:
1、HAProxy也是支持虛擬主機的。
2、HAProxy的優點能夠補充Nginx的一些缺點,比如支持Session的保持,Cookie的引導
同時支持通過獲取指定的url來檢測後端服務器的狀態
3、HAProxy跟LVS類似,本身就只是一款負載均衡軟件
單純從效率上來講HAProxy會比Nginx有更出色的負載均衡速度,在併發處理上也是優於Nginx的
4、HAProxy支持TCP協議的負載均衡轉發,可以對MySQL讀進行負載均衡
對後端的MySQL節點進行檢測和負載均衡,大家可以用LVS+Keepalived對MySQL主從做負載均衡
5、HAProxy負載均衡策略非常多,HAProxy的負載均衡算法現在具體有如下8種:
①roundrobin,表示簡單的輪詢,這個不多說,這個是負載均衡基本都具備的;
② static-rr,表示根據權重,建議關注;
③leastconn,表示最少連接者先處理,建議關注;
④ source,表示根據請求源IP,這個跟Nginx的IP_hash機制類似
我們用其作爲解決session問題的一種方法,建議關注;
⑤ri,表示根據請求的URI;
⑥rl_param,表示根據請求的URl參數’balance url_param’ requires an URL parameter name;
⑦hdr(name),表示根據HTTP請求頭來鎖定每一次HTTP請求;
⑧rdp-cookie(name),表示根據據cookie(name)來鎖定並哈希每一次TCP請求。
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
19、mysql數據備份工具
mysqldump工具
mysqldump是mysql自帶的備份工具,目錄在bin目錄下面:/usr/local/mysql/bin/mysqldump
支持基於innodb的熱備份,但是由於是邏輯備份,所以速度不是很快,適合備份數據比較小的場景
Mysqldump完全備份+二進制日誌可以實現基於時間點的恢復。
基於LVM快照備份
在物理備份中,有基於文件系統的物理備份(LVM的快照),也可以直接用tar之類的命令對整個數據庫目錄
進行打包備份,但是這些只能進行泠備份,不同的存儲引擎備份的也不一樣,myisam自動備份到表級別
而innodb不開啓獨立表空間的話只能備份整個數據庫。
tar包備份
percona提供的xtrabackup工具
支持innodb的物理熱備份,支持完全備份,增量備份,而且速度非常快,支持innodb存儲引起的數據在不同
數據庫之間遷移,支持複製模式下的從機備份恢復備份恢復,爲了讓xtrabackup支持更多的功能擴展
可以設立獨立表空間,打開 innodb_file_per_table功能,啓用之後可以支持單獨的表備份
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————
20、keepalive的工作原理和如何做到健康檢查
keepalived是以VRRP協議爲實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗餘協議。
虛擬路由冗餘協議,可以認爲是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組
這個組裏面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在局域網內
其他機器的默認路由爲該vip),master會發組播,當backup收不到vrrp包時就認爲master宕掉了
這時就需要根據VRRP的優先級來選舉一個backup當master。這樣就可以保證路由器的高可用了
keepalived主要有三個模塊,分別是core、check和vrrp。core模塊爲keepalived的核心,負責主進程的啓動、維護
及全局配置文件的加載和解析。check負責健康檢查,包括常見的各種檢查方式,vrrp模塊是來實現VRRP協議的
Keepalived健康檢查方式配置
HTTP_GET|SSL_GET
HTTP_GET | SSL_GET
{
url {
path /# HTTP/SSL 檢查的url可以是多個
digest # HTTP/SSL 檢查後的摘要信息用工具genhash生成
status_code 200# HTTP/SSL 檢查返回的狀態碼
}
connect_port 80 # 連接端口
bindto
connect_timeout 3 # 連接超時時間
nb_get_retry 3 # 重連次數
delay_before_retry 2 #連接間隔時間
}
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
21、統計ip訪問情況,要求分析nginx訪問日誌,找出訪問頁面數量在前十位的ip
cat access.log | awk ‘{print $1}’ | uniq -c | sort -rn | head -10
————————————————————————————————————————————————————————————————————————————————————————————————————————
22、使用tcpdump監聽主機爲192.168.1.1,tcp端口爲80的數據,同時將輸出結果保存輸出到tcpdump.log
tcpdump ‘host 192.168.1.1 and port 80’ > tcpdump.log
——————————————————————————————————————————————————————————————————————————————————————————————————————————
23、如何將本地80 端口的請求轉發到8080 端口,當前主機IP 爲192.168.2.1
iptables -A PREROUTING -d 192.168.2.1 -p tcp -m tcp -dport 80 -j DNAT-to-destination 192.168.2.1:8080
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
24、簡述raid0 raid1 raid5 三種工作模式的工作原理及特點
RAID 0:帶區卷,連續以位或字節爲單位分割數據,並行讀/寫於多個磁盤上,因此具有很高的數據傳輸率
但它沒有數據冗餘,RAID 0 只是單純地提高性能,並沒有爲數據的可靠性提供保證
而且其中的一個磁盤失效將影響到所有數據。因此,RAID 0 不能應用於數據安全性要求高的場合
RAID 1:鏡像卷,它是通過磁盤數據鏡像實現數據冗餘,在成對的獨立磁盤上產生互爲備份的數據
不能提升寫數據效率。當原始數據繁忙時,可直接從鏡像拷貝中讀取數據,因此RAID1 可以提高讀取性能
RAID 1 是磁盤陣列中單位成本最高的,鏡像卷可用容量爲總容量的1/2,但提供了很高的數據安全性和可用性
當一個磁盤失效時,系統可以自動切換到鏡像磁盤上讀寫,而不需要重組失效的數據
RAID5:至少由3塊硬盤組成,分佈式奇偶校驗的獨立磁盤結構,它的奇偶校驗碼存在於所有磁盤上
任何一個硬盤損壞,都可以根據其它硬盤上的校驗位來重建損壞的數據(最多允許1塊硬盤損壞)
所以raid5可以實現數據冗餘,確保數據的安全性,同時raid5也可以提升數據的讀寫性能
————————————————————————————————————————————————————————————————————————————————————————————————————————————
25、你對現在運維工程師的理解和以及對其工作的認識
運維工程師在公司當中責任重大,需要保證時刻爲公司及客戶提供最高、最快、最穩定、最安全的服務
運維工程師的一個小小的失誤,很有可能會對公司及客戶造成重大損失
因此運維工程師的工作需要嚴謹及富有創新精神
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
26、實時抓取並顯示當前系統中tcp 80端口的網絡數據信息,請寫出完整操作命令
tcpdump -nn tcp port 80

————————————————————————————————————————————————————————————————————————————————————
27、如何優化 Linux系統(可以不說太具體)?
不用root,添加普通用戶,通過sudo授權管理
更改默認的遠程連接SSH服務端口及禁止root用戶遠程連接
定時自動更新服務器時間
配置國內yum源
關閉selinux及iptables(iptables工作場景如果有外網IP一定要打開,高併發除外)
調整文件描述符的數量
精簡開機啓動服務(crond rsyslog network sshd)
內核參數優化(/etc/sysctl.conf)
更改字符集,支持中文,但建議還是用英文字符集,防止亂碼
鎖定關鍵系統文件
清空/etc/issue,去除系統及內核版本登錄前的屏幕顯示

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
28、Linux系統中病毒怎麼解決
1)最簡單有效的方法就是重裝系統
2)要查的話就是找到病毒文件然後刪除
中毒之後一般機器cpu、內存使用率會比較高
機器向外發包等異常情況,排查方法簡單介紹下
top 命令找到cpu使用率最高的進程
一般病毒文件命名都比較亂,可以用 ps aux 找到病毒文件位置
rm -f 命令刪除病毒文件
檢查計劃任務、開機啓動項和病毒文件目錄有無其他可以文件等
3)由於即使刪除病毒文件不排除有潛伏病毒,所以最好是把機器備份數據之後重裝一下
————————————————————————————————————————————————————————————————————————————————————————————————————————————
29、發現一個病毒文件你刪了他又自動創建怎麼解決
公司的內網某臺linux服務器流量莫名其妙的劇增,用iftop查看有連接外網的情況
針對這種情況一般重點查看netstat連接的外網ip和端口。
用lsof -p pid可以查看到具體是那些進程,哪些文件
經查勘發現/root下有相關的配置conf.n hhe兩個可疑文件,rm -rf後不到一分鐘就自動生成了
由此推斷是某個母進程產生的這些文件。所以找到母進程就是找到罪魁禍首
查殺病毒最好斷掉外網訪問,還好是內網服務器,可以通過內網訪問
斷了內網,病毒就失去外聯的能力,殺掉它就容易的多
怎麼找到呢,找了半天也沒有看到蛛絲馬跡,沒辦法只有ps axu一個個排查
方法是查看可以的用戶和和系統相似而又不是的冒牌貨,果然,看到了如下進程可疑
看不到圖片就是/usr/bin/.sshd
於是我殺掉所有.sshd相關的進程,然後直接刪掉.sshd這個可執行文件
然後才刪掉了文章開頭提到的自動復活的文件
總結一下,遇到這種問題,如果不是太嚴重,儘量不要重裝系統
一般就是先斷外網,然後利用iftop,ps,netstat,chattr,lsof,pstree這些工具順藤摸瓜
一般都能找到元兇。但是如果遇到諸如此類的問題
/boot/efi/EFI/redhat/grub.efi: Heuristics.Broken.Executable FOUND,個人覺得就要重裝系統了
————————————————————————————————————————————————————————————————————————————————————————————————————————
30、說說TCP/IP的七層模型
應用層 (Application):
網絡服務與最終用戶的一個接口。
協議有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
表示層(Presentation Layer):
數據的表示、安全、壓縮。(在五層模型裏面已經合併到了應用層)
格式有,JPEG、ASCll、DECOIC、加密格式等
會話層(Session Layer):
建立、管理、終止會話。(在五層模型裏面已經合併到了應用層)
對應主機進程,指本地主機與遠程主機正在進行的會話
傳輸層 (Transport):
定義傳輸數據的協議端口號,以及流控和差錯校驗。
協議有:TCP UDP,數據包一旦離開網卡即進入網絡傳輸層
網絡層 (Network):
進行邏輯地址尋址,實現不同網絡之間的路徑選擇。
協議有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
數據鏈路層 (Link):
建立邏輯連接、進行硬件地址尋址、差錯校驗等功能。(由底層網絡定義協議)
將比特組合成字節進而組合成幀,用MAC地址訪問介質,錯誤發現但不能糾正
物理層(Physical Layer):
是計算機網絡OSI模型中最低的一層
物理層規定:爲傳輸數據所需要的物理鏈路創建、維持、拆除
而提供具有機械的,電子的,功能的和規範的特性
簡單的說,物理層確保原始的數據可在各種物理媒體上傳輸。局域網與廣域網皆屬第1、2層
物理層是OSI的第一層,它雖然處於最底層,卻是整個開放系統的基礎
物理層爲設備之間的數據通信提供傳輸媒體及互連設備,爲數據傳輸提供可靠的環境
如果您想要用盡量少的詞來記住這個第一層,那就是“信號和介質”
——————————————————————————————————————————————————————————————————————————————————————————————————————————————
31、你常用的Nginx模塊,用來做什麼
rewrite模塊,實現重寫功能
access模塊:來源控制
ssl模塊:安全加密
ngx_http_gzip_module:網絡傳輸壓縮模塊
ngx_http_proxy_module 模塊實現代理
ngx_http_upstream_module模塊實現定義後端服務器列表
ngx_cache_purge實現緩存清除功能
————————————————————————————————————————————————————————————————————————————————————————————————————————————
32、請列出你瞭解的web服務器負載架構
Nginx
Haproxy
Keepalived
LVS
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
33、查看http的併發請求數與其TCP連接狀態
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
還有ulimit -n 查看linux系統打開最大的文件描述符,這裏默認1024
不修改這裏web服務器修改再大也沒用,若要用就修改很幾個辦法,這裏說其中一個:
修改/etc/security/limits.conf
soft nofile 10240
hard nofile 10240
重啓後生效
————————————————————————————————————————————————————————————————————————————————————————————————————————
34、用tcpdump嗅探80端口的訪問看看誰最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."KaTeX parse error: Expected 'EOF', got '}' at position 2: 4}̲'| sort | uniq …ip > /dev/null 2>&1
if [ ?eq0];thenecho192.168.1.? -eq 0 ]; then echo 192.168.1.ip UP
else
echo 192.168.1.KaTeX parse error: Expected 'EOF', got '}' at position 12: ip DOWN fi }̲& done wait ———…(Shift+4)
光標下插入一行:o
複製5行:5yy
刪除10行:10dd
替換::%s/jingfeng/jfedu.net/g
——————————————————————————————————————————————————————————————————————————————————————————————————
4.查找linux系統下以txt結尾,30天沒有修改的文件大小大於20K同時具有執行權限的文件並備份到/data/backup/目錄下。
答:
find / -name *txt -mtime +30 -type f -size +20k -perma= x -exec cp {} /data/backup/ ;
————————————————————————————————————————————————————————————————————————————————————————————————————————
5.當前test.txt所屬的用戶爲root,組爲abc,請將test.txt使擁有者爲abc,組爲root,寫出命令。
答:
chown abc:root test.txt
——————————————————————————————————————————————————————————————————————————————————————————————————
6.如何修改Linux啓動級別爲字符模式並永久生效,如何臨時、永久關閉selinux及防火牆,請分別寫出操作方法。
答:
更改字符模式:修改/etc/inittab一行爲id:3:initdefault:
臨時關閉selinnuxsetenforce0
臨時關閉防火牆iptables-F
永久關閉selinux修改/etc/selinux/config一行爲SELINUX=permissive
永久關閉防火牆 iptables -F; /etc/init.d/iptablessave
———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
7.每次開機在/tmp目錄下創建一個當天的日期文件夾(提示:當前日期表示的方法爲:date+%Y%m%d)
答:
echo “mkdir/tmp/ date+%Y%m%d” >> /etc/rc.d/rc.local
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
8.如何查看文件內容,命令有哪些?查看文件第1行到3行,查看文件最後一行。
答:
查看文件內容:vim、cat、head、tail
查看第1到行:head -3 file
查看最後一行:tail -1 file
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
9.查看linux服務器IP的命令,同時只顯示包含ip所在的行打印出來。
答:
以eth0爲例
只打印所在的行:ifconfig eth0 | grep “inetaddr:”
只打印ip:ifconfig eth0 | grep “inetaddr:” | awk -F: ‘{print$2}’ | awk -F ’ ’ ‘{print$1}’
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
10.將普通用戶test加入root組的命令是?
答:
usermod -G root test

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章