日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 失效转移_MySQL基于MHA的FailOver过程

發布時間:2024/8/23 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 失效转移_MySQL基于MHA的FailOver过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家好,我是anyux。本文介紹MySQL基于MHA的FailOver過程。

MHA FailOver過程詳解

什么是FailOver

故障轉移

主庫宕機,一直到業務恢復正常的處理過程

如何處理FailOver

1.快速監控到主庫宕機

2.選擇新主節點,選擇策略

mysqladmin ping

檢查數據庫狀態,主機狀態,端口等,判斷從庫節點讀取的master_log_file及read_master_log_pos節點大小,查看Retrieved_gtid_set(已接收到的gtid大小),executed_gtid_set(已執行的gtid號大小)

3.數據補償

4.解除從庫身份

5.剩余從庫和新主庫構建主從關系

6.應用透明

7.修復故障主節點(k8s可以實現節點自愈)

MHA的Failover如何實現

從啟動--->故障--->轉移---->業務恢復

1.MHA通過master_manager腳本啟動MHA功能

2.在manager啟動之前,會自動調用檢查ssh互信腳本(masterha_check_ssh)和主從狀態檢查腳本(masterha_check_repl)。如果檢查腳本不通過MHA無法啟動

3.MHA-manager 通過masterha_master_monitor腳本(每隔ping_interval秒)

4.masterha_master_monitor探測主庫3次無心跳之后,主認為主庫宕機了

5.進行選主過程

算法一:

讀取配置文件中是否有強制選主的參數

candidate_master=1check_repl_delay=0

算法二:

自動判斷所有從庫的日志量,將最接近主庫數據的從庫作為新主

算法三:

按照配置文件先后順序,選擇新主

6.數據補償

判斷主庫ssh的連通性

情況一:ssh能夠連接

調用save_binary_logs腳本,立即保存缺失部分的binlog到各個節點,恢復

情況二:ssh法連接

調用 apply_diff_relay_logs 腳本,計算從庫的relaylog差異,恢復到2號從庫

提供額外的數據補償功能

解除從庫身份

剩余從庫和主庫構建主從關系

應用透明

故障節點自愈

故障提醒

MHA應用透明(vip)

$vip是一個未被占用的地址,將來可實現地址飄移的,需要自己按情況調整

$brdc是廣播地址,按自身網絡情況調整

$ifdev是網卡名稱,設置為自己實際的網卡名稱

$ssh_start_vip是添加vip功能的

$ssh_stop_vip是關閉vip功能的

my $vip = '192.168.255.200';my $brdc = '192.168.255.255';my $ifdev = 'ens33';my $key = '1';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";

復制下面代碼到db115主機下的 /usr/local/bin/master_ip_failover文件中

#!/usr/bin/env perluse 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.255.200';my $brdc = '192.168.255.255';my $ifdev = 'ens33';my $key = '1';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_mastersub 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";}

字符轉換

yum install -y dos2unixcd /usr/local/bin/dos2unix master_ip_failover

添加執行權限

chmod +x /usr/local/bin/master_ip_failover

編輯配置文件

vim /etc/mha/app1.cnf[server default]master_ip_failover_script=/usr/local/bin/master_ip_failover

檢查主庫

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

db01手工添加vip

yum install -y net-toolsifconfig ens33:1 192.168.255.200/24ip a | grep 200

db03重啟mha

主從狀態檢查

masterha_check_repl --conf=/etc/mha/app1.cnf

返回ok

檢查mha狀態

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

先關閉mha

masterha_stop ---conf=/etc/mha/app1.cnf

啟動mha

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null> /var/log/mha/app1/manager.log 2>&1 &

MHA故障郵箱提醒

安裝郵件

yum -y install sendmailyum -y install mailx

編輯配置文件,此次是使用163郵箱,需要獲取授權碼

vim /etc/mail.rcset from=xxxx@163.comset smtp=smtp.163.comset smtp-auth-user=xxxx@163.comset smtp-auth-password=xxxxxset smtp-auth=login

測試驗證

將xxxx替換為自己的郵箱地址

前面是內容主體,-s 后面的參數,是郵件標題

echo "你好,先生" | mail -s "你好,請閱讀此文件" xxxx@xxxx.com

MHA是一次性的高可用服務,即數據庫如果宕機,mha就不再工作了,也會自動宕機

當mha出現時,我們可以使用send_report以郵件報警的方式來獲得錯誤信息數據,方便了解數據庫狀態。

將發送郵件的腳本內容復制到send_report文件中

cd /usr/local/binvim send_report

腳本內容如下:

#!/bin/bashecho "你好,先生,數據庫宕機了" | mail -s "數據庫宕機了,請登錄系統查看mha狀態" 1915530614@qq.com

添加執行權限

chmod +x send_report

然后修改配置文件,只需添加report_script即可

vim /etc/mha/app1.cnf[server default]report_script=/usr/local/bin/send_report

重啟mha

先關閉mha

masterha_stop --conf=/etc/mha/app1.cnf

啟動mha

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null> /var/log/mha/app1/manager.log 2>&1 &

檢查mha狀態

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

額外的數據補償(binlog_server)

實時地接收主庫的數據,將數據保存到其他地區的機器上,可以理解為異地備份

找到一臺額外機器,數據庫版本大于5.6,支持gtid并開啟

在db03上配置

no_master:表示不參與選主

hostname:設置ip地址

master_binlog_dir:新機器接收的二進制日志存放位置

vim /etc/mha/app1.cnf[binlog1]no_master=1hostname=192.168.255.116master_binlog_dir=/data/mysql/binlog

創建必要目錄

mkdir -p /data/mysql/binlogchown -R mysql.mysql /data/*

修改完成后,將主庫binlog接過來(從000001開始拉取,之后的binlog會自動按順序過來)

拉取主庫binlog日志

必須進入到自己創建好的目錄

cd /data/mysql/binlogmysqlbinlog -R --host=192.168.255.113 --user=mha --password=mha --raw --stop-never log-bin.000001 &

注意:

拉取日志的起點,需要按照目前從庫的已經獲得的二進制日志為起點

重啟mha

先關閉mha

masterha_stop ---conf=/etc/mha/app1.cnf

啟動mha

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null> /var/log/mha/app1/manager.log 2>&1 &

故障模擬及故障處理

關閉db01數據庫

systemctl stop mysqld

獲取郵箱告警信息

恢復故障

啟動故障節點

systemctl start mysqld

恢復1主2從環境

在db115管理節點獲取恢復節點信息

grep -i "change master" /var/log/mha/app1/manager

登錄db01將日志的語句修改密碼后,在db01環境下執行即可

CHANGE MASTER TO MASTER_HOST='192.168.255.114', MASTER_PORT=3306, MASTER_AUTO_POSITION=1, MASTER_USER='repl', MASTER_PASSWORD='repl'

啟動從庫

start slave;

恢復db115上的配置文件

重新添加server1節點信息

[server1]hostname=192.168.255.113port=3306

啟動mha

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null> /var/log/mha/app1/manager.log 2>&1 &

檢查mha狀態

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

恢復binlogServer

必須進入到自己創建好的目錄

cd /data/mysql/binlogrm -rf /data/mysql/binlog/*mysqlbinlog -R --host=192.168.255.11x --user=mha --password=mha --raw --stop-never log-bin.000001 &

注意:

log-bin.000001需要按照實現情況獲取

總結

以上是生活随笔為你收集整理的mysql 失效转移_MySQL基于MHA的FailOver过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。