MHA高可用架構與Atlas讀寫分離

来源:https://www.cnblogs.com/clsn/archive/2018/01/05/8150688.html
-Advertisement-
Play Games

1.1 MHA簡介 1.1.1 MHA軟體介紹 MHA(Master High Availability)目前在MySQL高可用方面是一個相對成熟的解決方案,它由日本DeNA公司youshimaton(現就職於Facebook公司)開發,是一套優秀的作為MySQL高可用性環境下故障切換和主從提升的高 ...


1.1 MHA簡介

1.1.1 MHA軟體介紹

  MHA(Master High Availability)目前在MySQL高可用方面是一個相對成熟的解決方案,它由日本DeNA公司youshimaton(現就職於Facebook公司)開發,是一套優秀的作為MySQL高可用性環境下故障切換和主從提升的高可用軟體。在MySQL故障切換過程中,MHA能做到在10~30秒之內自動完成資料庫的故障切換操作,並且在進行故障切換的過程中,MHA能在最大程度上保證數據的一致性,以達到真正意義上的高可用。

  MHA能夠在較短的時間內實現自動故障檢測和故障轉移,通常在10-30秒以內;在複製 框架中,MHA能夠很好地解決複製過程中的數據一致性問題,由於不需要在現有的 replication中添加額外的伺服器,僅需要一個manager節點,而一個Manager能管理多套複製,所以能大大地節約伺服器的數量;另外,安裝簡單,無性能損耗,以及不需要修改現 有的複製部署也是它的優勢之處。

  MHA還提供線上主庫切換的功能,能夠安全地切換當前運行的主庫到一個新的主庫中 (通過將從庫提升為主庫),大概0.5-2秒內即可完成。

  該軟體由兩部分組成:MHA Manager(管理節點)和MHA Node(數據節點)。MHA Manager可以單獨部署在一臺獨立的機器上管理多個master-slave集群,也可以部署在一臺slave節點上。MHA Node運行在每台MySQL伺服器上,MHA Manager會定時探測集群中的master節點,master出現故障時,它可以自動將最新數據的slave提升為新的master,然後將所有其他的slave重新指向新的master整個故障轉移過程對應用程式完全透明。

  在MHA自動故障切換過程中,MHA試圖從宕機的主伺服器上保存二進位日誌,最大程度的保證數據的不丟失,但這並不總是可行的。例如,如果主伺服器硬體故障或無法通過ssh訪問,MHA沒法保存二進位日誌,只進行故障轉移而丟失了最新的數據。使用MySQL 5.5的半同步複製,可以大大降低數據丟失的風險。

  MHA可以與半同步複製結合起來。如果只有一個slave已經收到了最新的二進位日誌,MHA可以將最新的二進位日誌應用於其他所有的slave伺服器上,因此可以保證所有節點的數據一致性。

  目前MHA主要支持一主多從的架構,要搭建MHA,要求一個複製集群中必須最少有三台資料庫伺服器,一主二從,即一臺充當master,一臺充當備用master,另外一臺充當從庫,因為至少需要三台伺服器,出於機器成本的考慮,淘寶也在該基礎上進行了改造,目前淘寶TMHA已經支持一主一從。

1.1.2 MHA工作原理

 

工作原理說明:

 

   1、保存master上的所有binlog事件

    2、找到含有最新binlog位置點的slave

    3、通過中繼日誌將數據恢復到其他的slave

    4、將包含最新binlog位置點的slave提升為master

    5、將其他從庫slave指向新的master原slave01 並開啟主從複製

    6、將保存下來的binlog恢復到新的master上

 

1、監控所有node節點MHA功能說明:

2、自動故障切換(failover)

     前提是必須有三個節點存在,並且有兩個從庫

      (1)選主前提,按照配置文件的順序進行,但是如果此節點後主庫100M以上relay-log 就不會選

      (2)如果你設置了權重,總會切換帶此節點;一般在多地多中心的情況下,一般會把權重設置在本地節點。

      (3)選擇s1為新主

      (4)保存主庫binlog日誌

3、重新構建主從

      (1)將有問題的節點剔除MHA

          進行第一階段數據補償,S2缺失部分補全90

      (2)s1切換角色為新主,將s2指向新主S1

            s2  change master to s1

      (3) 第二階段數據補償

            將保存過來的新主和原有主缺失部分的binlog,應用到新主。

      (4)虛擬IP漂移到新主,對應用透明無感知

      (5)通知管理員故障切換

1.1.3 MHA高可用架構圖

 

1.1.4 MHA工具介紹

  MHA軟體由兩部分組成,Manager工具包和Node工具包,具體的說明如下:

  Manager工具包主要包括以下幾個工具:

masterha_check_ssh             #檢査 MHA 的 ssh-key^
masterha_check_repl            #檢査主從複製情況
masterha_manger                #啟動MHA
masterha_check_status          #檢測MHA的運行狀態^
masterha_mast er_monitor       #檢測master是否宕機一
masterha_mast er_switch        #手動故障轉移—
masterha_conf_host             #手動添加server倍息一
masterha_secondary_check       #建立TCP連接從遠程伺服器v
masterha_stop                  #停止MHA

Node工具包主要包括以下幾個工具:    

