偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Facebook自動(dòng)化管理神器:MySQL Pool Scanner

運(yùn)維 系統(tǒng)運(yùn)維 自動(dòng)化
Facebook擁有世界上最大的MySQL數(shù)據(jù)庫(kù)集群,其中包含了成千上萬(wàn)臺(tái)服務(wù)器,這些服務(wù)器分布在跨越兩個(gè)大洲的多個(gè)數(shù)據(jù)中心里。幾乎將所有的任務(wù)全部自動(dòng)化,這背后的奧秘是什么?一起來(lái)看看Facebook自動(dòng)化管理神器:MySQL Pool Scanner。

Facebook擁有世界上最大的MySQL數(shù)據(jù)庫(kù)集群,其中包含了成千上萬(wàn)臺(tái)服務(wù)器,這些服務(wù)器分布在跨越兩個(gè)大洲的多個(gè)數(shù)據(jù)中心里。

通過(guò)幾乎將所有的任務(wù)全部自動(dòng)化,這個(gè)集群只有一只非常小的MySQL DBA團(tuán)隊(duì)來(lái)進(jìn)行管理,集群甚至可以自己運(yùn)行。而實(shí)現(xiàn)這種自動(dòng)化的核心組件之一就是所謂的MPS系統(tǒng),即“MySQL Pool Scanner”。

MPS是一個(gè)大部分用Python寫(xiě)的復(fù)雜狀態(tài)機(jī)。它能夠代替DBA執(zhí)行很多例行任務(wù),并且可以讓我們以很少或是不施加人為干預(yù)就能執(zhí)行批量維護(hù)工作。

單一數(shù)據(jù)庫(kù)結(jié)點(diǎn)

在Facebook數(shù)以千計(jì)的數(shù)據(jù)庫(kù)服務(wù)器中,每一個(gè)都能存儲(chǔ)一定數(shù)量的MySQL實(shí)例。一個(gè)實(shí)例是一個(gè)單獨(dú)的MySQL進(jìn)程,以其自身的數(shù)據(jù)集監(jiān)聽(tīng)著一個(gè)單獨(dú)的端口。簡(jiǎn)單來(lái)說(shuō),我們假設(shè)在圖表和示例中每個(gè)服務(wù)器正好有兩個(gè)實(shí)例。

整個(gè)數(shù)據(jù)集分割為無(wú)數(shù)的shard,并且每個(gè)實(shí)例都擁有一組這樣的shard,每個(gè)都在其自身的數(shù)據(jù)庫(kù)Schema里。一個(gè)Facebook用戶的信息在其創(chuàng)建的時(shí)候會(huì)分配給一個(gè)shard,這樣每個(gè)shard就會(huì)包含有成千上萬(wàn)用戶的相關(guān)數(shù)據(jù)。

用一個(gè)單一數(shù)據(jù)庫(kù)服務(wù)器的圖表可以更容易解釋這一點(diǎn):

每個(gè)實(shí)例在駐留于不同服務(wù)器上的其他實(shí)例上都有幾個(gè)副本,而這些服務(wù)器通常是在不同數(shù)據(jù)中心里的。這樣做主要是為了實(shí)現(xiàn)兩個(gè)目的:

  1. 高可用性:如果一臺(tái)服務(wù)器宕機(jī)了,我們?cè)谄渌胤竭€有可用數(shù)據(jù)來(lái)提供服務(wù)。
  2. 性能:不同的地理位置擁有它們自己的副本,這樣便可以使讀取服務(wù)本地化。

這里是一個(gè)簡(jiǎn)單的replica set示意,它的每個(gè)服務(wù)器都只有一個(gè)實(shí)例,并且其他實(shí)例為空(我們稱這些是spares):

一個(gè)服務(wù)器本質(zhì)上是實(shí)例容器,所以現(xiàn)實(shí)中的情況可以會(huì)變得更為復(fù)雜。

例如,一個(gè)單一服務(wù)器擁有一個(gè)主實(shí)例也可能擁有一個(gè)不同主實(shí)例的從實(shí)例,像下面這樣:

這里MPS依賴于兩個(gè)重要的“building block”操作:

