MySQL高可用羣集----MHA

前言:

  • MHA目前在MySQL高可用方面是一個相對成熟的解決方案
  • 但是在搭建的過程中容易報錯,且MHA的構建綜合了主從複製,所以MHA安裝時需要嚴格執行每一個部署

一、MHA概述

1.1 MHA簡介
  • MHA(Master High Availability)目前在MySQL高可用方面是一個相對成熟的解決方案,MHA是由日本人開發,是一套優秀的MySQL故障切換和主從複製的高可用軟件
  • 在MySQL故障切換的過程中,MHA能做到0~30秒之內自動完成數據庫的故障切換操作,並且在進行故障切換的過程中,MHA能夠最大程度上保證數據庫的一致性,以達到真正意義上的高可用
  • MHA由perl語言編寫,該工具僅僅使用於MySQLReplication環境,目的在於維持Master主庫的高可用性
  • MHA是基於標準的MySQL複製(異步/半同步)
  • MHA由兩部分組成管理節點(MHA manager)和數據節點(MHA Node)兩部分組成
  • MHA manager 可以單獨部署在一臺服務器上,可以部署在一臺slave上面
  • 主從複製架構:主從複製(一主多從);MHA架構(多主多從);MMM架構(雙主多從)
1.2 MHA特點
  • 自動故障切換過程中,MHA總會試圖從宕機的主服務器上保存二進制日誌,最大程度的保證數據不丟失

    但這並不總是可行,錄入如果主服務器硬件故障或者無法通過ssh訪問,MHA則無法保存二進制日誌,只能進行故障轉移而丟失了最新的數據

  • 使用MySQL5.5的半同步複製,可以大大降低數據丟失的風險。MHA可以與半同步複製結合起來,如果只有一個slave已經收到了最新的二進制日誌,MHA可以將最新的二進制日誌應用於其他所有的slave服務器上,因此可以保證所有節點的數據一致性,有時候可故意設置從節點慢於主節點,當發生意外刪除數據庫倒是數據丟失時可從從節點二進制日誌中恢復。

1.3 MHA作用
  • 傳統MySQL主從架構存在單點故障的危險

在這裏插入圖片描述

  • 傳統架構中,只有一個MySQL主服務器,所以當出現單點故障時,整個服務器集羣就會癱瘓
  • 爲了解決這種問題,現網中需要再主服務器宕機的時候,重新建立一臺主服務器,負責監控等工作

二、MHA實驗

2.1 實驗環境
  • 服務器 CentOS7.4(64 位) MHA-manager/192.168.226.128
    管理節點,安裝 manager 組件

    只要用來調控與調度

  • 服務器 CentOS7.4(64 位) Mysql1/192.168.226.132 Master 節點,安裝 node 組件

  • 服務器 CentOS7.4(64 位) Mysql2/192.168.195.133 Slave 節點,安裝 node 組件

    第二臺MySQL服務器作爲主備服務器

  • 服務器 CentOS7.4(64 位) Mysql3/192.168.195.134 Slave 節點,安裝 node 組件

2.2 拓撲圖

在這裏插入圖片描述

2.3 實驗目的
  • 通過MHA監控MySQL服務器,在服務器故障時自動進行切換,不影響業務
  • 當主服務器宕機時,備選主服務器自動成爲主庫
2.4 案例配置思路
  • ① 安裝MySQL數據庫
  • ② 配置MySQL 一主兩從
  • ③ 安裝MHA軟件
  • ④ 配置無密碼認證
  • ⑤ 配置MySQL MHA 高可用
  • ⑥ 模擬master故障切換
2.5 實驗配置
2.5.1 定義節點服務器名稱
hostnamectl set-hostname manager
su

hostnamectl set-hostname master
su

hostnamectl set-hostname slave1
su

hostnamectl set-hostname slave2
su
2.5.2 安裝編譯依賴環境
  • 在三臺MySQL服務器上安裝
yum -y install ncurses-devel gcc-c++ perl-Module-Install
  • 安裝、配置cmake-2.8.6
mount.cifs //192.168.226.1/LAMP-C7 /mnt
cd /mnt
tar zxvf cmake-2.8.6.tar.gz -C /opt

cd /opt/cmake-2.8.6/
./configure
gmake && gmake install
#直接編譯即可
2.5.3 手工編譯安裝MySQL5.6
cd /mnt
tar zxvf mysql-5.6.26.tar.gz -C /opt
cd /opt/mysql-5.6.26/
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \		#支持其他擴展字符集
-DSYSCONFDIR=/etc

