一起分析MySQL的高可用架構(gòu)技術(shù)

本篇文章中給大家?guī)砹岁P(guān)于mysql中高可用架構(gòu)技術(shù)分析的相關(guān)知識,其中主要介紹了mmm的技術(shù)分析、mysql主從架構(gòu)以及cluster的相關(guān)問題,希望對大家有幫助。

一起分析MySQL的高可用架構(gòu)技術(shù)

背景說明

隨著信息技術(shù)的發(fā)展,企業(yè)越來越依賴于信息化管理,各業(yè)務(wù)應(yīng)用的數(shù)據(jù)信息,主要存儲在數(shù)據(jù)庫中,企業(yè)對這些數(shù)據(jù)訪問的連續(xù)性要求越來越高,為了避免因為數(shù)據(jù)的中斷導(dǎo)致各種損失,數(shù)據(jù)庫的高可用已成了企業(yè)信息化建設(shè)的重中之中。同時,對于電信、金融、能源、軍工等等涉及國計民生的行業(yè)或領(lǐng)域的關(guān)鍵業(yè)務(wù)對于關(guān)鍵數(shù)據(jù)存儲都需要高可用,必須保證數(shù)據(jù)系統(tǒng)7×24小時全天候運行,防止數(shù)據(jù)丟失、數(shù)據(jù)損壞。編程學(xué)習資料點擊領(lǐng)取

高可用架構(gòu)介紹

高可用架構(gòu)對于互聯(lián)網(wǎng)服務(wù)基本是標配,無論是應(yīng)用服務(wù)還是數(shù)據(jù)庫服務(wù)都需要做到高可用。對于一個系統(tǒng)而言,可能包含很多模塊,比如前端應(yīng)用,緩存,數(shù)據(jù)庫,搜索,消息隊列等,每個模塊都需要做到高可用,才能保證整個系統(tǒng)的高可用。對于數(shù)據(jù)庫服務(wù)而言,高可用可能更復(fù)雜,對用戶的服務(wù)可用,不僅僅是能訪問,還需要有正確性保證,因此數(shù)據(jù)庫的高可用需要更加認證對待。

mysql高可用架構(gòu)分類

  • MySQL實現(xiàn)高可用之MMM
  • MySQL實現(xiàn)高可用之MHA
  • MySQL實現(xiàn)高可用之主從架構(gòu)
  • MySQL實現(xiàn)高可用之Cluster模式

MMM的技術(shù)分析

MMM(Master-Master replication manager for MySQL)是一套支持雙主故障切換和雙主日常管理的腳本程序。

  • MMM使用Perl語言開發(fā),主要用來監(jiān)控和管理MySQL Master-Master(雙主)復(fù)制,雖然叫做雙主復(fù)制,但是業(yè)務(wù)上同一時刻只允許對一個主進行寫入,另一臺備選主上提供部分讀服務(wù),以加速在主主切換時刻備選主的預(yù)熱

  • MMM的監(jiān)控端是會提供多個虛擬ip(vip),包括一個可寫的vip,多個可讀的vip,通過監(jiān)管的管理,這些ip會綁定在可用的mysql上,當某一臺mysql宕機時,會將vip遷移到其他mysql。

  • MMM這套腳本程序一方面實現(xiàn)了故障切換的功能,另一方面其內(nèi)部附加的工具腳本也可以實現(xiàn)多個slave的read負載均衡。

  • 這個套件也能基于標準的主從配置的任意數(shù)量的從服務(wù)器進行讀負載均衡,所以你可以用它來在一組居于復(fù)制的服務(wù)器啟動虛擬ip,除此之外,它還有實現(xiàn)數(shù)據(jù)備份、節(jié)點之間重新同步功能的腳本。

MMM的基礎(chǔ)組件分析

  • mmm_mond:監(jiān)控進程,負責所有的監(jiān)控工作,決定和處理所有節(jié)點角色活動。因此,腳本需要在監(jiān)管上運行。
  • mmm_agentd:運行在每個msql服務(wù)器上的代理進程,完成監(jiān)控的探針工作和執(zhí)行簡單的遠端服務(wù)設(shè)置。此腳本需要在被監(jiān)管機上運行。
  • mmm_control:一個簡單的腳本,提供管理mmm_mond進行的命令。

MMM實現(xiàn)基本實現(xiàn)原理

MMM提供了自動和手動兩種方式移除一組服務(wù)器中復(fù)制延遲較高的服務(wù)器的虛擬ip,同時它還可以備份數(shù)據(jù),實現(xiàn)兩節(jié)點之間的數(shù)據(jù)同步等。

MySQL本身沒有提供replication failover的解決方案,通過MMM方案能實現(xiàn)服務(wù)器的故障轉(zhuǎn)移,從而實現(xiàn)mysql的高可用。

MMM的使用場景

由于MMM無法完全的保證數(shù)據(jù)一致性,所以MMM適用于對數(shù)據(jù)的一致性要求不是很高,但是又想最大程度的保證業(yè)務(wù)可用性的場景。

