【趙強老師】MySQL高可用架構:MHA

来源:https://www.cnblogs.com/collen7788/archive/2020/07/23/13365812.html
-Advertisement-
Play Games

MHA(Master HA)是一款開源的 MySQL 的高可用程式,它為 MySQL 主從複製架構提供了 automating master failover 功能。MHA 在監控到 master 節點故障時,會提升其中擁有最新數據的 slave 節點成為新的master 節點,在此期間,MHA 會 ...


MHA(Master HA)是一款開源的 MySQL 的高可用程式,它為 MySQL 主從複製架構提供了 automating master failover 功能。MHA 在監控到 master 節點故障時,會提升其中擁有最新數據的 slave 節點成為新的master 節點,在此期間,MHA 會通過於其它從節點獲取額外信息來避免一致性方面的問題。MHA 還提供了 master 節點的線上切換功能,即按需切換 master/slave 節點。
MHA 是由日本人 yoshinorim(原就職於DeNA現就職於FaceBook)開發的比較成熟的 MySQL 高可用方案。MHA 能夠在30秒內實現故障切換,並能在故障切換中,最大可能的保證數據一致性。目前淘寶也正在開發相似產品 TMHA, 目前已支持一主一從。

一、MHA的組成

(一)MHA中的角色

MHA 服務有兩種角色, MHA Manager(管理節點)和 MHA Node(數據節點):

  • MHA Manager:通常單獨部署在一臺獨立機器上管理多個 master/slave 集群(組),每個master/slave 集群稱作一個application,用來管理統籌整個集群。
  • MHA Node:運行在每台 MySQL 伺服器上(master/slave/manager),它通過監控具備解析和清理 logs 功能的腳本來加快故障轉移。主要是接收管理節點所發出指令的代理,代理需要運行在每一個 mysql 節點上。簡單講node就是用來收集從節點伺服器上所生成的bin-log。對比打算提升為新的主節點之上的從節點的是否擁有並完成操作,如果沒有發給新主節點在本地應用後提升為主節點。

(二)MHA提供的工具

MHA會提供諸多工具程式,其常見的如下所示:

  • Manager節點

  • Node節點(這些工具通常由MHA Manager的腳本觸發,無需人為操作)

二、MHA的工作原理

  • 從宕機崩潰的master保存二進位日誌事件(binlog events);
  • 識別含有最新更新的 slave ;
  • 應用差異的中繼日誌(relay log) 到其他 slave ;
  • 應用從 master 保存的二進位日誌事件(binlog events);
  • 提升一個 slave 為新 master ;
  • 使用其他的 slave 連接新的 master 進行複製。

三、部署MHA

(一)準備實驗環境

  • 三台主機:mysql111、mysql112、mysql113
  • 操作系統:CentOS
  • 配置主機名(/etc/hosts)
  • 配置免密碼登錄
  • 每台主機安裝MySQL

(二)搭建主從環境

  • 每台MySQL開啟binlog,設置server-id
vi /etc/my.cnf
log-bin=mysql-binlog
server-id=1           (註意:每台MySQL設置不同的server-id)

show variables like '%log_bin%';
  • 在所有機器上,創建主從複製的賬號
create user 'repl'@'192.168.79.%' identified by 'Welcome_1';
grant replication slave on *.* to 'repl'@'192.168.79.%';
flush privileges;
  • 在所有機器上,創建管理賬號
create user 'myadmin'@'192.168.79.%' identified by 'Welcome_1';
grant all privileges on *.* to 'myadmin'@'192.168.79.%';
flush privileges;
  • 在主庫和從庫上,啟用GTID
set @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;
set @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
set @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
set @@GLOBAL.GTID_MODE = ON;

 參數說明:

GTID是MySQL 5.6的新特性,其全稱是Global Transaction Identifier,可簡化MySQL的主從切換以及Failover。GTID用於在binlog中唯一標識一個事務。當事務提交時,MySQL Server在寫binlog的時候,會先寫一個特殊的Binlog Event,類型為GTID_Event,指定下一個事務的GTID,然後再寫事務的Binlog。主從同步時GTID_Event和事務的Binlog都會傳遞到從庫,從庫在執行的時候也是用同樣的GTID寫binlog,這樣主從同步以後,就可通過GTID確定從庫同步到的位置了。也就是說,無論是級聯情況,還是一主多從情況,都可以通過GTID自動找點兒,而無需像之前那樣通過File_name和File_position找點兒了。

  • 在從庫上分別配置主從複製命令並開啟主從同步