1. 創(chuàng)建一個(gè)副本/放置服務(wù)器

第一個(gè)building block操作是在一臺(tái)不同的主機(jī)上創(chuàng)建一個(gè)實(shí)例的副本。我們使用Xtrabackup的修改版本來(lái)執(zhí)行大多數(shù)復(fù)制操作。如果我們?cè)趶?fù)制成功完成后移除實(shí)例,替代過(guò)程也是同樣的操作。

首先,系統(tǒng)為此操作分配一個(gè)空閑實(shí)例。我們選擇其中一個(gè)從實(shí)例或主實(shí)例并復(fù)制其數(shù)據(jù)到新分配的空閑實(shí)例。下表顯示了這一替代操作,它在復(fù)制完成后將實(shí)例移除:

2. 升級(jí)主實(shí)例

第二個(gè)building block操作是將一個(gè)不同的實(shí)例升級(jí)為一個(gè)replica set的主實(shí)例。

在升級(jí)過(guò)程中,我們首先選擇一個(gè)目標(biāo),停止寫(xiě)入到replica set,將從實(shí)例改為從新的主實(shí)例進(jìn)行復(fù)制,并恢復(fù)寫(xiě)入。在下圖中演示了一個(gè)刪除操作,即在升級(jí)成功完成之后舊實(shí)例會(huì)被丟棄。為簡(jiǎn)單起見(jiàn),下面的replica set只包含三個(gè)實(shí)例:

這兩個(gè)操作對(duì)于大多數(shù)使用MySQL的公司來(lái)說(shuō)通常是很復(fù)雜的過(guò)程,而在Facebook,它不需要人為干預(yù)的情況下就已經(jīng)可以由MPS快速而安全的全自動(dòng)化運(yùn)行。

主機(jī)管理和狀態(tài)

通過(guò)上文我們已經(jīng)解決了基本問(wèn)題,現(xiàn)在可以利用這些building block來(lái)探索更為抽象的概念。

MPS會(huì)連接到一個(gè)存有當(dāng)前所有數(shù)據(jù)庫(kù)主機(jī)狀態(tài)和元數(shù)據(jù)的庫(kù),這個(gè)庫(kù)還包含了當(dāng)前和過(guò)期MPS的復(fù)制操作。注冊(cè)表是由數(shù)據(jù)庫(kù)服務(wù)器自身進(jìn)行管理,因此數(shù)據(jù)庫(kù)集群和MPS可與不需要安裝一個(gè)復(fù)雜的應(yīng)用服務(wù)器。MPS本身實(shí)際上是無(wú)狀態(tài)的,它在自己的主機(jī)池上運(yùn)行并依賴于上述的庫(kù)來(lái)進(jìn)行狀態(tài)管理。而狀態(tài)是分別并行處理的。

當(dāng)一個(gè)服務(wù)器在數(shù)據(jù)中心被“喚醒”(連接并配置好一個(gè)新的機(jī)架),它會(huì)每隔幾分鐘運(yùn)行一個(gè)本地代理。此代理會(huì)執(zhí)行以下步驟:

  • 收集關(guān)于它自身的數(shù)據(jù)。(我在哪里?我有什么硬件?我正在運(yùn)行什么版本的軟件?)
  • 根據(jù)問(wèn)題對(duì)主機(jī)進(jìn)行分類。(是否是在active的集群中被喚醒的?磁盤(pán)運(yùn)轉(zhuǎn)是否正常?閃存卡是否正常?)
  • 確保服務(wù)器已注冊(cè),核心庫(kù)系統(tǒng)中所包含的元數(shù)據(jù)保持最新。
  • 在首次運(yùn)行中,如果沒(méi)有服務(wù)器的當(dāng)前記錄就將服務(wù)器上的實(shí)例置為初始的“reimage”狀態(tài)。這便是新服務(wù)器在MPS中生命的開(kāi)端。
  • 所以每隔幾分鐘,每臺(tái)正常的服務(wù)器都會(huì)到核心庫(kù)“報(bào)道”并更新其狀態(tài),同時(shí)同步數(shù)據(jù)使用和系統(tǒng)健康度之類的事項(xiàng)。

