最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql的MHA高可用及故障切換問(wèn)題小結(jié)

 更新時(shí)間:2024年12月27日 14:25:58   作者:2401_85041083  
MHA是基于MySQL主從復(fù)制的高可用解決方案,通過(guò)自動(dòng)切換到從節(jié)點(diǎn)并提升其為新主,實(shí)現(xiàn)數(shù)據(jù)庫(kù)的高可用和故障恢復(fù),配置包括主從復(fù)制、MHA組件、VIP管理等,通過(guò)配置無(wú)密碼認(rèn)證和測(cè)試連接,可以確保MHA正常運(yùn)行,感興趣的朋友一起看看吧

Mysql的MHA高可用及故障切換 

MHA

master high availability
建立在主從復(fù)制基礎(chǔ)之上的故障切換的軟件系統(tǒng)。

主從復(fù)制的單點(diǎn)問(wèn)題

當(dāng)主從復(fù)制當(dāng)中,主服務(wù)器發(fā)生故障,會(huì)自動(dòng)切換到一臺(tái)從服務(wù)器,然后把從服務(wù)器升格為主,繼續(xù)主從的架構(gòu)

  • master開啟二進(jìn)制日志,并允許從節(jié)點(diǎn)復(fù)制主節(jié)點(diǎn)的二進(jìn)制日志的內(nèi)容
  • 通過(guò)vip地址,當(dāng)主容機(jī)之后,vip會(huì)自動(dòng)的飄移到從節(jié)點(diǎn)。
  • 從節(jié)點(diǎn)升級(jí)為主服務(wù)器,然后從宕機(jī)的master保存二進(jìn)制日志,將更新的內(nèi)容同步到新主,然后再同步到從節(jié)點(diǎn)。

配置

mysql1 192.168.246.6 主
mysql2 192.168.246.7 從1----主備
mysql3 192.168.246.10 從2
manager節(jié)點(diǎn):u3 192.168.246.9 MHA的組件
vip 192.168.246.100

1. 主從復(fù)制

ntpdate ntp.aliyun.com
#時(shí)間同步
vim /etc/my.cnf
#主
log-bin=master-bin
binlog_format=MIXED
log-slave-updates=true
relay_log_recovery=1
#啟用從庫(kù)崩潰或者重啟時(shí),會(huì)自動(dòng)嘗試從日志當(dāng)中恢復(fù)。
#從1
server-id = 2
log-bin=master-bin
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
relay_log_recovery = 1
#從2
server-id = 3
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
relay_log_recovery = 1
#主從
mysql -u root -p123456
#從數(shù)據(jù)庫(kù)同步使用
CREATE USER 'myslave'@'192.168.246.%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.246.%';			
#manager 使用
CREATE USER 'mha'@'192.168.246.%' IDENTIFIED WITH mysql_native_password BY 'manager';
GRANT ALL PRIVILEGES ON *.* TO 'mha'@'192.168.246.%' WITH GRANT OPTION;
#防止從庫(kù)通過(guò)主機(jī)名連接不上主庫(kù)
CREATE USER 'mha'@'master' IDENTIFIED WITH mysql_native_password BY 'manager';
GRANT ALL PRIVILEGES ON *.* TO 'mha'@'master';
CREATE USER 'mha'@'slave1' IDENTIFIED WITH mysql_native_password BY 'manager';
GRANT ALL PRIVILEGES ON *.* TO 'mha'@'slave1';
CREATE USER 'mha'@'slave2' IDENTIFIED WITH mysql_native_password BY 'manager';
GRANT ALL PRIVILEGES ON *.* TO 'mha'@'slave2';
flush privileges;
#主
show master status;

#從1 從2
mysql -u root -p123456
#同步建立
CHANGE master to master_host='192.168.246.6',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=157;
start slave;
show slave status\G;

#從庫(kù)必須全部設(shè)置為只讀模式
set global read_only=1;

2. MHA高可用

安裝MHA的組件

  • NODE :監(jiān)控每臺(tái)機(jī)器上mysql的狀態(tài),傳回給manager
  • MANAGER:管理節(jié)點(diǎn),控制mha的狀態(tài)。
