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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...