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