MySQL の高可用性アーキテクチャの完全な説明: MHA アーキテクチャ

MySQL の高可用性アーキテクチャの完全な説明: MHA アーキテクチャ

MHA (Master HA) は、MySQL マスター スレーブ レプリケーション アーキテクチャのマスター フェイルオーバー機能を自動化するオープン ソースの MySQL 高可用性プログラムです。 MHA はマスター ノードの障害を検出すると、最新のデータを持つスレーブ ノードを新しいマスター ノードに昇格します。この期間中、MHA は他のスレーブ ノードから追加情報を取得することで一貫性の問題を回避します。 MHA は、マスター ノードのオンライン切り替え機能、つまり、オンデマンドでマスター/スレーブ ノードを切り替える機能も提供します。
MHA は、日本人の吉野林氏 (元 DeNA、現在は FaceBook 勤務) によって開発された成熟した MySQL 高可用性ソリューションです。 MHA は 30 秒以内にフェイルオーバーを実装し、フェイルオーバー中に可能な限りデータの一貫性を確保します。 Taobao は現在、同様の製品である TMHA を開発しており、現在はマスター 1 つとスレーブ 1 つをサポートしています。

ここに画像の説明を挿入

1. はじめに

MHA (Master High Availability) は、現在、MySQL の高可用性のための比較的成熟したソリューションです。これは、日本の DeNA 社の youshimaton (現在は Facebook に勤務) によって開発され、MySQL の高可用性環境での障害切り替えやマスター スレーブ プロモーションのための優れた高可用性ソフトウェアです。 MySQL フェイルオーバー プロセス中、MHA は 0 ~ 30 秒以内にデータベース フェイルオーバー操作を自動的に完了し、フェイルオーバー プロセス中にデータの一貫性を最大限に確保して、真の高可用性を実現します。

2. 構成

MHA マネージャー (管理ノード) と MHA ノード (データ ノード) の 2 つの部分で構成されます。
マスターに障害が発生した場合、最新のデータを持つスレーブを自動的に新しいマスターに昇格させ、他のすべてのスレーブを新しいマスターに再ポイントすることができます。フェイルオーバー プロセス全体はアプリケーションに対して完全に透過的です。

3. 作業プロセス

MHA 自動フェイルオーバー プロセス中、MHA はダウンしたプライマリ サーバーからバイナリ ログを保存して、データが最大限に失われないようにしようとしますが、これが常に可能であるとは限りません。たとえば、プライマリ サーバーのハードウェアに障害が発生したり、ssh 経由でアクセスできない場合、MHA はバイナリ ログを保存できず、フェイルオーバーのみを実行し、最新のデータが失われます。 MySQL 5.5 の準同期レプリケーションを使用すると、データ損失のリスクを大幅に軽減できます。 MHA は半同期レプリケーションと組み合わせることができます。最新のバイナリ ログを受信したスレーブが 1 つだけの場合、MHA は最新のバイナリ ログを他のすべてのスレーブ サーバーに適用できるため、すべてのノードのデータの一貫性が確保されます。

4. 建築

MHA を構築するには、レプリケーション クラスターに少なくとも 3 つのデータベース サーバー (マスター 1 台とスレーブ 2 台) が必要です。つまり、1 つのサーバーがマスターとして機能し、1 つのサーバーがスタンバイ マスターとして機能し、もう 1 つのサーバーがスレーブとして機能します。

ここに画像の説明を挿入

(1)クラッシュしたマスターからのバイナリログイベントを保存する。
(2)最新のアップデートを含むスレーブを識別する。
(3)差分リレーログを他のスレーブに適用する。
(4)マスターから保存されたバイナリログイベントを適用する。
(5)奴隷を新しい主人に昇進させる。
(6)他のスレーブが新しい​​マスターに接続してレプリケーションできるようにする。

マネージャーツールキットの主な機能

masterha_check_ssh MHAのSSH設定ステータスを確認する masterha_check_repl MySQLレプリケーションステータスを確認する masterha_manger MHAを起動する
masterha_check_status は現在の MHA 実行ステータスをチェックします。masterha_master_monitor はマスターがダウンしているかどうかをチェックします。masterha_master_switch はフェイルオーバー (自動または手動) を制御します。
masterha_conf_hostは設定されたサーバー情報を追加または削除します