對于那些對數(shù)據(jù)的一致性要求很高的業(yè)務(wù),非常不建議采用MMM這種高可用架構(gòu)。

  • MMM項目來自 Google:code.google.com/p/mysql-mas…
  • 官方網(wǎng)站為:mysql-mmm.org

MHA簡介

MHA(Master High Availability)目前在MySQL高可用方面是一個相對成熟的解決方案,它由日本DeNA公司的youshimaton(現(xiàn)就職于Facebook公司)開發(fā),是一套優(yōu)秀的作為MySQL高可用性環(huán)境下故障切換和主從提升的高可用軟件。在MySQL故障切換過程中,MHA能做到在0~30秒之內(nèi)自動完成數(shù)據(jù)庫的故障切換操作,并且在進行故障切換的過程中,MHA能在最大程度上保證數(shù)據(jù)的一致性,以達到真正意義上的高可用。

  • MHA是一款開源的MySQL高可用程序,MHA在監(jiān)控到master節(jié)點故障時,會自動提升其中擁有最新數(shù)據(jù)的slave節(jié)點成為新的master節(jié)點。

  • MHA會獲取其他節(jié)點的額外信息來避免一致性方面的問題,也就是MHA會獲取其他從節(jié)點中的數(shù)據(jù)信息,并將信息發(fā)給最接近主節(jié)點的從節(jié)點,這樣主節(jié)點故障時會提升此從節(jié)點為主節(jié)點,而此從節(jié)點擁有其他從節(jié)點所有的數(shù)據(jù)信息。

  • MHA還提供了master節(jié)點的在線切換功能,即按需切換master/slave節(jié)點。

MHA的基礎(chǔ)組件

MHA由兩部分組成:MHA Manager(管理節(jié)點)和MHA Node(數(shù)據(jù)節(jié)點)。

MHA Manager可以單獨部署在獨立的機器上管理多個master-slave集群,也可以部署在一臺slave節(jié)點上。

MHA的實現(xiàn)原理

  • MHA Node運行在每臺MySQL服務(wù)器上,MHA Manager會定時探測集群中的master節(jié)點,當master出現(xiàn)故障時,它可以自動將最新數(shù)據(jù)的slave提升為新的master,然后將所有其他的slave重新指向新的master。整個故障轉(zhuǎn)移過程對應(yīng)用程序完全透明。
  • 在MHA自動故障切換過程中,MHA試圖從宕機的主服務(wù)器上保存二進制日志,最大程度的保證數(shù)據(jù)的不丟失,但這并不總是可行的。
  • 例如,如果主服務(wù)器硬件故障或無法通過ssh訪問,MHA沒法保存二進制日志,只進行故障轉(zhuǎn)移而丟失了最新的數(shù)據(jù)。使用MySQL 5.5的半同步復(fù)制,可以降低數(shù)據(jù)丟失的風險。
  • MHA可以與半同步復(fù)制結(jié)合起來,如果只有一個slave已經(jīng)收到了最新的二進制日志,MHA可以將最新的二進制日志應(yīng)用于其他所有的slave服務(wù)器上,因此可以保證所有節(jié)點的數(shù)據(jù)一致性。

MHA的使用場景

目前MHA主要支持一主多從的架構(gòu)。

  • 要搭建MHA,要求一個復(fù)制集群中必須最少有三臺數(shù)據(jù)庫服務(wù)器,一主二從,即一臺充當master,一臺充當備用master,另外一臺充當從庫。

  • 因為至少需要三臺服務(wù)器,出于機器成本的考慮,淘寶也在該基礎(chǔ)上進行了改造,目前淘寶TMHA已經(jīng)支持一主一從。

  • 從代碼層面看,MHA就是一套Perl腳本,那么相信以阿里系的技術(shù)實力,將MHA改成支持一主一從也并非難事。

MySQL主從架構(gòu)

此種架構(gòu),一般初創(chuàng)企業(yè)比較常用,也便于后面步步的擴展

此架構(gòu)特點

  1. 成本低,布署快速、方便
  2. 讀寫分離
  3. 還能通過及時增加從庫來減少讀庫壓力
  4. 主庫單點故障
  5. 數(shù)據(jù)一致性問題(同步延遲造成)

一起分析MySQL的高可用架構(gòu)技術(shù)

  1. 高可用軟件可使用Heartbeat,全面負責VIP、數(shù)據(jù)與DRBD服務(wù)的管理
  2. 主故障后可自動快速切換,并且從庫仍然能通過VIP與新主庫進行數(shù)據(jù)同步
  3. 從庫也支持讀寫分離,可使用中間件或程序?qū)崿F(xiàn)

一起分析MySQL的高可用架構(gòu)技術(shù)

MySQL Cluster概述

MySQL Cluster技術(shù)在分布式系統(tǒng)中為MySQL提供了冗余特性,增強了安全性,可以的提高系統(tǒng)的可靠性和數(shù)據(jù)的有效性。MySQL集群需要一組計算機,每臺計算機可以理解為一個節(jié)點,這些節(jié)點的功能各不相同。MySQL Cluster按照功能來分,可以分為三種節(jié)點:管理節(jié)點、數(shù)據(jù)節(jié)點和SQL節(jié)點。集群中的某臺計算機可以是某一個節(jié)點,也可以是兩種或者三種節(jié)點的集合,這些節(jié)點組合在一起,為應(yīng)用提供具有高可靠性、高性能的Cluster數(shù)據(jù)管理;