make && make install 
.......省略部分內容
  • 複製、移動配置文件與啓動腳本

    在/opt/mysql-5.6.26目錄中複製這兩個文件

    同時簡單介紹以下/etc/init.d/與 /etc/rc.d/這兩個目錄

    /etc/init.d/ :存放各種服務器和程序的二進制文件存放目錄。

    /etc/rc.d/: 各個啓動級別的執行程序連接目錄。裏面的文件很多都是指向init.d/的一些軟連接

cp support-files/my-default.cnf /etc/my.cnf
cp:是否覆蓋"/etc/my.cnf"? y
cp support-files/mysql.server /etc/rc.d/init.d/mysqld

#給與執行權限
chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
  • 指明環境變量
echo 'PATH=$PATH:/usr/local/mysal/bin' >> /etc/profile
#刷新
source /etc/profile
#查看
tail /etc/profile
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done

unset i
unset -f pathmunge
PATH=$PATH:/usr/local/mysal/bin
  • 添加程序用戶
#創建程序用戶,禁止終端登錄、不創建家目錄
useradd -M -s /sbin/nologin mysql
#給與權限
chown -R mysql.mysql /usr/local/mysql
  • 初始化數據庫
/usr/local/mysql/scripts/mysql_install_db \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data \
--user=mysql
2.5.4 修改MySQL配置文件
  • 修改master節點服務器主配置文件
vim /etc/my.cnf
#在mysqld模塊下添加以下內容
[mysqld]
#指定server-id (不能相同)
server-id = 1
#開啓二進制日誌文件 (文件名爲master-bin)
log_bin = master-bin
#允許從服務器進行同步
log-slave-updates = true
  • 修改slave節點服務器主配置文件
#slave 1
vim /etc/my.cnf
#添加server-id 不能與其他服務器相同
log_bin = master-bin
server-id = 2
#開啓中繼日誌
relay-log = relay-log-bin
#創建索引,同步主服務器
relay-log-index = slave-realy-bin.index

#slave 2
vim /etc/my.cnf
#slave2只有server-id不同,其他新增項一致

log_bin = master-bin
server-id = 3
relay-log = relay-log-bin
relay-log-index = slave-realy-bin.index
  • 創建軟鏈接
#三臺MySQL服務器均需創建
#將mysql命令創建軟鏈接便於系統管理
ln -s /usr/local/mysql/bin/mysql /usr/sbin
#mysqlbinlog是用來做節點恢復的
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin
  • 在後臺啓動MySQL服務
/usr/local/mysql/bin/mysql_safe --user=mysql &

#關閉防火牆、增強性安全功能
systemctl stop firewalld.service 
setenforce 0
2.2.5 新增數據庫授權
  • 在所有數據庫節點上授權兩個用戶,一個是從庫同步使用,另一個是manager使用
mysql -uroot -p

#允許從服務器使用slave賬戶同步本服務所有數據庫與數據表(密碼爲123456)
grant replication slave on *.* to 'myslave'@'192.168.226.%' identified by '123456'; 

#允許manager監控所有數據庫的用戶是mha,密碼爲manager
grant all privileges on *.* to 'mha'@'192.168.226.%' identified by 'manager';

#刷新數據庫
flush privileges;
  • 下面三條授權理論上不用添加,但是實驗環境通過MHA檢查MySQL主從報錯,報錯內容爲兩個從庫通過主機名連接不上主庫,所以所有數據庫都需要添加以下授權

    以下需在三臺MySQL服務器上授權

grant all privileges on *.* to 'mha'@'master' identified by 'manager';
grant all privileges on *.* to 'mha'@'slave1' identified by 'manager';
grant all privileges on *.* to 'mha'@'slave2' identified by 'manager';

flush privileges;
#通過mha檢查的時候,是通過主機名的形式進行監控,在這種情況下容易報錯
2.5.6 配置主從同步
  • 在master上查看二進制文件和同步點
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |     1373 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> 
#記錄1373這個二進制日誌文件位置
  • 在slave服務器上配置同步

    同步完成之後,設置兩臺slave爲只讀模式,然後刷新數據庫

mysql> change master to master_host='192.168.226.132',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=1373;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.226.132
                  Master_User: myslave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000001
          Read_Master_Log_Pos: 1373
               Relay_Log_File: relay-log-bin.000002
                Relay_Log_Pos: 284
        Relay_Master_Log_File: master-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
#看到這裏的兩條爲YES即同步成功

#設置爲只讀模式
mysql> set global read_only=1;
Query OK, 0 rows affected (0.00 sec)


mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
2.5.7 安裝MHA
  • 所有服務器關閉防火牆、增強性安全功能