#每個(gè)服務(wù)器都需要安裝MHA依賴的環(huán)境
apt install -y libdbd-mysql-perl \
libconfig-tiny-perl \
liblog-dispatch-perl \
libparallel-forkmanager-perl \
libextutils-cbuilder-perl \
libmodule-install-perl \
make
#在MHA的manager節(jié)點(diǎn)上安裝manager組件
cd /opt
tar -xf mha4mysql-manager-0.57.tar.gz
cd mha4mysql-manager-0.57
perl Makefile.PL
make && make install
cd /opt
tar -xf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57
perl Makefile.PL
make && make install
#組件安裝后在/usr/local/bin 下面會(huì)生成幾個(gè)工具
masterha_check_ssh : 檢查mha節(jié)點(diǎn)之間ssh的配置和通信
masterha_manager: manager的啟動(dòng)腳本
masterha_check_status: 檢查mha的運(yùn)行狀態(tài)
masterha_stop:關(guān)閉manager
masterha_master_switch: 控制故障轉(zhuǎn)移的方式
ave_binary_logs: 檢查,保存,復(fù)制master節(jié)點(diǎn)的二進(jìn)制日志
apply_diff_relay_logs: 識(shí)別二進(jìn)制日志當(dāng)中的差異部分,把差異的部分同步到slave

配置無(wú)密碼認(rèn)證

#配置所有節(jié)點(diǎn)之間的MHA的ssh的通信
#manager節(jié)點(diǎn)
ssh-keygen -t rsa
回車
ssh-copy-id 192.168.246.6
ssh-copy-id 192.168.246.7
ssh-copy-id 192.168.246.10
#主
ssh-keygen -t rsa
回車
ssh-copy-id 192.168.246.7
ssh-copy-id 192.168.246.10
#從
ssh-keygen -t rsa
回車
ssh-copy-id 192.168.246.6
ssh-copy-id 192.168.246.10

manager節(jié)點(diǎn)配置

root@u3:/usr/local/bin# cd /opt/mha4mysql-manager-0.57/samples/
root@u3:/opt/mha4mysql-manager-0.57/samples# cp -rp /opt/mha4mysql-manager-0.57/samples/scripts  /usr/local/bin
root@u3:/opt/mha4mysql-manager-0.57/samples# cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin/
root@u3:/opt/mha4mysql-manager-0.57/samples# vim /usr/local/bin/master_ip_failover
#刪除全部,復(fù)制以下代碼
#!/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.233.100';
my $brdc = '192.168.233.255';
my $ifdev = 'ens33';
my $key = '1';
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";
my $exit_code = 0;
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";
}
root@u3:/opt/mha4mysql-manager-0.57/samples# mkdir /etc/masterha
root@u3:/opt/mha4mysql-manager-0.57/samples# ls
conf  scripts
root@u3:/opt/mha4mysql-manager-0.57/samples# cd conf/
root@u3:/opt/mha4mysql-manager-0.57/samples/conf# ls
app1.cnf  masterha_default.cnf
root@u3:/opt/mha4mysql-manager-0.57/samples/conf# cp /opt/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha/
root@u3:/opt/mha4mysql-manager-0.57/samples/conf# vim /etc/masterha/app1.cnf
#復(fù)制以下代碼,需要清除注釋
[server default]
manager_log=/var/log/masterha/app1/manager.log
manager_workdir=/var/log/masterha/app1
master_binlog_dir=/usr/local/mysql/data
#指向到myql的默認(rèn)位置
master_ip_failover_script=/usr/local/bin/master_ip_failover
#切換vip的腳本
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
password=manager
ping_interval=1
#每一秒檢測(cè)一次主的狀態(tài)
remote_workdir=/tmp
repl_password=123456
repl_user=myslave
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.246.7 -s 192.168.246.10 
#從對(duì)主監(jiān)聽
shutdown_script=""
ssh_user=root
user=mha
[server1]
hostname=192.168.246.6 
#主服務(wù)器
port=3306
[server2]
candidate_master=1   
#聲明server2備服務(wù)器
check_repl_delay=0
#立刻切換
hostname=192.168.246.7
#備用主服務(wù)器
port=3306
[server3]
hostname=192.168.246.10  
#從服務(wù)器2
port=3306
root@u3:/opt/mha4mysql-manager-0.57/samples/conf# vim /usr/local/share/perl/5.34.0/MHA/NodeUtil.pm
#192行修改添加
  $str =~ /(\d+)\.(\d+)/;
  my $strmajor = "$1.$2";
  my $result = sprintf( '%03d%03d', $1, $2 ) if $str =~ m/(\d+)\.(\d+)/;

