MHA

MHA

1.關于MHA

MHA是一款開源的mysql的高可用程序,它為mysql主從復制架構提供了automating master failover功能。MHA在監控到master節點故障時,會提升其中擁有最新數據的slave節點成為新的master節點,在此期間,MHA會通過與其他從節點獲取額外的信息來避免不一致性的問題。MHA還提供了master節點的在線切換功能,即按需切換master/slave節點。

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

MHA Manager:通常單獨部署在一臺獨立機器上管理多個master/slave集群,每個master/slave集群稱作一個application。

MHA Node:運行在每臺mysql服務器上(包括manager),它通過監控具備解析和清理logs功能的腳本來加快故障轉移。

(1)提升一個從節點為主節點 (2)在提升之前,會把所有其他從節點記錄的所有數據合并到要提升為主節點的那個從節點上

2、MHA的組件

(1)Manager節點

masterha_check_ssh:MHA依賴的SSH環境檢測工具
masterha_check_repl:mysql復制環境檢測工具
masterha_manager:MHA服務主程序
masterha_check_status:MHA運行狀態探測工具
masterha_master_monitor:mysql master節點可用性檢測工具
masterha_master_switch:master節點切換工具
masterha_conf_host:添加或刪除配置的節點
masterha_stop:關閉MHA服務的工具

(2)Node節點

save_binary_logs:保存和復制master的二進制日志
apply_diff_relay_logs:識別差異的中繼日志事件并應用于其它slave
filter_mysqlbinlog:去除不必要的rollback事件(MHA已不再使用這個工具)
purge_relay_logs:清除中繼日志(不會阻塞SQL線程)

(3)自定義擴展

secondary_check_script:通過多條網絡路由檢測master的可用性
master_ip_failover_script:更新application使用的masterip
shutdown_script:強制關閉master節點
report_script:發送報告
init_conf_load_script:加載初始配置參數
master_ip_online_change_script:更新master節點ip地址

3、MHA的實現配置

注意各節點之間的時間同步

(1)主從復制的實現

1)master節點的配置

安裝mariadb-server

[root@localhost ~]# yum -y install mariadb-server

編輯/etc/my.cnf文件

[root@localhost ~]# vim /etc/my.cnf

    在[mysqld]段的最后面添加如下內容
    innodb_file_per_table = ON
    skip_name_resolve = ON
    server-id = 1
    relay-log = relay-log
    log-bin = master-log

授權具有復制權限的用戶

[root@localhost ~]# systemctl start mariadb.service

[root@localhost ~]# mysql
MariaDB [(none)]> grant replication slave,replication client on *.* to 'repluser'@'10.1.51.%' identified by 'replpass';
MariaDB [(none)]> flush privileges;

MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000003 |      495 |              |                  |
+-------------------+----------+--------------+------------------+
MariaDB [(none)]> show binlog events in 'master-log.000003';

MHA

由上圖可以看到,我們等下在slave設置復制開始位置為245,即可省去手動在slave節點設置復制權限。

2)slave節點的配置

兩個從節點的配置出來server-id不同外,其他配置完全相同,后面會特別指出。

安裝mariadb-server

[root@localhost ~]# yum -y install mariadb-server

編輯/etc/my.cnf文件

[root@localhost ~]# vim /etc/my.cnf

    在[mysqld]段的最后面添加如下內容
    innodb_file_per_table = ON
    skip_name_resolve = ON
    server-id = 2  # 注意slave2的server-id = 3
    relay-log = relay-log
    log-bin = master-log
    read-only = 1
    relay-log-purge = 0

指定master節點

[root@localhost ~]# systemctl start mariadb.service
[root@localhost ~]# mysql

MariaDB [(none)]> change master to master_host='10.1.51.30',master_user='repluser',master_password='replpass',master_log_file='master-log.000003',master_log_pos=245;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
           Slave_IO_State: Waiting for master to send event
              Master_Host: 10.1.51.30
              Master_User: repluser
              Master_Port: 3306
            Connect_Retry: 60
          Master_Log_File: master-log.000003
      Read_Master_Log_Pos: 495
           Relay_Log_File: relay-log.000002
            Relay_Log_Pos: 780
    Relay_Master_Log_File: master-log.000003
         Slave_IO_Running: Yes
        Slave_SQL_Running: Yes

            ... ...

MariaDB [(none)]> select user,host from mysql.user;
+----------+-----------------------+
| user     | host                  |
+----------+-----------------------+
| repluser | 10.1.51.%             | # repluser用戶已經同步過來了
| root     | 127.0.0.1             |
| root     | ::1                   |
|          | localhost             |
| root     | localhost             |
|          | localhost.localdomain |
| root     | localhost.localdomain |
+----------+-----------------------+

