CentOS 7.6構建MariaDB MHA高可用集羣,實現VIP漂移和郵件告警

1、MHA相關概念及原理:node

一、MHA簡介:mysql

MHAMaster 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集羣稱爲一個applicationMHA 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_managerMHA服務主程序

d、masterha_check_status:檢測MHA運行狀態

e、masterha_master_monitor:監測master節點可用性

f、masterha_master_switchmaster節點切換

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節點宕機,VIP192.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.rpmmha4mysql-node-0.57-0.el7.noarch.rpm

特別注意:https://github.com/yoshinorim/mha4mysql-manager/releases下載的mha4mysql-manager-0.58-0.el7.centos.noarch.rpmhttps://github.com/yoshinorim/mha4mysql-node/releases下載的mha4mysql-node-0.58-0.el7.centos.noarch.rpm,目前最新版本均爲0.58MHA0.58版本開始增長了super_read_only功能,而MariaDB-10.3.15中沒有super_read_only這個變量:

image.png

執行命令# 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-managermha4mysql-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;

image.png

五、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

image.png

備註:

(1)Slave_IO_RunningSlave_SQL_Running的值,默認爲No

(2)自動在數據目錄/var/lib/mysql中建立relay-log.000001relay-log.indexrelay-log.info文件

(3)Master_Log_File的值爲master節點的二進制日誌文件名稱

(4)Read_Master_Log_Pos的值爲master節點二進制日誌事件的位置

八、slave節點啓動複製線程:

MariaDB [(none)]> start slave;

備註:

(1)start slave等同於分別執行start slave io_threadstart slave sql_thread

(2)stop slave表示中止主從複製線程

(3)重啓slave節點所在的服務器,複製線程會自動啓動

MariaDB [(none)]> show slave status\G

image.png

image.png

備註:

(1)只有當Slave_IO_RunningSlave_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

image.png

image.png

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;

image.png


4、構建MHA高可用集羣:

一、manager節點安裝mha4mysql-managermha4mysql-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_workdirMHA manager使用的工做目錄

(4)manager_logMHA manager生成日誌的保存路徑及文件名

(5)remote_workdir:每個MHA node保存從master節點複製而來的二進制日誌的工做目錄

(6)ssh_userMHA managerMHA node經過此用戶鏈接至MariaDB所在的主機

(7)repl_user:主從複製時使用的用戶名稱

(8)repl_password:主從複製時使用的用戶密碼

(9)ping_intervalMHA manager ping master節點的時間間隔,單位爲秒,當連續3ping失敗後,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_dirmaster節點生成二進制日誌的目錄

(17)candidate_master:從不一樣的slave節點中,提高一個可靠的節點做爲新的master節點,若是此值設置爲1,此slave節點會優先成爲新的master節點,即便這個slave節點的事件不是最新的

(18)check_repl_delay:默認狀況下若是一個slave節點落後master節點100M的中繼日誌,MHA將不會選擇該slave節點做爲一個新的master節點,由於對於這個slave節點的恢復須要花費很長時間,經過設置check_repl_delay=0MHA在選擇一個新的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 {

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";

}

# 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

image.png

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

image.png

備註:若是要中止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

image.png

四、查看備選master節點網卡信息:# ip a l ens160

image.png

備註:VIP已從master節點漂移至備選master節點

五、slave節點自動將Master_Host的地址指向備選master節點(192.168.1.146):

MariaDB [(none)]> show slave status\G

image.png

六、備選master節點查看全局變量read_only的值,已變爲OFF

MariaDB [(none)]> show global variables like 'read_only';

image.png

七、備選master節點查看slave節點的相關信息:

MariaDB [(none)]> show slave hosts;

image.png

八、故障轉移後,MHA服務自動中止運行,且在/data/mha目錄中生成app1.failover.complete文件:

# masterha_check_status --conf=/etc/mha/app1.cnf

image.png

九、查收告警郵件:

image.png

十、修復宕機的master節點(192.168.1.144),使其以新的slave節點身份從新上線:

(1)master節點修改server.cnf配置文件,新增relay_log_purge=0read_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

image.png

image.png

(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;

image.png

備註:新的主從複製構建完成

(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

image.png

相關文章
相關標籤/搜索