#主需要手動(dòng)開啟虛擬IP
ifconfig ens33:1 192.168.246.100/24
#主從設(shè)置軟連接
ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/

manager節(jié)點(diǎn)上測(cè)試

#測(cè)試ssh無(wú)密碼認(rèn)證,如果正常最后會(huì)輸出為successfully
masterha_check_ssh -conf=/etc/masterha/app1.cnf

#測(cè)試mysql主從連接情況,最后出現(xiàn)is OK字樣則正常。
masterha_check_repl -conf=/etc/masterha/app1.cnf

啟動(dòng)連接

#manager節(jié)點(diǎn)上
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 &
#nohup:執(zhí)行記錄,把執(zhí)行記錄保存到指定的文件。
#檢查master節(jié)點(diǎn)
root@u3:~# masterha_check_status --conf=/etc/masterha/app1.cnf
app1 (pid:4171) is running(0:PING_OK), master:192.168.246.6
#客戶端
apt -y install mariadb-server
#用vip連接
mysql -h 192.168.246.100 -u root -p123456
MySQL [(none)]> create database test1;
Query OK, 1 row affected (0.139 sec)
MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test1              |
+--------------------+
5 rows in set (0.004 sec)

故障切換模擬

#manager節(jié)點(diǎn)打開日志
tail -f /var/log/masterha/app1/manager.log
#停止mha
master_stop --conf=/etc/masterha/appl.cnf
#主
systemctl stop mysqld
#從1
ip addr

恢復(fù)

#manager節(jié)點(diǎn)
vim /etc/masterha/app1.cnf

原來(lái)的主自動(dòng)刪除了
修改并添加如下圖的內(nèi)容

#原來(lái)的主
vim /etc/my.cnf
log-bin=master-bin
binlog_format=MIXED
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
relay_log_recovery=1
systemctl restart mysqld
#從1
server-id = 2
log-bin=master-bin
log-slave-updates=true
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
relay_log_recovery = 1
mysql -u root -p123456
show master status;

原主與從2
CHANGE master to master_host='192.168.246.7',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=352;
start slave;
show slave status\G;
#客戶端
root@u4:~# mysql -h 192.168.246.100 -u root -p123456
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 8.0.30 MySQL Community Server - GPL
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test1              |
+--------------------+
5 rows in set (0.004 sec)
4 rows in set (0.013 sec)
MySQL [(none)]> create database test2;
Query OK, 1 row affected (0.139 sec)
MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test1              |
+--------------------+
5 rows in set (0.004 sec)