change master to master_host='mysql111',master_user='repl',\
master_password='Welcome_1',master_auto_position=1;

start slave;
  • 在從庫上查看主從複製的狀態
show slave status\G;

  • 測試主從複製

(三)安裝MHA

  • 所有節點安裝node軟體依賴包和node軟體
yum -y install perl-DBD-MySQL 
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
  • 在mysql111上安裝安裝manager軟體依賴包
yum install -y perl-Config-Tiny 
yum install -y epel-release 
yum install -y perl-Log-Dispatch 
yum install -y perl-Parallel-ForkManager 
yum install -y perl-Time-HiRes
  • 在mysql111上安裝安裝manager軟體
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm

(四)創建Manager的配置文件

#創建配置文件目錄、日誌目錄
mkdir -p /etc/mha
mkdir -p /var/log/mha/log

#編輯mha配置文件 vi /etc/mha/mha.cnf
[server default]
manager_log=/var/log/mha/log/manager
manager_workdir=/var/log/mha/log
master_binlog_dir=/var/lib/mysql
user=myadmin
password=Welcome_1
ping_interval=2
repl_user=repl
repl_password=Welcome_1
ssh_user=root
[server1]
hostname=mysql111
port=3306
[server2]
hostname=mysql112
port=3306
[server3]
hostname=mysql113
port=3306

(五)檢查狀態,並開啟MHA

  • 檢查互信
masterha_check_ssh --conf=/etc/mha/mha.cnf

  • 檢查主從複製狀態
masterha_check_repl --conf=/etc/mha/mha.cnf

  • 開啟MHA-manager
nohup masterha_manager --conf=/etc/mha/mha.cnf > /var/log/mha/log/manager.log < /dev/null 2>&1 &
  • 查看MHA狀態
masterha_check_status --conf=/etc/mha/mha.cnf

  • 測試HA高可用的自動切換
在mysql111上,執行shutdown操作
mysqladmin -uroot -pWelcome_1 shutdown

MHA會自動進行主從切換。切換完成後,MHA進程會自動停止運行。

在mysql112和mysql113上觀察,執行下麵的語句:
show slave status\G;
 


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

-Advertisement-
Play Games
更多相關文章
  • session複製集群的原理就是通過多播通信的方式,把節點的session信息發送給集群其他節點;這種session複製集群有一個缺陷,如果後端tomcat server 一旦增多,那麼對於後端用於發送session信息的網路會非常擁擠,到達一定的量以後,後端網路就可能癱瘓,這樣一來session... ...
  • 安裝自動補齊需要依賴工具 yum install -y bash-completion docker命令補齊: 執行下列命令 sh /usr/share/bash-completion/bash_completion sh /usr/share/bash-completion/completions ...
  • 我對ubuntu的紫色不太喜歡,我比較喜歡黑色;雖然20.04版本換成了黑色,登錄界面也很好看;但是我用的是舊版本ubuntu,所以只能動手改了; grub界面顏色設置: vim /usr/share/plymouth/themes/ubuntu-logo/ubuntu-logo.grub; 結束後 ...
  • 近期,重新玩了玩kali下的airmon-ng等一套工具“破解”自家wifi密碼。 首先,有關處理2.4Ghz的wifi,在網上講解詳細且含圖文搭配的教程有許多,所以在這裡就不多贅述了。 這裡,主要說明一下處理5Ghz的wifi,在鎖定目標wifi後使用aireplay-ng指令抓取握手包時在確定無 ...
  • 普通的存儲器器件為單埠,也就是數據的輸入輸出只利用一個埠,設計了兩個輸入輸出埠的就是雙埠sram。雖然還具有擴展系列的4埠sram,但雙埠sram已經非常不錯了。雙埠sram經常應用於cpu與其周邊控制器等類似需要直接訪問存儲器或者需要隨機訪問緩衝器之類的器件之間進行通信的情況。從存儲 ...
  • 在Zabbix Server伺服器上安裝oracle-instantclient11.2後,結果使用sqlplus命令時遇到“sqlplus: error while loading shared libraries: libnsl.so.1: cannot open shared object f... ...
  • 本文更新於2020-05-03,使用MySQL 5.7,操作系統為Deepin 15.4。 許可權 許可權存取需要用到mysql庫中user、db、host、tables_priv、columns_prvi這幾個許可權表。列分為4個部分:用戶列、許可權列、安全列、資源控制列。許可權列又分為普通許可權和管理許可權。 ...
  • 開始之前明確一下死鎖和鎖等待這兩個事件的異同相同的之處:兩者都是當前事物在試圖請求被其他事物已經占用的鎖,從而造成當前事物無法執行的現象不同的之處:死鎖是相關session雙方或者多方中必然要犧牲(回滾)至少一個事務,否則雙方(或者多方)都無法執行;鎖等待則不然,對於暫時無法申請到的鎖,嘗試持續地“ ...
