自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL數(shù)據(jù)庫的高可用性分析

運維 數(shù)據(jù)庫運維
MySQL數(shù)據(jù)庫是目前開源應(yīng)用最大的關(guān)系型數(shù)據(jù)庫,有海量的應(yīng)用將數(shù)據(jù)存儲在MySQL數(shù)據(jù)庫中。存儲數(shù)據(jù)的安全性和可靠性是生產(chǎn)數(shù)據(jù)庫的關(guān)注重點。本文分析了目前采用較多的保障MySQL可用性方案。

MySQL數(shù)據(jù)庫是目前開源應(yīng)用***的關(guān)系型數(shù)據(jù)庫,有海量的應(yīng)用將數(shù)據(jù)存儲在MySQL數(shù)據(jù)庫中。存儲數(shù)據(jù)的安全性和可靠性是生產(chǎn)數(shù)據(jù)庫的關(guān)注重點。本文分析了目前采用較多的保障MySQL可用性方案。

 

 

MySQL Replication

MySQL Replication是MySQL官方提供的主從同步方案,用于將一個MySQL實例的數(shù)據(jù),同步到另一個實例中。Replication為保證數(shù)據(jù)安全做了重要的保證,也是現(xiàn)在運用最廣的MySQL容災(zāi)方案。Replication用兩個或以上的實例搭建了MySQL主從復(fù)制集群,提供單點寫入,多點讀取的服務(wù),實現(xiàn)了讀的scale out。

 

圖1. MySQL Replication主從復(fù)制集群

如圖一所示,一個主實例(M),三個從實例(S),通過replication,Master生成event的binlog,然后發(fā)給slave,Slave將event寫入relaylog,然后將其提交到自身數(shù)據(jù)庫中,實現(xiàn)主從數(shù)據(jù)同步。對于數(shù)據(jù)庫之上的業(yè)務(wù)層來說,基于MySQL的主從復(fù)制集群,單點寫入Master,在event同步到Slave后,讀邏輯可以從任何一個Slave讀取數(shù)據(jù),以讀寫分離的方式,大大降低Master的運行負載,同時提升了Slave的資源利用。

對于高可用來說,MySQL Replication有個重要的缺陷:數(shù)據(jù)復(fù)制的時延。在通常情況下,MySQL Replication數(shù)據(jù)復(fù)制是異步的,即是MySQL寫binlog后,發(fā)送給Slave并不等待Slave返回確認收到,本地事務(wù)就提交了。一旦出現(xiàn)網(wǎng)絡(luò)延遲或中斷,數(shù)據(jù)延遲發(fā)送到Slave側(cè),主從數(shù)據(jù)就會出現(xiàn)不一致。在這個階段中,Master一旦宕機,未發(fā)送到Slave的數(shù)據(jù)就丟失了,無法做到數(shù)據(jù)的高可用。

為了解決這個問題,google提供了解決方案:半同步和同步復(fù)制。在數(shù)據(jù)異步復(fù)制的基礎(chǔ)之上,做了一點修改。半同步復(fù)制是Master等待event寫入Slave的relay后,再提交本地,保證Slave一定收到了需要同步的數(shù)據(jù)。同步復(fù)制不不僅是要求Slave收到數(shù)據(jù),還要求Slave將數(shù)據(jù)commit到數(shù)據(jù)庫中,從而保證每次的數(shù)據(jù)寫入,主從數(shù)據(jù)都是一致的。

基于半同步和同步復(fù)制,MySQL Replication的高可用得到了質(zhì)的提升,特別是同步復(fù)制?;谕綇?fù)制的MySQL Replication集群,每個實例讀取的數(shù)據(jù)都是一致的,不會存在Slave幻讀。同時,Master宕機后,應(yīng)用程序切換到任何一個Slave都可以保證讀寫數(shù)據(jù)的一致性。但是,同步復(fù)制帶來了重大的性能下降,這里需要做一個折衷。另外,MySQL Replication的主從切換需要人工介入判斷,同時需要Slave的replaylog提交完畢,故障恢復(fù)時間會比較長。

MySQL Fabric

MySQL Fabric是MySQL社區(qū)提供的管理多個MySQL服務(wù)的擴展。高可用是它設(shè)計的主要特性之一。

Fabric將兩個及以上的MySQL實例劃分為一個HA Group。其中的一個是主,其余的都是從。HA Group保證訪問指定HA Group的數(shù)據(jù)總是可用的。其基礎(chǔ)的數(shù)據(jù)復(fù)制是基于MySQL Replication,然后,F(xiàn)abric提供了更多的特性:

失效檢測和恢復(fù):Fabric監(jiān)控HA Group中的主實例,一旦發(fā)現(xiàn)主實例失效,F(xiàn)abric會從HA Group中剩余的從實例中選擇一個,并將其提升為主實例。

讀寫均衡:Fabric可以自動的處理一個HA Group的讀寫操作,將寫操作發(fā)送給主實例,而讀請求在多個從實例之間做負載均衡。

 

圖2. Fabric

 

MHA