Node ツールキットの機能

save_binary_logsはマスターのバイナリログを保存してコピーします。apply_diff_relay_logsは差分リレーログイベントを識別し、差分イベントを他のスレーブに適用します。
filter_mysqlbinlog は不要な ROLLBACK イベントを削除します (MHA はこのツールを使用しなくなりました)
purge_relay_logs リレーログをクリアします(SQL スレッドはブロックされません)

5. 表示例

MHA を展開するための準備:

役割 IP アドレス ホスト名 server_id タイプ 監視ホスト 192.168.0.20 server01 - レプリケーショングループを監視 マスター 192.168.0.50 server02 1 書き込み 候補マスター 192.168.0.60 server03 2 読み取り スレーブ 192.168.0.70 server04 3 読み取り

マスターは外部への書き込みサービスを提供し、スタンバイ マスター (実際のスレーブ、ホスト名 server03) は読み取りサービスを提供し、スレーブも関連する読み取りサービスを提供します。マスターがダウンすると、スタンバイ マスターが新しいマスターに昇格し、スレーブは新しいマスターを指します。

## 1. ファイアウォールをオフにする systemctl stop firewalld
systemctl ファイアウォールを無効にする
強制0を設定する

## 2. ホスト名を設定する hostnamectl set-hostname Mysql1
ホスト名ctl ホスト名の設定 Mysql2
ホスト名ctl ホスト名の設定 Mysql3

## 3. ノード設定: マスター、スレーブ1、スレーブ2 構成ファイル /etc/my.cnf

## a. マスターノード##
vim /etc/my.cnf
[mysqld]
サーバーID = 1
log_bin = マスタービン
ログスレーブ更新 = true
systemctl で mysqld を再起動します。

##スレーブ1、スレーブ2ノード##
vim /etc/my.cnf
server-id = 2 #3つのサーバーのサーバーIDは同じにできません log_bin = master-bin
リレーログ = リレーログビン
リレーログインデックス = スレーブリレービンインデックス
systemctl で mysqld を再起動します。

## 4. ソフトリンク ln -s /usr/local/mysql/bin/mysql /usr/sbin/ を作成します。
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/

## 5. マスター1台とスレーブ2台: すべてのノードはmysql -uroot -pで認証されます
grant replication slave on *.* to 'myslave'@'192.168.80.%' identified by '123'; #スレーブ データベース同期 use grant all privileges on *.* to 'mha'@'192.168.80.%' identified by 'manager'; #manager use grant all privileges on *.* to 'mha'@'Mysql1' identified by 'manager'; #スレーブ ライブラリがホスト名を介してマスター ライブラリに接続できないようにします grant all privileges on *.* to 'mha'@'Mysql2' identified by 'manager';
'manager' によって識別される 'mha'@'Mysql3' に *.* のすべての権限を付与します。
## バイナリ ファイルはマスターで確認できます。同期ポイントではマスター ステータスを表示します。
+-------------------+----------+--------------+------------------+------------------+
| ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+------------------+
| マスターbin.000002 | 1745 | | | |
+-------------------+----------+--------------+------------------+------------------+
## スレーブ1、スレーブ2ノードのデータ同期結果にスレーブステータスが表示されます\G		
// IO スレッドと SQL スレッドの両方が Yes であり、同期が正常であることを確認します。
スレーブIO実行中: はい
スレーブSQL実行中: はい
# スレーブ1とスレーブ2を読み取り専用モードに設定します。set global read_only=1;
# データベース テストを作成する##マスター データベースにデータを挿入して、同期されているかどうかをテストする##
データベース test_db を作成します。
test_db を使用します。
テーブル test(id int) を作成します。
test(id)値に挿入する(1)
# データベースから表示 select * from test_db.test;
+------+
|id|
+------+
| 1 |
+------+

MHAソフトウェアをインストールする

(1)すべてのサーバーにMHA依存環境をインストールします。まずepelソースをインストールします

yum インストール epel-release --nogpgcheck -y

yum インストール -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-ログディスパッチ \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
パール - CPAN

(2)MHAソフトウェアパッケージをインストールするには、まずすべてのサーバーにノードコンポーネントをインストールする必要があります。

