最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL MHA集群詳解(數(shù)據(jù)庫高可用)

 更新時間:2025年11月27日 11:39:29   作者:weixin_53776580  
MHA(MasterHighAvailability)是開源MySQL高可用管理工具,用于自動故障檢測與轉(zhuǎn)移,支持異步或半同步復(fù)制的MySQL主從架構(gòu),本文介紹MySQL MHA集群(數(shù)據(jù)庫高可用)的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧

MySQL 高可用方案:MHA 詳解與實戰(zhàn)

1. MHA 簡介

MHA(Master High Availability)是由工程師 Yoshinori Matsunobu 開發(fā)的一款開源 MySQL 高可用管理工具,專為解決 主從架構(gòu)中主庫(Master)單點故障 問題而設(shè)計。

其核心目標(biāo)是在主庫發(fā)生宕機(jī)時,自動、快速、安全地完成故障轉(zhuǎn)移(Failover),將一個從庫提升為新的主庫,并讓其他從庫重新指向新主庫,從而最大限度減少服務(wù)中斷時間(通常在 10~30 秒內(nèi)完成),保障業(yè)務(wù)連續(xù)性。

MHA 適用于基于 異步或半同步復(fù)制 的 MySQL 主從架構(gòu),支持 MySQL 5.5 ~ 8.0 版本(需注意版本兼容性)。

2. MHA 的組件組成

MHA 由兩個主要部分組成:

(1)MHA Manager(管理節(jié)點)

  • 通常部署在獨(dú)立的服務(wù)器上(不能與 MySQL 實例在同一臺機(jī)器)。
  • 負(fù)責(zé)監(jiān)控所有 MySQL 節(jié)點狀態(tài)。
  • 在檢測到主庫故障時,自動觸發(fā)故障轉(zhuǎn)移流程。
  • 提供命令行工具(如 masterha_check_ssh、masterha_check_repl、masterha_manager 等)用于檢查、啟動和管理高可用集群。

(2)MHA Node(數(shù)據(jù)節(jié)點)

  • 部署在每一臺 MySQL 服務(wù)器(包括主庫和所有從庫)上。
  • 包含一組本地腳本(如 save_binary_logsapply_diff_relay_logs、purge_relay_logs 等)。
  • 在故障轉(zhuǎn)移過程中,由 Manager 調(diào)用這些腳本執(zhí)行關(guān)鍵操作:
    • 保存主庫最后的 binlog(若主庫還能訪問)
    • 在新主庫上應(yīng)用差異日志
    • 清理舊中繼日志(relay log)

總結(jié):Manager 是“大腦”,Node 是“手腳”。

3. MHA 的作用與特點

核心作用:

  • 自動故障檢測與轉(zhuǎn)移:主庫宕機(jī)后自動選主并切換。
  • 數(shù)據(jù)一致性保障:盡可能多地補(bǔ)全未同步的 binlog,減少數(shù)據(jù)丟失。
  • 無需修改應(yīng)用代碼:配合 VIP 或 DNS 切換,對應(yīng)用透明。

主要特點:

