常見面試題總結,數據庫、監控、網路管理

2020-08-12 10:10:42

數據庫

簡述NoSQL是什麼?

NoSQL,指的是非關係型的數據庫。NoSQL 有時也稱作 Not Only SQL(意即"不僅僅是SQL") 的縮寫,其顯著特點是不使用SQL作爲查詢語言,數據儲存不需要特定的表格模式。

簡述NoSQL(非關係型)數據庫和SQL(關係型)數據庫的區別?

NoSQL和SQL的主要區別有如下區別:

  • 儲存方式:

    • 關係型數據庫是表格式的,因此儲存在表的行和列中。他們之間很容易關聯共同作業儲存,提取數據很方便。
    • NoSQL數據庫則與其相反,它是大塊的組合在一起。通常儲存在數據集中,就像文件、鍵值對或者圖結構。
  • 儲存結構

    • 關係型數據庫對應的是結構化數據,數據表都預先定義了結構(列的定義),結構描述了數據的形式和內容。預定義結構帶來了可靠性和穩定性,但是修改這些數據比較困難。
    • NoSQL數據庫基於動態結構,使用與非結構化數據。由於NoSQL數據庫是動態結構,可以很容易適應數據型別和結構的變化。
  • 儲存規範

    • 關係型數據庫的數據儲存爲了更高的規範性,把數據分割爲最小的關係表以避免重複,獲得精簡的空間利用。
    • NoSQL數據儲存在平面數據集中,數據經常可能會重複。單個數據庫很少被分隔開,而是儲存成了一個整體,這樣整塊數據更加便於讀寫 。
  • 儲存擴充套件

    • 關係型數據庫數據儲存在關係表中,操作的效能瓶頸可能涉及到多個表,需要通過提升計算機效能來克服,因此更多是採用縱向擴充套件
    • NoSQL數據庫是橫向擴充套件的,它的儲存天然就是分佈式的,可以通過給資源池新增更多的普通數據庫伺服器來分擔負載。
  • 查詢方式

    • 關係型數據庫通過結構化查詢語言來操作數據庫(即通常說的SQL)。SQL支援數據庫CURD操作的功能非常強大,是業界的標準用法。
    • NoSQL查詢以塊爲單元操作數據,使用的是非結構化查詢語言(UnQl),它是沒有標準的。
    • 關係型數據庫表中主鍵的概唸對應NoSQL中儲存文件的ID。
    • 關係型數據庫使用預定義優化方式(比如索引)來加快查詢操作,而NoSQL更簡單更精確的數據存取模式。
  • 事務

    • 關係型數據庫遵循ACID規則(原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、永續性(Durability))。
    • NoSQL數據庫遵循BASE原則(基本可用(Basically Availble)、軟/柔性事務(Soft-state )、最終一致性(Eventual Consistency))。
    • 由於關係型數據庫的數據強一致性,所以對事務的支援很好。關係型數據庫支援對事務原子性細粒度控制,並且易於回滾事務。
    • NoSQL數據庫是在CAP(一致性、可用性、分割區容忍度)中任選兩項,因爲基於節點的分佈式系統中,不可能同時全部滿足,所以對事務的支援不是很好。

簡述NoSQL(非關係型)數據庫和SQL(關係型)數據庫的各自主要代表?

SQL:MariaDB、MySQL、SQLite、SQLServer、Oracle、PostgreSQL。

NoSQL代表:Redis、MongoDB、Memcache、HBASE。

簡述MongoDB及其特點?