オペレーティングシステムのバージョンごとに異なります。ここでは、CentOS7.4 ではバージョン 0.57 を選択する必要があります。
マネージャはノード コンポーネントに依存しているため、最初にノード コンポーネントをすべてのサーバーにインストールし、最後にマネージャ コンポーネントを MHA マネージャ ノードにインストールする必要があります。

cd /opt
tar zxvf mha4mysql-node-0.57.tar.gz
mha4mysql-node-0.57 を CD します
perl メイクファイル.PL
作成 && インストール

(3)MHAマネージャノードにマネージャコンポーネントをインストールする

cd /opt
tar zxvf mha4mysql-manager-0.57.tar.gz
mha4mysql-manager-0.57 を CD します
perl メイクファイル.PL
作成 && インストール

7.すべてのサーバーでパスワードレス認証を構成する (1) マネージャーノード上のすべてのデータベースノードでパスワードレス認証を構成する

-----------------------------------------------------------------------------------------
#マネージャー コンポーネントがインストールされると、主に次のツールを含むいくつかのツールが /usr/local/bin の下に生成されます。
masterha_check_ssh は MHA の SSH 設定をチェックします。masterha_check_repl は MySQL レプリケーション ステータスをチェックします。masterha_manger はマネージャ スクリプトを起動します。masterha_check_status は現在実行中の MHA ステータスをチェックします。masterha_master_monitor はマスターがダウンしているかどうかをチェックします。masterha_master_switch はフェイルオーバー (自動または手動) を制御します。
masterha_conf_host 設定されたサーバ情報を追加または削除する masterha_stop マネージャをシャットダウンする

#ノード コンポーネントがインストールされると、/usr/local/bin の下にいくつかのスクリプトが生成されます (これらのツールは通常、MHAManager スクリプトによってトリガーされ、手動操作は必要ありません)。主なものは次のとおりです。
save_binary_logsはマスターのバイナリログを保存してコピーします。apply_diff_relay_logsは差分リレーログイベントを識別し、差分イベントを他のスレーブに適用します。
filter_mysqlbinlog は不要な ROLLBACK イベントを削除します (MHA はこのツールを使用しなくなりました)
purge_relay_logs リレーログをクリアします(SQL スレッドをブロックしません)

(2)mysql1でデータベースノードmysql2とmysql3へのパスワードフリー認証を構成する

ssh-keygen -t rsa #Enterキーを押し続ける ssh-copy-id 192.168.80.10
sshコピーID 192.168.80.20
sshコピーID 192.168.80.30

(3)データベースノードmysql1とmysql3へのmysql2のパスワードフリー認証を構成する

ssh-keygen -t rsa
sshコピーID 192.168.80.20
sshコピーID 192.168.80.30

(4)mysql3でデータベースノードmysql1とmysql2へのパスワードフリー認証を構成する

ssh-keygen -t rsa
sshコピーID 192.168.80.10
sshコピーID 192.168.80.30

8.マネージャーノードでMHAを構成する
(1)関連スクリプトをマネージャーノードの/usr/local/binディレクトリにコピーします。

cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/bin
//コピー後、4つの実行可能ファイルll /usr/local/bin/scripts/が作成されます。
------------------------------------------------------------------------------------------------------------
master_ip_failover #自動切り替え時の VIP 管理用スクリプト master_ip_online_change #オンライン切り替え時の VIP 管理 power_manager #障害発生後にホストをシャットダウンするスクリプト send_report #障害切り替え後にアラームを送信するスクリプト

(2)上記の自動切り替え用VIP管理スクリプトを/usr/local/binディレクトリにコピーします。ここでは、master_ip_failoverスクリプトを使用してVIPとフェイルオーバーを管理します。

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

(3)変更内容は以下のとおりです。(元の内容を削除し、VIP関連のパラメータを直接コピーして変更します)

vim /usr/local/bin/master_ip_failover
#!/usr/bin/env パール
厳密なものを使用します。
警告 FATAL => 'all' を使用します。

Getopt::Long を使用します。

