1. 程式人生 > >MHA實現Mysql半同步高可用

MHA實現Mysql半同步高可用

一、MHA介紹

1、MHA兩部分組成

MHA 由兩部分組成: MHA Manager(管理節點)和 MHA Node(資料節點)。 MHA Manager可以單獨部署在一臺獨立的機器上管理多個 master-slave 叢集,也可以部署在一臺 slave 節點上。

2、MHA實現原理

原理:

MHA(Master High Availability)是現在解決mysql高可用的一個相對成熟的方案

它是由兩部分組成,管理端(master manager)和節點端(node manager),管理端可以單獨佈置在一臺機器上,整個mysql主從叢集就是它的各個節點,

管理端對所有節點進行監控,當master宕機之後,管理端會根據自己配置檔案裡的設定,將某一個從節點升為主節點,(如果沒有設定,它會自己比對,將最新資料的節點升為主節點),然後將其他節點自動指向提升上來的新的主節點,在提升的過程中,所有結點之間必須可以無密碼ssh連線,管理端可以對所有的節點ssh無密碼連線.

在MHA自動故障切換的過程中,如果宕掉的 master 無法ssh連線上,則無法同步最新的二進位制日誌,也就無法獲得最新的資料,造成資料丟失,因此,為了避免這中情況發生,MHA一般配合半同步複製.可以最大程度的儲存資料.

為了避免在更換主節點時同步日誌出錯(pos模式下更換節點,日誌同步會出錯),我們開啟GTID模式

目前MHA支援一主多從,整個MHA架構最少有三個節點,一臺master 一臺slave做備用master 一臺slave只做同步,當然,為了充分利用資源,叢集可以做讀寫分離(master做寫操作,slave做讀操作)

二、實驗環境

 server1:172.25.12.1(安裝 MHA)
 server2:172.25.12.2(Mysql Master)
 server3:172.25.12.3(Mysql Slave)
 server4:172.25.12.4(Mysql Slave)

三、Mysql 安裝

mysql-community-client.x86_64 0:5.7.17-1.el6 mysql-community-common.x86_64 0:5.7.17-1.el6 mysql-community-libs.x86_64 0:5.7.17-1.el6

mysql-community-libs-compat.x86_64 0:5.7.17-1.el6 mysql-community-server.x86_64 0:5.7.17-1.el6 

1,在server2,3,4上面安裝mysql


/etc/init.d/mysqld restart
 grep password /var/log/mysqld.log          #在日誌裡面查詢臨時密碼
 mysql_secure_installation             #通過臨時密碼修改密碼

2、設定server-id(server2,3,4)

所有節點配置檔案都一樣,除了裡面的引數 server-id 其他的都必須一致,因為所有節點都有可能升至master

 vim /etc/my.cnf
 server-id=2                       #id需要唯一
 log-bin=mysql-bin
 gtid_mode=ON
 enforce-gtid-consistency=true
 /etc/init.d/mysqld restart       #修改完以後需要重新啟動

 四、半同步複製安裝

1、在master中授權

 mysql> grant REPLICATION SLAVE on *.* to [email protected]'172.25.12.%' identified by 'GAOyu123...';
 mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      446 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

2、在slave啟動serve3,4

 mysql> change master to master_host='172.25.12.2',master_user='repl',master_password='GAOyu123...',master_log_file='mysql-bin.000001',master_log_pos=446;
   #master_log_file 和master_log_pos參考server2
 mysql> start slave;
 mysql> show slave status\G;                #查詢的資訊中2個必須為yes
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes 

3、開啟master(server2)

 mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
 mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
 mysql> show status like 'Rpl_semi_sync_master_status';                     ###查詢主是否開啟成功
 +-----------------------------+-------+
 | Variable_name               |       |
 | Value                       |       |
 +-----------------------------+-------+
 | Rpl_semi_sync_master_status | ON    |
 |                             |       |
 +-----------------------------+-------+

4、開啟slave(serve3、4)

 mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
 mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;
 mysql> STOP SLAVE IO_THREAD;
 mysql> START SLAVE IO_THREAD;
 mysql> show status like 'Rpl_semi_sync_slave_status';                    ###查詢從是否開啟成功
 +----------------------------+-------+
 | Variable_name              |       |
 | Value                      |       |
 +----------------------------+-------+
 | Rpl_semi_sync_slave_status | ON    |
 |                            |       |
 +----------------------------+-------+

五、SSH 無密碼連線

MHA manager 通過 SSH 訪問所有的 node 節點,各個 node 節點也同樣需要通過 SSH 來相互發送不同的 relay log檔案,所以有必要在每一個node和manager上配置SSH無密碼登陸。MHAmanager可通過 masterha_check_ssh 指令碼檢測 SSH 連線是否配置正常。

1、在server1中生成key

 ssh-keygen
#一路回車

2、在server1中把公鑰和私鑰傳送給 server2.3.4

 scp /root/.ssh/id_rsa /root/.ssh/id_rsa.pub [email protected]:/root/.ssh/
 #如果沒有目錄則自己建立這個目錄

3、server2.3.4 執行

 ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

六、安裝

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

