面試準備題型

N45-李陽發表於2020-10-14

1.資料庫如何自動備份

寫一個備份指令碼,把日期和備份路徑設定為變數,通過mysqldump命令進行資料庫備份工作,然後用crontab命令做計劃任務定時執行

2.監控平臺zabbix做過哪些操作

繫結agentd主機到zabbix上,監控伺服器的CPU,記憶體,磁碟IO等基礎專案

3.三次握手和四次揮手過程

第一次握手,就是客戶機傳送一個報文給伺服器,然後客戶機進入SYN_SENT狀態
第二次握手,就是伺服器端收到客戶端傳送的報文,然後傳送確認連線請求的報文給客戶端,然後伺服器進入SYN_RCVD狀態
第三次握手,客戶端接收到報文後,檢查報文標誌位是否正確,正確的話把標誌位+1再傳送給伺服器,伺服器檢查標誌位正確後,進入連線狀態,就可以傳輸資料了

第一次揮手:客戶端傳送一個FIN,用來關閉客戶端到伺服器的資料傳送,客戶端進入FIN_WAIT_1狀態。
第二次揮手:伺服器收到FIN後,傳送一個ACK給客戶端,確認序號為收到序號+1(與SYN相同,一個FIN佔用一個序號),伺服器進入CLOSE_WAIT狀態。
第三次揮手:伺服器傳送一個FIN,用來關閉Server到客戶端的資料傳送,Server進入LAST_ACK狀態。
第四次揮手:客戶端收到FIN後,客戶端進入TIME_WAIT狀態,接著傳送一個ACK給伺服器,確認序號為收到序號+1,Server進入CLOSED狀態,完成四次揮手。

為什麼建立連線協議是三次握手,而關閉連線卻是四次握手呢?

這是因為服務端的LISTEN狀態下的SOCKET當收到SYN報文的建連請求後,它可以把ACK和SYN(ACK起應答作用,而SYN起同步作用)放在一個報文裡來傳送。但關閉連線時,當收到對方的FIN報文通知時,它僅僅表示對方沒有資料傳送給你了;但未必你所有的資料都全部傳送給對方了,所以你可以未必會馬上會關閉SOCKET,也即你可能還需要傳送一些資料給對方之後,再傳送FIN報文給對方來表示你同意現在可以關閉連線了,所以它這裡的ACK報文和FIN報文多數情況下都是分開傳送的.

為什麼TIME_WAIT狀態還需要等2MSL後才能返回到CLOSED狀態?

這是因為雖然雙方都同意關閉連線了,而且握手的4個報文也都協調和傳送完畢,按理可以直接回到CLOSED狀態(就好比從SYN_SEND狀態到ESTABLISH狀態那樣);但是因為我們必須要假想網路是不可靠的,你無法保證你最後傳送的ACK報文會一定被對方收到,因此對方處於LAST_ACK狀態下的SOCKET可能會因為超時未收到ACK報文,而重發FIN報文,所以這個TIME_WAIT狀態的作用就是用來重發可能丟失的ACK報文。

4.mysql的sql語句怎麼優化

1.把常用欄位設為索引
2.欄位種類儘可能用int或者tinyint,儘可能用NOT null
3.select * 儘量少用,用什麼欄位就select什麼欄位
4.不要輕易使用order by rand()
5.只有一行資料儘量使用limit 1

5.NGINX負載均衡模式

1、輪詢(預設)
每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。
2、指定權重
指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。
3、IP繫結 ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。
4、fair(第三方)
按後端伺服器的響應時間來分配請求,響應時間短的優先分配。
5、url_hash(第三方)
按訪問url的hash結果來分配請求,使每個url定向到同一個後端伺服器,後端伺服器為快取時比較有效。

6.工作中遇到的問題

