1、MHA相關概念及原理:node
一、MHA簡介:mysql
MHA(Master High Availability)是開源的MariaDB高可用解決方案。MHA在監控master節點故障時,會提高其中擁有最新數據的slave節點成爲新的master節點。MHA還提供了master節點的在線切換功能,即按需切換master/slave節點。構建MHA的前提條件是要先構建主從複製。MHA集羣中的各節點彼此之間均須要基於SSH互信通訊,以實現遠程控制及數據管理功能。git
二、MHA工做原理:github
MHA的目的在於維持MariaDB主從複製中master節點的高可用性,其最大特色是能夠修復多個slave節點之間的差別日誌,最終使全部slave節點保持數據一致,而後從中選擇一個做爲新的master節點,並將其它slave節點指向它。當master節點出現故障時,能夠經過對比slave節點之間I/O線程讀取master節點二進制日誌的position事件位置,選取最接近的slave節點做爲備選master節點,其它的slave節點能夠經過與備選master節點對比生成差別的中繼日誌,在備選master節點上應用從原來master節點保存的二進制日誌,同時將備選master節點提高爲新的master節點,最後在其它slave節點上應用相應的差別中繼日誌並重新的master節點開始複製。sql
三、MHA的兩種角色:數據庫
(1)MHA manager:管理節點,一般單獨部署在一臺獨立的服務器上,用來管理多個master/slave集羣,也可部署在一臺slave節點上,每一個master/slave集羣稱爲一個application。MHA Manager會定時探測集羣中的master節點,當發現master節點出現故障時,它能夠自動將具備最新數據的slave節點提高爲新的master節點,而後將全部其它的slave節點從新指向新的master節點。整個故障轉移過程對應用程序徹底透明,完成故障轉移(即主從切換)後,MHA manager會自動中止。vim
(2)MHA node:數據節點,運行在每臺MariaDB服務器上(manager/master/slave),它經過監控具有解析和清理logs功能的腳原本加快故障轉移。centos
四、MHA組件:服務器
(1)manager管理節點:網絡
a、masterha_check_ssh:檢測SSH環境
b、masterha_check_repl:檢測MariaDB主從複製環境
c、masterha_manager:MHA服務主程序
d、masterha_check_status:檢測MHA運行狀態
e、masterha_master_monitor:監測master節點可用性
f、masterha_master_switch:master節點切換
g、masterha_conf_host:添加或刪除已配置節點
h、masterha_stop:中止MHA服務
(2)node數據節點:
a、save_binary_logs:保存和複製master節點二進制日誌
b、apply_diff_relay_logs:識別差別的中繼日誌事件,並應用於其它slave節點
c、filter_mysqlbinlog:去除沒必要要rollback事件的工具
d、purge_relay_logs:清除中繼日誌工具(不會阻塞SQL線程)
(3)自定義擴展:
a、secondary_check_script:經過多條網絡路由檢測master節點的可用性腳本
b、master_ip_failover_script:故障轉移腳本
c、shutdown_script:強制關閉master節點腳本
d、report_script:以郵件告警的方式來發送failover報告腳本
e、init_conf_load_script:加載初始配置參數腳本
f、master_ip_online_change_script:在線切換主從節點腳本
2、準備工做:
一、演示環境:
IP |
操做系統 |
主機名 |
角色 |
數據庫版本 |
安裝方式 |
複製方式 |
server id |
192.168.1.143 |
CentOS 7.6 |
node1 |
MHA manager |
無 |
無 |
無 |
無 |
192.168.1.144 |
CentOS 7.6 |
node2 |
master |
MariaDB-10.3.15 |
yum |
半同步 |
1 |
192.168.1.145 |
CentOS 7.6 |
node3 |
slave |
MariaDB-10.3.15 |
yum |
異步 |
2 |
192.168.1.146 |
CentOS 7.6 |
node4 |
slave(備選master) |
MariaDB-10.3.15 |
yum |
半同步 |
3 |
實現效果:一旦master節點宕機,VIP(192.168.1.130)自動漂移至備選master節點,將其提高爲新的master節點,並將slave節點Master_Host中的IP指向它。
二、配置四個節點的epel源
三、配置四個節點的服務器時間同步
四、配置四個節點的主機名
五、配置四個節點的/etc/hosts文件:
# vim /etc/hosts
192.168.1.143 node1
192.168.1.144 node2
192.168.1.145 node3
192.168.1.146 node4
六、配置四個節點SSH互信通訊(除了第(4)步,其他都在manager節點中執行):
(1)生成密鑰對,基於密鑰認證:# ssh-keygen -t rsa -P "" --> 回車
(2)將公鑰文件中的內容追加寫入authorized_keys文件:# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
備註:因爲四個節點兩兩之間都須要基於密鑰認證明現互信通訊,因此此處不使用ssh-copy-id命令,太過麻煩
(3)修改authorized_keys文件的權限爲600:# chmod 600 ~/.ssh/authorized_keys
(4)其它三個節點建立目錄:# mkdir -pv ~/.ssh
(5)將私鑰和authorized_keys文件複製至其它三個節點:
# scp -p ~/.ssh/id_rsa ~/.ssh/authorized_keys root@node2:/root/.ssh
# scp -p ~/.ssh/id_rsa ~/.ssh/authorized_keys root@node3:/root/.ssh
# scp -p ~/.ssh/id_rsa ~/.ssh/authorized_keys root@node4:/root/.ssh
(6)測試免密登陸:# for (( i=1; i<=4; i++)); do ssh node$i 'ifconfig ens160'; done
備註:其它三個節點也須要進行測試
七、下載MHA相關軟件包:mha4mysql-manager-0.57-0.el7.noarch.rpm、mha4mysql-node-0.57-0.el7.noarch.rpm
特別注意:https://github.com/yoshinorim/mha4mysql-manager/releases下載的mha4mysql-manager-0.58-0.el7.centos.noarch.rpm和https://github.com/yoshinorim/mha4mysql-node/releases下載的mha4mysql-node-0.58-0.el7.centos.noarch.rpm,目前最新版本均爲0.58,MHA從0.58版本開始增長了super_read_only功能,而MariaDB-10.3.15中沒有super_read_only這個變量:
執行命令# masterha_check_repl --conf=/etc/mha/app1.cnf時會提示以下錯誤信息:
Checking if super_read_only is defined and turned on..DBD::mysql::st execute failed: Unknown system variable 'super_read_only' at /usr/share/perl5/vendor_perl/MHA/SlaveUtil.pm line 245.
因此最新0.58版本的mha4mysql-manager和mha4mysql-node不能使用,只能使用0.57版本
3、配置主從複製:
一、master節點修改server.cnf配置文件:# vim /etc/my.cnf.d/server.cnf
[mysqld]
port=3306
socket=/var/lib/mysql/mysql.sock
datadir=/var/lib/mysql
log_error=/var/log/mariadb.log
lower_case_table_names=1
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
innodb_file_per_table=1
skip_name_resolve=1
slow_query_log=1
slow_query_log_file=mariadb-slow.log
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1
log_bin=mysql-bin
log_bin_index=mysql-bin.index
binlog_format=mixed
relay_log=relay-log
relay_log_index=relay-log.index
server_id=1
sync_binlog=1
innodb_flush_log_at_trx_commit=1
二、master節點建立擁有複製權限的用戶:
MariaDB [(none)]> grant replication slave on *.* to 'repluser'@'192.168.1.%' identified by '123456';
MariaDB [(none)]> flush privileges;
三、master節點建立擁有管理MHA權限的用戶:
MariaDB [(none)]> grant all on *.* to 'mhauser'@'192.168.1.%' identified by '123456';
MariaDB [(none)]> flush privileges;
四、master節點查看正在使用的二進制日誌文件名稱及事件位置:
MariaDB [(none)]> show master status;
五、slave節點修改server.cnf配置文件:# vim /etc/my.cnf.d/server.cnf
[mysqld]
port=3306
socket=/var/lib/mysql/mysql.sock
datadir=/var/lib/mysql
log_error=/var/log/mariadb.log
lower_case_table_names=1
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
innodb_file_per_table=1
skip_name_resolve=1
slow_query_log=1
slow_query_log_file=mariadb-slow.log
relay_log=relay-log
relay_log_index=relay-log.index
server_id=2
relay_log_purge=0
read_only=1
備註:
(1)slave節點只能讀不能寫
(2)中繼日誌默認不存在,只有當複製啓動時纔會自動生成
(3)relay_log_purge=0,表示在默認狀況下,slave節點的中繼日誌會在SQL線程執行完畢後被自動刪除,可是在MHA環境中,這些中繼日誌在恢復其它slave節點時可能會被用到,所以須要禁用中繼日誌的自動刪除功能。
六、slave節點建立擁有管理MHA權限的用戶:
MariaDB [(none)]> grant all on *.* to 'mhauser'@'192.168.1.%' identified by '123456';
MariaDB [(none)]> flush privileges;
七、slave節點使用擁有複製權限的用戶鏈接至master節點:
MariaDB [(none)]> change master to master_host='192.168.1.144',master_user='repluser',master_password='123456',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=2320;
MariaDB [(none)]> show slave status\G
備註:
(1)Slave_IO_Running和Slave_SQL_Running的值,默認爲No
(2)自動在數據目錄/var/lib/mysql中建立relay-log.000001、relay-log.index和relay-log.info文件
(3)Master_Log_File的值爲master節點的二進制日誌文件名稱
(4)Read_Master_Log_Pos的值爲master節點二進制日誌事件的位置
八、slave節點啓動複製線程:
MariaDB [(none)]> start slave;
備註:
(1)start slave等同於分別執行start slave io_thread和start slave sql_thread
(2)stop slave表示中止主從複製線程
(3)重啓slave節點所在的服務器,複製線程會自動啓動
MariaDB [(none)]> show slave status\G
備註:
(1)只有當Slave_IO_Running和Slave_SQL_Running的值都爲Yes時,複製線程纔算啓動成功
(2)Seconds_Behind_Master的值爲0,說明slave節點沒有落後於master節點
(3)複製時的詳細信息記錄在slave節點的錯誤日誌/var/log/mariadb.log中
九、備選master節點修改server.cnf配置文件:# vim /etc/my.cnf.d/server.cnf
[mysqld]
port=3306
socket=/var/lib/mysql/mysql.sock
datadir=/var/lib/mysql
log_error=/var/log/mariadb.log
lower_case_table_names=1
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
innodb_file_per_table=1
skip_name_resolve=1
slow_query_log=1
slow_query_log_file=mariadb-slow.log
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1
log_bin=mysql-bin
log_bin_index=mysql-bin.index
binlog_format=mixed
relay_log=relay-log
relay_log_index=relay-log.index
server_id=3
sync_binlog=1
innodb_flush_log_at_trx_commit=1
relay_log_purge=0
read_only=1
十、備選master節點建立擁有複製權限的用戶:
MariaDB [(none)]> grant replication slave on *.* to 'repluser'@'192.168.1.%' identified by '123456';
MariaDB [(none)]> flush privileges;
十一、備選master節點建立擁有管理MHA權限的用戶:
MariaDB [(none)]> grant all on *.* to 'mhauser'@'192.168.1.%' identified by '123456';
MariaDB [(none)]> flush privileges;
十二、備選master節點使用擁有複製權限的用戶鏈接至master節點:
MariaDB [(none)]> change master to master_host='192.168.1.144',master_user='repluser',master_password='123456',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=2320;
1三、備選master節點啓動複製線程:
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G
1四、master節點查看與半同步複製相關的變量和狀態值:
MariaDB [(none)]> show global variables like 'rpl_semi_sync%';
備註:
(1)rpl_semi_sync_master_enabled的值爲ON
(2)rpl_semi_sync_slave_enabled的值爲ON
MariaDB [(none)]> show global status like 'rpl_semi_sync%';
備註:
(1)Rpl_semi_sync_master_clients的值變爲1
(2)Rpl_semi_sync_master_status的值變爲ON
(3)Rpl_semi_sync_slave_status的值爲OFF
(4)同時知足(1)和(2)說明半同步主從複製啓動成功
1五、備選master節點查看與半同步複製相關的變量和狀態值:
MariaDB [(none)]> show global variables like 'rpl_semi_sync%';
備註:
(1)rpl_semi_sync_master_enabled的值爲ON
(2)rpl_semi_sync_slave_enabled的值爲ON
MariaDB [(none)]> show global status like 'rpl_semi_sync%';
備註:
(1)Rpl_semi_sync_master_clients的值爲0
(2)Rpl_semi_sync_master_status的值爲OFF
(3)Rpl_semi_sync_slave_status的值變爲ON
1六、master節點查看異步的slave節點和半同步的備選master節點的相關信息:
MariaDB [(none)]> show slave hosts;
4、構建MHA高可用集羣:
一、manager節點安裝mha4mysql-manager和mha4mysql-node:
# yum -y localinstall mha4mysql-manager-0.57-0.el7.noarch.rpm mha4mysql-node-0.57-0.el7.noarch.rpm
二、其它三個節點安裝mha4mysql-node:# yum -y localinstall mha4mysql-node-0.57-0.el7.noarch.rpm
三、manager節點建立目錄及MHA配置文件:
manager節點須要爲每一個監控的master/slave集羣提供一個專用的配置文件,而全部的master/slave集羣也可共享全局配置。全局配置文件默認爲/etc/masterha_default.cnf,爲可選配置。若是僅監控一組master/slave集羣,也可直接經過application配置來提供各主機的默認配置信息,而每一個application的配置文件路徑可自定義。
# mkdir -pv /data/mha
# mkdir -pv /scripts
# mkdir -pv /etc/mha
# vim /etc/mha/app1.cnf
[server default]
user=mhauser
password=123456
manager_workdir=/data/mha
manager_log=/data/mha/manager.log
remote_workdir=/data/mha
ssh_user=root
repl_user=repluser
repl_password=123456
ping_interval=1
master_ip_failover_script=/scripts/master_ip_failover
report_script=/scripts/send_report
[server1]
hostname=192.168.1.144
ssh_port=22
port=3306
master_binlog_dir=/var/lib/mysql
candidate_master=1
check_repl_delay=0
[server2]
hostname=192.168.1.145
ssh_port=22
port=3306
no_master=1
[server3]
hostname=192.168.1.146
ssh_port=22
port=3306
master_binlog_dir=/var/lib/mysql
candidate_master=1
check_repl_delay=0
備註:配置參數詳解
(1)user:管理MHA用戶的名稱
(2)password:管理MHA用戶的密碼
(3)manager_workdir:MHA manager使用的工做目錄
(4)manager_log:MHA manager生成日誌的保存路徑及文件名
(5)remote_workdir:每個MHA node保存從master節點複製而來的二進制日誌的工做目錄
(6)ssh_user:MHA manager和MHA node經過此用戶鏈接至MariaDB所在的主機
(7)repl_user:主從複製時使用的用戶名稱
(8)repl_password:主從複製時使用的用戶密碼
(9)ping_interval:MHA manager ping master節點的時間間隔,單位爲秒,當連續3次ping失敗後,MHA manager認爲此master節點宕機
(10)master_ip_failover_script:故障轉移腳本
(11)master_ip_online_change_script:在線切換主從節點腳本
(12)report_script:以郵件告警的方式來發送failover報告腳本
(13)hostname:目標實例的主機名或IP
(14)ssh_port:目標數據庫的SSH端口號,默認爲22
(15)port:目標數據庫的mysqld端口號,默認爲3306
(16)master_binlog_dir:master節點生成二進制日誌的目錄
(17)candidate_master:從不一樣的slave節點中,提高一個可靠的節點做爲新的master節點,若是此值設置爲1,此slave節點會優先成爲新的master節點,即便這個slave節點的事件不是最新的
(18)check_repl_delay:默認狀況下若是一個slave節點落後master節點100M的中繼日誌,MHA將不會選擇該slave節點做爲一個新的master節點,由於對於這個slave節點的恢復須要花費很長時間,經過設置check_repl_delay=0,MHA在選擇一個新的master節點時將會忽略複製延時,此參數對於設置了candidate_master=1的主機很是有用,由於此備選master節點在切換過程當中必定是新的master節點
(19)no_master:此slave節點永遠不會成爲新的master節點
1七、建立master_ip_failover腳本:
# vim /scripts/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
);
my $vip = '192.168.1.130';
my $key = '0';
my $ssh_start_vip = "/usr/sbin/ifconfig ens160:$key $vip";
my $ssh_stop_vip = "/usr/sbin/ifconfig ens160:$key down";
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 \"`;
}
sub stop_vip() {
return 0 unless ($ssh_user);
`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}
sub usage {
"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";
}
# chmod +x /scripts/master_ip_failover
1八、建立send_report腳本:
# vim /scripts/send_report
#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
use Mail::Sender;
use Getopt::Long;
my ( $dead_master_host, $new_master_host, $new_slave_hosts, $subject, $body );
my $smtp='smtp.qq.com';
my $mail_from='83xxxxx08@qq.com';
my $mail_user='83xxxxx08@qq.com';
my $mail_pass='郵箱受權碼';
my $mail_to='83xxxxx08@qq.com';
GetOptions(
'orig_master_host=s' => \$dead_master_host,
'new_master_host=s' => \$new_master_host,
'new_slave_hosts=s' => \$new_slave_hosts,
'subject=s' => \$subject,
'body=s' => \$body,
);
mailToContacts( $smtp, $mail_from, $mail_user, $mail_pass, $mail_to, $subject, $body );
sub mailToContacts {
my ( $smtp, $mail_from, $mail_user, $mail_pass, $mail_to, $subject, $msg ) = @_;
open my $DEBUG, "> /var/log/mhamail.log"
or die "Can't open the debug file:$!\n";
my $sender = new Mail::Sender {
ctype => 'text/plain;charset=utf-8',
encoding => 'utf-8',
smtp => $smtp,
from => $mail_from,
auth => 'LOGIN',
TLS_allowed => '0',
authid => $mail_user,
authpwd => $mail_pass,
to => $mail_to,
subject => $subject,
debug => $DEBUG
};
$sender->MailMsg(
{
msg => $msg,
debug => $DEBUG
}
) or print $Mail::Sender::Error;
return 1;
}
exit 0;
# chmod +x /scripts/send_report
1九、manager節點檢測四個節點SSH互信通訊配置:# masterha_check_ssh --conf=/etc/mha/app1.cnf
備註:提示 - [info] All SSH connection tests passed successfully.
20、manager節點檢測MariaDB主從複製配置:# masterha_check_repl --conf=/etc/mha/app1.cnf
備註:提示
- [info] MHA::MasterMonitor version 0.57.
- [info] Master MHA Node version is 0.57.
192.168.1.144(192.168.1.144:3306) (current master)
+--192.168.1.145(192.168.1.145:3306)
+--192.168.1.146(192.168.1.146:3306)
Checking the Status of the script.. OK
MySQL Replication Health is OK.
2一、master節點添加VIP(第一次需手動添加):
# ifconfig ens160:0 192.168.1.130
# ip a l ens160
2二、manager節點後臺啓動MHA服務:
# nohup masterha_manager --conf=/etc/mha/app1.cnf &> /data/mha/manager.log &
2三、manager節點查看master節點的狀態:# masterha_check_status --conf=/etc/mha/app1.cnf
備註:若是要中止MHA服務,可使用命令# masterha_stop --conf=/etc/mha/app1.cnf
5、測試MHA高可用集羣:
一、master節點中止mariadb服務,模擬故障:# mysqladmin -uroot -p shutdown
二、manager節點查看/data/mha/manager.log日誌文件
備註:提示
- [info] Master is down!
- [info] * Phase 1: Configuration Check Phase..
- [info] ** Phase 1: Configuration Check Phase completed.
- [info] * Phase 2: Dead Master Shutdown Phase..
- [info] * Phase 2: Dead Master Shutdown Phase completed.
- [info] * Phase 3: Master Recovery Phase..
- [info] * Phase 3.1: Getting Latest Slaves Phase..
- [info] * Phase 3.2: Saving Dead Master's Binlog Phase..
- [info] * Phase 3.3: Determining New Master Phase..
From:
192.168.1.144(192.168.1.144:3306) (current master)
+--192.168.1.145(192.168.1.145:3306)
+--192.168.1.146(192.168.1.146:3306)
To:
192.168.1.146(192.168.1.146:3306) (new master)
+--192.168.1.145(192.168.1.145:3306)
- [info] * Phase 3.3: New Master Diff Log Generation Phase..
- [info] * Phase 3.4: Master Log Apply Phase..
- [info] ** Finished master recovery successfully.
- [info] * Phase 3: Master Recovery Phase completed.
- [info] * Phase 4: Slaves Recovery Phase..
- [info] * Phase 4.1: Starting Parallel Slave Diff Log Generation Phase..
- [info] * Phase 4.2: Starting Parallel Slave Log Apply Phase..
- [info] All relay logs were successfully applied.
- [info] All new slave servers recovered successfully.
- [info] * Phase 5: New master cleanup phase..
- [info] 192.168.1.146: Resetting slave info succeeded.
- [info] Master failover to 192.168.1.146(192.168.1.146:3306) completed successfully.
三、查看master節點網卡信息:# ip a l ens160
四、查看備選master節點網卡信息:# ip a l ens160
備註:VIP已從master節點漂移至備選master節點
五、slave節點自動將Master_Host的地址指向備選master節點(192.168.1.146):
MariaDB [(none)]> show slave status\G
六、備選master節點查看全局變量read_only的值,已變爲OFF:
MariaDB [(none)]> show global variables like 'read_only';
七、備選master節點查看slave節點的相關信息:
MariaDB [(none)]> show slave hosts;
八、故障轉移後,MHA服務自動中止運行,且在/data/mha目錄中生成app1.failover.complete文件:
# masterha_check_status --conf=/etc/mha/app1.cnf
九、查收告警郵件:
十、修復宕機的master節點(192.168.1.144),使其以新的slave節點身份從新上線:
(1)master節點修改server.cnf配置文件,新增relay_log_purge=0和read_only=1選項,並啓動mariadb服務
(2)manager節點查看複製起始位置:# grep -i "All other slaves should start" /data/mha/manager.log
- [info] All other slaves should start replication from here. Statement should be: CHANGE MASTER TO MASTER_HOST='192.168.1.146', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=2320, MASTER_USER='repluser', MASTER_PASSWORD='xxx';
(3)master節點使用擁有複製權限的用戶鏈接至備選master節點:
MariaDB [(none)]> change master to master_host='192.168.1.146',master_user='repluser',master_password='123456',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=2320;
(4)master節點啓動複製線程:
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G
(5)master節點查看與半同步複製相關的狀態值:
MariaDB [(none)]> show global status like 'rpl_semi_sync%';
備註:
a、Rpl_semi_sync_master_clients的值變爲0
b、Rpl_semi_sync_master_status的值變爲ON
c、Rpl_semi_sync_slave_status的值爲ON
(6)備選master節點查看與半同步複製相關的狀態值:
MariaDB [(none)]> show global status like 'rpl_semi_sync%';
備註:
a、Rpl_semi_sync_master_clients的值變爲1
b、Rpl_semi_sync_master_status的值變爲ON
c、Rpl_semi_sync_slave_status的值變爲OFF
(7)備選master節點查看異步的slave節點和半同步的master節點的相關信息:
MariaDB [(none)]> show slave hosts;
備註:新的主從複製構建完成
(8)manager節點刪除app1.failover.complete文件:# rm -rf /data/mha/app1.failover.complete
(9)manager節點後臺啓動MHA服務:
# nohup masterha_manager --conf=/etc/mha/app1.cnf &> /data/mha/manager.log &
(10)manager節點查看備選master節點的狀態:# masterha_check_status --conf=/etc/mha/app1.cnf