save_binary_1ogs       #保存宕機的master的binlog
apply_diff_relay_logs   #識別relay log的差異
filter_mysqlbinlog           #防止回滾事件一MHA已不再使用這個工具
purge_relay_logs           #清除中繼曰志一不會阻塞SQL線程

1.1.5 MHA的優點

1、自動故障轉移

2、主庫崩潰不存在數據不一致的情況

3、不需要對當前的mysql環境做重大修改

4、不需要添加額外的伺服器

5、性能優秀,可以工作再半同步和非同步複製框架

6、只要replication支持的存儲引擎mha都支持

1.2 環境說明

   在本次的實驗中,共需要用到三台主機,系統、軟體說明如下。

1.2.1 系統環境說明

db01主機(master)

[root@db01 ~]# cat /etc/redhat-release 
CentOS release 6.9 (Final)
[root@db01 ~]# uname -r
2.6.32-696.el6.x86_64
[root@db01 ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
[root@db01 ~]# getenforce 
Disabled
[root@db01 ~]# hostname -I
10.0.0.51 172.16.1.51

db02主機(slave1)

 1 [root@db02 ~]# cat /etc/redhat-release 
 2 CentOS release 6.9 (Final)
 3 [root@db02 ~]# uname -r
 4 2.6.32-696.el6.x86_64
 5 [root@db02 ~]# /etc/init.d/iptables status
 6 iptables: Firewall is not running.
 7 [root@db02 ~]# getenforce 
 8 Disabled
 9 [root@db02 ~]# hostname -I
10 10.0.0.52 172.16.1.52
View Code db02主機環境說明 

db03主機(slave1,MHA Manages、Atlas節點)

 1 [root@db03 ~]# cat /etc/redhat-release 
 2 CentOS release 6.9 (Final)
 3 [root@db03 ~]# uname -r
 4 2.6.32-696.el6.x86_64
 5 [root@db03 ~]# /etc/init.d/iptables status
 6 iptables: Firewall is not running.
 7 [root@db03 ~]# getenforce 
 8 Disabled
 9 [root@db03 ~]# hostname -I
10 10.0.0.53 172.16.1.53
View Code  db03主機環境說明 

1.2.2 mysql軟體說明

         三台伺服器上都全新安裝mysql 5.6.36 :

[root@db01 ~]# mysql --version
mysql  Ver 14.14 Distrib 5.6.36, for Linux (x86_64) using  EditLine wrapper

  關於mysql資料庫具體的安裝方法參考:http://www.cnblogs.com/clsn/p/8038964.html#_label3

1.3 基於GTID的主從複製配置

1.3.1 先決條件

  

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Sqoop是一個用來將Hadoop和關係型資料庫中的數據相互轉移的工具,可以將一個關係型資料庫(例如 : MySQL ,Oracle ,Postgres等)中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關係型資料庫中。Sqoop是為大數據集設計的。Sqoop支持增量更新,將新記 ...
  • SQL Server授權購買簡單介紹 之前有同事問我,使用盜版序列號的SQL Server到底有沒有性能限制,之前本人一直沒有深入研究過,後來經過一番資料搜集和查證,彙總成這篇文章 微軟的SQL Server產品分為兩種賣法 1、盒裝 1、盒裝 :Server+CAL授權方式(SQL2017取消了S ...
  • 概念對比介紹 相信有些人會對ORACLE當中的AMM(Automatic Memory Management)與ASMM(Automatic Shared Memory Management)有些迷惑或混淆,不清楚兩者的異同,本文會從幾個方面來總結一下兩者的異同。如有不足或疏漏之處,敬請指正! 從O... ...
  • Liquibase是一個用於跟蹤、管理和應用資料庫變化的開源的資料庫重構工具。它將所有資料庫的變化(包括結構和數據)都保存在XML文件中,便於版本控制。 Liquibase具備如下特性:* 不依賴於特定的資料庫,目前支持包括Oracle/Sql Server/DB2/MySql/Sybase/Pos ...
  • 通過phpmyadmin登陸時提示以下錯誤: phpmyadmin crypt_random_string requires at least one symmetric cipher be loaded 報錯原因:路徑問題。 解決辦法: 1、進入到phpmyadmin根目錄下,打開\librari ...
  • 學習目標: -多列子查詢 -SQL語句中使用標量子查詢 -更新或刪除行使用關聯子查詢 -使用EXISTS和NOT EXISTS操作符 -使用WITH子句 多列子查詢 語法: Main query WHERE (<column_name>,<column_name>) IN Subquery; 列的比 ...
  • 語法 1、建表 create table 表名( 列名 數據類型, …… ); 2、刪除表:drop table 表名; 3、添加列:alter table 表名 add(列名 數據類型); 4、修改列:alter table 表名 rename column 原列名 to 列名; 5、修改數據類型 ...
  • h2資料庫是常用的開源資料庫,與HSQLDB類似,十分適合作為嵌入式資料庫使用,其他的資料庫大部分都需要安裝獨立的客戶端和伺服器端 h2的優勢: (1)h2採用純java編寫,因此不受平臺的限制 (2)h2只有一個jar文件,十分適合作為嵌入式資料庫使用 (3)h2提供了一個十分方便的web控制台用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...