至此,mariadb服務的主從復制集群已然配置完成。

(2)準備基于ssh互相通信環境

在manager節點上完成以下操作

[root@localhost ~]# ssh-keygen -t rsa -P '' #創建私鑰
[root@localhost ~]# cat .ssh/id_rsa.pub > .ssh/authorized_keys
[root@localhost ~]# scp .ssh/authorized_keys .ssh/id_rsa .ssh/id_rsa.pub 10.1.51.30:/root/.ssh/
[root@localhost ~]# scp .ssh/authorized_keys .ssh/id_rsa .ssh/id_rsa.pub 10.1.51.50:/root/.ssh/ 
[root@localhost ~]# scp .ssh/authorized_keys .ssh/id_rsa .ssh/id_rsa.pub 10.1.51.60:/root/.ssh/

(3)MHA實現的具體操作

MHA官方提供了RPM格式的程序包,可自行下載

1)安裝MHA

Manager節點

[root@localhost ~]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm mha4mysql-manager-0.56-0.el6.noarch.rpm

所有節點,包括manager

[root@localhost ~]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm

2)在manager節點上配置MHA

Manager節點需要為每個監控的master/slave集群提供一個專用的配置文件,而所有的master/slave集群也可共享全局配置。每個application的配置文件是自定義的,此處將使用/etc/masterha/app.cnf。

為了安全起見,需要在master節點上創建一個管理mysql的用戶

MariaDB [(none)]> grant all on *.* to 'mhaadmin'@'10.1.51.%' identified by 'mhapass';

編輯/etc/masterha/app.cnf

[root@localhost ~]# vim /etc/masterha/app.cnf

[server default]
user=mhaadmin  #mysql的管理用戶
password=mhapass  #mysql的管理用戶的密碼
manager_workdir=/data/masterha/app  #manager的工作路徑,會自動創建
manager_log=/data/masterha/app/manager.log  #manager日志文件
remote_workdir=/data/masterha/app  #遠程主機的工作路徑
ssh_user=root
repl_user=repluser
repl_password=replpass
ping_intervarl=1

[server1]
hostname=10.1.51.30
ssh_port=22
candidate_master=1

[server2]
hostname=10.1.51.50
ssh_port=22
candidate_master=1

[server3]
hostname=10.1.51.60
ssh_port=22
candidate_master=1

檢測各節點間ssh互相通信配置是否正常

[root@localhost ~]# masterha_check_ssh --conf=/etc/masterha/app.cnf
輸出的結果最后兩行如下,表示正常    
Sat Nov 26 20:25:40 2016 - [debug]   ok.
Sat Nov 26 20:25:40 2016 - [info] All SSH connection tests passed successfully.

檢查管理的mysql復制集群的連接配置參數是否正常

[root@localhost ~]# masterha_check_repl --conf=/etc/masterha/app.cnf
輸出的最后一行如下,表示正常
MySQL Replication Health is OK.

啟動MHA

[root@localhost ~]# masterha_manager --conf=/etc/masterha/app.cnf
 此命令會一直保持連接在前臺
可以另啟一個終端查看master節點的狀態
[root@localhost ~]# masterha_check_status --conf=/etc/masterha/app.cnf
app (pid:5740) is running(0:PING_OK), master:10.1.51.30

3)測試

手動停止master節點上的mariadb服務

[root@localhost ~]# killall -9 mysqld mysqld_safe

查看manager節點日志

[root@localhost ~]# cat /data/masterha/app/manager.log 
Started automated(non-interactive) failover.
The latest slave 10.1.51.50(10.1.51.50:3306) has all relay logs for recovery.
Selected 10.1.51.50(10.1.51.50:3306) as a new master. #master自動切換到10.1.51.50節點上
10.1.51.50(10.1.51.50:3306): OK: Applying all logs succeeded.
10.1.51.60(10.1.51.60:3306): This host has the latest relay log events.
Generating relay diff files from the latest slave succeeded.
10.1.51.60(10.1.51.60:3306): OK: Applying all logs succeeded. Slave started, replicating from 10.1.51.50(10.1.51.50:3306)
10.1.51.50(10.1.51.50:3306): Resetting slave info succeeded.
Master failover to 10.1.51.50(10.1.51.50:3306) completed successfully.

此時MHA將無法啟動

在10.1.51.60節點上查看其狀態

MHA