systemctl stop firewalld.service 
setenforce 0
  • 在所有服務器上安裝MHA依賴環境,先安裝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
  • 首先安裝node組件,最後在MHA-manager節點上安裝manager組件(因爲manager組件依賴node組件)

    以下需要在所有服務器進行安裝

mount.cifs //192.168.226.1/LAMP-C7 /mnt

#解壓在/root目錄
tar zxvf /mnt/mha/mha4mysql-node-0.57.tar.gz -C /root

#在mha4mysql-node-0.57目錄進行編譯
cd mha4mysql-node-0.57
perl Makefile.PL
make && make install
  • 在MHA節點上安裝manager組件(必須先安裝node才能安裝manager組件)
tar zxvf /mnt/mha/mha4mysql-manager-0.57.tar.gz -C /root

cd mha4mysql-manager-0.57
perl Makefile.PL
make && make install
  • manager安裝完成後會在/usr/local/bin目錄下生成幾個工具,需要進行檢查,如缺少,則需要重新安裝,主要包括以下:
masterha-check_ssh  		#檢查MHA的SSH配置狀況
masterha_check_repl  		#檢查MySQL複製狀況
masterha_manager 			#啓動manager的腳本
masterha_check_status 		#檢查當前MHA運行狀態
masterha_master_monitor 	#檢查master是否宕機
masterha_master_switch 		#控制故障轉移(自動或者手動)
masterha_conf_host 			#添加或刪除配置的server信息
masterha_stop  				#關閉manager
  • node 安裝後也會在/usr/local/bin目錄下生成幾個腳本,需要進行檢查,主要包括以下
save_binary_logs			#保存和複製master的二進制日誌
apply_diff_relay_logs 		#識別差異的中繼日誌時間,並將其差異的事件應用於其他的slave
filter_mysqlbinlog			#去除不必要的ROLLBACK事件(MHA 已不適用這個工具)
purge_relay_logs			#清除中繼日誌(不會阻塞 SQL線程)
2.5.8 配置無密碼認證
  • 使用非對稱密鑰對配置無密碼認證
  • ① mha服務器
ssh-keygen -t rsa
#因爲不設置密碼,所以直接回車即可
ssh-copy-id 192.168.226.132
ssh-copy-id 192.168.226.133
ssh-copy-id 192.168.226.134
#過程中只需要輸入yes和對方服務器的登錄密碼即可
  • ② master服務器
ssh-keygen -t rsa
ssh-copy-id 192.168.226.133
ssh-copy-id 192.168.226.134
  • ③ slave1服務器
ssh-keygen -t rsa
ssh-copy-id 192.168.226.132
ssh-copy-id 192.168.226.134
  • ④ slave2服務器
ssh-keygen -t rsa
ssh-copy-id 192.168.226.132
ssh-copy-id 192.168.226.133
2.5.9 配置MHA
  • 在MHA節點上覆制相關腳本到/usr/local/bin目錄
cp -ra /root/mha4mysql-manager-0.57/samples/scripts/ /usr/local/bin

ll /usr/local/bin/scripts
total 32
#自動切換時 VIP管理的腳本
-rwxr-xr-x. 1 1001 1001  3648 May 31  2015 master_ip_failover
#在線切換時 VIP的管理
-rwxr-xr-x. 1 1001 1001  9870 May 31  2015 master_ip_online_change
#故障發生後關閉主機的腳本
-rwxr-xr-x. 1 1001 1001 11867 May 31  2015 power_manager
#因故障切換後發送報警的腳本
-rwxr-xr-x. 1 1001 1001  1360 May 31  2015 send_report
  • 複製並修改上述的master_ip_failover 到/usr/local/bin目錄 這裏使用腳本管理VIP
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
);
my $vip = '192.168.226.100';	#浮動IP
my $brdc = '192.168.226.255';	#廣播地址
my $ifdev = 'ens33';			#使用的網卡爲ens33
my $key = '1';					#國際序列號
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";							#使用ifoconfig命令將其啓動,同時設置浮動地址
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";							#可以使用ifconfig命令將其down掉(關閉)
my $exit_code = 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";
}
-------》wq保存

需注意:這裏粘貼進來之後會默認在首位加上#號,此處我們直接使用“% s/^#//g” 將#號全部註釋,當然在腳本首行需要加上#

  • 創建MHA軟件目錄並拷貝配置文件
mkdir /etc/masterha
cp /root/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha/