目前MPS管理的最小單元就是一個(gè)實(shí)例。每個(gè)實(shí)例可以處于不同的狀態(tài)。這些重要狀態(tài)如下所列:

  • 生產(chǎn)狀態(tài):實(shí)例正在服務(wù)于生產(chǎn)環(huán)境的流量。
  • 空閑狀態(tài):實(shí)例準(zhǔn)備被復(fù)制或被分配一些其他工作。
  • 空閑分配狀態(tài):實(shí)例已被選中作為復(fù)制的對(duì)象,并且復(fù)制正在進(jìn)行中。
  • 空閑解除分配狀態(tài):.臨時(shí)分流狀態(tài)。實(shí)例已經(jīng)改從生產(chǎn)環(huán)境移除并等待分流和清理。不會(huì)有實(shí)例在此狀態(tài)停留很久。
  • 排出狀態(tài):實(shí)例未被使用,而是預(yù)留給測(cè)試,數(shù)據(jù)中心維護(hù)等。需要有人工干預(yù)使得主機(jī)脫離此狀態(tài)。
  • 重塑(reimage)狀態(tài): 此狀態(tài)下,擁有所有實(shí)例的服務(wù)器正處在重塑或修復(fù)過(guò)程中。此狀態(tài)下的服務(wù)器會(huì)被移交并由一個(gè)稱為Windex的協(xié)同系統(tǒng)加以管理。

由于MPS執(zhí)行操作或是人工干預(yù),一個(gè)實(shí)例可能會(huì)在不同狀態(tài)間轉(zhuǎn)換。以下?tīng)顟B(tài)表顯示了幾個(gè)主要狀態(tài)以及可能讓一個(gè)實(shí)例在不同狀態(tài)間轉(zhuǎn)換的操作。

上圖只展示了MPS中一個(gè)實(shí)例很小一部分的可能采取的路徑。這里所描述的狀態(tài)改變是簡(jiǎn)單復(fù)制和維護(hù)操作的結(jié)果。還有很多其他原因可以讓實(shí)例改變狀態(tài),并且將所有操作和檢查都進(jìn)行硬編碼會(huì)讓軟件維護(hù)起來(lái)變得困難復(fù)雜。滿足“問(wèn)題”是MPS中另一個(gè)基本概念。

“問(wèn)題”是附屬于實(shí)例的一個(gè)屬性。如果一臺(tái)主機(jī)上所有的實(shí)例都有此問(wèn)題,那么我們就會(huì)認(rèn)為它是附屬于服務(wù)器本身的。另外一種考慮問(wèn)題的方式類似于標(biāo)簽。MPS會(huì)通過(guò)一個(gè)決策矩陣來(lái)協(xié)助有某個(gè)特定問(wèn)題的實(shí)例做出決策。它基本上是一個(gè)個(gè)元組之間的映射(狀態(tài),問(wèn)題)——(行動(dòng),狀態(tài))。

通過(guò)具體例子理解起來(lái)會(huì)更容易一些:

  • (生產(chǎn),低空閑)——(替換,空閑解除分配):用有限空間在生產(chǎn)中替代一個(gè)實(shí)例,同時(shí)將其遷移至一臺(tái)不同的服務(wù)器。
  • (空閑解除分配,舊內(nèi)核)——(遷移,重塑):如果一個(gè)實(shí)例在此狀態(tài)發(fā)生遷移,它就不會(huì)有生產(chǎn)數(shù)據(jù),那么為什么不對(duì)它進(jìn)行重塑呢?
  • (生產(chǎn),主實(shí)例位于撤退位置)——(升級(jí),生產(chǎn)):我們應(yīng)該把主實(shí)例升級(jí)至正確的位置,并將此實(shí)例置于生產(chǎn)狀態(tài)。

MPS中不同的狀態(tài)和“問(wèn)題”使得我們可以創(chuàng)建一個(gè)靈活、可維護(hù)的基礎(chǔ)設(shè)施,用來(lái)管理服務(wù)器的整個(gè)生命周期。