到此這篇關(guān)于Mysql的MHA高可用及故障切換的文章就介紹到這了,更多相關(guān)mysql mha高可用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL中select語(yǔ)句使用order按行排序

    MySQL中select語(yǔ)句使用order按行排序

    本文介紹MySQL數(shù)據(jù)庫(kù)中執(zhí)行select查詢語(yǔ)句,并對(duì)查詢的結(jié)果使用order by 子句進(jìn)行排序
    2016-04-04
  • MySQL報(bào)錯(cuò)cannot?add?foreign?key?constraint的問(wèn)題解決方法

    MySQL報(bào)錯(cuò)cannot?add?foreign?key?constraint的問(wèn)題解決方法

    這篇文章主要介紹了MySQL報(bào)錯(cuò)cannot?add?foreign?key?constraint的問(wèn)題解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • MySQL時(shí)間分區(qū)表的創(chuàng)建與數(shù)據(jù)清理

    MySQL時(shí)間分區(qū)表的創(chuàng)建與數(shù)據(jù)清理

    分區(qū)表是將一個(gè)大表在物理上分割成多個(gè)小表(分區(qū)),而在邏輯上仍然表現(xiàn)為一個(gè)完整表的技術(shù),本文將深入探討MySQL時(shí)間分區(qū)表的原理、創(chuàng)建方法以及如何高效清理過(guò)期分區(qū)數(shù)據(jù),感興趣的可以了解下
    2025-04-04
  • Mysql數(shù)據(jù)庫(kù)編碼問(wèn)題 (修改數(shù)據(jù)庫(kù),表,字段編碼為utf8)

    Mysql數(shù)據(jù)庫(kù)編碼問(wèn)題 (修改數(shù)據(jù)庫(kù),表,字段編碼為utf8)

    個(gè)人建議,數(shù)據(jù)庫(kù)字符集盡量使用 utf8(HTML頁(yè)面對(duì)應(yīng)的是utf-8),以使你的數(shù)據(jù)能很順利的實(shí)現(xiàn)遷移
    2011-10-10
  • mysql數(shù)據(jù)庫(kù)應(yīng)付大流量網(wǎng)站的的3種架構(gòu)擴(kuò)展方式介紹

    mysql數(shù)據(jù)庫(kù)應(yīng)付大流量網(wǎng)站的的3種架構(gòu)擴(kuò)展方式介紹

    這篇文章主要介紹了mysql數(shù)據(jù)庫(kù)應(yīng)付大流量網(wǎng)站的的3種架構(gòu)擴(kuò)展方式介紹,它們分別是讀寫分離、垂直分區(qū)、水平分區(qū),本文分別對(duì)它們做了講解,需要的朋友可以參考下
    2014-07-07
  • MySQL循環(huán)查詢的實(shí)現(xiàn)示例

    MySQL循環(huán)查詢的實(shí)現(xiàn)示例

    MySQL循環(huán)查詢是指在MySQL數(shù)據(jù)庫(kù)中使用循環(huán)結(jié)構(gòu)進(jìn)行數(shù)據(jù)查詢的一種方法,本文主要介紹了MySQL循環(huán)查詢的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • mysql?8.0.26?安裝配置圖文教程

    mysql?8.0.26?安裝配置圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql?8.0.26?安裝配置圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • MySQL性能分析及explain的使用說(shuō)明

    MySQL性能分析及explain的使用說(shuō)明

    本文我們主要介紹了MySQL性能分析以及explain的使用,包括:組合索引、慢查詢分析、MYISAM和INNODB的鎖定、MYSQL的事務(wù)配置項(xiàng)等,希望能夠?qū)δ兴鶐椭?/div> 2011-08-08
  • 同時(shí)運(yùn)行多個(gè)MySQL服務(wù)器的方法

    同時(shí)運(yùn)行多個(gè)MySQL服務(wù)器的方法

    在同一臺(tái)機(jī)器上運(yùn)行多個(gè)有些情況下你可能想要在同一臺(tái)機(jī)器上運(yùn)行多個(gè)服務(wù)器。例如,你可能想要測(cè)試一個(gè)新的MySQL版本而讓你現(xiàn)有生產(chǎn)系統(tǒng)的設(shè)置不受到干擾, 或你可能是想要為不同的客戶提供獨(dú)立的MySQL安裝一個(gè)因特網(wǎng)服務(wù)供應(yīng)商。
    2008-05-05
  • MySQL數(shù)據(jù)庫(kù)自動(dòng)化備份腳本的實(shí)踐指南

    MySQL數(shù)據(jù)庫(kù)自動(dòng)化備份腳本的實(shí)踐指南

    數(shù)據(jù)是企業(yè)的核心資產(chǎn),定期備份數(shù)據(jù)庫(kù)是每個(gè)運(yùn)維和開發(fā)人員的必修課,本文分享一個(gè)生產(chǎn)環(huán)境驗(yàn)證過(guò)的 MySQL 自動(dòng)備份腳本,支持多數(shù)據(jù)庫(kù)備份、自動(dòng)壓縮、過(guò)期清理,并詳細(xì)解讀每一處細(xì)節(jié),幫助你快速搭建可靠的備份體系,需要的朋友可以參考下
    2026-04-04

最新評(píng)論

隆子县| 友谊县| 建瓯市| 彰化市| 大庆市| 新绛县| 伽师县| 图木舒克市| 安阳市| 景德镇市| 上蔡县| 泗阳县| 惠安县| 铜鼓县| 招远市| 怀宁县| 彭阳县| 宝兴县| 桂阳县| 房山区| 吉首市| 曲阳县| 威远县| 梨树县| 雅江县| 遂昌县| 潞城市| 沈丘县| 合水县| 县级市| 老河口市| 盘山县| 罗田县| 嘉峪关市| 太仆寺旗| 梁山县| 眉山市| 南郑县| 徐汇区| 留坝县| 辽中县|