vim /etc/masterha/app1.cnf
[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.226.133 -s 192.168.226.134
shutdown_script=""
ssh_user=root
user=mha

[server1]
hostname=192.168.226.132
port=3306

[server2]
candidate_master=1
hostname=192.168.226.133
check_repl_delay=0
port=3306

[server3]
hostname=192.168.226.134
port=3306
----------------》wq
  • 以下爲配置文件解析
#manager工作目錄
manager_log=/var/log/masterha/app1/manager.log

#manager日誌
manager_workdir=/var/log/masterha/app1

#master保存binlog的位置,這裏的路徑要於master裏配置的binlog(相同?)
master_binlog_dir=/usr/local/mysql/data

#設置自動failover時候切換腳本,也就是上一個配置的腳本
master_ip_failover_script=/usr/local/bin/master_ip_failover

#設置手動切換時候的切換腳本
master_ip_online_change_script=/usr/local/bin/master_ip_online_change

#此處密碼爲之前創建監控用戶的密碼
password=manager

#設置監控用戶
user=mha

#設置監控主庫,發送ping包的事件間隔,默認爲3秒,嘗試三次沒有迴應的時候自動進性failover
ping_interval=1

#設置遠端的MySQL在發生切換時binlog的保存位置
remote_workdir=/tmp

#設置複製用戶的密碼
repl_password=123456

#設置複製用戶的賬戶
repl_user=myslave

#設置發生切換後發送的報警的腳本
report_script=/usr/local/send_report

#設置檢查從服務器的腳本
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.226.133 -s 192.168.226.134

#設置故障發生後關閉故障主機腳本
shutdown_script=""

#設置ssh的登錄用戶名
ssh_user=root

[server2]
#設置候選master,如果設置了此參數,發送主從切換後,會將此庫提升爲主庫
candidate_master=1

#支持複製的檢查,默認情況下如果一個slave落後master 100M的relay logs(中繼日誌)的話,MHA將不會選擇該slave作爲新的master,設置爲0的話會忽略此規則
check_repl_delay=0
hostname=192.168.226.133
port=3306
2.6 驗證配置
2.6.1 驗證密鑰對
[root@manager ~]# masterha_check_ssh -conf=/etc/masterha/app1.cnf
Mon Mar  2 18:12:00 2020 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Mon Mar  2 18:12:00 2020 - [info] Reading application default configuration from /etc/masterha/app1.cnf..
Mon Mar  2 18:12:00 2020 - [info] Reading server configuration from /etc/masterha/app1.cnf..
Mon Mar  2 18:12:00 2020 - [info] Starting SSH connection tests..
Mon Mar  2 18:12:03 2020 - [debug] 
Mon Mar  2 18:12:01 2020 - [debug]  Connecting via SSH from [email protected].133(192.168.226.133:22) to [email protected].132(192.168.226.132:22)..
Mon Mar  2 18:12:01 2020 - [debug]   ok.
Mon Mar  2 18:12:01 2020 - [debug]  Connecting via SSH from [email protected].133(192.168.226.133:22) to [email protected].134(192.168.226.134:22)..
Mon Mar  2 18:12:02 2020 - [debug]   ok.
Mon Mar  2 18:12:03 2020 - [debug] 
Mon Mar  2 18:12:00 2020 - [debug]  Connecting via SSH from [email protected].132(192.168.226.132:22) to [email protected].133(192.168.226.133:22)..
Mon Mar  2 18:12:01 2020 - [debug]   ok.
Mon Mar  2 18:12:01 2020 - [debug]  Connecting via SSH from [email protected].132(192.168.226.132:22) to [email protected].134(192.168.226.134:22)..
Mon Mar  2 18:12:02 2020 - [debug]   ok.
Mon Mar  2 18:12:04 2020 - [debug] 
Mon Mar  2 18:12:01 2020 - [debug]  Connecting via SSH from [email protected].134(192.168.226.134:22) to [email protected].132(192.168.226.132:22)..
Mon Mar  2 18:12:02 2020 - [debug]   ok.
Mon Mar  2 18:12:02 2020 - [debug]  Connecting via SSH from [email protected].134(192.168.226.134:22) to [email protected].133(192.168.226.133:22)..
Mon Mar  2 18:12:03 2020 - [debug]   ok.
Mon Mar  2 18:12:04 2020 - [info] All SSH connection tests passed successfully.
2.6.2 測試mysql主從複製
[root@manager ~]# masterha_check_repl -conf=/etc/masterha/app1.cnf
Mon Mar  2 18:13:12 2020 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Mon Mar  2 18:13:12 2020 - [info] Reading application default configuration from /etc/masterha/app1.cnf..
Mon Mar  2 18:13:12 2020 - [info] Reading server configuration from /etc/masterha/app1.cnf..
Mon Mar  2 18:13:12 2020 - [info] MHA::MasterMonitor version 0.57.
Creating directory /var/log/masterha/app1.. done.
Mon Mar  2 18:13:13 2020 - [info] GTID failover mode = 0
Mon Mar  2 18:13:13 2020 - [info] Dead Servers:
Mon Mar  2 18:13:13 2020 - [info] Alive Servers:
Mon Mar  2 18:13:13 2020 - [info]   192.168.226.132(192.168.226.132:3306)
Mon Mar  2 18:13:13 2020 - [info]   192.168.226.133(192.168.226.133:3306)
Mon Mar  2 18:13:13 2020 - [info]   192.168.226.134(192.168.226.134:3306)
Mon Mar  2 18:13:13 2020 - [info] Alive Slaves:
Mon Mar  2 18:13:13 2020 - [info]   192.168.226.133(192.168.226.133:3306)  Version=5.6.26 (oldest major version between slaves) log-bin:disabled
Mon Mar  2 18:13:13 2020 - [info]     Replicating from 192.168.226.132(192.168.226.132:3306)
Mon Mar  2 18:13:13 2020 - [info]     Primary candidate for the new Master (candidate_master is set)
Mon Mar  2 18:13:13 2020 - [info]   192.168.226.134(192.168.226.134:3306)  Version=5.6.26 (oldest major version between slaves) log-bin:disabled
Mon Mar  2 18:13:13 2020 - [info]     Replicating from 192.168.226.132(192.168.226.132:3306)
Mon Mar  2 18:13:13 2020 - [info] Current Alive Master: 192.168.226.132(192.168.226.132:3306)
Mon Mar  2 18:13:13 2020 - [info] Checking slave configurations..
Mon Mar  2 18:13:13 2020 - [warning]  relay_log_purge=0 is not set on slave 192.168.226.133(192.168.226.133:3306).
Mon Mar  2 18:13:13 2020 - [warning]  log-bin is not set on slave 192.168.226.133(192.168.226.133:3306). This host cannot be a master.
Mon Mar  2 18:13:13 2020 - [warning]  relay_log_purge=0 is not set on slave 192.168.226.134(192.168.226.134:3306).
Mon Mar  2 18:13:13 2020 - [warning]  log-bin is not set on slave 192.168.226.134(192.168.226.134:3306). This host cannot be a master.
Mon Mar  2 18:13:13 2020 - [info] Checking replication filtering settings..
Mon Mar  2 18:13:13 2020 - [info]  binlog_do_db= , binlog_ignore_db= 
Mon Mar  2 18:13:13 2020 - [info]  Replication filtering check ok.
Mon Mar  2 18:13:13 2020 - [error][/usr/local/share/perl5/MHA/MasterMonitor.pm, ln364] None of slaves can be master. Check failover configuration file or log-bin settings in my.cnf
Mon Mar  2 18:13:13 2020 - [error][/usr/local/share/perl5/MHA/MasterMonitor.pm, ln427] Error happened on checking configurations.  at /usr/local/bin/masterha_check_repl line 48.
Mon Mar  2 18:13:13 2020 - [error][/usr/local/share/perl5/MHA/MasterMonitor.pm, ln525] Error happened on monitoring servers.
Mon Mar  2 18:13:13 2020 - [info] Got exit code 1 (Not master dead).

MySQL Replication Health is NOT OK!

需注意:第一次配置需要在master節點上手動開啓虛擬IP

/sbin/ifconfig ens33:1 192.168.226.100
#可以使用ifconfig查看
2.6.4 啓動MHA
#開啓MHA
[root@manager 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 &
[1] 86808

#查看當前master節點
[root@manager MHA]# masterha_check_status --conf=/etc/masterha/app1.cnf
app1 (pid:86808) is running(0:PING_OK), master:192.168.226.132

#查看當前日誌信息
[root@manager MHA]# cat /var/log/masterha/app1/manager.log 
2.6.5 模擬故障
  • 先在manager服務器上啓動監控觀察日誌記錄,然後強制殺死master服務器上的mysql,稍等一會檢查slave1上是否生成漂移地址
#啓動監控觀察日誌記錄
[root@master ~]# tailf /var/log/masterha/app1/manager.log 
[root@master ~]# pkill -9 mysql
  • 查看slave1節點服務器
    在這裏插入圖片描述

  • 查看監控日誌記錄
    在這裏插入圖片描述

以上MySQL高可用羣集已部署完成

總結:

高可用MHA在實際生產中可大大減少平均無故障時間,提高數據庫的可用性,對敏感類的數據來說不建議結合腳本自動修復故障節點,手動往往相對來說比較安全。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章