MHA實現mysql高可用性

一、 MHA:Master High Availability

    對主節點進行監控,可實現自動故障轉移至其它從節點;通過提升某一從節點爲新的主節點,基於主從複製實現,還需要客戶端配合實現,目前MHA主要支持一主多從的架構,要搭建MHA,要求一個複製集羣中必須最少有三臺數據庫服務器,一主二從,即一臺充當master,一臺充當備用master,另外一臺充當從庫,出於機器成本的考慮,淘寶進行了改造,目前淘寶TMHA已經支持一主一從
官網:https://code.google.com/archive/p/mysql-master-ha/

MHA集羣架構

MHA實現mysql高可用性

1.MHA工作原理:

(1) 從宕機崩潰的master保存二進制日誌事件(binlog events)
(2) 識別含有最新更新的slave
(3) 應用差異的中繼日誌(relay log)到其他的slave
(4) 應用從master保存的二進制日誌事件(binlog events)
(5) 提升一個slave爲新的master
(6) 使其他的slave連接新的master進行復制

2.MHA軟件由兩部分組成,Manager工具包和Node工具包

(1)Manager工具包主要包括以下幾個工具:
masterha_check_ssh      檢查MHA的SSH配置狀況
masterha_check_repl         檢查MySQL複製狀況
masterha_manger              啓動MHA
masterha_check_status       檢測當前MHA運行狀態
masterha_master_monitor     檢測master是否宕機
masterha_master_switch  故障轉移(自動或手動)
masterha_conf_host      添加或刪除配置的server信息
(2)Node工具包:這些工具通常由MHA Manager的腳本觸發,無需人爲操作)主要包括以下幾個工具:
save_binary_logs       保存和複製master的二進制日誌
apply_diff_relay_logs 識別差異的中繼日誌事件並將其差異的事件應用於其他的slave
filter_mysqlbinlog     去除不必要的ROLLBACK事件(MHA已不再使用此工具)
purge_relay_logs       清除中繼日誌(不會阻塞SQL線程)
(可選:爲了儘可能的減少主庫硬件損壞宕機造成的數據丟失,因此在配置MHA的同時建議配置成MySQL 5.5的半同步複製)

3.自定義擴展:

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

4.配置文件:

global配置,爲各application提供默認配置
application配置:爲每個主從複製集羣

5.實現MHA

(1)在管理節點上安裝兩個包:
mha4mysql-manager (須開啓epel源,必要時yum install mha4*)
mha4mysql-node
(2)在被管理節點安裝:
mha4mysql-node

6.在管理節點建立配置文件

vim /etc/mastermha/app1.cnf
[server default]
user=mhauser
password=123456
master_binlog_dir=/data/bin/
manager_workdir=/data/mastermha/app1/
manager_log=/data/mastermha/app1/manager.log
remote_workdir=/data/mastermha/app1/
ssh_user=root
repl_user=repluser
repl_password=123456
ping_interval=1

[server1]
hostname=192.168.30.16
candidate_master=1
[server2]
hostname=192.168.30.66
candidate_master=1
[server3]
hostname=192.168.30.6
candidate_master=1

7.實現Master

vim /etc/my.cnf
[mysqld]
log-bin=/data/bin/mysql-bin
server_id=1
skip_name_resolve=1

mysql>show master logs
mysql>grant replication slave on *.* to repluser@'192.168.30.%' identified by ‘123456';
mysql>grant all on *.* to mhauser@'192.168.30.%’identified by‘123456';

8.實現slave

vim /etc/my.cnf
[mysqld]
server_id=2     #不同節點此值各不相同
log-bin=/data/bin/mysql-bin
read_only
relay_log_purge=0
skip_name_resolve=1
mysql>CHANGE MASTER TO 
MASTER_HOST=‘MASTER_IP',
MASTER_USER='repluser', 
MASTER_PASSWORD=‘123456',
MASTER_LOG_FILE='mariadb-bin.000001', 
MASTER_LOG_POS=245;

9.在所有節點實現相互之間ssh key驗證

(1)MHA驗證和啓動
masterha_check_ssh --conf=/etc/mastermha/app1.cnf
masterha_check_repl --conf=/etc/mastermha/app1.cnf
masterha_manager --conf=/etc/mastermha/app1.cnf  //此命令執行後會默認在前臺執行,除非主節點出現問題導致自動提升從節點做新的主節點
(2)模擬主節點宕機:
systemctl stop mariadb
(3)排錯日誌
cat /data/mastermha/app1/manager.log | tail  //可以查看哪個從節點被提升爲新的主節點
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章