Linux運維經典面試題

什麼是運維?什麼是遊戲

  1. 運維是指大型組織已經建立好的網絡軟硬件的維護,就是要保證業務的上線與運作的正常,在他運轉的過程中,對他進行維護,他集合了網絡、系統、數據庫、開發、安全、監控於一身的技術。運維又包括很多種:有DBA運維、網站運維、虛擬化運維、監控運維、遊戲運維等等
  2. 遊戲運維又有分工,分爲開發運維、應用運維(業務運維)和系統運維
  • 開發運維:是給應用運維開發運維工具和運維平臺的
  • 應用運維:是給業務上線、維護和做故障排除的,用開發運維開發出來的工具給業務上線、維護、做故障排查
  • 系統運維:是給應用運維提供業務上的基礎設施,比如:系統、網絡、監控、硬件等等

總結:開發運維和系統運維給應用運維提供了“工具”和“基礎設施”上的支撐
開發運維、應用運維和系統運維他們的工作是環環相扣的

在工作中,運維人員經常需要跟運營人員打交道,請問運營人員是做什麼工作的?

遊戲運營要做的一個事情除了協調工作以外,還需要與各平臺溝通,做好開服的時間、開服數、用戶導量、活動等計劃

現在給你三百臺服務器,你怎麼對他們進行管理?

管理3百臺服務器的方式:

  1. 設定跳板機,使用統一賬號登錄,便於安全與登錄的考量。
  2. 使用salt、ansiable、puppet進行系統的統一調度與配置的統一管理。
  3. 建立簡單的服務器的系統、配置、應用的cmdb信息管理。便於查閱每臺服務器上的各種信息記錄。

簡述raid0 raid1 raid5 三種工作模式的工作原理及特點

  • RAID,可以把硬盤整合成一個大磁盤,還可以在大磁盤上再分區,放數據
    還有一個大功能,多塊盤放在一起可以有冗餘(備份),RAID整合方式有很多,常用的:0 1 5 10
整合方式 工作原理 特點
raid0 可以是一塊盤和N個盤組合 優點:讀寫快,是RAID中最好的,缺點:沒有冗餘,一塊壞了數據就全沒有了
raid1 只能2塊盤,盤的大小可以不一樣,以小的爲準10G+10G只有10G,另一個做備份 優點:100%的冗餘,缺點:浪費資源,成本高
raid5 3塊盤,容量計算10*(n-1),損失一塊盤 讀寫性能一般,讀還好一點,寫不好
  • 整合方式對比
特點 對比
冗餘從好到壞 RAID1> RAID10> RAID 5> RAID0
性能從好到壞 RAID0 >RAID10 >RAID5> RAID1
成本從低到高 RAID0> RAID5> RAID1> RAID10

單臺服務器:很重要盤不多,系統盤,RAID1
數據庫服務器:主庫:RAID10 從庫 RAID5RAID0(爲了維護成本,RAID10)
WEB服務器:如果沒有太多的數據的話,RAID5,RAID0(單盤)有多臺,監控、應用服務器,RAID0 RAID5
我們會根據數據的存儲和訪問的需求,去匹配對應的RAID級別

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

  • LVS: 是基於四層的轉發

  • HAproxy: 是基於四層和七層的轉發,是專業的代理服務器

  • Nginx: 是WEB服務器,緩存服務器,又是反向代理服務器,可以做七層的轉發

  • 區別:
    LVS由於是基於四層的轉發所以只能做端口的轉發,而基於URL的、基於目錄的這種轉發LVS就做不了

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

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。

Tomcat和Resin有什麼區別,工作中你怎麼選擇?

  • 區別:
    Tomcat用戶數多,可參考文檔多,Resin用戶數少,可考慮文檔少最主要區別則是Tomcat是標準的java容器,不過性能方面比resin的要差一些但穩定性和java程序的兼容性,應該是比resin的要好

  • 工作中選擇:
    現在大公司都是用resin,追求性能;而中小型公司都是用Tomcat,追求穩定和程序的兼容

講一下Keepalived的工作原理?

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

講述一下LVS三種模式的工作過程?

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這種實現方式不需要隧道結構,因此可以使用大多數操作系統做爲物理服務器。
  • 缺點:(不能說缺點,只能說是不足)要求負載均衡器的網卡必須與物理網卡在一個物理段上。

如何重置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;

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;

lvs/nginx/haproxy優缺點