資料庫主從中斷,從資料庫平時當熱備份不去管它,但是一次偶然發現從資料庫的資料有五六天沒更新了,然後show slave status 發現錯誤資訊是連不上主伺服器,然後ping了一下果然不通了,檢查了一下iptables,也沒特別的問題,最後重啟了一下網路,突然就網路正常了,然後立即stop slave和start slave。

7.LVS演算法

靜態排程
RR(Round Robin):輪詢排程
輪詢排程演算法的原理是每一次把來自使用者的請求輪流分配給內部中的伺服器,從1開始,直到N(內部伺服器個數),然後重新開始迴圈。演算法的優點是其簡潔性,它無需記錄當前所有連線的狀態,所以它是一種無狀態排程。
WRR( Weighted Round Robin ):加權輪詢
由於每臺伺服器的配置、安裝的業務應用等不同,其處理能力會不一樣。所以,我們根據伺服器的不同處理能力,給每個伺服器分配不同的權值,使其能夠接受相應權值數的服務請求。
DH(Destination hashing):目標地址雜湊。
目標地址雜湊排程演算法是針對目標IP地址的負載均衡,它是一種靜態對映演算法,通過一個雜湊(Hash)函式將一個目標IP地址對映到一臺伺服器。目標地址雜湊排程演算法先根據請求的目標IP地址,作為雜湊鍵(Hash Key)從靜態分配的雜湊表找出對應的伺服器,若該伺服器是可用的且未超載,將請求傳送到該伺服器,否則返回空。
SH(Source Hashing):源地址雜湊。
源地址雜湊排程演算法正好與目標地址雜湊排程演算法相反,它根據請求的源IP地址,作為雜湊鍵(Hash Key)從靜態分配的雜湊表找出對應的伺服器,若該伺服器是可用的並且沒有超負荷,將請求傳送到該伺服器,否則返回空。它採用的雜湊函式與目標地址雜湊排程演算法的相同。

動態排程
LC(Least-Connection):最少連線
最少連線排程演算法是把新的連線請求分配到當前連線數最小的伺服器,最小連線排程是一種動態排程短演算法,它通過伺服器當前所活躍的連線數來估計伺服器的負載均衡,排程器需要記錄各個伺服器已建立連線的數目,當一個請求被排程到某臺伺服器,其連線數加1,當連線中止或超時,其連線數減一,在系統實現時,我們也引入當伺服器的權值為0時,表示該伺服器不可用而不被排程。
簡單演算法:active*256+inactive(誰的小,挑誰)

WLC(Weighted Least-Connection Scheduling):加權最少連線。
加權最小連線排程演算法是最小連線排程的超集,各個伺服器用相應的權值表示其處理效能。伺服器的預設權值為1,系統管理員可以動態地設定伺服器的許可權,加權最小連線排程在排程新連線時儘可能使伺服器的已建立連線數和其權值成比例。
簡單演算法:(active*256+inactive)/weight(活動的連線數+1)/除以權重(誰的小,挑誰)

SED(Shortest Expected Delay):最短期望延遲
簡單演算法:(active+1)*256/weight (活動的連線數+1)*256/除以權重
舉例:ABC三臺機器分別權重1、2、3 ,活動連線數也分別是1、2、3。那麼如果使用WLC演算法的話一個新請求進入時它可能會分給ABC中的任意一個。使用sed演算法後會進行這樣一個運算
A(1+1)/1
B(1+2)/2
C(1+3)/3
根據運算結果,把連線交給C 。

NQ(never queue):永不排隊(改進的sed)
無需佇列,如果有臺realserver的連線數=0就直接分配過去,不需要在進行sed運算。