目前企業(yè)數(shù)據(jù)量越來越大,所以對MySQL的要求進一步提高,以前的大部分高可用方案通常存在一定的缺陷,例如MySQL Replication方案,Master是否存活檢測需要一定的時間,如果需要主從切換也需要一定的時間,因此高可用很大的程度上依賴于監(jiān)控軟件和自動化管理工具。隨著MySQL Cluster的不斷發(fā)展,終于在性能和高可用上得到了很大的提高;

MySQL Cluster基本概念

MySQL Cluster簡單地講是一種MySQL集群的技術(shù),是由一組計算機構(gòu)成,每臺計算機可以存放一個或者多個節(jié)點,其中包括MySQL服務(wù)器,DNB Cluster的數(shù)據(jù)節(jié)點,管理其他節(jié)點,以及專門的數(shù)據(jù)訪問程序,這些節(jié)點組合在一起,就可以為應(yīng)用提高可高性能、高可用性和可縮放性的Cluster數(shù)據(jù)管理;

MySQL Cluster的訪問過程大致是這樣的,應(yīng)用通常使用一定的負載均衡算法將對數(shù)據(jù)訪問分散到不同的SQL節(jié)點,SQL節(jié)點對數(shù)據(jù)節(jié)點進行數(shù)據(jù)訪問并從數(shù)據(jù)節(jié)點返回數(shù)據(jù)結(jié)果,管理節(jié)點僅僅只是對SQL節(jié)點和數(shù)據(jù)節(jié)點進行配置管理;

理解MySQL Cluster節(jié)點

MySQL Cluster按照節(jié)點類型可以分為3種類型的節(jié)點,分別是管理節(jié)點、SQL節(jié)點、數(shù)據(jù)節(jié)點,所有的這些節(jié)點構(gòu)成了一個完整的MySQL集群體系,事實上,數(shù)據(jù)保存在NDB存儲服務(wù)器的存儲引擎中,表結(jié)構(gòu)則保存在MySQL服務(wù)器中,應(yīng)用程序通過MySQL服務(wù)器訪問數(shù)據(jù),而集群管理服務(wù)器則通過管理工具ndb_mgmd來管理NDB存儲服務(wù)器;

【1.管理節(jié)點】

管理節(jié)點主要是用來對其他的節(jié)點進行管理。通常通過配置config.ini文件來配置集群中有多少需要維護的副本、配置每個數(shù)據(jù)節(jié)點上為數(shù)據(jù)和索引分配多少內(nèi)存、IP地址、以及在每個數(shù)據(jù)節(jié)點上保存數(shù)據(jù)的磁盤路徑;

管理節(jié)點通常管理Cluster配置文件和Cluster日志。Cluster中的每個節(jié)點從管理服務(wù)器檢索配置信息,并請求確定管理服務(wù)器所在位置的方式。如果節(jié)點內(nèi)出現(xiàn)新的事件的時候,節(jié)點將這類事件的信息傳輸?shù)焦芾矸?wù)器,將這類信息寫入到Cluster日志中;

一般在MySQL Cluster體系中至少需要一個管理節(jié)點,另外值得注意的是,因為數(shù)據(jù)節(jié)點和SQL節(jié)點在啟動之前需要讀取Cluster的配置信息,所以通常管理節(jié)點是最先啟動的;

【2.SQL節(jié)點】

SQL節(jié)點簡單地講就是mysqld服務(wù)器,應(yīng)用不能直接訪問數(shù)據(jù)節(jié)點,只能通過SQL節(jié)點訪問數(shù)據(jù)節(jié)點來返回數(shù)據(jù)。任何一個SQL節(jié)點都是連接到所有的存儲節(jié)點的,所以當人任何一個存儲節(jié)點發(fā)生故障的時候,SQL節(jié)點都可以把請求轉(zhuǎn)移到另一個存儲節(jié)點執(zhí)行。通常來講,SQL節(jié)點越多越好,SQL節(jié)點越多,分配到每個SQL節(jié)點的負載就越小,系統(tǒng)的整體性能就越好;

【3.數(shù)據(jù)節(jié)點】

數(shù)據(jù)節(jié)點用來存放Cluster里面的數(shù)據(jù),MySQL Cluster在各個數(shù)據(jù)節(jié)點之間復(fù)制數(shù)據(jù),任何一個節(jié)點發(fā)生了故障,始終會有另外的數(shù)據(jù)節(jié)點存儲數(shù)據(jù);

通常這3種不同邏輯的節(jié)點可以分布在不同的計算機上面,集群最少有3臺計算機,為了保證能夠正常維護集群服務(wù),通常將管理節(jié)點放在一個單獨的主機上;

推薦學(xué)習:mysql

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊7 分享