MongoDB是一個開源的、基於分佈式的、面向文件儲存的非關係型數據庫。是非關係型數據庫當中功能最豐富、最像關係數據庫的。其主要特點如下:

  • 查詢豐富:MongoDB最大的特點是支援的查詢語言非常強大,其語法有點類似於物件導向的查詢語言,幾乎可以實現類似關係數據庫單表查詢的絕大部分功能,而且還支援對數據建立索引。
  • 面向文件:文件就是儲存在MongoDB中的一條記錄,是一個由鍵值對組成的數據結構。
  • 模式自由:MongoDB每一個Document都包含了元數據資訊,每個文件之間不強迫要求使用相同的格式,同時他們也支援各種索引。
  • 高可用性:MongoDB支援在複製集(Replica Set)通過非同步複製達到故障轉移,自動恢復,叢集中主伺服器崩潰停止服務和丟失數據,備份伺服器通過選舉獲得大多數投票成爲主節點,以此來實現高可用。
  • 水平拓展:MongoDB支援分片技術,它能夠支援並行處理和水平擴充套件。
  • 支援豐富:MongoDB另外還提供了豐富的BSON數據型別,還有MongoDB的官方不同語言的driver支援(C/C++、C#、Java、Node.js、Perl、PHP、Python、Ruby、Scala)。

簡述MongoDB的優勢有哪些?

  • 面向文件的儲存:以 JSON 格式的文件儲存數據。
  • 任何屬性都可以建立索引。
  • 複製以及高可延伸性。
  • 自動分片。
  • 豐富的查詢功能。
  • 快速的即時更新。

簡述MongoDB適應的場景和不適用的場景?

MongoDB屬於典型的非關係型數據庫。

  • 主要適應場景

    • 網站實時數據:MongoDB 非常適合實時的插入,更新與查詢,並具備網站實時數據儲存所需的複製及高度伸縮性。
    • 數據快取:由於效能很高,MongoDB 也適合作爲資訊基礎設施的快取層。在系統重新啓動之後,由 MongoDB 搭建的持久化快取層可以避免下層的數據源過載。
    • 高伸縮性場景:MongoDB 非常適合由數十或數百台伺服器組成的數據庫。
    • 物件或 JSON 數據儲存:MongoDB 的 BSON 數據格式非常適合文件化格式的儲存及查詢。
  • 不適應場景

    • 高度事務性系統:例如銀行或會計系統。傳統的關係型數據庫目前還是更適用於需要大量原子性複雜事務的應用程式。
    • 傳統的商業智慧應用:針對特定問題的 BI 數據庫會對產生高度優化的查詢方式。對於此類應用,數據倉庫可能是更合適的選擇。
    • 需要複雜 SQL 查詢的場景。

簡述MongoDB中的庫、集合、文件?

  • :MongoDB可以建立多個數據庫,MongoDB預設數據庫爲"db"。MongoDB的單個範例可以容納多個獨立的數據庫,每一個都有自己的集合和許可權,不同的數據庫也放置在不同的檔案中。
  • 集合:MongoDB集合就是 MongoDB 文件組,類似於 RDBMS (關係數據庫中的表格)。集合存在於數據庫中,集合沒有固定的結構。
  • 文件:MongoDB的Document是一組鍵值(key-value)對(即 BSON),相當於關係型數據庫的行。且不需要設定相同的欄位,並且相同的欄位不需要相同的數據型別。

簡述MongoDB支援的常見數據型別?

MongoDB支援豐富的數據型別,常見的有:

  • String:字串。儲存數據常用的數據型別。
  • Integer:整型數值。用於儲存數值。
  • Boolean:布爾值。用於儲存布爾值(真/假)。
  • Array:用於將陣列或列表或多個值儲存爲一個鍵。
  • Date:日期時間。用 UNIX 時間格式來儲存當前日期或時間。
  • Binary Data:二進制數據。用於儲存二進制數據。
  • Code:程式碼型別。用於在文件中儲存 JavaScript 程式碼。
  • Regular expression:正則表達式型別。用於儲存正則表達式。

簡述MongoDB索引及其作用?

索引通常能夠極大的提高查詢的效率,如果沒有索引,MongoDB在讀取數據時必須掃描集閤中的每個檔案並選取那些符合查詢條件的記錄。

這種掃描全集合的查詢效率是非常低的,特別在處理大量的數據時,查詢可能要花費幾十秒甚至幾分鐘,這對網站的效能是非常致命的。

索引是特殊的數據結構,索引儲存在一個易於遍歷讀取的數據集閤中,索引是對數據庫表中一列或多列的值進行排序的一種結構。

簡述MongoDB常見的索引有哪些?

MongoDB常見的索引有:

  • 單欄位索引(Single Field Indexes)
  • 符合索引(Compound Indexes)
  • 多鍵索引(Multikey Indexes)
  • 全文索引(Text Indexes)
  • Hash索引(Hash Indexes)
  • 萬用字元索引(Wildcard Indexes)

簡述MongoDB複製(本)集原理?

mongodb的複製至少需要兩個節點。其中一個是主節點,負責處理用戶端請求,其餘的都是從節點,負責複製主節點上的數據。

mongodb各個節點常見的搭配方式爲:一主一從、一主多從。

主節點記錄在其上的所有操作oplog,從節點定期輪詢主節點獲取這些操作,然後對自己的數據副本執行這些操作,從而保證從節點的數據與主節點一致。

簡述MongoDB的複製過程?

Primary節點寫入數據,Secondary通過讀取Primary的oplog(即Primary的oplog.rs表)得到複製資訊,開始複製數據並且將複製資訊寫入到自己的oplog。如果某個操作失敗,則備份節點停止從當前數據源複製數據。如果某個備份節點由於某些原因掛掉了,當重新啓動後,就會自動從oplog的最後一個操作開始同步。同步完成後,將資訊寫入自己的oplog,由於複製操作是先複製數據,複製完成後再寫入oplog,有可能相同的操作會同步兩份,MongoDB設定將oplog的同一個操作執行多次,與執行一次的效果是一樣的。

當Primary節點完成數據操作後,Secondary的數據同步過程如下:

  • 1、檢查自己local庫的oplog.rs集合找出最近的時間戳。
  • 2、檢查Primary節點local庫oplog.rs集合,找出大於此時間戳的記錄。
  • 3、將找到的記錄插入到自己的oplog.rs集閤中,並執行這些操作。

簡述MongoDB副本集及其特點?

MongoDB副本集是一組Mongod維護相同數據集的範例,副本集可以包含多個數據承載點和多個仲裁點。在承載數據的節點中,僅有一個節點被視爲主節點,其他節點稱爲次節點。

主要特點:

  • N 個節點的叢集,任何節點可作爲主節點,由選舉產生;
  • 最小構成是:primary,secondary,arbiter,一般部署是:primary,2 secondary。
  • 所有寫入操作都在主節點上,同時具有自動故障轉移,自動恢復;
  • 成員數應該爲奇數,如果爲偶數的情況下新增arbiter,arbiter不儲存數據,只投票。

簡述MongoDB有哪些特殊成員?

MongoDB中Secondary角色存在一些特殊的成員型別:

  • Priority 0(優先順序0型):不能升爲主,可以用於多數據中心場景;
  • Hidden(隱藏型):對用戶端來說是不可見的,一般用作備份或統計報告用;
  • Delayed(延遲型):數據比副集晚,一般用作 rolling backup 或歷史快照。
  • Vote(投票型):僅參與投票。

簡述MongoDB分片叢集?

MongoDB分片叢集(Sharded Cluster):主要利用分片技術,使數據分散儲存到多個分片(Shard)上,來實現高可延伸性。

分片是將數據水平切分到不同的物理節點。當數據量越來越大時,單臺機器有可能無法儲存數據或讀取寫入吞吐量有所降低,利用分片技術可以新增更多的機器來應對數據量增加以及讀寫操作的要求。

簡述MongoDB分片叢集相對副本集的優勢?

MongoDB分片叢集主要可以解決副本集如下的不足:

  • 副本集所有的寫入操作都位於主節點;
  • 延遲的敏感數據會在主節點查詢;
  • 單個副本集限制在12個節點;
  • 當請求量巨大時會出現記憶體不足;
  • 本地磁碟不足;
  • 垂直擴充套件價格昂貴。

簡述MongoDB分片叢集的優勢?

MongoDB分片叢集主要有如下優勢:

  • 使用分片減少了每個分片需要處理的請求數:通過水平擴充套件,羣集可以提高自己的儲存容量。比如,當插入一條數據時,應用只需要存取儲存這條數據的分片。
  • 使用分片減少了每個分片儲存的數據:分片的優勢在於提供類似線性增長的架構,提高數據可用性,提高大型數據庫查詢伺服器的效能。當MongoDB單點數據庫伺服器儲存成爲瓶頸、單點數據庫伺服器的效能成爲瓶頸或需要部署大型應用以充分利用記憶體時,可以使用分片技術。

簡述MongoDB分片叢集的架構元件?

MongoDB架構元件主要有:

  • Shard:用於儲存實際的數據塊,實際生產環境中一個shard server角色可由幾臺機器組成一個replica set承擔,防止主機單點故障。
  • Config Server:mongod範例,儲存了整個 ClusterMetadata,其中包括 chunk資訊。
  • Query Routers:前端路由,用戶端由此接入,且讓整個叢集看上去像單一數據庫,前端應用可以透明使用。

簡述MongoDB分片叢集和副本叢集的區別?

副本集不是爲了提高讀效能存在的,在進行oplog的時候,讀操作是被阻塞的;

提高讀取效能應該使用分片和索引,它的存在更多是作爲數據冗餘,備份。

簡述MongoDB的幾種分片策略及其相互之間的差異?

MongoDB的數據劃分是基於集合級別爲標準,通過shard key來劃分集合數據。主要分片策略有如下三種:

  • 範圍劃分:通過shard key值將數據集劃分到不同的範圍就稱爲基於範圍劃分。對於數值型的shard key:可以虛構一條從負無窮到正無窮的直線(理解爲x軸),每個shard key 值都落在這條直線的某個點上,然後MongoDB把這條線劃分爲許多更小的沒有重複的範圍成爲塊(chunks),一個chunk就是某些最小值到最大值的範圍。
  • 雜湊劃分:MongoDB計算每個欄位的hash值,然後用這些hash值建立chunks。基於雜湊值的數據分佈有助於更均勻的數據分佈,尤其是在shard key單調變化的數據集中。
  • 自定義標籤劃分:MongoDB支援通過自定義標籤標記分片的方式直接平衡數據分佈策略,可以建立標籤並且將它們與shard key值的範圍進行關聯,然後分配這些標籤到各個分片上,最終平衡器轉移帶有標籤標記的數據到對應的分片上,確保叢集總是按標籤描述的那樣進行數據分佈。標籤是控制平衡器行爲及叢集中塊分佈的主要方法。

差異

  • 基於範圍劃分對於範圍查詢比較高效。假設在shard key上進行範圍查詢,查詢路由很容易能夠知道哪些塊與這個範圍重疊,然後把相關查詢按照這個路線發送到僅僅包含這些chunks的分片。
  • 基於範圍劃分很容易導致數據不均勻分佈,這樣會削弱分片叢集的功能。
  • 基於雜湊劃分是以犧牲高效範圍查詢爲代價,它能夠均勻的分佈數據,雜湊值能夠保證數據隨機分佈到各個分片上。

簡述MongoDB分片叢集採取什麼方式確保數據分佈的平衡?

新加入的數據及伺服器都會導致叢集數據分佈不平衡,MongoDB採用兩種方式確保數據分佈的平衡:

  • 拆分

    拆分是一個後臺進程,防止塊變得太大。當一個塊增長到指定塊大小的時候,拆分進程就會塊一分爲二,整個拆分過程是高效的。不會涉及到數據的遷移等操作。

  • 平衡

    平衡器是一個後臺進程,管理塊的遷移。平衡器能夠執行在叢集任何的mongd範例上。當叢集中數據分佈不均勻時,平衡器就會將某個分片中比較多的塊遷移到擁有塊較少的分片中,直到數據分片平衡爲止。

    分片採用後臺操作的方式管理着源分片和目標分片之間塊的遷移。在遷移的過程中,源分片中的塊會將所有文件發送到目標分片中,然後目標分片會獲取並應用這些變化。最後,更新設定伺服器上關於塊位置元數據。

簡述MongoDB備份及恢復方式?

mongodb備份恢復方式通常有以下三種:

  • 檔案快照方式:此方式相對簡單,需要系統檔案支援快照和mongod必須啓用journal。可以在任何時刻建立快照。恢復時,確保沒有執行mongod,執行快照恢復操作命令,然後啓動mongod進程,mongod將重放journal日誌。
  • 複製數據檔案方式:直接拷貝數據目錄下的一切檔案,但是在拷貝過程中必須阻止數據檔案發生更改。因此需要對數據庫加鎖,以防止數據寫入。恢復時,確保mongod沒有執行,清空數據目錄,將備份的數據拷貝到數據目錄下,然後啓動mongod。
  • 使用mongodump和mongorestore方式:在Mongodb中我們使用mongodump命令來備份MongoDB數據。該命令可以導出所有數據到指定目錄中。恢復時,使用mongorestore命令來恢復MongoDB數據。該命令可以從指定目錄恢復相應數據。

簡述MongoDB的聚合操作?

聚合操作能夠處理數據記錄並返回計算結果。聚合操作能將多個文件中的值組合起來,對成組數據執行各種操作,返回單一的結果。它相當於 SQL 中的 count(*) 組合 group by。對於 MongoDB 中的聚合操作,應該使用aggregate()方法。

簡述MongoDB中的GridFS機制 機製?

GridFS是一種將大型檔案儲存在MongoDB中的檔案規範。使用GridFS可以將大檔案分隔成多個小文件存放,這樣我們能夠有效的儲存大文件,而且解決了BSON物件有限制的問題。

簡述MongoDB針對查詢優化的措施?

MongoDB查詢優化大致可能從如下步驟着手:

  • 第一步:找出慢速查詢

    如下方式開啓內建的查詢分析器,記錄讀寫操作效率:

    db.setProfilingLevel(n,{m}),n的取值可選0,1,2;

    查詢監控結果:監控結果儲存在一個特殊的集合system.profile裡。

    • 0:預設值,表示不記錄;
    • 1:表示記錄慢速操作,如果值爲1,m必須賦值單位爲ms,用於定義慢速查詢時間的閾值;
    • 2:表示記錄所有的讀寫操作。
  • 第二步:分析慢速查詢

    找出慢速查詢的原因,通常可能的原因有:應用程式設計不合理、不正確的數據模型、硬體設定問題、缺少索引等

  • 第三部:根據不同的分析結果進行優化,如建立索引。

簡述MongoDB的更新操作是否會立刻fsync到磁碟?

不會,磁碟寫操作預設是延時執行的,寫操作可能在兩三秒(預設在60秒內)後到達磁碟,可通過syncPeriodSecs參數進行設定。

簡述MySQL索引及其作用?

是數據庫管理系統中一個排序的數據結構,根據不同的儲存引擎索引分爲Hash索引、B+樹索引等。常見的InnoDB儲存引擎的預設索引實現爲:B+樹索引。

索引可以協助快速查詢、更新數據庫表中數據。

簡述MySQL中什麼是事務?

事務是一系列的操作,需要要符合ACID特性,即:事務中的操作要麼全部成功,要麼全部失敗。

簡述MySQL事務之間的隔離?

MySQL事務支援如下四種隔離:

  • 未提交讀(Read Uncommitted):允許髒讀,其他事務只要修改了數據,即使未提交,本事務也能看到修改後的數據值。也就是可能讀取到其他對談中未提交事務修改的數據。
  • 提交讀(Read Committed):只能讀取到已經提交的數據。Oracle等多數數據庫預設都是該級別 (不重複讀)。
  • 可重複讀(Repeated Read):可重複讀。無論其他事務是否修改並提交了數據,在這個事務中看到的數據值始終不受其他事務影響。
  • 序列讀(Serializable):完全序列化的讀,每次讀都需要獲得表級共用鎖,讀寫相互都會阻塞。

簡述MySQL鎖及其作用?

鎖機制 機製是爲了避免,在數據庫有併發事務的時候,可能會產生數據的不一致而誕生的的一個機制 機製。鎖從類別上分爲:

  • 共用鎖:又叫做讀鎖,當使用者要進行數據的讀取時,對數據加上共用鎖,共用鎖可以同時加上多個。
  • 排他鎖:又叫做寫鎖,當使用者要進行數據的寫入時,對數據加上排他鎖,排他鎖只可以加一個,他和其他的排他鎖,共用鎖都相斥。

簡述MySQL表中爲什麼建議新增主鍵?

主鍵是數據庫確保數據行在整張表唯一性的保障,即使數據庫中表沒有主鍵,也建議新增一個自增長的ID列作爲主鍵,設定了主鍵之後,在後續的刪改查的時候可能更加快速以及確保操作數據範圍安全。

簡述MySQL所支援的儲存引擎?

MySQL支援多種儲存引擎,常見的有InnoDB、MyISAM、Memory、Archive等。通常使用InnoDB引擎都是最合適的,InnoDB也是MySQL的預設儲存引擎。

簡述MySQL InnoDB引擎和MyISAM引擎的差異?

  • InnoDB支援事物,而MyISAM不支援事物。
  • InnoDB支援行級鎖,而MyISAM支援表級鎖。
  • InnoDB支援MVCC, 而MyISAM不支援。
  • InnoDB支援外來鍵,而MyISAM不支援。
  • InnoDB不支援全文索引,而MyISAM支援。

簡述MySQL主從複製過程?

  • 1、Slave上面的IO執行緒連線上Master,並請求從指定日誌檔案的指定位置(或者從最開始的日誌)之後的日誌內容;
  • 2、Master接收到來自Slave的IO執行緒的請求後,通過負責複製的IO執行緒根據請求資訊讀取指定日誌指定位置之後的日誌資訊,返回給Slave端的IO執行緒。返回資訊中除了日誌所包含的資訊之外,還包括本次返回的資訊在Master端binary log檔案的名稱以及在Binary log中的位置;
  • 3、Slave的IO執行緒收到資訊後,將接收到的日誌內容依次寫入到Slave端的RelayLog檔案(mysql-relay-lin.xxxxx)的最末端,並將讀取到的Master端的bin-log的檔名和位置記錄到master-info檔案中,以便在下一次讀取的時候能夠明確知道從什麼位置開始讀取日誌;
  • 4、Slave的SQL執行緒檢測到Relay Log中新增加了內容後,會馬上解析該Log檔案中的內容成爲在Master端真實執行時候的那些可執行的查詢或操作語句,並在自身執行那些查詢或操作語句,這樣,實際上就是在master端和Slave端執行了同樣的查詢或操作語句,所以兩端的數據是完全一樣的。

簡述MySQL常見的讀寫分離方案?

MySQL+Amoeba讀寫分離方案:Amoeba(變形蟲)專案,這個工具致力於MySQL的分佈式數據庫前端代理層,它主要在應用層存取MySQL的時候充當SQL路由功能。具有負載均衡、高可用性、SQL 過濾、讀寫分離、可路由相關的到目標數據庫、可併發請求多臺數據庫合併結果。通過Amoeba你能夠完成多數據源的高可用、負載均衡、數據切片、讀寫分離的功能。

MySQL+MMM讀寫分離方案:MMM即Multi-Master Replication Manager for MySQL,mysql多主複製管理器是關於mysql主主複製設定的監控、故障轉移和管理的一套可伸縮的指令碼套件(在任何時候只有一個節點可以被寫入)。MMM也能對從伺服器進行讀負載均衡,通過MMM方案能實現伺服器的故障轉移,從而實現mysql的高可用。MMM不僅能提供浮動IP的功能,如果當前的主伺服器掛掉後,會將你後端的從伺服器自動轉向新的主伺服器進行同步複製,不用手工更改同步設定。

簡述MySQL常見的高可用方案?

  • MySQL主從複製:Mysql內建的複製功能是構建大型,高效能應用程式的基礎。將Mysql的數據分佈在多個節點(slaves)之上,複製過程中一個伺服器充當主伺服器,而一個或多個其它伺服器充當從伺服器。主伺服器將更新寫入二進制日誌檔案,並維護檔案的一個索引以跟蹤日誌回圈。這些日誌可以記錄發送到從伺服器的更新。
  • MySQL雙主:參考MySQL主從複製。
  • MySQL雙主多從:參考MySQL主從複製。
  • MySQL複製+Keepalived高可用:MySQL自身的複製,對外基於Keepalived技術,暴露一個VIP,從而實現高可用。
  • Heartbeat + MySQL 實現MySQL的高可用:通過Heartbeat的心跳檢測和資源接管、叢集中服務的監測、失效切換等功能,結合MySQL來實現高可用性。

簡述MySQL常見的優化措施?

MySQL可通過如下方式優化:

  • 1、開啓查詢快取,優化查詢。
  • 2、使用explain判斷select查詢,從而分析查詢語句或是表結構的效能瓶頸,然後有針對性的進行優化。
  • 3、爲搜尋欄位建索引
  • 4、對於有限定範圍取值的欄位,推薦使用 ENUM 而不是 VARCHAR。
  • 5、垂直分表。
  • 6、選擇正確的儲存引擎。

簡述MySQL常見備份方式和工具?

  • MySQL自帶

    mysqldump:mysqldump支援基於innodb的熱備份,使用mysqldump完全備份+二進制日誌可以實現基於時間點的恢復,通常適合備份數據比較小的場景 。

  • 系統層面

    tar備份:可以使用tar之類的系統命令對整個數據庫目錄進行打包備份。

    lvm快照備份:可基於檔案系統的LVM製作快照,進行對整個數據庫目錄所在的邏輯卷備份。

  • 第三方備份工具

    可使用其他第三方工具進行備份,如xtrabackup工具,該工具支援innodb的物理熱備份,支援完全備份、增量備份,而且速度非常快,支援innodb儲存引起的數據在不同數據庫之間遷移,支援複製模式下的從機備份恢復備份恢復。

監控

簡述常見的監控軟體?

常見的監控軟體有:

  • Cacti:是一套基於PHP、MySQL、SNMP及RRDTool開發的網路流量監測圖形分析工具。
  • Zabbix:Zabbix是一個企業級的高度整合開源監控軟體,提供分佈式監控解決方案。可以用來監控裝置、服務等可用性和效能。
  • Open-falcon:open-falcon是一款用golang和python寫的監控系統,由小米啓動這個專案。
  • Prometheus:Prometheus是由SoundCloud開發的開源監控報警系統和時序列數據庫(TSDB)。Prometheus使用Go語言開發,是Google BorgMon監控系統的開源版本。

簡述Prometheus及其主要特性?

Prometheus是一個已加入CNCF的開源監控報警系統和時序列數據庫專案,通過不同的元件完成數據的採集,數據的儲存和告警。

Prometheus主要特性:

  • 多維數據模型

    • 時間序列數據通過 metric 名和鍵值對來區分。
    • 所有的 metrics 都可以設定任意的多維標籤。
    • 數據模型更隨意,不需要刻意設定爲以點分隔的字串。
    • 可以對數據模型進行聚合,切割和切片操作。
    • 支援雙精度浮點型別,標籤可以設爲全 unicode。
  • 靈活的查詢語句(PromQL),可以利用多維數據完成複雜的查詢

  • Prometheus server 是一個單獨的二進制檔案,不依賴(任何分佈式)儲存,支援 local 和 remote 不同模型

  • 採用 http 協定,使用 pull 模式,拉取數據,或者通過中間閘道器推播方式採集數據

  • 監控目標,可以採用服務發現或靜態設定的方式

  • 支援多種統計數據模型,圖形化友好

  • 高效:一個 Prometheus server 可以處理數百萬的 metrics

  • 適用於以機器爲中心的監控以及高度動態面向服務架構的監控

簡述Prometheus主要元件及其功能?

Prometheus 的主要模組包含:prometheus server, exporters, push gateway, PromQL, Alertmanager, WebUI 等。

  • 1、prometheus server:定期從靜態設定的 targets 或者服務發現(主要是DNS、consul、k8s、mesos等)的 targets 拉取數據,用於收集和儲存時間序列數據。
  • 2、exporters:負責向prometheus server做數據彙報,暴露一個http服務的介面給Prometheus server定時抓取。而不同的數據彙報由不同的exporters實現,比如監控主機有node-exporters,mysql有MySQL server exporter。
  • 3、push gateway:主要使用場景爲,當Prometheus 採用 pull 模式,可能由於不在一個子網或者防火牆原因,導致 Prometheus 無法直接拉取各個 target 數據。此時需要push gateway接入,以便於在監控業務數據的時候,將不同數據彙總, 由 Prometheus 統一收集。實現機制 機製類似於zabbix-proxy功能。
  • 4、Alertmanager:從 Prometheus server 端接收到 alerts 後,會進行去除重複數據,分組,並路由到對收的接受方式,發出報警,即主要實現prometheus的告警功能。AlertManager的整體工作流程如下圖所示:
  • 5、webui:Prometheus內建一個簡單的Web控制檯,可以查詢指標,檢視設定資訊或者Service Discovery等,實踐中通常結合Grafana,Prometheus僅作爲Grafana的數據源。

簡述Prometheus的機制 機製?

Prometheus簡單機制 機製如下:

  • Prometheus以其Server爲核心,用於收集和儲存時間序列數據。Prometheus Server 從監控目標中拉取數據,或通過push gateway間接的把監控目標的監控數據儲存到本地HDD/SSD中。
  • 使用者介面介面通過各種UI使用PromQL查詢語言從Server獲取數據。
  • 一旦Server檢測到異常,會推播告警到AlertManager,由告警管理負責去通知相關方。

簡述Prometheus中什麼是時序數據?

Prometheus 儲存的是時序數據,,時序數據是指按照相同時序(相同的名字和標籤),以時間維度儲存連續的數據的集合。時序(time series) 是由名字(Metric),以及一組 key/value 標籤定義的,具有相同的名字以及標籤屬於相同時序。

簡述Prometheus時序數據有哪些型別?

Prometheus 時序數據分爲 Counter, Gauge, Histogram, Summary 四種類型。

  • Counter:計數器表示收集的數據是按照某個趨勢(增加/減少)一直變化的,通常用它記錄服務請求總量,錯誤總數等。
  • Gauge:計量器表示蒐集 搜集的數據是一個瞬時的,與時間沒有關係,可以任意變高變低,往往可以用來記錄記憶體使用率、磁碟使用率等。
  • Histogram:直方圖 Histogram 主要用於對一段時間範圍內的數據進行採樣,(通常是請求持續時間或響應大小),並能夠對其指定區間以及總數進行統計,通常我們用它計算分位數的直方圖。
  • Summary:彙總Summary 和 直方圖Histogram 類似,主要用於表示一段時間內數據採樣結果,(通常是請求持續時間或響應大小),它直接儲存了 quantile 數據,而不是根據統計區間計算出來的。

簡述Zabbix及其優勢?

Zabbix是一個企業級的高度整合開源監控軟體,提供分佈式監控解決方案。可以用來監控裝置、服務等可用性和效能。其主要優勢有:

  • 自由開放原始碼產品,可以對其進行任意修改和二次開發,採用GPL協定;
  • 安裝和設定簡單;
  • 搭建環境簡單,基於開源軟體構建平臺;
  • 完全支援Linux、Unix、Windows、AIX、BSD等平臺,採用C語言編碼,系統佔用小,數據採集效能和速度非常快;
  • 數據採集持久儲存到數據庫,便於對監控數據的二次分析;
  • 非常豐富的擴充套件能力,輕鬆實現自定義監控項和實現數據採集。

簡述Zabbix體系架構?

Zabbix體系相對清晰,其主要元件有:

  • Zabbix Server:負責接收agent發送的報告資訊的核心元件,所有設定、統計數據及操作數據均由其組織進行。
  • Database Storage:專用於儲存所有設定資訊,以及有zabbix收集的數據。
  • Web interface(frontend):zabbix的GUI介面,通常與server執行在同一臺機器上。
  • Proxy:可選元件,常用於分佈式監控環境中,代理Server收集部分被監控數據並統一發往Server端。
  • Agent:部署在被監控主機上,負責收集本地數據併發往Server端或者Proxy端。

簡述Zabbix所支援的監控方式?

目前由zabbix提供包括但不限於以下事項型別的支援:

  • Zabbix agent checks:這些用戶端來進行數據採集,又分爲Zabbix agent(被動模式:用戶端等着伺服器端來要數據),Zabbix agent (active)(主動模式:用戶端主動發送數據到伺服器端)
  • SNMP agent checks:SNMP方式,如果要監控印表機網路裝置等支援SNMP裝置的話,但是又不能安裝agent的裝置。
  • SNMP traps
  • IPMI checks:IPMI即智慧平臺管理介面,現在是業界通過的標準。使用者可以利用IPMI監視伺服器的物理特性,如溫度、電壓、電扇工作狀態、電源供應以及機箱入侵等。

簡述Zabbix分佈式及其適應場景?

zabbix proxy 可以代替 zabbix server 收集效能和可用性數據,然後把數據彙報給 zabbix server,並且在一定程度上分擔了zabbix server 的壓力。

此外,當所有agents和proxy報告給一個Zabbix server並且所有數據都集中收集時,使用proxy是實現集中式和分佈式監控的最簡單方法。

zabbix proxy 使用場景:

  • 監控遠端區域裝置
  • 監控本地網路不穩定區域
  • 當 zabbix 監控上千裝置時,使用它來減輕 server 的壓力
  • 簡化分佈式監控的維護

網路管理

簡述什麼是CDN?

CDN即內容分發網路,是在現有網路中增加一層新的網路架構,從而實現將源站內容發佈和傳送到最靠近使用者的邊緣地區,使使用者可以就近存取想要的內容,提高使用者存取的響應速度。