MPS所解決的常見(jiàn)問(wèn)題

在一個(gè)大型數(shù)據(jù)中心中,每天都會(huì)有幾十個(gè)甚至上百個(gè)的服務(wù)器故障發(fā)生。下面介紹一些不需要人工干預(yù),MPS就能自行處理的日常故障:

  • 檢測(cè)到損壞的從實(shí)例并將其禁用,直到它們?cè)诤笈_(tái)被替換。
  • 損壞的主實(shí)例降級(jí),這樣正常運(yùn)行的副本便會(huì)取代它們并在后臺(tái)進(jìn)行替換。
  • 服務(wù)器上由于增長(zhǎng)而耗盡空間的實(shí)例會(huì)被遷移至未充分使用的服務(wù)器。

當(dāng)數(shù)據(jù)中心中存在成千上萬(wàn)臺(tái)服務(wù)器的時(shí)候,升級(jí)新內(nèi)核、改變分區(qū)大小或是升級(jí)控制器固件的維護(hù)工作會(huì)變得非常復(fù)雜。而對(duì)于像是遷移某些框架或是為工程團(tuán)隊(duì)分配測(cè)試服務(wù)器這些本地化操作也面臨同樣的問(wèn)題。以下是一個(gè)運(yùn)維人員可以通過(guò)單一命令讓MPS執(zhí)行的常見(jiàn)維護(hù)操作:

  • 將任意數(shù)量的數(shù)據(jù)庫(kù)服務(wù)器下架并移出生產(chǎn)環(huán)境。大多數(shù)這樣的操作可以在24小時(shí)內(nèi)完成。
  • 在特定并發(fā)下重塑上萬(wàn)臺(tái)機(jī)器(例如執(zhí)行內(nèi)核升級(jí))。MPS會(huì)替代每臺(tái)機(jī)器然后發(fā)送給Windex。
  • 為一個(gè)新項(xiàng)目或測(cè)試分配任意數(shù)量的空閑空間。例如想要200臺(tái)服務(wù)器來(lái)運(yùn)行測(cè)試?完全沒(méi)問(wèn)題。
  • 在一個(gè)新數(shù)據(jù)中心的特定并發(fā)下,為整個(gè)Facebook數(shù)據(jù)集創(chuàng)建副本。

用MPS將基礎(chǔ)任務(wù)自動(dòng)化,這樣可以對(duì)我們所管理的服務(wù)器進(jìn)行更好的規(guī)劃,而且還能解放MySQL數(shù)據(jù)庫(kù)團(tuán)隊(duì)來(lái)讓他們從事更具挑戰(zhàn)的工作。

關(guān)于作者:Shlomo Priymak是Facebook MySQL運(yùn)營(yíng)團(tuán)隊(duì)的DBA。

責(zé)任編輯:黃丹 來(lái)源: TechTarget中國(guó)
相關(guān)推薦

2012-02-27 17:34:12

Facebook自動(dòng)化

2022-05-07 07:47:51

ChromeAutoma

2020-12-31 11:55:56

PythonPlaywright微軟

2023-04-27 07:57:52

AutoIt自動(dòng)化工具

2015-10-21 15:08:25

電纜自動(dòng)化

2010-12-06 09:59:58

2017-12-17 21:58:18

2024-02-26 00:00:01

?win32WindowsCOM

2009-09-07 09:29:26

2019-04-17 07:59:09

Puppet自動(dòng)化集群管理

2021-04-19 14:00:03

ExchangelibPython郵箱自動(dòng)化管理

2011-08-25 09:33:25

MySQL運(yùn)維

2009-05-19 15:48:43

2025-01-02 08:00:39

2021-03-05 06:53:08

Android安卓自動(dòng)化APP

2025-01-03 16:47:02

Ansible自動(dòng)化運(yùn)維DevOps

2013-02-27 15:48:05

自動(dòng)化備份FacebookPB級(jí)別數(shù)據(jù)庫(kù)

2024-09-13 15:32:18

2009-04-16 17:14:52

2010-08-12 17:39:07

網(wǎng)站運(yùn)維自動(dòng)化管理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)