共計 4468 個字符,預計需要花費 12 分鐘才能閱讀完成。
這篇文章主要介紹“MySQL 的高可用架構技術是什么”,在日常操作中,相信很多人在 MySQL 的高可用架構技術是什么問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MySQL 的高可用架構技術是什么”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!
背景說明
隨著信息技術的發(fā)展,企業(yè)越來越依賴于信息化管理,各業(yè)務應用的數(shù)據(jù)信息,主要存儲在數(shù)據(jù)庫中,企業(yè)對這些數(shù)據(jù)訪問的連續(xù)性要求越來越高,為了避免因為數(shù)據(jù)的中斷導致各種損失,數(shù)據(jù)庫的高可用已成了企業(yè)信息化建設的重中之中。同時,對于電信、金融、能源、軍工等等涉及國計民生的行業(yè)或領域的關鍵業(yè)務對于關鍵數(shù)據(jù)存儲都需要高可用,必須保證數(shù)據(jù)系統(tǒng) 7×24 小時全天候運行,防止數(shù)據(jù)丟失、數(shù)據(jù)損壞。編程學習資料點擊領取
高可用架構介紹
高可用架構對于互聯(lián)網(wǎng)服務基本是標配,無論是應用服務還是數(shù)據(jù)庫服務都需要做到高可用。對于一個系統(tǒng)而言,可能包含很多模塊,比如前端應用,緩存,數(shù)據(jù)庫,搜索,消息隊列等,每個模塊都需要做到高可用,才能保證整個系統(tǒng)的高可用。對于數(shù)據(jù)庫服務而言,高可用可能更復雜,對用戶的服務可用,不僅僅是能訪問,還需要有正確性保證,因此數(shù)據(jù)庫的高可用需要更加認證對待。
MySQL 高可用架構分類
MySQL 實現(xiàn)高可用之 MMM
MySQL 實現(xiàn)高可用之 MHA
MySQL 實現(xiàn)高可用之主從架構
MySQL 實現(xiàn)高可用之 Cluster 模式
MMM 的技術分析
MMM(Master-Master replication manager for MySQL)是一套支持雙主故障切換和雙主日常管理的腳本程序。
MMM 使用 Perl 語言開發(fā),主要用來監(jiān)控和管理 MySQL Master-Master(雙主)復制,雖然叫做雙主復制,但是業(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ù)量的從服務器進行讀負載均衡,所以你可以用它來在一組居于復制的服務器啟動虛擬 ip,除此之外,它還有實現(xiàn)數(shù)據(jù)備份、節(jié)點之間重新同步功能的腳本。
MMM 的基礎組件分析
mmm_mond:監(jiān)控進程,負責所有的監(jiān)控工作,決定和處理所有節(jié)點角色活動。因此,腳本需要在監(jiān)管上運行。
mmm_agentd:運行在每個 msql 服務器上的代理進程,完成監(jiān)控的探針工作和執(zhí)行簡單的遠端服務設置。此腳本需要在被監(jiān)管機上運行。
mmm_control:一個簡單的腳本,提供管理 mmm_mond 進行的命令。
MMM 實現(xiàn)基本實現(xiàn)原理
MMM 提供了自動和手動兩種方式移除一組服務器中復制延遲較高的服務器的虛擬 ip,同時它還可以備份數(shù)據(jù),實現(xiàn)兩節(jié)點之間的數(shù)據(jù)同步等。
MySQL 本身沒有提供 replication failover 的解決方案,通過 MMM 方案能實現(xiàn)服務器的故障轉移,從而實現(xiàn) mysql 的高可用。
MMM 的使用場景
由于 MMM 無法完全的保證數(shù)據(jù)一致性,所以 MMM 適用于對數(shù)據(jù)的一致性要求不是很高,但是又想最大程度的保證業(yè)務可用性的場景。
對于那些對數(shù)據(jù)的一致性要求很高的業(yè)務,非常不建議采用 MMM 這種高可用架構。
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 的基礎組件
MHA 由兩部分組成:MHA Manager(管理節(jié)點)和 MHA Node(數(shù)據(jù)節(jié)點)。
MHA Manager 可以單獨部署在獨立的機器上管理多個 master-slave 集群,也可以部署在一臺 slave 節(jié)點上。
MHA 的實現(xiàn)原理
MHA Node 運行在每臺 MySQL 服務器上,MHA Manager 會定時探測集群中的 master 節(jié)點,當 master 出現(xiàn)故障時,它可以自動將最新數(shù)據(jù)的 slave 提升為新的 master,然后將所有其他的 slave 重新指向新的 master。整個故障轉移過程對應用程序完全透明。
在 MHA 自動故障切換過程中,MHA 試圖從宕機的主服務器上保存二進制日志,最大程度的保證數(shù)據(jù)的不丟失,但這并不總是可行的。
例如,如果主服務器硬件故障或無法通過 ssh 訪問,MHA 沒法保存二進制日志,只進行故障轉移而丟失了最新的數(shù)據(jù)。使用 MySQL 5.5 的半同步復制,可以降低數(shù)據(jù)丟失的風險。
MHA 可以與半同步復制結合起來,如果只有一個 slave 已經(jīng)收到了最新的二進制日志,MHA 可以將最新的二進制日志應用于其他所有的 slave 服務器上,因此可以保證所有節(jié)點的數(shù)據(jù)一致性。
MHA 的使用場景
目前 MHA 主要支持一主多從的架構。
要搭建 MHA,要求一個復制集群中必須最少有三臺數(shù)據(jù)庫服務器,一主二從,即一臺充當 master,一臺充當備用 master,另外一臺充當從庫。
因為至少需要三臺服務器,出于機器成本的考慮,淘寶也在該基礎上進行了改造,目前淘寶 TMHA 已經(jīng)支持一主一從。
從代碼層面看,MHA 就是一套 Perl 腳本,那么相信以阿里系的技術實力,將 MHA 改成支持一主一從也并非難事。
MySQL 主從架構
此種架構,一般初創(chuàng)企業(yè)比較常用,也便于后面步步的擴展
此架構特點
成本低,布署快速、方便
讀寫分離
還能通過及時增加從庫來減少讀庫壓力
主庫單點故障
數(shù)據(jù)一致性問題(同步延遲造成)
高可用軟件可使用 Heartbeat, 全面負責 VIP、數(shù)據(jù)與 DRBD 服務的管理
主故障后可自動快速切換,并且從庫仍然能通過 VIP 與新主庫進行數(shù)據(jù)同步
從庫也支持讀寫分離,可使用中間件或程序實現(xiàn)
MySQL Cluster 概述
MySQL Cluster 技術在分布式系統(tǒng)中為 MySQL 提供了冗余特性,增強了安全性,可以的提高系統(tǒng)的可靠性和數(shù)據(jù)的有效性。MySQL 集群需要一組計算機,每臺計算機可以理解為一個節(jié)點,這些節(jié)點的功能各不相同。MySQL Cluster 按照功能來分,可以分為三種節(jié)點:管理節(jié)點、數(shù)據(jù)節(jié)點和 SQL 節(jié)點。集群中的某臺計算機可以是某一個節(jié)點,也可以是兩種或者三種節(jié)點的集合,這些節(jié)點組合在一起,為應用提供具有高可靠性、高性能的 Cluster 數(shù)據(jù)管理;
目前企業(yè)數(shù)據(jù)量越來越大,所以對 MySQL 的要求進一步提高,以前的大部分高可用方案通常存在一定的缺陷,例如 MySQL Replication 方案,Master 是否存活檢測需要一定的時間,如果需要主從切換也需要一定的時間,因此高可用很大的程度上依賴于監(jiān)控軟件和自動化管理工具。隨著 MySQL Cluster 的不斷發(fā)展,終于在性能和高可用上得到了很大的提高;
MySQL Cluster 基本概念
MySQL Cluster 簡單地講是一種 MySQL 集群的技術,是由一組計算機構成,每臺計算機可以存放一個或者多個節(jié)點,其中包括 MySQL 服務器,DNB Cluster 的數(shù)據(jù)節(jié)點,管理其他節(jié)點,以及專門的數(shù)據(jù)訪問程序,這些節(jié)點組合在一起,就可以為應用提高可高性能、高可用性和可縮放性的 Cluster 數(shù)據(jù)管理;
MySQL Cluster 的訪問過程大致是這樣的,應用通常使用一定的負載均衡算法將對數(shù)據(jù)訪問分散到不同的 SQL 節(jié)點,SQL 節(jié)點對數(shù)據(jù)節(jié)點進行數(shù)據(jù)訪問并從數(shù)據(jù)節(jié)點返回數(shù)據(jù)結果,管理節(jié)點僅僅只是對 SQL 節(jié)點和數(shù)據(jù)節(jié)點進行配置管理;
理解 MySQL Cluster 節(jié)點
MySQL Cluster 按照節(jié)點類型可以分為 3 種類型的節(jié)點,分別是管理節(jié)點、SQL 節(jié)點、數(shù)據(jù)節(jié)點,所有的這些節(jié)點構成了一個完整的 MySQL 集群體系,事實上,數(shù)據(jù)保存在 NDB 存儲服務器的存儲引擎中,表結構則保存在 MySQL 服務器中,應用程序通過 MySQL 服務器訪問數(shù)據(jù),而集群管理服務器則通過管理工具 ndb_mgmd 來管理 NDB 存儲服務器;
【1. 管理節(jié)點】
管理節(jié)點主要是用來對其他的節(jié)點進行管理。通常通過配置 config.ini 文件來配置集群中有多少需要維護的副本、配置每個數(shù)據(jù)節(jié)點上為數(shù)據(jù)和索引分配多少內(nèi)存、IP 地址、以及在每個數(shù)據(jù)節(jié)點上保存數(shù)據(jù)的磁盤路徑;
管理節(jié)點通常管理 Cluster 配置文件和 Cluster 日志。Cluster 中的每個節(jié)點從管理服務器檢索配置信息,并請求確定管理服務器所在位置的方式。如果節(jié)點內(nèi)出現(xiàn)新的事件的時候,節(jié)點將這類事件的信息傳輸?shù)焦芾矸掌?,將這類信息寫入到 Cluster 日志中;
一般在 MySQL Cluster 體系中至少需要一個管理節(jié)點,另外值得注意的是,因為數(shù)據(jù)節(jié)點和 SQL 節(jié)點在啟動之前需要讀取 Cluster 的配置信息,所以通常管理節(jié)點是最先啟動的;
【2.SQL 節(jié)點】
SQL 節(jié)點簡單地講就是 mysqld 服務器,應用不能直接訪問數(shù)據(jù)節(jié)點,只能通過 SQL 節(jié)點訪問數(shù)據(jù)節(jié)點來返回數(shù)據(jù)。任何一個 SQL 節(jié)點都是連接到所有的存儲節(jié)點的,所以當人任何一個存儲節(jié)點發(fā)生故障的時候,SQL 節(jié)點都可以把請求轉移到另一個存儲節(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é)點之間復制數(shù)據(jù),任何一個節(jié)點發(fā)生了故障,始終會有另外的數(shù)據(jù)節(jié)點存儲數(shù)據(jù);
通常這 3 種不同邏輯的節(jié)點可以分布在不同的計算機上面,集群最少有 3 臺計算機,為了保證能夠正常維護集群服務,通常將管理節(jié)點放在一個單獨的主機上。
到此,關于“MySQL 的高可用架構技術是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注丸趣 TV 網(wǎng)站,丸趣 TV 小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>