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

目錄

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

一、簡(jiǎn)介

二、MHA特點(diǎn)

三、搭建MySQL MHA

1、安裝MHA

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

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

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

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

6、在 manager 節(jié)點(diǎn)上測(cè)試 ssh 無密碼認(rèn)證

7、故障模擬


一、簡(jiǎn)介

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

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

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

二、MHA特點(diǎn)

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

三、搭建MySQL MHA

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

實(shí)驗(yàn)環(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

部署之前需要配置好主從復(fù)制,我這邊已經(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é)點(diǎn)上安裝manager組件,因?yàn)閙anager依賴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 下面會(huì)生成幾個(gè)工具,主要包括以下幾個(gè):

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

masterha_check_repl? ? ? ? ? #檢查 MySQL 復(fù)制狀況 ?

masterha_manger? ? ? ? ? ? ? ?#啟動(dòng) manager的腳本 ?

masterha_check_status? ? ? ?#檢測(cè)當(dāng)前 MHA 運(yùn)行狀態(tài) ?

masterha_master_monitor ??#檢測(cè) master 是否宕機(jī) ?

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

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

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

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

save_binary_logs? ? ? ? ? ? ? ? ? #保存和復(fù)制 master 的二進(jìn)制日志 ?

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

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

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

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

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

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

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

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

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

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

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

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

#在 manager 節(jié)點(diǎn)上復(fù)制相關(guān)腳本到/usr/local/bin 目錄
cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/bin

#拷貝后會(huì)有四個(gè)執(zhí)行文件
ll /usr/local/bin/scripts/

master_ip_failover          #自動(dòng)切換時(shí) VIP 的管理腳本
master_ip_online_change     #在線切換時(shí) VIP 的管理腳本
power_manager               #故障發(fā)生后關(guān)閉主機(jī)的腳本
send_report                 #因故障切換后發(fā)送報(bào)警的腳本

2)復(fù)制自動(dòng)切換時(shí)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)卡序列號(hào)
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é)點(diǎn)編輯配置文件,管理 mysql 節(jié)點(diǎn)服務(wù)器

1)創(chuàng)建 MHA 軟件目錄并拷貝配置文件,這里使用app1.cnf配置文件來管理 mysql 節(jié)點(diǎn)服務(wù)器

mkdir /etc/masterha
cp /opt/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha/ ? #復(fù)制配置文件
??
vim /etc/masterha/app1.cnf   #刪除原有內(nèi)容,直接復(fù)制并修改節(jié)點(diǎn)服務(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ù)器上手動(dòng)開啟vip
/sbin/ifconfig ens33:1 192.168.80.100/24
6、在 manager 節(jié)點(diǎn)上測(cè)試 ssh 無密碼認(rèn)證

在 manager 節(jié)點(diǎn)上測(cè)試 ssh 無密碼認(rèn)證,如果正常最后會(huì)輸出successfully

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

7、故障模擬

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

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

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

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

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

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

廣告

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

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