MySQL高可用方案之MHA-創(chuàng)新互聯(lián)

目錄

額濟納網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,額濟納網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為額濟納千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的額濟納做網(wǎng)站的公司定做!

一、簡介

二、MHA特點

三、搭建MySQL MHA

1、安裝MHA

2、在所有服務(wù)器上配置無密碼認證

3、在manager節(jié)點上配置MHA

4、 manager節(jié)點編輯配置文件,管理 mysql 節(jié)點服務(wù)器

5、在Master服務(wù)器上手動開啟vip

6、在 manager 節(jié)點上測試 ssh 無密碼認證

7、故障模擬


一、簡介

?MHA(Master HA)是一款開源的 MySQL 的高可用程序,它為 MySQL 主從復制架構(gòu)提供了 automating master failover 功能。MHA 在監(jiān)控到 master 節(jié)點故障時,會提升其中擁有最新數(shù)據(jù)的 slave 節(jié)點成為新的master 節(jié)點,在此期間,MHA 會通過于其它從節(jié)點獲取額外信息來避免一致性方面的問題。MHA 還提供了 master 節(jié)點的在線切換功能,即按需切換 master/slave 節(jié)點。
MHA 是由日本人 yoshinorim(原就職于DeNA現(xiàn)就職于FaceBook)開發(fā)的比較成熟的 MySQL 高可用方案。MHA 能夠在30秒內(nèi)實現(xiàn)故障切換,并能在故障切換中,大可能的保證數(shù)據(jù)一致性。目前淘寶也正在開發(fā)相似產(chǎn)品 TMHA, 目前已支持一主一從。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?MHA架構(gòu)由三臺mysql服務(wù)器(一主兩從)和一臺manager節(jié)點組成,當主庫發(fā)生故障時,manager能自動從眾多從庫中選擇一臺slave log最新的從庫轉(zhuǎn)變成主庫,然后將其它所有節(jié)點重新指向新的主庫。將丟失數(shù)據(jù)的概率降至最低。

寫庫故障發(fā)生前:

寫庫故障發(fā)生后:?

二、MHA特點

?自動故障切換過程中,MHA總會試圖從宕機的主服務(wù)器上保存二進制日志,大程度的保證數(shù)據(jù)不丟失。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?但這并不總是可行,例如如果主服務(wù)器硬件故障或者無法通過ssh訪問,MHA則無法保存二進制日志,只能進行故障轉(zhuǎn)移而丟失了最新的數(shù)據(jù)。此時,使用MySQL的半同步復制,可以大大降低數(shù)據(jù)丟失的風險。MHA可以與半同步復制結(jié)合起來,如果只有一個slave已經(jīng)收到了最新的二進制日志,MHA可以將最新的二進制日志應(yīng)用于其他所有的slave服務(wù)器上,因此可以保證所有節(jié)點的數(shù)據(jù)一致性,有時候可故意設(shè)置從節(jié)點慢于主節(jié)點,當發(fā)生意外刪除數(shù)據(jù)庫倒是數(shù)據(jù)丟失時可從從節(jié)點二進制日志中恢復。

三、搭建MySQL MHA

MHA一主兩從高可用集群示意圖:

實驗環(huán)境:

MHA manager 服務(wù)器:192.168.80.7

Master 服務(wù)器:192.168.80.8

Slave1 服務(wù)器:192.168.80.3

Slave2 服務(wù)器:192.168.80.5

1、安裝MHA

部署之前需要配置好主從復制,我這邊已經(jīng)部署好了,詳情看我上上篇博客

1)所有服務(wù)器上安裝MHA依賴的環(huán)境

yum install epel-release --nogpgcheck -y  #首先安裝epel源

yum install -y perl-DBD-MySQL \     #安裝MHA依賴環(huán)境
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN

2)安裝MHA軟件包