LBLC(Locality-Based Least Connection):基於區域性性的最少連線
基於區域性性的最少連線演算法是針對請求報文的目標IP地址的負載均衡排程,目前主要用於Cache叢集系統,因為Cache叢集中客戶請求報文的布標IP地址是變化的,這裡假設任何後端伺服器都可以處理任何請求,演算法的設計目標在伺服器的負載基本平衡的情況下,將相同的目標IP地址的請求排程到同一個臺伺服器,來提高個太伺服器的訪問區域性性和主存Cache命中率,從而調整整個叢集系統的處理能力。
基 於區域性性的最少連線排程演算法根據請求的目標IP地址找出該目標IP地址最近使用的RealServer,若該Real Server是可用的且沒有超載,將請求傳送到該伺服器;若伺服器不存在,或者該伺服器超載且有伺服器處於一半的工作負載,則用“最少連結”的原則選出一個可用的伺服器,將請求傳送到該伺服器。

LBLCR(Locality-Based Least Connections withReplication):帶複製的基於區域性性最少連結
帶複製的基於區域性性最少連結排程演算法也是針對目標IP地址的負載均衡,該演算法根據請求的目標IP地址找出該目標IP地址對應的伺服器組,按“最小連線”原則從伺服器組中選出一臺伺服器,若伺服器沒有超載,將請求傳送到該伺服器;若伺服器超載,則按“最小連線”原則從這個叢集中選出一臺伺服器,將該伺服器加入到伺服器組中,將請求傳送到該伺服器。同時,當該伺服器組有一段時間沒有被修改,將最忙的伺服器從伺服器組中刪除,以降低複製的程度。

8.IPTABLES拉黑某個IP

iptables -A INPUT -s 172.16.1.0/24 -j DROP

9.解釋一下什麼是Nginx

Ngine X,是一款免費的、自由的、開源的、高效能HTTP伺服器和反向代理伺服器;也是一個IMAP、POP3、SMTP代理伺服器;Nginx以其高效能、穩定性、豐富的功能、簡單的配置和低資源消耗而聞名。

也就是說Nginx本身就可以託管網站(類似於Tomcat一樣),進行Http服務處理,也可以作為反向代理伺服器 、負載均衡器和HTTP快取。

10.nginx的url跳轉

server {
listen 80;
listen 443 ssl;
server_name www.alibaba.cn;

#全跳轉
#rewrite ^(.*)$ http://www.baidu.com/ permanent;

#部分跳轉
if ($request_uri ~*^/adminhx/.*) {
set KaTeX parse error: Expected 'EOF', got '}' at position 13: flag '1'; }̲ if (flag !~1) {
rewrite ^/$ http://www.baidu.com/ last;
}

11.NGINX的防盜鏈


location ~* ^.+\.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {
    valid_referers none blocked  www.benet.com benet.com;
    if ($invalid_referer) {
       #return 302  http://www.benet.com/img/nolink.jpg;
       return 404;
       break;
     }
     access_log off;

12.資料庫主從複製

1.主伺服器建立一個複製用的賬號REPLICATION並賦予許可權,然後再主伺服器上資料庫的my.cnf裡配置節點ID以及開啟log-bin並指定位置
2.配置從節點的my.cnf,節點ID和主資料庫不同,也可以開啟log-bin,最好開啟只讀
3.主資料庫執行show master status檢視當前的bin-log日誌的位置點
4.從伺服器連線到資料庫,執行資料庫複製的語句,然後start slave即可

13.nginx優化

1.Nginx執行工作程式個數,一般我們設定CPU的核心或者核心數x2
2.worker_processes和worker_cpu_affinity可以按照伺服器的CPU核心數和執行緒數進行修改,不過worker_cpu_affinity不要超過8個,8個以上效能不會提升,還可能不穩定
3.multi_accept開啟,每個woker程式可以同時接受所有新的網路連線
4.work_connections是單個worker程式允許客戶端最大連線數,一般改成65535足夠了
5.nginx採用epoll事件模型,處理效率高
6.accept_mutex on由各個worker輪流處理新請求,預設設定比較影響效能
7.keepalived_timeout 客戶端連線保持會話超時時間改為60s左右,超出則斷開連線
8.連線超時時間的一系列調優
9.fastcgi調優
10.gzip調優
11.最大開啟檔案數limit從預設的1024改成65535

相關文章