MHA(MySQL-master-ha)是目前廣泛使用的MySQL主從復(fù)制的高可用方案。MHA設(shè)計目標是自動實現(xiàn)主實例宕機后,從機切換為主,并盡量降低切換時延(通常在10-30s內(nèi)切換完成)。同時,由MHA保證在切換過程中的數(shù)據(jù)一致性。MHA對MySQL的主從復(fù)制集群非常友好,沒有對集群做任何侵入性的修改。

MHA的一個重點特性是:在主實例宕機后,MHA可以自動的判斷主從復(fù)制集群中哪個從實例的relaylog是***的,并將***從實例的差異log“應(yīng)用”到其余的從實例中,從而保證每個實例的數(shù)據(jù)一致。通常情況下,MHA需要10s左右檢測主實例異常,并將主實例關(guān)閉從而避免腦裂。然后再用10s左右將差異的log event同步,并啟用新的Master。整個MHA的RTO時間大約在30s。

MySQL Cluster

MySQL Cluster是一個高度可擴展的,兼容ACID事務(wù)的實時數(shù)據(jù)庫,基于分布式架構(gòu)不存在單點故障,MySQL Cluster支持自動水平擴容,并能做自動的讀寫負載均衡。

MySQL Cluster使用了一個叫NDB的內(nèi)存存儲引擎來整合多個MySQL實例,提供一個統(tǒng)一的服務(wù)集群。如圖三所示。

 

圖3. MySQL Cluster組成

MySQL Cluster由SQL Nodes,DataNodes,和NDB Management Server組成。SQL Nodes是應(yīng)用程序的接口,像普通的mysqld服務(wù)一樣,接受用戶的SQL輸入,執(zhí)行并返回結(jié)果。Data Nodes是數(shù)據(jù)存儲節(jié)點,NDB Management Server用來管理集群中的每個node。

MySQL Cluster采用了新的數(shù)據(jù)分片和容錯的方式來實現(xiàn)數(shù)據(jù)安全和高可用。其由Partition,Replica,Data Node,Node Group構(gòu)成。

Partition:NDB一張表的一個數(shù)據(jù)分片,包含一張表的一部分數(shù)據(jù)。

Replica:一個Partition的拷貝。一個Partition可以有一個或多個Replica,一個Partition的所有Replica數(shù)據(jù)都是一致的。

Data Node:Replica的存儲載體,每個Node存儲一個或多個Replica。

Node Group:一個Data Node的集合。

圖4. MySQL Cluster數(shù)據(jù)高可用

一個MySQL Cluster有4個Node,被分為了兩個Grou。Node1和2歸屬于Group0,Node3和4歸屬于Group1,。有一張表被分為4個Partition,并分別有兩個Replica。Partition0和Partition2的兩個Replica,分別存儲在Node1和Node2上,Pratition1和Partition3的兩個Replica分別存在Node3和Node4上。這樣,對于一張表的一個Partition來說,在整個集群有兩份數(shù)據(jù),并分布在兩個獨立的Node上,實現(xiàn)了數(shù)據(jù)容災(zāi)。同時,每次對一個Partition的寫操作,都會在兩個Replica上呈現(xiàn),如果Primary Replica異常,那么Backup Replica可以立即提供服務(wù),實現(xiàn)數(shù)據(jù)的高可用。

小結(jié)

本文分析了目前MySQL使用較多的幾種MySQL數(shù)據(jù)復(fù)制和高可用方案,從使用來看,MySQL Replication是使用最為廣泛的數(shù)據(jù)復(fù)制方案,因為是MySQL原生支持,針對其在不同場景下的一些缺陷,衍生出了半同步復(fù)制,強同步復(fù)制等數(shù)據(jù)高可用的方案。在此基礎(chǔ)之上,為了運維方便,MySQL Fabric和MHA應(yīng)運而生,從不同的方向解決了主從切換時數(shù)據(jù)一致性問題和流程自動化的問題。此外,隨著分布式系統(tǒng)架構(gòu)和方案的逐步成熟。MySQL Cluster設(shè)計了全新的分布式架構(gòu),采用多副本,Sharding等特性,支持水平擴展,做到了5個9的數(shù)據(jù)庫服務(wù)質(zhì)量保證。

責(zé)任編輯:龐桂玉 來源: HTML之家
相關(guān)推薦

2022-05-09 09:42:24

高可用分布式數(shù)據(jù)庫

2010-09-13 14:45:56

SQL Server

2023-12-05 09:31:46

數(shù)據(jù)庫架構(gòu)

2024-02-27 09:48:25

Redis集群數(shù)據(jù)庫

2011-07-13 08:52:25

2012-07-04 11:21:07

OpenStack

2011-07-13 09:42:05

NetApp FileSnapshot

2012-09-04 13:43:31

SQL Server

2013-08-28 10:30:39

vSphere

2022-02-16 08:00:00

數(shù)據(jù)庫DAG服務(wù)器

2023-12-11 07:44:36

MySQL架構(gòu)高可用

2013-12-04 09:52:50

hadoop

2016-09-08 12:44:11

2010-12-31 14:36:15

ExchangeSer

2009-07-09 10:25:16

2011-08-25 15:42:49

2024-12-11 08:35:55

2024-08-13 15:42:19

2011-03-09 08:53:02

MySQL優(yōu)化集群

2009-02-26 16:59:36

VMware虛擬化虛擬機
點贊
收藏

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