一周排行
    -Advertisement-
    Play Games
  • 一、引言:什麼是 JSON JSON (Java Script Object Notation) 是一種很常用的數據格式,它常常用在 web 應用程式中。它可以表示結構化的數據。 下麵是常見的 JSON 文件結構 { "name": "Kamishiro Rize", "age": "22", "o ...
  • 前言 大家好,我是蝸牛,在上一篇中,我們介紹了不同版本的HTTP區別和發展背景,這篇文章我們來聊聊HTTP的缺點,HTTP缺點大致總結有以下三點: 通信使用明文(不加密),內容可能會被竊聽。 不驗證通信方的身份,因此有可能遭遇偽裝(客戶端和服務端都有可能) 無法證明報文的完整性,有可能會被篡改。 其 ...
  • resultMap處理欄位和屬性的映射關係 如果欄位名與實體類中的屬性名不一致,該如何處理映射關係? 第一種方法:為查詢的欄位設置別名,和屬性名保持一致 下麵是實體類中的屬性名: private Integer empId; private String empName; private Integ ...
  • 大家在看到這篇文章前,為了有一個舒適的c++IDE,一定感受到了Dev-c++的廉價感,Clion功能的多餘,VS的臃腫。他們也有自己的優點,但糟點太多,令人十分難受。而VS Code,可以取長補短。下麵的配置內容,可以讓你在刷題時,享受絲滑的動畫,體會集成終端的方便,讓你覺得Coding不再枯燥。 ...
  • 給定一個不含重覆數字的數組 nums ,返回其 所有可能的全排列 。你可以 按任意順序 返回答案。 示例 1: 輸入:nums = [1,2,3] 輸出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例 2: 輸入:nums = [0,1] 輸 ...
  • 設計模式的目的 編寫軟體過程中,程式員面臨著來自 耦合性,內聚性以及可維護性,可擴展性,重用性,靈活性 等多方面的 挑戰,設計模式是為了讓程式(軟體),具有更好 代碼重用性 (即:相同功能的代碼,不用多次編寫) 可讀性 (即:編程規範性, 便於其他程式員的閱讀和理解) 可擴展性 (即:當需要增加新的 ...
  • 本文講解了決策樹的創鍵的過程,包括熵,信息增益的計算,還有決策樹的創建,以及使用matplotlib讓決策樹可視化的詳細過程 ...
  • ♠ use C++11 倍數 若 $a,b,k \in \mathbb N$,且 $a \times k=b$,那麼 $b$ 是 $a$ 的倍數,稱 $a$ 整除 $b$,記作 $a \mid b$。 $[1,n]\in \mathbb N$ 中 $x \in \mathbb N$ 的倍數有 $\l ...
  • LinkList可以定義指向List的指針 1.當函數參數為LinkList L時,意味著只改變或操作List的內容,而不需要改變L這個指針 如 Status GetElem(LinkList L,int i,ElemType) 2.當參數為LinkList &L時,意味著需要改變或操作L這個指針本 ...
  • Spring 5框架 一、Spring概念 1、Spring是輕量級的JavaEE框架 2、Spring可以解決企業應用開發的複雜性 3、Spring有兩個核心部分:IOC和AOP ​ 1)IOC:控制反轉,把創建對象過程交給Spring進行管理 ​ 2)AOP:面向切麵,不修改源代碼進行功能增強 ...