私の
$コマンド、$ssh_user、$orig_master_host、$orig_master_ip、
$orig_master_port、$new_master_host、$new_master_ip、$new_master_port
);
##################################コンテンツ セクションを追加##########################################
my $vip = '192.168.80.200'; #vipmy のアドレスを指定します $brdc = '192.168.80.255'; #vipmy のブロードキャスト アドレスを指定します $ifdev = 'ens33'; #vipmy にバインドされているネットワーク カードを指定します $key = '1'; #vipmy にバインドされている仮想ネットワーク カードのシリアル番号を指定します $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip"; #この変数の値が ifconfig ens33:1 192.168.80.200 であることを表します
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down"; #この変数値はifconfig ens33:1 192.168.80.200 downを表します
my $exit_code = 0; #終了ステータスコードを0に指定します
#my $ssh_start_vip = "/usr/sbin/ip addr $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 アドレス del $vip/24 dev $ifdev ラベル $ifdev:$key";
##################################################################################
オプションを取得(
'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,
'新しいマスターポート=i' => \$新しいマスターポート、
);

&main() を終了します。

サブメイン{

print "\n\nスクリプトテストで====$ssh_stop_vip==$ssh_start_vip===\n\n";

$command が "stop" の場合 || $command が "stopssh" の場合 {

私の$exit_code = 1;
評価 {
print "古いマスターの VIP を無効にしています: $orig_master_host \n";
&stop_vip();
$終了コード = 0;
};
もし($@){
warn "エラーが発生しました: $@\n";
終了 $exit_code;
}
終了 $exit_code;
}
elsif ( $command が "start" と等しい ) {

私の$exit_code = 10;
評価 {
print "新しいマスター $new_master_host で VIP $vip を有効にしています \n";
開始vip();
$終了コード = 0;
};
もし($@){
警告 $@;
終了 $exit_code;
}
終了 $exit_code;
}
elsif ( $command が "ステータス" と等しい ) {
print "スクリプトのステータスを確認しています。OK \n";
終了0;
}
それ以外 {
&使用法();
出口1;
}
}
サブstart_vip() {
`ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}
## old_master 上の VIP を無効にする単純なシステムコール
サブstop_vip() {
`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}