特點說明
快速切換故障轉(zhuǎn)移通常在 10~30 秒內(nèi)完成
數(shù)據(jù)不丟(盡力而為)若主庫未完全宕機(jī),會嘗試?yán)∽詈蟮?binlog 補(bǔ)全
無需共享存儲基于原生 MySQL 復(fù)制,部署成本低
在線切換支持支持手動主從切換(masterha_master_switch),用于滾動升級
靈活的選主策略可通過配置指定優(yōu)先級(candidate_master=1
兼容性強(qiáng)支持異步/半同步復(fù)制,適用于大多數(shù)現(xiàn)有主從架構(gòu)

局限性

  • 不提供讀寫分離功能(需搭配 ProxySQL 等中間件)
  • 不解決從庫高可用問題(僅保障主庫高可用)
  • 官方已停止維護(hù)(最新版為 0.58,但社區(qū)仍在廣泛使用)

4. MHA 工作原理

MHA 的故障轉(zhuǎn)移流程如下:

正常狀態(tài):

  • 1 個 Master + N 個 Slave,開啟 binlog 和 relay log。
  • MHA Manager 定期(默認(rèn)每 3 秒)通過 SSH 和 SQL 連接檢測主庫存活。

故障發(fā)生時:

  1. 檢測主庫宕機(jī)
    Manager 無法通過 ping、SSH 或 MySQL 連接訪問主庫,確認(rèn)故障。
  2. 選擇新主庫(New Master)
    • 優(yōu)先選擇 relay log 最新(即復(fù)制延遲最小)的從庫。
    • 若配置了 candidate_master=1,則優(yōu)先考慮該節(jié)點。
    • 排除設(shè)置了 no_master=1 的節(jié)點。
  3. 補(bǔ)全數(shù)據(jù)(關(guān)鍵步驟)
    • 如果原主庫還能 SSH 登錄(但 MySQL 掛了),MHA Node 會執(zhí)行 save_binary_logs 腳本,拉取主庫上尚未傳送到任何從庫的 binlog。
    • 將這部分“缺失”的日志應(yīng)用到新主庫上,最大限度保證數(shù)據(jù)一致性。
  4. 提升新主庫
    • 在選定的從庫上執(zhí)行 RESET SLAVE,解除從屬關(guān)系,使其成為獨(dú)立主庫。
  5. 其他從庫重定向
    • 所有剩余從庫執(zhí)行 CHANGE MASTER TO,指向新的主庫,并啟動復(fù)制。
  6. 通知與清理
    • 可配置腳本發(fā)送郵件、調(diào)用 API 通知運(yùn)維。
    • 清理舊 relay logs,避免磁盤占滿。

關(guān)鍵優(yōu)勢:MHA 是少數(shù)能在主庫部分可用時“搶救”最后 binlog 的工具,顯著優(yōu)于簡單切換。

5. 實戰(zhàn):MHA 部署簡

5.1 實驗環(huán)境

MHA manager 節(jié)點服務(wù)器:CentOS7.6(64 位) manager/192.168.65.128,安裝MHA node 和 manager 組件
Master 節(jié)點服務(wù)器:CentOS7.6(64 位) mysql1/192.168.65.131 ,安裝mysql5.7、MHA node 組件
Slave1 節(jié)點服務(wù)器:CentOS7.6(64 位) mysql2/192.168.65.133 ,安裝mysql5.7、MHA node 組件
Slave2 節(jié)點服務(wù)器:CentOS7.6(64 位) mysql3/192.168.65.135 ,安裝mysql5.7、MHA node 組件

5.2 準(zhǔn)備工作

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
①  Master、Slave1、Slave2 節(jié)點上安裝 mysql5.7
②  修改 Master、Slave1、Slave2 節(jié)點的主機(jī)名
hostnamectl set-hostname Master
hostnamectl set-hostname Slave1
hostnamectl set-hostname Slave2
③ 修改 Master、Slave1、Slave2 節(jié)點的 Mysql主配置文件/etc/my.cnf 
##Master 節(jié)點##
vim /etc/my.cnf
[mysqld]
server-id = 1
log_bin = master-bin
log-slave-updates = true
systemctl restart mysqld
##Slave1 節(jié)點##
vim /etc/my.cnf
#三臺服務(wù)器的 server-id 不能一樣
server-id = 2 						
log_bin = master-bin
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index
systemctl restart mysqld
###Slave2 節(jié)點##
vim /etc/my.cnf		
#三臺服務(wù)器的 server-id 不能一樣
server-id = 3 
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index
systemctl restart mysqld
④ 在 Master、Slave1、Slave2 節(jié)點上都創(chuàng)建兩個軟鏈接
ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/
⑤.配置 mysql 一主兩從
(1)所有數(shù)據(jù)庫節(jié)點進(jìn)行 mysql 授權(quán)
mysql -uroot -p
grant replication slave on *.* to 'myslave'@'192.168.65.%' identified by '123456';		#從數(shù)據(jù)庫同步使用
grant all privileges on *.* to 'mha'@'192.168.65.%' identified by 'manager';		#manager 使用
grant all privileges on *.* to 'mha'@'master' identified by 'manager';				#防止從庫通過主機(jī)名連接不上主庫
grant all privileges on *.* to 'mha'@'slave1' identified by 'manager';
grant all privileges on *.* to 'mha'@'slave2' identified by 'manager';
flush privileges;
(2)在 Master 節(jié)點查看二進(jìn)制文件和同步點
show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |          |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
(3)在 Slave1、Slave2 節(jié)點執(zhí)行同步操作
change master to master_host='192.168.65.131',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=  ; 
start slave;
(4)在 Slave1、Slave2 節(jié)點查看數(shù)據(jù)同步結(jié)果
show slave status\G		
//確保 IO 和 SQL 線程都是 Yes,代表同步正常。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
(5)兩個從庫必須設(shè)置為只讀模式:
set global read_only=1;
(6)插入數(shù)據(jù)測試數(shù)據(jù)庫同步
##在 Master 主庫插入條數(shù)據(jù),測試是否同步##
create database test_db;
use test_db;
create table test(id int);
insert into test(id) values (1);

5.3 安裝MHA所有組件與測試

5.3.1 安裝 MHA 軟件
(1)所有服務(wù)器上都安裝 MHA 依賴的環(huán)境,首先安裝 epel 源
yum install epel-release --nogpgcheck -y
yum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN
(2)安裝 MHA 軟件包,先在所有服務(wù)器上必須先安裝 node 組件
對于每個操作系統(tǒng)版本不一樣,這里 CentOS7.6選擇 0.57 版本。
在所有服務(wù)器上必須先安裝 node 組件,最后在 MHA-manager 節(jié)點上安裝 manager 組件,因為 manager 依賴 node 組件。
cd /opt
tar zxvf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57
perl Makefile.PL
make && make install
(3)在 MHA manager 節(jié)點上安裝 manager 組件
cd /opt
tar zxvf mha4mysql-manager-0.57.tar.gz
cd mha4mysql-manager-0.57
perl Makefile.PL
make && make install
5.3.2 manager與node工具使用
#manager 組件安裝后在/usr/local/bin 下面會生成幾個工具,主要包括以下幾個:
masterha_check_ssh 檢查 MHA 的 SSH 配置狀況
masterha_check_repl 檢查 MySQL 復(fù)制狀況
masterha_manger 啟動 manager的腳本
masterha_check_status 檢測當(dāng)前 MHA 運(yùn)行狀態(tài)
masterha_master_monitor 檢測 master 是否宕機(jī)
masterha_master_switch 控制故障轉(zhuǎn)移(自動或者 手動)
masterha_conf_host 添加或刪除配置的 server 信息
masterha_stop  關(guān)閉manager
#node 組件安裝后也會在/usr/local/bin 下面會生成幾個腳本(這些工具通常由 MHAManager 的腳本觸發(fā),無需人為操作)主要如下:
save_binary_logs 保存和復(fù)制 master 的二進(jìn)制日志
apply_diff_relay_logs 識別差異的中繼日志事件并將其差異的事件應(yīng)用于其他的 slave
filter_mysqlbinlog 去除不必要的 ROLLBACK 事件(MHA 已不再使用這個工具)
purge_relay_logs 清除中繼日志(不會阻塞 SQL 線程)
5.3.3 在所有服務(wù)器上配置無密碼認(rèn)證
(1)在 manager 節(jié)點上配置到所有數(shù)據(jù)庫節(jié)點的無密碼認(rèn)證
ssh-keygen -t rsa 				#一路按回車鍵
ssh-copy-id 192.168.65.133
ssh-copy-id 192.168.65.135
ssh-copy-id 192.168.65.131
(2)在 master 上配置到數(shù)據(jù)庫節(jié)點 slave1 和 slave2 的無密碼認(rèn)證
ssh-keygen -t rsa
ssh-copy-id 192.168.65.133
ssh-copy-id 192.168.65.135
(3)在 slave1 上配置到數(shù)據(jù)庫節(jié)點 master 和 slave2 的無密碼認(rèn)證
ssh-keygen -t rsa
ssh-copy-id 192.168.65.131
ssh-copy-id 192.168.65.135
(4)在 slave2 上配置到數(shù)據(jù)庫節(jié)點 master 和 slave1 的無密碼認(rèn)證
ssh-keygen -t rsa
ssh-copy-id 192.168.65.131
ssh-copy-id 192.168.65.133
5.3.4 在 manager 節(jié)點上配置 MHA
(1)在 manager 節(jié)點上復(fù)制相關(guān)腳本到/usr/local/bin 目錄
cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/bin
//拷貝后會有四個執(zhí)行文件
ll /usr/local/bin/scripts/
----------------------------------------------------------------------------------------------------------
master_ip_failover  		#自動切換時 VIP 管理的腳本
master_ip_online_change 	#在線切換時 vip 的管理
power_manager 				#故障發(fā)生后關(guān)閉主機(jī)的腳本
send_report 				#因故障切換后發(fā)送報警的腳本
----------------------------------------------------------------------------------------------------------
(2)復(fù)制上述的自動切換時 VIP 管理的腳本到 /usr/local/bin 目錄,這里使用master_ip_failover腳本來管理 VIP 和故障切換
cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin
(3)修改內(nèi)容如下:(刪除原有內(nèi)容,直接復(fù)制并修改vip相關(guān)參數(shù))
vim /usr/local/bin/master_ip_failover
#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
use Getopt::Long;
my (
$command, $ssh_user, $orig_master_host, $orig_master_ip,
$orig_master_port, $new_master_host, $new_master_ip, $new_master_port
);
#############################添加內(nèi)容部分#########################################
my $vip = '192.168.110.200';									#指定vip的地址
my $brdc = '192.168.110.255';								#指定vip的廣播地址
my $ifdev = 'ens33';										#指定vip綁定的網(wǎng)卡
my $key = '1';												#指定vip綁定的虛擬網(wǎng)卡序列號
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";		#代表此變量值為ifconfig ens33:1 192.168.110.200
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";		#代表此變量值為ifconfig ens33:1 192.168.110.200 down
my $exit_code = 0;											#指定退出狀態(tài)碼為0
#my $ssh_start_vip = "/usr/sbin/ip addr add $vip/24 brd $brdc dev $ifdev label $ifdev:$key;/usr/sbin/arping -q -A -c 1 -I $ifdev $vip;iptables -F;";
#my $ssh_stop_vip = "/usr/sbin/ip addr del $vip/24 dev $ifdev label $ifdev:$key";
##################################################################################
GetOptions(
'command=s' => \$command,
'ssh_user=s' => \$ssh_user,
'orig_master_host=s' => \$orig_master_host,
'orig_master_ip=s' => \$orig_master_ip,
'orig_master_port=i' => \$orig_master_port,
'new_master_host=s' => \$new_master_host,
'new_master_ip=s' => \$new_master_ip,
'new_master_port=i' => \$new_master_port,
);
exit &main();
sub main {
print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";
if ( $command eq "stop" || $command eq "stopssh" ) {
my $exit_code = 1;
eval {
print "Disabling the VIP on old master: $orig_master_host \n";
&stop_vip();
$exit_code = 0;
};
if ($@) {
warn "Got Error: $@\n";
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "start" ) {
my $exit_code = 10;
eval {
print "Enabling the VIP - $vip on the new master - $new_master_host \n";
&start_vip();
$exit_code = 0;
};
if ($@) {
warn $@;
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "status" ) {
print "Checking the Status of the script.. OK \n";
exit 0;
}
else {
&usage();
exit 1;
}
}
sub start_vip() {
`ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}
## A simple system call that disable the VIP on the old_master
sub stop_vip() {
`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}
sub usage {
print
"Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}
(4)創(chuàng)建 MHA 軟件目錄并拷貝配置文件,這里使用app1.cnf配置文件來管理 mysql 節(jié)點服務(wù)器
mkdir /etc/masterha
cp /opt/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha
vim /etc/masterha/app1.cnf						#刪除原有內(nèi)容,直接復(fù)制并修改節(jié)點服務(wù)器的IP地址
[server default]
manager_log=/var/log/masterha/app1/manager.log
manager_workdir=/var/log/masterha/app1
master_binlog_dir=/usr/local/mysql/data
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
password=manager
ping_interval=1
remote_workdir=/tmp
repl_password=123456
repl_user=myslave
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.65.133 -s 192.168.65.135
shutdown_script=""
ssh_user=root
user=mha
[server1]
hostname=192.168.65.131
port=3306
[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.65.133
port=3306
[server3]
hostname=192.168.65.135
port=3306
----------------------------------------------------------------------------------------------------------
[server default]
manager_log=/var/log/masterha/app1/manager.log      #manager日志
manager_workdir=/var/log/masterha/app1            #manager工作目錄
master_binlog_dir=/usr/local/mysql/data/         #master保存binlog的位置,這里的路徑要與master里配置的binlog的路徑一致,以便MHA能找到
master_ip_failover_script=/usr/local/bin/master_ip_failover  #設(shè)置自動failover時候的切換腳本,也就是上面的那個腳本
master_ip_online_change_script=/usr/local/bin/master_ip_online_change  #設(shè)置手動切換時候的切換腳本
password=manager			#設(shè)置mysql中root用戶的密碼,這個密碼是前文中創(chuàng)建監(jiān)控用戶的那個密碼
ping_interval=1				#設(shè)置監(jiān)控主庫,發(fā)送ping包的時間間隔,默認(rèn)是3秒,嘗試三次沒有回應(yīng)的時候自動進(jìn)行failover
remote_workdir=/tmp			#設(shè)置遠(yuǎn)端mysql在發(fā)生切換時binlog的保存位置
repl_password=123		    #設(shè)置復(fù)制用戶的密碼
repl_user=myslave			#設(shè)置復(fù)制用戶的用戶
report_script=/usr/local/send_report     #設(shè)置發(fā)生切換后發(fā)送的報警的腳本
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.65.133 -s 192.168.65.135	#指定檢查的從服務(wù)器IP地址
shutdown_script=""			#設(shè)置故障發(fā)生后關(guān)閉故障主機(jī)腳本(該腳本的主要作用是關(guān)閉主機(jī)防止發(fā)生腦裂,這里沒有使用)
ssh_user=root				#設(shè)置ssh的登錄用戶名
user=mha					#設(shè)置監(jiān)控用戶root
[server1]
hostname=192.168.65.131
port=3306
[server2]
hostname=192.168.65.133
port=3306
candidate_master=1
#設(shè)置為候選master,設(shè)置該參數(shù)以后,發(fā)生主從切換以后將會將此從庫提升為主庫,即使這個從庫不是集群中最新的slave
check_repl_delay=0
#默認(rèn)情況下如果一個slave落后master 超過100M的relay logs的話,MHA將不會選擇該slave作為一個新的master, 因為對于這個slave的恢復(fù)需要花費(fèi)很長時間;通過設(shè)置check_repl_delay=0,MHA觸發(fā)切換在選擇一個新的master的時候?qū)雎詮?fù)制延時,這個參數(shù)對于設(shè)置了candidate_master=1的主機(jī)非常有用,因為這個候選主在切換的過程中一定是新的master
[server3]
hostname=192.168.65.135
port=3306
----------------------------------------------------------------------------------------------------------
5.3.5 第一次配置需要在 Master 節(jié)點上手動開啟虛擬IP
/sbin/ifconfig ens33:1 192.168.65.200/24
5.3.6 manager 節(jié)點上測試 ssh
在 manager 節(jié)點上測試 ssh 無密碼認(rèn)證,如果正常最后會輸出 successfully,如下所示。
masterha_check_ssh -conf=/etc/masterha/app1.cnf
5.3.7 manager 節(jié)點上測試 mysql 主從連接
在 manager 節(jié)點上測試 mysql 主從連接情況,最后出現(xiàn) MySQL Replication Health is OK 字樣說明正常。如下所示。
masterha_check_repl -conf=/etc/masterha/app1.cnf
5.3.8 在 manager 節(jié)點上啟動 MHA
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
#生產(chǎn)中java 服務(wù)啟動的方式
nohup  java -jar  微服務(wù)名稱-( war jar)   &   
----------------------------------------------------------------------------------------------------------
--remove_dead_master_conf:該參數(shù)代表當(dāng)發(fā)生主從切換后,老的主庫的 ip 將會從配置文件中移除。
--manger_log:日志存放位置。
--ignore_last_failover:在缺省情況下,如果 MHA 檢測到連續(xù)發(fā)生宕機(jī),且兩次宕機(jī)間隔不足 8 小時的話,則不會進(jìn)行 Failover, 之所以這樣限制是為了避免 ping-pong 效應(yīng)。該參數(shù)代表忽略上次 MHA 觸發(fā)切換產(chǎn)生的文件,默認(rèn)情況下,MHA 發(fā)生切換后會在日志記錄,也就是上面設(shè)置的日志app1.failover.complete文件,下次再次切換的時候如果發(fā)現(xiàn)該目錄下存在該文件將不允許觸發(fā)切換,除非在第一次切換后收到刪除該文件,為了方便,這里設(shè)置為--ignore_last_failover。
----------------------------------------------------------------------------------------------------------
5.3.9 查看 MHA 狀態(tài)

查看 MHA 狀態(tài),可以看到當(dāng)前的 master 是 master 節(jié)點。

masterha_check_status --conf=/etc/masterha/app1.cnf
5.3.10 查看 MHA 日志

查看 MHA 日志,也以看到當(dāng)前的 master 是 192.168.65.131,如下所示。

cat /var/log/masterha/app1/manager.log | grep "current master"
5.3.11 查看master VIP
查看master 的 VIP 地址 192.168.65.200 是否存在,這個 VIP 地址不會因為 manager 節(jié)點停止 MHA 服務(wù)而消失。
ifconfig
5.3.12 若要關(guān)閉 manager 服務(wù)
//若要關(guān)閉 manager 服務(wù),可以使用如下命令。
masterha_stop --conf=/etc/masterha/app1.cnf
或者可以直接采用 kill 進(jìn)程 ID 的方式關(guān)閉。

5.4 MHA 模擬故障

---------------------- 故障模擬 --------------------------------
#在 manager 節(jié)點上監(jiān)控觀察日志記錄
tail -f /var/log/masterha/app1/manager.log
#在 Master 節(jié)點 master 上停止mysql服務(wù)
systemctl stop mysqld
或
pkill -9 mysql
#正常自動切換一次后,MHA 進(jìn)程會退出。HMA 會自動修改 app1.cnf 文件內(nèi)容,將宕機(jī)的 master 節(jié)點刪除。查看 slave1 是否接管 VIP
ifconfig
故障切換備選主庫的算法:
1.一般判斷從庫的是從(position/GTID)判斷優(yōu)劣,數(shù)據(jù)有差異,最接近于master的slave,成為備選主。
2.?dāng)?shù)據(jù)一致的情況下,按照配置文件順序,選擇備選主庫。
3.設(shè)定有權(quán)重(candidate_master=1),按照權(quán)重強(qiáng)制指定備選主。
(1)默認(rèn)情況下如果一個slave落后master 100M的relay logs的話,即使有權(quán)重,也會失效。
(2)如果check_repl_delay=0的話,即使落后很多日志,也強(qiáng)制選擇其為備選主。
故障修復(fù)步驟:
1.修復(fù)mysql
systemctl restart mysqld
2.修復(fù)主從
#在現(xiàn)主庫服務(wù)器 Mysql2(slave1上) 查看二進(jìn)制文件和同步點
show master status;
#在原主庫服務(wù)器 mysql1 執(zhí)行同步操作
change master to master_host='192.168.65.133',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=1745;
change master to master_host='192.168.65.133',master_user='myslave',master_password='123456',master_log_file='master-bin.000002',master_log_pos=154;
start slave;
3.在 manager 節(jié)點上修改配置文件app1.cnf(再把這個記錄添加進(jìn)去,因為它檢測掉失效時候會自動消失)
vi /etc/masterha/app1.cnf
......
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.65.131 -s 192.168.65.135
......
[server1]
hostname=192.168.65.131
port=3306
[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.65.133
port=3306
[server3]
hostname=192.168.65.135
port=3306
4.在 manager 節(jié)點上啟動 MHA
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
#解決中英字不兼容報錯的問題
dos2unix /usr/local/bin/master_ip_failover 

到此這篇關(guān)于【數(shù)據(jù)庫高可用】MySQL MHA集群詳解的文章就介紹到這了,更多相關(guān)mysql mha集群內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL交換分區(qū)的實例詳解

    MySQL交換分區(qū)的實例詳解

    這篇文章主要介紹了MySQL交換分區(qū)的實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • MySQL中的RIGHT?JOIN和CROSS?JOIN操作示例

    MySQL中的RIGHT?JOIN和CROSS?JOIN操作示例

    本文詳細(xì)介紹了MySQL中的RIGHT?JOIN和CROSS?JOIN操作,RIGHT?JOIN返回右表中的所有記錄及與左表中的記錄相匹配的記錄,而CROSS?JOIN返回兩個表中所有可能的組合,通過實際示例和輸出結(jié)果,我們展示了如何使用RIGHT?JOIN和CROSS?JOIN進(jìn)行數(shù)據(jù)庫查詢,一起看看吧
    2023-07-07
  • SQL優(yōu)化教程之in與range查詢

    SQL優(yōu)化教程之in與range查詢

    這篇文章主要介紹了給大家介紹了SQL優(yōu)化之in與range查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • mysql 5.7.17 安裝配置方法圖文教程

    mysql 5.7.17 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 5.7.17 安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • MySQL聯(lián)表查詢的簡單示例

    MySQL聯(lián)表查詢的簡單示例

    這篇文章主要給大家介紹了關(guān)于MySQL聯(lián)表查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • mysql動態(tài)游標(biāo)學(xué)習(xí)(mysql存儲過程游標(biāo))

    mysql動態(tài)游標(biāo)學(xué)習(xí)(mysql存儲過程游標(biāo))

    mysql動態(tài)游標(biāo)示例,通過準(zhǔn)備語句、視圖和靜態(tài)游標(biāo)實現(xiàn),大家參考使用吧
    2013-12-12
  • MySQL敏感數(shù)據(jù)加密的實現(xiàn)方案

    MySQL敏感數(shù)據(jù)加密的實現(xiàn)方案

    這篇文章主要介紹了MySQL敏感數(shù)據(jù)加密的實現(xiàn)方案,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2024-02-02
  • 全面了解mysql中utf8和utf8mb4的區(qū)別

    全面了解mysql中utf8和utf8mb4的區(qū)別

    下面小編就為大家?guī)硪黄媪私鈓ysql中utf8和utf8mb4的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • MySQL如何查看數(shù)據(jù)庫連接數(shù)

    MySQL如何查看數(shù)據(jù)庫連接數(shù)

    本文介紹了在MySQL中查看數(shù)據(jù)庫連接數(shù)的多種方法,包括使用SHOWSTATUS命令、查詢information_schema數(shù)據(jù)庫、使用SHOWPROCESSLIST命令、查看最大連接數(shù)以及使用性能模式,每個方法都有詳細(xì)的示例和注意事項,幫助你有效地監(jiān)控和管理數(shù)據(jù)庫連接
    2024-11-11
  • MySQL?Server?層四個日志詳解

    MySQL?Server?層四個日志詳解

    這篇文章主要介紹了MySQL?Server?層四個日志,包括錯誤日志,查詢?nèi)罩?,二進(jìn)制日志及慢查詢?nèi)罩?,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03

最新評論

炉霍县| 万荣县| 和平县| 秀山| 湄潭县| 巨野县| 建宁县| 华阴市| 河池市| 富蕴县| 宁陕县| 凉山| 宁都县| 永城市| 三台县| 醴陵市| 东乡族自治县| 临城县| 巴中市| 奉贤区| 郎溪县| 定陶县| 司法| 屏东市| 百色市| 张家界市| 宜君县| 郸城县| 东乌珠穆沁旗| 临朐县| 太康县| 台山市| 新兴县| 太白县| 迁西县| 同德县| 茶陵县| 会昌县| 长沙县| 个旧市| 瑞丽市|