在所有服務(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

#manager 組件安裝后在/usr/local/bin 下面會生成幾個工具,主要包括以下幾個:

masterha_check_ssh? ? ? ? ? #檢查 MHA 的 SSH 配置狀況 ?

masterha_check_repl? ? ? ? ? #檢查 MySQL 復制狀況 ?

masterha_manger? ? ? ? ? ? ? ?#啟動 manager的腳本 ?

masterha_check_status? ? ? ?#檢測當前 MHA 運行狀態(tài) ?

masterha_master_monitor ??#檢測 master 是否宕機 ?

masterha_master_switch? ? ?#控制故障轉(zhuǎn)移(自動或者手動) ?

masterha_conf_host? ? ? ? ? ??#添加或刪除配置的 server 信息 ?

masterha_stop? ? ? ? ? ? ? ? ? ? ?#關(guān)閉manager

#node 組件安裝后也會在/usr/local/bin 下面會生成幾個腳本(這些工具通常由 MHAManager 的腳本觸發(fā),無需人為操作)主要如下:

save_binary_logs? ? ? ? ? ? ? ? ? #保存和復制 master 的二進制日志 ?

apply_diff_relay_logs? ? ? ? ? ? #識別差異的中繼日志事件并將其差異的事件應(yīng)用于其他的

slave ?filter_mysqlbinlog? ? ? ?#去除不必要的 ROLLBACK 事件(MHA 已不再使用這個工具) purge_relay_logs? ? ? ? ? ? ? ?? #清除中繼日志(不會阻塞 SQL 線程)

2、在所有服務(wù)器上配置無密碼認證

1)在manager節(jié)點上配置到所有數(shù)據(jù)庫節(jié)點的無密碼認證

ssh-keygen -t rsa             #一路按回車鍵,生成密鑰。"-t rsa"指定密鑰的類型。
ssh-copy-id 192.168.80.8 ? ?#將公鑰傳給所有數(shù)據(jù)庫節(jié)點,形成免密碼連接登錄
ssh-copy-id 192.168.80.3
ssh-copy-id 192.168.80.5

2)在master節(jié)點上配置到數(shù)據(jù)庫節(jié)點slave1和slave2的無密碼認證

ssh-keygen -t rsa
ssh-copy-id 192.168.80.3    #將公鑰傳給兩個從節(jié)點,形成免密碼連接登錄
ssh-copy-id 192.168.80.5

3)在slave1上配置到數(shù)據(jù)庫節(jié)點master和slave2的無密碼認證

ssh-keygen -t rsa
ssh-copy-id 192.168.80.8
ssh-copy-id 192.168.80.5

4)在slave2上配置到數(shù)據(jù)庫節(jié)點master和slave1的無密碼認證

ssh-keygen -t rsa
ssh-copy-id 192.168.80.8
ssh-copy-id 192.168.80.3
3、在manager節(jié)點上配置MHA

1)在manager節(jié)點上復制相關(guān)腳本到/usr/local/bin目錄

#在 manager 節(jié)點上復制相關(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)閉主機的腳本
send_report                 #因故障切換后發(fā)送報警的腳本

2)復制自動切換時VIP管理的腳本到/usr/local/bin目錄

cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin
ll /usr/local/bin

3)修改master_ip_failover腳本

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.80.100';                             #指定vip的地址
my $brdc = '192.168.80.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.80.100
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";    #代表此變量值為ifconfig ens33:1 192.168.80.100 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、 manager節(jié)點編輯配置文件,管理 mysql 節(jié)點服務(wù)器

1)創(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)容,直接復制并修改節(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
user=mha
password=manager
ping_interval=1
remote_workdir=/tmp
repl_password=123
repl_user=myslave
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.80.3 -s 192.168.80.5
shutdown_script=""
ssh_user=root
??
[server1]
hostname=192.168.80.8
port=3306
??
[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.80.3
port=3306
??
[server3]
hostname=192.168.80.5
port=3306
5、在Master服務(wù)器上手動開啟vip
/sbin/ifconfig ens33:1 192.168.80.100/24
6、在 manager 節(jié)點上測試 ssh 無密碼認證

在 manager 節(jié)點上測試 ssh 無密碼認證,如果正常最后會輸出successfully

masterha_check_ssh -conf=/etc/masterha/app1.cnf

7、故障模擬

在master上停止mysql服務(wù),MHA 會自動修改 app1.cnf 文件內(nèi)容,將宕機的master節(jié)點刪除。 slave1會自動接管 VIP,成為新的master

systemctl stop mysqld    #在Master節(jié)點上停止mysql服務(wù)

tail -f /var/log/masterha/app1/manager.log    #在manager節(jié)點上監(jiān)控觀察日志記錄

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

文章名稱:MySQL高可用方案之MHA-創(chuàng)新互聯(lián)
鏈接地址:http://muchs.cn/article24/dsejce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、網(wǎng)站設(shè)計、響應(yīng)式網(wǎng)站、搜索引擎優(yōu)化、網(wǎng)頁設(shè)計公司移動網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司