MHA實現mysql高可用性
阿新 • • 發佈:2019-05-09
secondary 三臺 info 5.5 nag use tps 配置參數 check 一、 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 [email protected]‘192.168.30.%‘ identified by ‘123456‘;
mysql>grant all on *.* to [email protected]‘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 //可以查看哪個從節點被提升為新的主節點
MHA實現mysql高可用性