サブの使用法 {
印刷
"使用方法: 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)MHAソフトウェアディレクトリを作成し、設定ファイルをコピーします。ここでは、app1.cnf設定ファイルはMySQLノードサーバーの管理に使用されます。

/etc/masterha をディレクトリに追加します。
cp /opt/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha

vim /etc/masterha/app1.cnf #元のコンテンツを削除し、ノードサーバーのIPアドレスを直接コピーして変更します[サーバーのデフォルト]
マネージャログ=/var/log/masterha/app1/manager.log
マネージャーワークディレクトリ=/var/log/masterha/app1
マスター_binlog_dir=/usr/local/mysql/data
マスターIPフェイルオーバースクリプト=/usr/local/bin/マスターIPフェイルオーバー
マスターIPオンライン変更スクリプト=/usr/local/bin/マスターIPオンライン変更
パスワード=マネージャー
ping_interval=1
リモートワークディレクトリ=/tmp
パスワードを123に変更
repl_user=myslave
セカンダリチェックスクリプト=/usr/local/bin/masterha_secondary_check -s 192.168.80.20 -s 192.168.80.30
シャットダウンスクリプト=""
ssh_user=ルート
ユーザー=mha

[サーバー1]
ホスト名=192.168.80.10
ポート=3306

[サーバー2]
候補マスター=1
チェック_repl_delay=0
ホスト名=192.168.80.20
ポート=3306

[サーバー3]
ホスト名=192.168.80.30
ポート=3306

例:

[サーバーのデフォルト]
manager_log=/var/log/masterha/app1/manager.log #マネージャーログ manager_workdir=/var/log/masterha/app1.log #マネージャー作業ディレクトリ master_binlog_dir=/usr/local/mysql/data/ #マスターがbinlogを保存する場所。ここでのパスは、MHAが見つけられるように、マスターで設定されたbinlogのパスと一致している必要があります master_ip_failover_script=/usr/local/bin/master_ip_failover #自動フェイルオーバー用の切り替えスクリプトを設定します。これは上記のスクリプトです master_ip_online_change_script=/usr/local/bin/master_ip_online_change #手動切り替え用の切り替えスクリプトを設定します password=manager #mysqlのrootユーザーのパスワードを設定します。このパスワードは、前の記事で監視ユーザーを作成するためのパスワードです ping_interval=1 #メインデータベースを監視し、pingパケットを送信する時間間隔を設定します。デフォルトは3秒です。応答がない試行が3回続くと自動的にフェイルオーバーします
remote_workdir=/tmp #切り替え発生時にリモート MySQL バイナリログが保存される場所を設定します repl_password=123 #レプリケーション ユーザーのパスワードを設定します repl_user=myslave #レプリケーション ユーザーのユーザーを設定します report_script=/usr/local/send_report #切り替え後にアラームを送信するためのスクリプトを設定します secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.80.20 -s 192.168.80.30 #チェックするスレーブ サーバーの IP アドレスを指定します shutdown_script="" #障害発生後に障害のあるホストをシャットダウンするためのスクリプトを設定します (このスクリプトの主な機能は、ブレイン スプリットを防ぐためにホストをシャットダウンすることですが、ここでは使用しません)
ssh_user=root #sshログインユーザー名を設定 user=mha #監視ユーザーrootを設定

[サーバー1]
ホスト名=192.168.80.10
ポート=3306

[サーバー2]
ホスト名=192.168.80.20
ポート=3306
候補マスター=1
#候補マスターに設定します。このパラメータを設定すると、スレーブライブラリがクラスタ内の最新のスレーブでなくても、マスタースレーブ切り替えが発生した後にスレーブライブラリがマスターライブラリに昇格されます。

チェック_repl_delay=0
#デフォルトでは、スレーブがマスターより 100M リレー ログ以上遅れている場合、MHA はスレーブを新しいマスターとして選択しません。 
このスレーブを回復するには長い時間がかかるため、check_repl_delay=0 を設定すると、MHA は切り替えをトリガーし、新しいマスターを選択するときにレプリケーションの遅延を無視します。このパラメータは、candidate_master=1 が設定されているホストに非常に役立ちます。切り替え中は候補マスターが新しいマスターになる必要があるためです。

[サーバー3]
ホスト名=192.168.80.30
ポート=3306

マスターの仮想IPを有効にする

/sbin/ifconfig ens33:1 192.168.80.200/24

10. マネージャーノードでSSHパスワードレス認証をテストする

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

2020 年 11 月 26 日火曜日 23:09:45 - [警告] グローバル構成ファイル /etc/masterha_default.cnf が見つかりません。スキップします。
2020 年 11 月 26 日火曜日 23:09:45 - [info] /etc/masterha/app1.cnf からアプリケーションのデフォルト設定を読み取っています。
2020 年 11 月 26 日火曜日 23:09:45 - [情報] /etc/masterha/app1.cnf からサーバー構成を読み取っています。
2020 年 11 月 26 日火曜日 23:09:45 - [情報] SSH 接続テストを開始しています。
2020年11月26日火曜日 23:09:46 - [デバッグ] 
2020 年 11 月 26 日火曜日 23:09:45 - [デバッグ] [email protected](192.168.80.20:22) から [email protected](192.168.80.30:22) に SSH 経由で接続しています。
2020年11月26日火曜日 23:09:46 - [デバッグ] 正常です。
2020年11月26日火曜日 23:09:47 - [デバッグ] 
2020 年 11 月 26 日火曜日 23:09:46 - [デバッグ] [email protected](192.168.80.30:22) から [email protected](192.168.80.20:22) に SSH 経由で接続しています。
2020年11月26日火曜日 23:09:47 - [デバッグ] 正常です。
2020 年 11 月 26 日火曜日 23:09:47 - [情報] すべての SSH 接続テストが正常に合格しました。
# パスワードレス認証が成功しました

11. マネージャーノードでMySQLマスタースレーブ接続をテストする

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

2020 年 11 月 26 日火曜日 23:10:29 - [情報] スレーブ設定のチェックが完了しました。
2020年11月26日火曜日 23:10:29 - [情報] 
192.168.80.20(192.168.80.20:3306) (現在のマスター)
 +--192.168.80.30(192.168.80.30:3306)

2020 年 11 月 26 日火曜日 23:10:29 - [情報] 192.168.80.30 のレプリケーションの健全性を確認しています。
2020年11月26日火曜日 23:10:29 - [情報] わかりました。
2020 年 11 月 26 日火曜日 23:10:29 - [情報] master_ip_failover_script のステータスを確認しています:
2020 年 11 月 26 日火曜日 23:10:29 - [情報] /usr/local/bin/master_ip_failover --command=status --ssh_user=root --orig_master_host=192.168.80.20 --orig_master_ip=192.168.80.20 --orig_master_port=3306 


スクリプトテスト中====/sbin/ifconfig ens33:1 down==/sbin/ifconfig ens33:1 192.168.80.200===

スクリプトのステータスを確認しています。OK 
2020年11月26日火曜日 23:10:29 - [情報] OK。
2020 年 11 月 26 日火曜日 23:10:29 - [警告] Shutdown_script が定義されていません。
2020 年 11 月 26 日火曜日 23:10:29 - [情報] 終了コード 0 を取得しました (マスターは死んでいません)。

MySQL レプリケーションの健全性は正常です。
# マスタースレーブ接続が成功しました
# マネージャーノードで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 &
--remove_dead_master_conf: このパラメータは、マスターとスレーブの切り替えが発生したときに、古いマスター データベースの IP アドレスが構成ファイルから削除されることを意味します。
--manger_log: ログの保存場所。
--ignore_last_failover: デフォルトでは、MHAが連続したダウンタイムを検出し、2つのダウンタイムの間隔が8時間未満の場合、
  フェイルオーバーは実行されません。この制限は、ピンポン効果を回避するために行われます。このパラメータは、最後の MHA トリガー スイッチによって生成されたファイルを無視することを意味します。
  デフォルトでは、MHA スイッチが発生した後、ログ ディレクトリ、つまり上記で設定したログ app1.failover.complete ファイルに記録されます。
  次に再度切り替えるときに、ディレクトリ内にファイルが見つかった場合、最初の切り替え後にファイルを削除しない限り、切り替えはトリガーされません。
  便宜上、これは --ignore_last_failover に設定されています。
# b MHA ステータスを確認すると、現在のマスターが Mysql1 ノードであることがわかります。
masterha_check_status --conf=/etc/masterha/app1.cnf

# ログモード cat /var/log/masterha/app1/manager.log | grep "現在のマスター"

# c Mysql1 の VIP アドレス 192.168.80.200 が存在するかどうかを確認します。マネージャー ノードが MHA サービスを停止しても、この VIP アドレスは消えません。
ifconfig
//マネージャー サービスをシャットダウンするには、次のコマンドを使用します。
masterha_stop --conf=/etc/masterha/app1.cnf
または、プロセス ID を直接強制終了してシャットダウンすることもできます。

失敗をシミュレートする

# マネージャーノードのログレコードを監視します tail -f /var/log/masterha/app1/manager.log

# bマスターノードMysql1のmysqlサービスを停止します。 systemctl stop mysqld
またはpkill -9 mysql

# c通常の自動切り替え後、MHA プロセスは終了します。 HMA は app1.cnf ファイルの内容を自動的に変更し、ダウンした mysql1 ノードを削除します。 mysql2がVIPを引き継ぐかどうかを確認する
ifconfig
候補マスター データベースのフェイルオーバーのアルゴリズム:
1.一般的にスレーブデータベースの品質は(位置/GTID)で判断され、データに差異がある場合はマスターに最も近いスレーブが候補マスターになります。
2.データが一貫している場合は、構成ファイルの順序に従って代替マスター データベースを選択します。
3.重み(candidate_master=1)を設定すると、重みに応じて候補マスターを強制的に指定します。
(1)デフォルトでは、スレーブがマスターよりリレーログで100MB遅れている場合、重みがあっても失敗します。
(2)check_repl_delay=0の場合、ログが大量に遅れていても強制的にバックアップマスターとして選択される。

バグ修正

1. mysqlサービスを再起動します。systemctl restart mysqld
2. マスタースレーブを修復します。まず、バイナリ ファイルと同期ポイントがマスター ステータスを示していることを確認します。
3. 元のマスター サーバー mysql1 が同期操作を実行します。マスターを master_host='192.168.80.20'、master_user='myslave'、master_password='123'、master_log_file='master-bin.000001'、master_log_pos=1745 に変更します。
スレーブを起動します。

4. マネージャーノード上の設定ファイルapp1.cnfを変更します。
vi /etc/masterha/app1.cnf
......
セカンダリチェックスクリプト=/usr/local/bin/masterha_secondary_check -s 192.168.80.10 -s 192.168.80.30
......
[サーバー1]
ホスト名=192.168.80.20
ポート=3306

[サーバー2]
候補マスター=1
チェック_repl_delay=0
ホスト名=192.168.80.10
ポート=3306

[サーバー3]
ホスト名=192.168.80.30
ポート=3306
5. スレーブライブラリは読み取り専用モードに設定する必要があります。現在のスレーブライブラリはmysqlです。
グローバル read_only=1 を設定します。

6. マネージャーノードでMHAを起動し、VIPがmysql2にドリフトするかどうかを確認します。
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 &

##MHA ステータスを確認すると、現在のマスターが Mysql2 ノードであることがわかります。masterha_check_status --conf=/etc/masterha/app1.cnf

MySQL の高可用性アーキテクチャである MHA に関するこの記事はこれで終わりです。MySQL の高可用性アーキテクチャの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Python を使用して MySQL MHA の展開と操作ステータス情報を収集する方法
  • MySQL MHA の高可用性構成とフェイルオーバーの詳細な導入手順
  • MySQL で MHA アーキテクチャのデプロイメントを構築する手順
  • MySQL MHA のセットアップと切り替えに関するいくつかのエラー ログの概要
  • Mysql GTID Mha 設定方法
  • MySQL での MHA 高可用性フェイルオーバー ソリューションのスーパー デプロイメント チュートリアル
  • MHAはMySQLマスタースレーブデータベースの手動切り替えを実装します
  • MySQL MHA 操作ステータス監視の概要

<<:  IE で UTF8 エンコードされたページで行が理由もなく空白のままになり、UTF8 ページが表示されない問題の解決方法

>>:  Nginx リバース プロキシを使い始める

推薦する

フロントエンドに必要なNginx設定の詳細な説明

Nginx (エンジン x) は、軽量で高性能な HTTP およびリバース プロキシ サーバーであり...

Linuxカーネルとデバイスツリーのコンパイルと書き込みを分析する

目次1. 材料を準備する2. Linuxカーネルファイルをダウンロードする3. コンパイル4. TF...

Ubuntu 20.04 ベスト設定ガイド (初心者向け)

1. システム構成1. sudoパスワードをオフにするsudo コマンドを使用するたびにパスワード...

MySQLクエリキャッシュの簡単な使い方の詳細な説明

目次1. クエリキャッシュの実装プロセス2. クエリキャッシュを構成する3. クエリキャッシュを有効...

Vue コンポーネントの構成構造とコンポーネント登録の詳細

目次1. コンポーネントの構成2. コンポーネント名2.1 コンポーネントの命名3. グローバル登録...

Dockerでnginxを実行し、ローカルディレクトリをイメージにマウントする方法

1 hupからイメージを取得する docker プル nginx 2 マウントするディレクトリを作成...

MySQL 5.7.22 バイナリパッケージのインストールとインストール不要版 Windows 設定方法

次のコードは、MySQL 5.7.22 バイナリ パッケージのインストール方法を紹介しています。具体...

Linux コマンドで .sql ファイルをエクスポートおよびインポートする方法

この記事では、Linux コマンドを使用して .sql ファイルをエクスポートおよびインポートする方...

MySQL データベース クエリ パフォーマンス最適化戦略

クエリを最適化するExplain ステートメントを使用してクエリ ステートメントを分析するExpla...

DockerがElasticsearch7.xを起動してエラーを報告する問題を解決する

Docker実行コマンドの使用docker run -d -p 9200:9200 -p 9300:...

Vue の詳細な入門ノート

目次1. はじめに2. 初期ビュー(I) Vueの概念を理解する(II) MVVMアーキテクチャ(I...

位置固定オフセット問題を解決する方法の詳細な説明

質問CSS 固定配置の position:fixed は非常に使いやすいです。ブラウザのビューポート...

Dockerがsudo操作を使用する必要がある問題を解決する

手順は以下のとおりです1. dockerグループを作成する: sudo groupadd docke...

MySQL での重複キー更新時の replace into と insert into の使用法と相違点の分析

この記事では、MySQL での重複キー更新時の replace into と insert into...

mysql bin-log ログファイルを sql ファイルに変換する方法

mysqlbinlogのバージョンを表示mysqlbinlog -V [--version] bin...