4)修復10.1.51.30節點,使其成為從節點

在/etc/my.cnf的[mysqld]段最后添加下面兩行

read-only = 1
relay-log-purge = 0

[root@localhost ~]# systemctl start mariadb

指定master節點

注意:需要查看master節點的狀態位置
MariaDB [(none)]>  change master to master_host='10.1.51.50',master_user='repluser',master_password='replpass',master_log_file='master-log.000003',master_log_pos=245;

MariaDB [(none)]> start slave;

MHA

再次啟動MHA即可恢復正常

[root@localhost ~]# masterha_manager --conf=/etc/masterha/app.cnf
[root@localhost ~]# masterha_check_status --conf=/etc/masterha/app.cnf
app (pid:6343) is running(0:PING_OK), master:10.1.51.50

補充:主節點的手動切換

1)在當前的主節點(10.1.51.50)中執行以下命令

MariaDB [(none)]> FLUSH NO_WRITE_TO_BINLOG TABLES;

2)在manager節點中執行以下命令,注意要先停止MHA

[root@localhost ~]# masterha_stop --conf=/etc/masterha/app.cnf
[root@localhost ~]# masterha_master_switch --master_state=alive --conf=/etc/masterha/app.cnf
輸出結果如下,表示切換成功切換到10.1.51.30節點

MHA

3)在當前的主節點(10.1.51.50)中執行以下命令

MariaDB [(none)]> change master to master_host='10.1.51.30',master_user='repluser',master_password='replpass',master_log_file='master-log.000003',master_log_pos=245;
MariaDB [(none)]> start slave;

3)重新啟動MHA

[root@localhost ~]# masterha_manager --conf=/etc/masterha/app.cnf
[root@localhost ~]# masterha_check_status --conf=/etc/masterha/app.cnf
app (pid:7758) is running(0:PING_OK), master:10.1.51.30

原創文章,作者:pao,如若轉載,請注明出處:http://www.www58058.com/60808

(2)
paopao
上一篇 2016-11-26 17:12
下一篇 2016-11-26 21:44

相關推薦

  • linux文件系統上的權限

    文件系統上的權限是指文件系統上的文件和目錄的權限,主要針對三類對象進行的(訪問者)進行的定義: 針對文件來說 r 使用工具cat nano去看文件里面內容的權限 w 可以修改文件的內容 x 二進制程序以及腳本需要發起系統調用,去啟動為一個進程 針對目錄來說 r 是否可以查看目錄里面的內容 有r權限的話 可以使用ls -l w 對目錄里面是否可以創建文件或者目…

    Linux干貨 2017-04-01
  • UML圖中類之間的關系:依賴,泛化,關聯,聚合,組合,實現

    類與類圖 1) 類(Class)封裝了數據和行為,是面向對象的重要組成部分,它是具有相同屬性、操作、關系的對象集合的總稱。 2) 在系統中,每個類具有一定的職責,職責指的是類所擔任的任務,即類要完成什么樣的功能,要承擔什么樣的義務。一個類可以有多種職責,設計得好的類一般只有一種職責,在定義類的時候,將類的職責分解成為類的屬性和操作(即方法)。 3) 類的屬性…

    Linux干貨 2015-04-07
  • 從Linux小白到大?!c狼共舞的日子3

    馬哥教育網絡班21期+第3周課程練習 1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# who root :0   2016-07-23 08:55 (:0) wangsining pts…

    Linux干貨 2016-07-26
  • 馬哥教育網絡21期+第二周練習博客

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 長用的文件管理類命令有cp(復制),mv(移動),rm(刪除)。接下來我將為大家一一講解。 復制命令:cp 在cp時要根據源和目的做出確認與調整; 命令格式:     cp [OPTION]… [-T] SO…

    Linux干貨 2016-07-22
  • Linux網絡管理相關工具

      Linux本身提供了許多用于網絡測試、網絡排錯、網絡狀態分析的工具,下面來看幾個比較常用的工具。   一、ping命令   ping命令是利用ICMP協議還測試網絡的連通性。   命令格式:ping [option] IP     常用選項:       -c #:…

    Linux干貨 2016-01-14
  • 筆記

    命令 命令列表 alias 別名 bc 計算器 basename文件基本名 cp 復制 cd 進入文件夾 cat /proc/partition 查看硬盤的使用情況 cat /proc/meminfo 查看內存的使用情況 chvt 切換終端 chown改變文件的所屬組 edj:chown -R www /etc/host clock 查詢或設置硬件時間 ch…

    Linux干貨 2017-05-25
欧美性久久久久