成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

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

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

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

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

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

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

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

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

這里是一個(gè)簡單的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的修改版本來執(zhí)行大多數(shù)復(fù)制操作。如果我們在復(fù)制成功完成后移除實(shí)例,替代過程也是同樣的操作。

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

2. 升級主實(shí)例

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

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

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

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

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

MPS會(huì)連接到一個(gè)存有當(dāng)前所有數(shù)據(jù)庫主機(jī)狀態(tài)和元數(shù)據(jù)的庫,這個(gè)庫還包含了當(dāng)前和過期MPS的復(fù)制操作。注冊表是由數(shù)據(jù)庫服務(wù)器自身進(jìn)行管理,因此數(shù)據(jù)庫集群和MPS可與不需要安裝一個(gè)復(fù)雜的應(yīng)用服務(wù)器。MPS本身實(shí)際上是無狀態(tài)的,它在自己的主機(jī)池上運(yùn)行并依賴于上述的庫來進(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ù)問題對主機(jī)進(jìn)行分類。(是否是在active的集群中被喚醒的?磁盤運(yùn)轉(zhuǎn)是否正常?閃存卡是否正常?)
  • 確保服務(wù)器已注冊,核心庫系統(tǒng)中所包含的元數(shù)據(jù)保持最新。
  • 在首次運(yùn)行中,如果沒有服務(wù)器的當(dāng)前記錄就將服務(wù)器上的實(shí)例置為初始的“reimage”狀態(tài)。這便是新服務(wù)器在MPS中生命的開端。
  • 所以每隔幾分鐘,每臺(tái)正常的服務(wù)器都會(huì)到核心庫“報(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ù)制的對象,并且復(fù)制正在進(jìn)行中。
  • 空閑解除分配狀態(tài):.臨時(shí)分流狀態(tài)。實(shí)例已經(jīng)改從生產(chǎn)環(huán)境移除并等待分流和清理。不會(huì)有實(shí)例在此狀態(tài)停留很久。
  • 排出狀態(tài):實(shí)例未被使用,而是預(yù)留給測試,數(shù)據(jù)中心維護(hù)等。需要有人工干預(yù)使得主機(jī)脫離此狀態(tài)。
  • 重塑(reimage)狀態(tài): 此狀態(tài)下,擁有所有實(shí)例的服務(wù)器正處在重塑或修復(fù)過程中。此狀態(tài)下的服務(wù)器會(huì)被移交并由一個(gè)稱為Windex的協(xié)同系統(tǒng)加以管理。

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

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

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

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

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

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

MPS所解決的常見問題

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

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

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

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

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

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

責(zé)任編輯:黃丹 來源: TechTarget中國
相關(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

2011-08-25 09:33:25

MySQL運(yùn)維

2019-04-17 07:59:09

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

2009-09-07 09:29:26

2021-04-19 14:00:03

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

2009-05-19 15:48:43

2025-01-02 08:00:39

2025-01-03 16:47:02

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

2021-03-05 06:53:08

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

2013-02-27 15:48:05

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

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ù)棧公眾號

主站蜘蛛池模板: 成年网站在线观看 | 日韩欧美一区二区三区在线播放 | 国产精品视频在线观看 | 中文字幕在线视频免费观看 | av毛片| 狠狠综合网 | 国产精品久久久久久久久大全 | 精品96久久久久久中文字幕无 | 成人av一区二区三区 | 欧美亚洲免费 | 亚洲最大av网站 | 一区二区三区在线观看免费视频 | 日韩毛片网 | 亚洲精品一区在线观看 | av黄色在线| 成人亚洲精品 | 久久69精品久久久久久久电影好 | 夜夜久久 | jlzzjlzz国产精品久久 | 亚洲一级视频在线 | 99久久久久久 | 国产女人第一次做爰毛片 | 91精品国产欧美一区二区 | 黄色激情毛片 | 爱综合 | 性高湖久久久久久久久3小时 | 一区二区三区高清 | 午夜成人免费视频 | 欧美一区二区三区的 | 成人综合在线视频 | 国精日本亚洲欧州国产中文久久 | av电影手机版 | 一级h片| 成人在线观看免费视频 | 午夜视频大全 | 精品免费国产 | 99爱国产 | 黄色精品 | 在线午夜 | 国产精品99 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 |