2、灰度發布如何實現?
筆者回答:其實對這個問題筆者也答的不好,就不寫出來誤導大家了。大家有好的方法可以共享出來。不過筆事后在知呼上看到了一位網友的建議覺得不錯,大家可以參考看一下 :https://www.zhihu.com/question/20584476
3、Mongodb熟悉嗎,一般部署幾台?
筆者回答:部署過,沒有深入研究過,一般mongodb部署主從、或者mongodb分片集群;建議3台或5台服務器來部署。MongoDB分片的基本思想就是將集合切分成小塊。這些塊分散到若干片里面,每個片只負責總數據的一部分。 對於客戶端來說,無需知道數據被拆分了,也無需知道服務端哪個分片對應哪些數據。數據在分片之前需要運行一個路由進程,進程名為mongos。這個路由器知道所有數據的存放位置,知道數據和片的對應關系。對客戶端來說,它僅知道連接了一個普通的mongod,在請求數據的過程中,通過路由器上的數據和片的對應關系,路由到目標數據所在的片上,如果請求有了回應,路由器將其收集起來回送給客戶端。
4、如何發布和回滾,用jenkins又是怎么實現?
筆者回答:發布:jenkins配置好代碼路徑(SVN或GIT),然后拉代碼,打tag。需要編譯就編譯,編譯之后推送到發布服務器(jenkins里面可以調腳本),然后從分發服務器往下分發到業務服務器上。
回滾:按照版本號到發布服務器找到對應的版本推送
5、Tomcat工作模式?
筆者回答:Tomcat是一個JSP/Servlet容器。其作為Servlet容器,有三種工作模式:獨立的Servlet容器、進程內的Servlet容器和進程外的Servlet容器。
進入Tomcat的請求可以根據Tomcat的工作模式分為如下兩類:
Tomcat作為應用程序服務器:請求來自於前端的web服務器,這可能是Apache, IIS, Nginx等;
Tomcat作為獨立服務器:請求來自於web瀏覽器;
6、監控用什么實現的?
筆者回答:現在公司的業務都跑在阿里雲上,我們首選的監控就是用阿里雲監控,阿里雲監控自帶了ECS、RDS等服務的監控模板,可結合自定義報警規則來觸發監控項。上家公司的業務是托管在IDC,用的是zabbix監控方案,zabbix圖形界面豐富,也自帶很多監控模板,特別是多個分區、多個網卡等自動發現並進行監控做得非常不錯,不過需要在每台客戶機(被監控端)安裝zabbix agent。
7、你是怎么備份數據的,包括數據庫備份?
筆者回答:在生產環境下,不管是應用數據、還是數據庫數據首先在部署的時候就會有主從架構、或者集群,這本身就是屬於數據的熱備份;其實考慮冷備份,用專門一台服務器做為備份服務器,比如可以用rsync+inotify配合計划任務來實現數據的冷備份,如果是發版的包備份,正常情況下有台發布服務器,每次發版都會保存好發版的包。
總結一下面試注意幾點事項,可能筆者也說得不太對,為了我們運維工作的兄弟們都能拿到高薪,大家一定要指證出來一起進步、一起探討:
第一,你要對自己的簡歷很熟悉,簡歷上的寫的技能自己一定要能說出個一二,因為面試官的很多問題都會挑你簡歷上寫的問。比如你簡歷上寫了這么一條技能“熟悉mysql數據庫的部署安裝及原理”。你即然寫了這么一條技能,你在怎么不熟悉你也要了解mysql的原理,能說出個大概意思。萬一面試官問到了你寫的這一條,你都答不上來,那在他心里你又減分了,基本上這次面試希望不大。
第二,如果面試官問到你不會的問題,你就說這個不太熟悉,沒有具體研究過,千萬別不懂裝懂,還扯一堆沒用的話題來掩飾,這樣只會讓面試官反感你。
第三,准備充分,竟可能多的記住原理性的知識,一般面試問的多的就是原理。很少問具體的配置文件是怎么配置的。面試前也要了解清楚“職位描述”和“崗位要求”,雖然有時候大多數不會問到崗位要求的問題,但也要了解和熟悉。
第四,面試完后一定要總結,盡量記住面試官問的每一個問題,回去記錄下來,如果問到不會的問題,事后要立馬查百度或者找朋友搞清楚、弄明白,這樣你才能記勞,下次面試說不定又問到同樣的問題。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面是這家公司中的崗位要求說明:
崗位職責:
1、負責公司產品的版本控制、構建和發布管理;
2、負責公司統一配置庫管理工作,權限管理與分配准確及時,定期完成配置備份;
3、負責公司內部開發/測試服務器的運行管理工作;
4、負責Linux操作系統的安裝、配置、監控和維護、問題處理、軟件升級、 數據備份、應急響應、故障排除等、保證線上環境的穩定運行;
5、負責支撐平台24×7穩定運行,並進行前瞻性容量規划;
6、負責公司機房服務器日常維護及網絡系統安裝、部署、維護工作。
崗位要求:
1、計算機相關專業本科及以上學歷,2年以上運維或配置管理工作經驗;
2、至少熟悉一種監控系統搭建,如Nagios/Zabbix/等;
3、至少熟悉一種集群管理工具,如Ansible/SaltStack等;
4、有使用集成發布工具發布構建經驗優先。比如:bamboo或者Jenkins;
5、熟悉Unix/Linux操作系統,熟悉Weblogic/tomcat等中間件,能夠編寫shell腳本,熟悉軟件開發過程及過程產品,有一定的網絡基礎;
6、熟悉rsyslog, flume等日志收集和處理系統;
7、具有強烈的安全意識及較強的溝通協調和學習能力,良好的團隊合作精神,工作積極主動。
問我應該有不下10個以上的問題,我記住了下面有10個問題:
1、LVS負載的原理,和Nginx負載有啥區別?
筆者回答:這個問題我覺得面試官司沒問好,正常都會這么問“LVS有哪些負載均衡技術和調度算法?"。我回答就是按我說的這種問法回答的,反正他也頻繁點頭,當然,筆者回答的可能沒有下面我整理出來的那么詳細,大概意思我都說明白了。
LVS是Liunx虛擬服務器的簡稱,利用LVS提供的負載均衡技術和linux操作系統可實現高性能、高可用的服務器集群,一般LVS都是位於整個集群系統的最前端,由一台或者多台負載調度器(Director Server)組成,分發給應用服務器(Real Server)。它是工作在4層(也就是TCP/IP中的傳輸層),LVS是基於IP負載均衡技術的IPVS模塊來實現的,IPVS實現負載均衡機制有三種,分別是NAT、TUN和DR,詳述如下:
VS/NAT: 即(Virtual Server via Network Address Translation)
也就是網絡地址翻譯技術實現虛擬服務器,當用戶請求到達調度器時,調度器將請求報文的目標地址(即虛擬IP地址)改寫成選定的Real Server地址,同時報文的目標端口也改成選定的Real Server的相應端口,最后將報文請求發送到選定的Real Server。在服務器端得到數據后,Real Server返回數據給用戶時,需要再次經過負載調度器將報文的源地址和源端口改成虛擬IP地址和相應端口,然后把數據發送給用戶,完成整個負載調度過程。
可以看出,在NAT方式下,用戶請求和響應報文都必須經過Director Server地址重寫,當用戶請求越來越多時,調度器的處理能力將稱為瓶頸。
VS/TUN :即(Virtual Server via IP Tunneling)
也就是IP隧道技術實現虛擬服務器。它的連接調度和管理與VS/NAT方式一樣,只是它的報文轉發方法不同,VS/TUN方式中,調度器采用IP隧道技術將用戶請求轉發到某個Real Server,而這個Real Server將直接響應用戶的請求,不再經過前端調度器,此外,對Real Server的地域位置沒有要求,可以和Director Server位於同一個網段,也可以是獨立的一個網絡。因此,在TUN方式中,調度器將只處理用戶的報文請求,集群系統的吞吐量大大提高。
VS/DR: 即(Virtual Server via Direct Routing)
也就是用直接路由技術實現虛擬服務器。它的連接調度和管理與VS/NAT和VS/TUN中的一樣,但它的報文轉發方法又有不同,VS/DR通過改寫請求報文的MAC地址,將請求發送到Real Server,而Real Server將響應直接返回給客戶,免去了VS/TUN中的IP隧道開銷。這種方式是三種負載調度機制中性能最高最好的,但是必須要求Director Server與Real Server都有一塊網卡連在同一物理網段上。
回答負載調度算法,IPVS實現在八種負載調度算法,我們常用的有四種調度算法(輪叫調度、加權輪叫調度、最少鏈接調度、加權最少鏈接調度)。一般說了這四種就夠了,也不會需要你詳細解釋這四種算法的。你只要把上面3種負載均衡技術講明白面試官就對這道問題很滿意了。接下來你在簡單說下與nginx的區別:
LVS的優點:
-
抗負載能力強、工作在第4層僅作分發之用,沒有流量的產生,這個特點也決定了它在負載均衡軟件里的性能最強的;無流量,同時保證了均衡器IO的性能不會受到大流量的影響;
-
工作穩定,自身有完整的雙機熱備方案,如LVS+Keepalived和LVS+Heartbeat;
-
應用范圍比較廣,可以對所有應用做負載均衡;
-
配置性比較低,這是一個缺點也是一個優點,因為沒有可太多配置的東西,所以並不需要太多接觸,大大減少了人為出錯的幾率。
LVS的缺點:
-
軟件本身不支持正則處理,不能做動靜分離,這就凸顯了Nginx/HAProxy+Keepalived的優勢。
-
如果網站應用比較龐大,LVS/DR+Keepalived就比較復雜了,特別是后面有Windows Server應用的機器,實施及配置還有維護過程就比較麻煩,相對而言,Nginx/HAProxy+Keepalived就簡單一點
Nginx的優點:
-
工作在OSI第7層,可以針對http應用做一些分流的策略。比如針對域名、目錄結構。它的正則比HAProxy更為強大和靈活;
-
Nginx對網絡的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢所在;
-
Nginx安裝和配置比較簡單,測試起來比較方便;
-
可以承擔高的負載壓力且穩定,一般能支撐超過幾萬次的並發量;
-
Nginx可以通過端口檢測到服務器內部的故障,比如根據服務器處理網頁返回的狀態碼、超時等等,並且會把返回錯誤的請求重新提交到另一個節點;
-
Nginx不僅僅是一款優秀的負載均衡器/反向代理軟件,它同時也是功能強大的Web應用服務器。LNMP現在也是非常流行的web環境,大有和LAMP環境分庭抗禮之勢,Nginx在處理靜態頁面、特別是抗高並發方面相對apache有優勢;
-
Nginx現在作為Web反向加速緩存越來越成熟了,速度比傳統的Squid服務器更快,有需求的朋友可以考慮用其作為反向代理加速器;
Nginx的缺點:
-
Nginx不支持url來檢測。
-
Nginx僅能支持http和Email,這個它的弱勢。
-
Nginx的Session的保持,Cookie的引導能力相對欠缺。
2、redis集群的原理,redis分片是怎么實現的,你們公司redis用在了哪些環境?
筆者回答:reids集群原理:
其實它的原理不是三兩句話能說明白的,redis 3.0版本之前是不支持集群的,官方推薦最大的節點數量為1000,至少需要3(Master)+3(Slave)才能建立集群,是無中心的分布式存儲架構,可以在多個節點之間進行數據共享,解決了Redis高可用、可擴展等問題。集群可以將數據自動切分(split)到多個節點,當集群中的某一個節點故障時,redis還可以繼續處理客戶端的請求。
redis分片:
分片(partitioning)就是將你的數據拆分到多個 Redis 實例的過程,這樣每個實例將只包含所有鍵的子集。當數據量大的時候,把數據分散存入多個數據庫中,減少單節點的連接壓力,實現海量數據存儲。分片部署方式一般分為以下三種:
(1)在客戶端做分片;這種方式在客戶端確定要連接的redis實例,然后直接訪問相應的redis實例;
(2)在代理中做分片;這種方式中,客戶端並不直接訪問redis實例,它也不知道自己要訪問的具體是哪個redis實例,而是由代理轉發請求和結果;其工作過程為:客戶端先將請求發送給代理,代理通過分片算法確定要訪問的是哪個redis實例,然后將請求發送給相應的redis實例,redis實例將結果返回給代理,代理最后將結果返回給客戶端。
(3)在redis服務器端做分片;這種方式被稱為“查詢路由”,在這種方式中客戶端隨機選擇一個redis實例發送請求,如果所請求的內容不再當前redis實例中它會負責將請求轉交給正確的redis實例,也有的實現中,redis實例不會轉發請求,而是將正確redis的信息發給客戶端,由客戶端再去向正確的redis實例發送請求。
redis用在了哪些環境:
java、php環境用到了redis,主要緩存有登錄用戶信息數據、設備詳情數據、會員簽到數據等
3、你會怎么統計當前訪問的IP,並排序?
筆者回答:統計用戶的訪問IP,用awk結合uniq、sort過濾access.log日志就能統計並排序好。一般這么回答就夠了,當然你還可以說出其它方式來統計,這都是你的加分項。
4、你會使用哪些虛擬化技術?
筆者回答:vmware vsphere及kvm,我用得比較多的是vmware vsphere虛擬化,幾本上生產環境都用的vmware vsphere,kvm我是用在測試環境中使用。vmware 是屬於原生架構虛擬化技術,也就是可直接在硬件上運行。kvm屬於寄居架構的虛擬化技術,它是依托在系統之上運行。vmware vcenter管理上比較方便,圖形管理界面功能很強大,穩定性強,一般比較適合企業使用。KVM管理界面稍差點,需要管理人員花費點時間學習它的維護管理技術。
5、假如有人反應,調取后端接口時特別慢,你會如何排查?
問清楚反應的人哪個服務應用或者頁面調取哪個接口慢,叫他把頁面或相關的URL發給你,首先,最直觀的分析就是用瀏覽器按F12,看下是哪一塊的內容過慢(DNS解析、網絡加載、大圖片、還是某個文件內容等),如果有,就對症下葯去解決(圖片慢就優化圖片、網絡慢就查看內網情況等)。其次,看后端服務的日志,其實大多數的問題看相關日志是最有效分析,最好用tail -f 跟蹤一下日志,當然你也要點擊測試來訪問接口日志才會打出來。最后,排除sql,找到sql去mysql執行一下,看看時間是否很久,如果很久,就要優化SQL問題了,expain一下SQL看看索引情況啥的,針對性優化。數據量太大的能分表就分表,能分庫就分庫。如果SQL沒啥問題,那可能就是寫的邏輯代碼的問題了,一行行審代碼,找到耗時的地方改造,優化邏輯。
6、mysql數據庫用的是主從讀寫分離,主庫寫,從庫讀,假如從庫無法讀取了、或者從庫讀取特別慢,你會如何解決?
筆者回答:這個問題筆者覺得回答的不太好,對mysql比較在行的朋友希望能給點建議。以解決問題為前提條件,先添加從庫數量,臨時把問題給解決,然后抓取slow log ,分析sql語句,該優化就優化處理。慢要不就是硬件跟不上,需要升級;要不就是軟件需要調試優化,等問題解決在細化。
7、cpu單核和多核有啥區別?
雙核CPU就是能處理多份任務,順序排成隊列來處理。單核CPU一次處理一份任務,輪流處理每個程序任務。雙核的優勢不是頻率,而是對付同時處理多件事情。單核同時只能干一件事,比如你同時在后台BT下載,前台一邊看電影一邊拷貝文件一邊QQ。
8、機械磁盤和固態硬盤有啥區別?
HDD代表機械硬盤,SSD代表固態硬盤。首先,從性能方面來說,固態硬盤幾乎完勝機械硬盤,固態硬盤的讀寫速度肯定要快機械硬盤,因為固態硬盤和機械硬盤的構造是完全不同的(具體的構造就沒必要解釋了)。其次,固態盤幾乎沒有噪音、而機械盤噪音比較大。還有就是,以目前的市場情況來看,一般機械盤容量大,價格低;固態盤容量小,價格偏高。但是企業還是首選固態盤。
9、說一下用過哪些監控系統?
筆者回答:這個監控的問題又問到了,筆者在2018年1月4號也被問到類似這樣的問題,筆者曾經用過zabbix、nagios、 cacit等。但是在這次面試中只說用過zabbix和nagios。說完了之后,面試官就讓我說一下這兩個監控有啥區別:
從web功能及畫圖來講:
Nagios簡單直觀,報警與數據都在同一頁面, 紅色即為問題項。Nagios web端不要做任何配置。 Nagios需要額外安裝插件,且插件畫圖不夠美觀。
Zabbix監控數據與報警是分開的,查看問題項需要看觸發器,查看數據在最新數據查看。而且zabbix有很多其它配置項, zabbix攜帶畫圖功能,且能手動把多個監控項集在一個圖中展示。
從監控服務來講:
Nagios自帶的監控項很少。對一些變動的如多個分區、多個網卡進行監控時需要手動配置。
Zabbix自帶了很多監控內容,感覺zabbix一開始就為你做了很多事,特別是對多個分區、多個網卡等自動發現並進行監控時,那一瞬間很驚喜,很省心的感覺。
從批量配置和報警來講:
Nagios對於批量監控主機,需要用腳本在server端新增host,並拷貝service文件。 Nagios用腳本來修改所有主機的services文件,加入新增服務。
Zabbix在server端配置自動注冊規則,配置好規則后,后續新增client端不需要對server端進行操作。 Zabbix只需手動在模板中新增一監控項即可。
總體來講:
Nagios要花很多時間寫插件,Zabbix要花很多時間探索功能。
Nagios更易上手,Nagios兩天弄會,Zabbix兩周弄會。
Zabbix畫圖功能比Nagios更強大
Zabbix對於批量監控與服務更改,操作更簡潔;Nagios如果寫好自動化腳本后,也很簡單,問題在於寫自動化腳本很費神。
10、給你一套環境,你會如何設計高可用、高並發的架構?
筆者回答:
如果這套環境是部署在雲端(比如阿里雲),你就不用去考慮硬件設計的問題。可直接上阿里雲的SLB+ECS+RDS這套標准的高可用、高並發的架構。對外服務直接上SLB負載均衡技術,由阿里的SLB分發到后端的ECS主機;ECS主機部署多台,應用拆分在不同的ECS主機上,盡量細分服務。數據庫用RDS高可用版本(一主一備的經典高可用架構)、或者用RDS金融版(一主兩備的三節點架構)。在結合阿里其它的服務就完全OK,業務量上來了,主機不夠用了,直橫向擴容ECS主機搞定。
如果這套環境托管在IDC,那么你就要從硬件、軟件(應用服務)雙面去考慮了。硬件要達到高可用、高並發公司必須買多套網絡硬件設備(比如負載設備F5、防火牆、核心層交換、接入層交換)都必須要冗余,由其是在網絡設計上,設備之間都必須有雙線連接。設備如果都是跑的單機,其中一個設備掛了,你整個網絡都癱瘓了,就談不上高可用、高並發了。其次在是考慮應用服務了,對外服務我會采用成熟的開源方案LVS+Keepalived或者Nginx+Keepalived,緩存層可以考慮redis集群及Mongodb集群,中間件等其它服務可以用kafka、zookeeper,圖片存儲可以用fastDFS或MFS,如果數據量大、又非常多,那么可采用hadoop這一套方案。后端數據庫可采用 “主從+MHA”。這樣一套環境下來是絕對滿足高可用、高並發的架構。
本文轉載自:http://blog.51cto.com/ganbing/2057482