1,安裝MHA Node(資料節點)

yum install -y mha4mysql-node-0.56-0.el6.noarch.rpm

2、依賴性

 perl-Config-Tiny-2.12-7.1.el6.noarch.rpm
 perl-Email-Date-Format-1.002-5.el6.noarch.rpm
 perl-Log-Dispatch-2.27-1.el6.noarch.rpm
 perl-Mail-Sender-0.8.16-3.el6.noarch.rpm
 perl-Mail-Sendmail-0.79-12.el6.noarch.rpm
 perl-MailTools-2.04-4.el6.noarch.rpm
 perl-MIME-Lite-3.027-2.el6.noarch.rpm
 perl-MIME-Lite-HTML-1.23-2.el6.noarch.rpm
 perl-MIME-Types-1.28-2.el6.noarch.rpm
 perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm
 perl-Params-Validate-0.92-3.el6.x86_64.rpm
 perl-TimeDate-1.16-13.el6.noarch.rpm

3、安裝MHAMHA Manager(管理節點)

 yum install -y mha4mysql-manager-0.56-0.el6.noarch.rpm

 七、配置 MHA

1、配置

建立配置檔案及其目錄:

mkdir /etc/mha
vim /etc/mha/mha.conf
[server default]
manager_workdir=/usr/local/mha      
#設定manager的工作目錄

manager_log=/usr/local/mha/mha.log  
#設定manager的日誌

master_binlog_dir=/var/lib/mysql    
#設定master 儲存binlog的位置,以便MHA可以找到master的日誌,我這裡的也就是mysql的資料目錄

user=root                   
#設定監控使用者root,這個使用者在mysql裡存在

password=GAOyu123...           
#設定mysql中監控使用者的那個密碼

ping_interval=1             
#設定監控主庫,傳送ping包的時間間隔,預設是3秒,嘗試三次沒有迴應的時候自動進行railover

remote_workdir=/tmp         
#設定遠端mysql在發生切換時binlog的儲存位置

repl_user=repl              
#設定同步使用者mha

repl_password=GAOyu123...      
#設定mha的密碼

ssh_user=root               
#設定ssh的登入使用者名稱

[server2]                 
hostname=172.25.12.2
port=3306

[server3]
hostname=172.25.12.3
port=3306
candidate_master=1       
#設定為候選master,如果設定該引數以後,發生主從切換以後將會將此從庫提升為主庫,即使這個主庫不是叢集中事件最新的slave

check_repl_delay=0       
#預設情況下如果一個slave落後master 100M的relay logs的話,MHA將不會選擇該slave作為一個新的master,因為對於這個slave的恢復需要花費很長時間,通過設定check_repl_delay=0,MHA觸發切換在選擇一個新的master的時候將會忽略複製延時,這個引數對於設定了candidate_master=1的主機非常有用,因為這個候選主在切換的過程中一定是新的master

[server4]
hostname=172.25.12.4
port=3306
#no_master=1             #一定不會是master

測試

(1)master(server2) down 掉

 /etc/init.d/mysqld stop

(2)在 server3檢視slave狀態

 mysql> show slave status\G;
 *************************** 1. row ***************************
 Slave_IO_State: Waiting for master to send event
 Master_Host: 172.25.12.3
 Master_User: repl
 Master_Port: 3306
 Connect_Retry: 60

相關推薦

MHA實現Mysql同步可用

一、MHA介紹 1、MHA兩部分組成 MHA 由兩部分組成: MHA Manager(管理節點)和 MHA Node(資料節點)。 MHA Manager可以單獨部署在一臺獨立的機器上管理多個 master-slave 叢集,也可以部署在一臺 slave 節點上。 2、

MySQL叢集架構篇:MHA+MySQL-PROXY+LVS實現MySQL叢集架構可用/高效能-技術流ken

MHA簡介 MHA可以自動化實現主伺服器故障轉移,這樣就可以快速將從伺服器晉級為主伺服器(通常在10-30s),而不影響複製的一致性,不需要花錢買更多的新伺服器,不會有效能損耗,容易安裝,不必更改現有的部署環境,適用於任何儲存引擎。 MHA提供線上主伺服器切換,改變先正執行的主伺服器到另外一臺上,這個過程只

MySQL集群(四)之keepalived實現mysql雙主可用

健康檢查 重連 lose 搶占 pro 資源 交換機 state nec 前面大家介紹了主從、主主復制以及他們的中間件mysql-proxy的使用,這一篇給大家介紹的是keepalived的搭建與使用! 一、keepalived簡介 1.1、keepalived介紹

實現MySQL同步架構

MySQL半同步架構默認情況下,MySQL的復制功能是異步的,異步復制可以提 供最佳的性能,主庫把binlog日誌發送給從庫即結束,並不驗 證從庫是否接收完畢。這意味著當主服務器或從服務器端發生 故障時,有可能從服務器沒有接收到主服務器發送過來的 binlog日誌,這就會造成主服務器和從服務器的數據不一致,

keepalived+haproxy實現mysql負載均衡可用

環境準備 作業系統CentOS 6.9 Haproxy+keepalived(h1)                   192.168.20.135 Haproxy+keepalived(h2)                   192.168.20.136