類別 優點 缺點
lvs 1、抗負載能力強、是工作在網絡4層之上僅作分發之用,沒有流量的產生這個特點也決定了它在負載均衡軟件裏的性能最強的,對內存和cpu資源消耗比較低。2、配置性比較低,這是一個缺點也是一個優點,因爲沒有可太多配置的東西 所以並不需要太多接觸,大大減少了人爲出錯的機率。3、工作穩定,因爲其本身抗負載能力很強,自身有完整的雙機熱備方案 如LVS+Keepalived,不過我們在項目實施中用得最多的還是LVS/DR+Keepalived。4、無流量,LVS只分發請求,而流量並不從它本身出去,這點保證了均衡器IO的性能不會收到大流量的影響。5、應用範圍較廣,因爲LVS工作在4層,所以它幾乎可對所有應用做負載均衡,包括http、數據庫、在線聊天室等 1、軟件本身不支持正則表達式處理,不能做動靜分離而現在許多網站在這方面都有較強的需求,這個是Nginx/HAProxy+Keepalived的優勢所。2、如果是網站應用比較龐大的話,LVS/DR+Keepalived實施起來就比較複雜了特別後面有Windows Server的機器的話,如果實施及配置還有維護過程就比較複雜了相對而言,Nginx/HAProxy+Keepalived就簡單多了。
nginx 1、工作在網絡的7層之上,可以針對http應用做一些分流的策略,比如針對域名、目錄結構它的正則規則比HAProxy更爲強大和靈活,這也是它目前廣泛流行的主要原因之一Nginx單憑這點可利用的場合就遠多於LVS了。2、Nginx對網絡穩定性的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢之一相反LVS對網絡穩定性依賴比較大,這點本人深有體會。3、Nginx安裝和配置比較簡單,測試起來比較方便,它基本能把錯誤用日誌打印出來,LVS的配置、測試就要花比較長的時間了,LVS對網絡依賴比較大。4、Nginx也可作爲靜態網頁和圖片服務器,這方面的性能也無對手。還有Nginx社區非常活躍,第三方模塊也很多。5、Nginx現在作爲Web反向加速緩存越來越成熟了,速度比傳統的Squid服務器更快,可考慮用其作爲反向代理加速器。 1、Nginx僅能支持http、https和Email協議,這樣就在適用範圍上面小些,這個是它的缺點2、對後端服務器的健康檢查,只支持通過端口來檢測,不支持通過url來檢測不支持Session的直接保持,但能通過ip_hash來解決LVS:使用Linux內核集羣實現一個高性能、高可用的負載均衡服務器,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)
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請求。

統計ip訪問情況,要求分析nginx訪問日誌,找出訪問頁面數量在前十位的ip

cat access.log | awk '{print $1}' | uniq -c | sort -rn | head -10

使用tcpdump監聽主機爲192.168.1.1,tcp端口爲80的數據,同時將輸出結果保存輸出到tcpdump.log

tcpdump 'host 192.168.1.1 and port 80' > tcpdump.log

如何將本地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

實時抓取並顯示當前系統中tcp 80端口的網絡數據信息,請寫出完整操作命令

tcpdump -nn tcp port 80

用tcpdump嗅探80端口的訪問看看誰最高

tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}'| sort | uniq -c | sort -nr |head -20

寫一個腳本,實現判斷192.168.1.0/24網絡裏,當前在線的IP有哪些,能ping通則認爲在線

#!/bin/bash
for ip in `seq 1 255`
do
{
ping -c 1 192.168.1.$ip > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo 192.168.1.$ip UP
else
echo 192.168.1.$ip DOWN
fi
}&
done
wait

請執行命令取出 linux 中 eth0 的 IP 地址(請用 cut,有能力者也可分別用 awk,sed 命令

cut方法1:
# ifconfig eth0|sed -n '2p'|cut -d ":" -f2|cut -d " " -f1
192.168.20.130

awk方法2:
# ifconfig eth0|awk 'NR==2'|awk -F ":" '{print $2}'|awk '{print $1}'
192.168.20.130

awk多分隔符方法3:
# ifconfig eth0|awk 'NR==2'|awk -F "[: ]+" '{print $4}'
192.168.20.130

sed方法4:
# ifconfig eth0|sed -n '/inet addr/p'|sed -r 's#^.*ddr:(.*)Bc.*$##g'
192.168.20.130

每天晚上 12 點,打包站點目錄/var/www/html 備份到/data 目錄下(最好每次備份按時間生成不同的備份包)

# cat a.sh 
#/bin/bash
cd /var/www/ && /bin/tar zcf /data/html-`date +%m-%d%H`.tar.gz html/
# crontab –e
00 00 * * * /bin/sh /root/a.sh
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章