mysql雙機熱備以及使用keepalived實現mysql雙主可用

根據蒐集的資料安裝測試並在安裝測試過程中整理的文件,部分參考文件在相應位置有標記。如有不足希望不吝賜教。 mysql雙機熱備的方式有兩種: 主-從伺服器雙機熱備 主-主伺服器雙機熱備 下文以主-主伺服器雙機熱備為例,主-從配置類似。 兩臺centos7,ip分別為:

MySQL5.7 利用keepalived來實現mysql雙主可用方案的詳細過程

伺服器準備Keepalived:192.168.13.15Keepalived:192.168.13.16Mysql-m1: 192.168.13.15Mysql-m2: 192.168.13.161,在m1、m2上準備mysql5.7環境2,在m1上部署keepalived

keepalived+MHA實現mysql主從可用集群

keepalived mha mysql主從集群 高可用 本節索引原理分析實驗環境準備主從復制集群安裝MHA包初始化MHA配置Keepalived故障出現故障恢復總結 一 原理分析1 MHA簡介:MHA(Master High Availability)目前在MySQL高可用方面是一個相對成熟

MySQL(三):MHA實現MySQL主從架構中主服務器的可用,zabbix完成manager重啟

code parallel 可以登錄 authorize sudo word systemctl 命令 nag MHA(Master High Availability)是目前在MySQL高可用方面相對成熟的一個解決方案,MHA在監控到master節點故障時,會提升其中擁有

構建MHA實現MySQL可用集群架構

MySQL數據庫實現故障自動轉移一、MHA簡介 MHA(Master HighAvailability)目前在MySQL高可用方面是一個相對成熟的解決方案,它由日本DeNA公司youshimaton(現就職於Facebook公司)開發,是一套優秀的作為MySQL高可用性環境下故障切換和主從提升的高可用軟件。在

MHA實現mysql可用叢集

前言:         在生產環境中,資料庫對於一個企業是至關重要的,因此我們應該做到生產中的mysql高可用,從而實現假如有一臺資料庫宕機,別的機器會自動代替宕機的伺服器的工作,從而實現資料庫的快速切換,避免單點故障,從而保證業務的正常執行。MHA就可以

使用MHA實現mysql可用性(centos7.5+mysql5.7.23+MHA0.58)

一、MHA概述 1、MHA          MHA(Master High Availability)事由日本人DeNA開發的一套MySQL高可用性環境下故障切換和主從提升的軟體,目前在MySQL高可用方面是一

MHA 實現 Mysql 可用配置

一、專案環境: server1 : mha-manager server2 : master server3,4 : slave 首先,在mysql組的三臺伺服器上做如下配置: /etc/init.d/mysqld s

MHA實現mysql可用

secondary 三臺 info 5.5 nag use tps 配置參數 check 一、 MHA:Master High Availability 對主節點進行監控,可實現自動故障轉移至其它從節點;通過提升某一從節點為新的主節點,基於主從復制實現,還需要客戶端

MySQL】【可用】基於MHA架構的MySQL可用故障自動切換架構

bin candidate nlog repo sage $1 內容 data from 基於MHA架構的MySQL高可用切換架構 環境: ? CentOS7+MySQL 5.7 + GTID 業務系統:mainBusiness ? nod

Mysql DBA 級運維學習筆記-Heartbeat實現web服務的可用案例及維護要點

heartbeat8.Heartbeat實現web服務的高可用案例 8.1部署準備 通過web服務高可用案例來熟悉heatbeat軟件的使用,用上面的兩臺服務器機器名分別為heartbeat-1-130和heartbeat-1-129 8.2 安裝配置http服務(兩臺機器都要安裝) yum install

mysql運維管理-Heartbeat實現web服務的可用案例及維護要點

server exp lec disabled urn tool distrib model recover 1.DRBD介紹 Distributed Replicated Block Device (DRBD)是基於塊設備在不同的高可用服務器對之間同步和鏡像數據的軟件,通

MHA +maxscale 實現讀寫分離可用架構實戰

MHA 相關原理 http://mp.blog.csdn.net/postedit/79183726  MHA  http://mp.blog.csdn.net/postedit/79183743 最佳實戰 MySQL讀寫分離原理相關知識體系  http://blog.cs

LVS+KEEPALIVED+MYSQL單點寫入讀負載均衡主主同步可用方案

LVS+KEEPALIVED+MYSQL 單點寫入讀負載均衡主主同步高可用方案安裝教程 一、         安裝環境 Ø  軟體版本 CENTOS 6.5 KEEPALIVED 1.2.12 | 下載 LVS 1.2.6 | 下載 MYSQL 5.6.17(社群版) |

keepalived 實現web應用的可用

高可用 keepalived 項目需求:公司需要我做privacyIDEA認證服務器的高可用,我的思路是在兩臺服務器上搭兩套應用程序,後端存儲公用一個mysql數據庫,沒有mysql數據庫可以主備的形式,然後再做一下數據庫的異地備份。基本思路就是這樣的。我主要介紹一下使用keepalived實現高可用