マハ1. MAHアーキテクチャの概要
2. 適用可能なシナリオ現在、MHA は主に 1 つのマスターと複数のスレーブのアーキテクチャをサポートしています。MHA を構築するには、レプリケーション クラスターに少なくとも 3 つのデータベース サーバー (1 つのマスターと 2 つのスレーブ) が必要です。つまり、1 つはマスターとして機能し、1 つはスタンバイ マスターとして機能し、もう 1 つはスレーブとして機能します。コストを考慮して、Taobao はこれに基づいて変更を加えました。現在、Taobao が開発した TMHA は、マスター 1 つとスレーブ 1 つをサポートしています。 3. MHAの動作原理1. クラッシュしたマスターからのバイナリ ログ イベントを保存します。 2. 最新のアップデートでスレーブを識別します。 3. 差分リレーログを他のスレーブに適用します。 4. マスターから保存されたバイナリ ログ イベントを適用します。 5. スレーブを新しいマスターに昇格します。 6. レプリケーションのために他のスレーブを新しいマスターに接続します。 4. MHAの構成
1: マネージャーツールキット
2: ノードツールキット 通常はMHAマネージャースクリプトによってトリガーされ、手動操作は必要ありません。
5. MHAの特徴
MHAアーキテクチャの展開1. トポロジー図2: データベースのインストールMySQL バージョン 5.6.36、cmake バージョン 2.8.6 1: コンパイル依存環境をインストールする [root@master ~]# yum -y install ncurses-devel gcc-c++ perl-Module-Install 2. gmakeコンパイルソフトウェアをインストールする [root@master ~]# tar zxvf cmake-2.8.6.tar.gz [root@master ~]# cd cmake-2.8.6 [root@master cmake-2.8.6]# ./configure [root@master cmake-2.8.6]# gmake && gmake install 3: MySQLデータベースをインストールする [root@master ~]# tar -zxvf mysql-5.6.36.tar.gz [root@master ~]# cd mysql-5.6.36 [root@master mysql-5.6.36]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc [root@master mysql-5.6.36]# make && make install [root@master mysql-5.6.36]# cp サポートファイル/my-default.cnf /etc/my.cnf [root@master mysql-5.6.36]# cp サポートファイル/mysql.server /etc/rc.d/init.d/mysqld [root@master ~]# chmod +x /etc/rc.d/init.d/mysqld [root@master ~]# chkconfig --add mysqld [root@master ~]# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile [root@master ~]# ソース /etc/profile chown -R mysql.mysql /usr/local/mysql グループ追加 mysql [root@master ~]# useradd -M -s /sbin/nologin mysql -g mysql [root@master ~]# chown -R mysql.mysql /usr/local/mysql [root@master ~]# mkdir -p /data/mysql [root@master ~]# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql 4: マスターのメイン設定ファイル /etc/my.cnf ファイルを変更する 元の設定をすべて削除する [root@master ~]# vi /etc/my.cnf [クライアント] ポート = 3306 ソケット = /usr/local/mysql/mysql.sock [mysql] ポート = 3306 ソケット = /usr/local/mysql/mysql.sock [mysqld] ユーザー = mysql ベースディレクトリ = /usr/local/mysql データディレクトリ = /usr/local/mysql/data ポート = 3306 pid ファイル = /usr/local/mysql/mysqld.pid ソケット = /usr/local/mysql/mysql.sock サーバーID = 1 log_bin = マスタービン ログスレーブ更新 = true sql_mode=NO_ENGINE_SUBSTITUTION、STRICT_TRANS_TABLES、NO_AUTO_CREATE_USER、NO_AUTO_VALUE_ON_ZERO、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、PIPES_AS_CONCAT、ANSI_QUOTES 他の2つのスレーブデータベース 3つのサーバーのサーバーIDは同じにすることはできませんが、他のサーバーは同じであり、通常どおりに記述できます。 サーバーID = 2 log_bin = マスタービン リレーログ = リレーログビン リレーログインデックス = スレーブリレービンインデックス サーバーID = 3 log_bin = マスタービン リレーログ = リレーログビン リレーログインデックス = スレーブリレービンインデックス 5: 3 つのデータベースごとに 2 つのソフト リンクを作成します。ソフト リンクは HMA サービス用です。 [root@master ~]# ln -s /usr/local/mysql/bin/mysql /usr/sbin/ [root@master ~]# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/ 6: 3つのデータベースでMySQLを起動する [root@master ~]# /usr/local/mysql/bin/mysqld_safe --user=mysql & [root@master ~]# サービスmysqldを再起動します MySQL をシャットダウンしています。成功しました。 MySQL を起動しています。成功しました! 3: データベース構成のマスタースレーブ同期データベースにログイン [ルート@マスター ~]#mysql 1: すべてのデータベースノードで2人のユーザーを承認します。1人はスレーブ同期用、もう1人はマネージャー使用用です。 mysql> '123' で識別される 'myslave'@'20.0.0.%' に *.* 上のレプリケーション スレーブを許可します。 mysql> 'manager' によって識別される 'mha'@'20.0.0.%' に *.* のすべての権限を付与します。 mysql> 権限をフラッシュします。 2: 理論上、以下の 3 つの権限を追加する必要はありません。ただし、ケース実験環境を実行する際に、MHA 経由で MySQL マスタースレーブをチェックすると、2 つのスレーブデータベースがホスト名経由でマスターデータベースに接続できないというエラーが報告されたため、すべてのデータベースに以下の権限を追加しました。 mysql> 'manager' によって識別される 'mha'@'master' に *.* のすべての権限を付与します。 mysql> 'manager' によって識別される 'mha'@'slave1' に *.* のすべての権限を付与します。 mysql> 'manager' によって識別される 'mha'@'slave2' に *.* のすべての権限を付与します。 3: マスターホスト上のバイナリファイルと同期ポイントを表示する mysql> マスターステータスを表示します。 +-------------------+----------+--------------+------------------+------------------+ | ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+------------------+------------------+ | マスターbin.000001 | 608 | | | | +-------------------+----------+--------------+------------------+------------------+ セット内の 1 行 (0.00 秒) 4: スレーブ1とスレーブ2でそれぞれ同期を実行する mysql> マスターを master_host='20.0.0.10'、master_user='myslave'、master_password='123'、master_log_file='master-bin.000001'、master_log_pos=608 に変更します mysql> スレーブを起動します。 5: IO スレッドと SQL スレッドの両方が「はい」であるかどうかを確認し、同期が正常かどうかを示します。 mysql> スレーブステータスを表示します\G; ************************** 1. 行 **************************** Slave_IO_State: マスターがイベントを送信するのを待機中 マスターホスト: 20.0.0.10 マスターユーザー: myslave マスターポート: 3306 接続再試行: 60 マスターログファイル: master-bin.000001 読み取りマスターログ位置: 608 リレーログファイル: リレーログbin.000002 リレーログ位置: 284 リレーマスターログファイル: master-bin.000001 スレーブIO実行中: はい スレーブSQL実行中: はい レプリケート_Do_DB: レプリケート_無視_DB: 両方のスレーブを読み取り専用モードに設定する必要があります mysql> グローバル read_only=1 を設定します。 6: 2つのデータをマスターデータベースに挿入して、同期されているかどうかをテストします。 mysql> データベース test_db を作成します。 クエリは正常、1 行が影響を受けました (0.00 秒) mysql> test_db を使用します。 データベースが変更されました mysql> テーブル test(id int) を作成します。 クエリは正常、影響を受けた行は 0 行 (0.13 秒) mysql> test(id) 値に挿入します (1); クエリは正常、1 行が影響を受けました (0.03 秒) 7: 以下に示すように、2つのスレーブライブラリを個別にクエリし、マスタースレーブ同期が正常であることを示します。 mysql> test_db.test から * を選択します。 +------+ |id| +------+ | 1 | +------+ セット内の 1 行 (0.00 秒) 4: MHAソフトウェアをインストールする1: すべてのサーバーにMHA依存環境をインストールします。まずepelソースをインストールします(3+1) [root@master ~]# cd /etc/yum.repos.d/ [root@master yum.repos.d]# ll 総投与量20 drwxr-xr-x. 2 ルート ルート 187 10月10日 18:08 バックアップ -rw-r--r--。1 ルート ルート 1458 12月28日 23:07 CentOS7-Base-163.repo -rw-r--r--。1 ルート ルート 951 12月 29日 14:52 epel.repo -rw-r--r--。1 ルート ルート 1050 11月1日 04:33 epel.repo.rpmnew -rw-r--r--。1 ルート ルート 1149 11月 1日 04:33 epel-testing.repo -rw-r--r--。1 ルート ルート 228 10月27日 18:43 local.repo 3 つのデータベースと 1 つの mha-manager [root@mha-manager ~]# yum install epel-release --nogpgcheck [root@mha-manager ~]# yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-ParalExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN 2: ノードコンポーネント(3+1)をまずすべてのサーバーにインストールする必要があります [root@mha-manager ~]# tar zxvf mha4mysql-node-0.57.tar.gz [root@mha-manager ~]# cd mha4mysql-node-0.57 [root@mha-manager mha4mysql-node-0.57]# perl Makefile.PL [root@mha-manager mha4mysql-node-0.57]# make && make install 3: mha-managerにマネージャーコンポーネントをインストールする [root@mha-manager ~]# tar zxvf mha4mysql-manager-0.57.tar.gz [root@mha-manager ~]# cd mha4mysql-manager-0.57/ [root@mha-manager mha4mysql-manager-0.57]# perl Makefile.PL [root@mha-manager mha4mysql-manager-0.57]# make && make install マネージャーがインストールされると、/usr/local/binの下にいくつかのツールが生成されます。 masterha_check_ssh MHAのSSH設定を確認する ノードがインストールされると、/usr/local/binの下にいくつかのスクリプトが生成されます。 save_binary_logsはマスターのバイナリログを保存してコピーします apply_diff_relay_logs は差分リレーログイベントを識別し、差分イベントを他のスレーブに適用します。 filter_mysqlbinlog は不要な ROLLBACK イベントを削除します (MHA はこのツールを使用しなくなりました) purge_relay_logs リレーログをクリアします(SQL スレッドをブロックしません) 5: パスワードレス認証を構成する1: マネージャー上のすべてのノードにパスワードなしの認証を設定する (1)キーを生成する [root@mha-manager ~]# ssh-keygen -t rsa # Enterキーを押し続けます (2)キーが生成されると、他の3つのデータベースに送信される。 [root@mha-manager ~]# ssh-copy-id 20.0.0.10 # 入力: yes パスワード: 123456 [root@mha-manager ~]# ssh-copy-id 20.0.0.11 [root@mha-manager ~]# ssh-copy-id 20.0.0.12 (3)ログインテスト [root@mha-manager ~]# ssh [email protected] 最終ログイン: 2020年12月29日火曜日 14:52:09 20.0.0.1から [root@master ~]# 終了 20.0.0.10 へのログアウト接続が閉じられました。 [root@mha-manager ~]# ssh [email protected] 最終ログイン: 2020年12月29日火曜日 13:20:07 20.0.0.1から [root@slave1 ~]# 終了 20.0.0.11 へのログアウト接続が閉じられました。 [root@mha-manager ~]# ssh [email protected] 最終ログイン: 2020年10月27日火曜日 19:45:24 20.0.0.1から [root@slave2 ~]# 終了 20.0.0.12 へのログアウト接続が閉じられました。 2: マスター上のデータベースノードへのパスワードフリー認証を構成する (1)キーを生成する [root@master ~]# ssh-keygen -t rsa (2)キーが生成されると、他の2つのデータベースに送信される。 [root@master ~]# ssh-copy-id 20.0.0.11 [root@master ~]# ssh-copy-id 20.0.0.12 (3)ログインテスト [root@master ~]# ssh [email protected] 最終ログイン: 2020年12月29日火曜日 16:40:06 20.0.0.13から [root@slave1 ~]# 終了 20.0.0.11 へのログアウト接続が閉じられました。 [root@master ~]# ssh [email protected] 最終ログイン: 2020年10月27日火曜日 23:05:20 20.0.0.13から [root@slave2 ~]# 終了 20.0.0.12 へのログアウト接続が閉じられました。 3: スレーブ1のデータベースノードへのパスワードフリー認証を構成する (1)キーを生成する [root@slave1 ~]# ssh-keygen -t rsa (2)キーが生成されると、他の2つのデータベースに送信される。 [root@slave1 ~]# ssh-copy-id 20.0.0.10 [root@slave1 ~]# ssh-copy-id 20.0.0.12 (3)ログインテスト [root@slave1 ~]# ssh [email protected] 最終ログイン: 2020年12月29日火曜日 16:39:55 20.0.0.13から [root@master ~]# 終了 20.0.0.10 へのログアウト接続が閉じられました。 [root@slave1 ~]# ssh [email protected] 最終ログイン: 2020年10月27日火曜日 23:14:06 20.0.0.10から [root@slave2 ~]# 終了 20.0.0.12 へのログアウト接続が閉じられました。 4: スレーブ2のデータベースノードへのパスワードフリー認証を構成する (1)キーを生成する [root@slave2 ~]# ssh-keygen -t rsa (2)キーが生成されると、他の2つのデータベースに送信される。 [root@slave2 ~]# ssh-copy-id 20.0.0.10 [root@slave2 ~]# ssh-copy-id 20.0.0.11 (3)ログインテスト [root@slave2 ~]# ssh [email protected] 最終ログイン: 2020年12月29日火曜日 16:59:43 20.0.0.11から [root@master ~]# 終了 20.0.0.10 へのログアウト接続が閉じられました。 [root@slave2 ~]# ssh [email protected] 最終ログイン: 2020年12月29日火曜日 16:48:51 20.0.0.10から [root@slave1 ~]# 終了 20.0.0.11 へのログアウト接続が閉じられました。 6. MHAを構成する1: 関連するスクリプトをマネージャーノードの/usr/local/binディレクトリにコピーします。 (1)コピー [root@mha-manager ~]# cp -ra /root/mha4mysql-manager-0.57/samples/scripts/ /usr/local/bin/ (2)コピー後、4つの実行ファイルができる。 master_ip_failover #自動切り替え時の VIP 管理用スクリプト master_ip_online_change #オンライン切り替え時の VIP 管理 power_manager #障害発生後にホストをシャットダウンするスクリプト send_report #フェイルオーバー後にアラームを送信するスクリプト (3)上記の自動切り替えVIP管理スクリプトを/usr/local/binディレクトリにコピーします。ここで、スクリプトはVIPを管理するために使用されます。 [root@mha-manager スクリプト]# cp master_ip_failover /usr/local/bin/ [root@mha-manager スクリプト]# cd .. [root@mha-manager bin]# ll 総投与量 88 2: 自動切り替えスクリプトを変更する [root@mha-manager ~]# vi /usr/local/bin/master_ip_failover # すべての内容を削除 #!/usr/bin/env perl 厳密なものを使用します。 警告 FATAL => 'all' を使用します。 Getopt::Long を使用します。 私の $コマンド、$ssh_user、$orig_master_host、$orig_master_ip、 $orig_master_port、$new_master_host、$new_master_ip、$new_master_port ); ##################################コンテンツ セクションを追加########################################## 私の$vip = '20.0.0.200'; 私の$brdc = '20.0.0.255'; 私の$ifdev = 'ens33'; 私の$key = '1'; 私の$ssh_start_vip = "/sbin/ifconfig ens33:$key $vip"; 私の $ssh_stop_vip = "/sbin/ifconfig ens33:$key がダウンしています"; 私の$exit_code = 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"; } 3: MHAソフトウェアディレクトリを作成し、構成ファイルをコピーする [root@mha-manager ~]# mkdir /etc/mha [root@mha-manager ~]# cp mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/mha [root@mha-manager ~]# vi /etc/mha/app1.cnf [サーバーのデフォルト] マネージャーワークディレクトリ=/var/log/masterha/app1 マネージャログ=/var/log/masterha/app1/manager.log マスター_binlog_dir=/usr/local/mysql/data マスターIPフェイルオーバースクリプト=/usr/local/bin/マスターIPフェイルオーバー マスターIPオンライン変更スクリプト=/usr/local/bin/マスターIPオンライン変更 パスワード=マネージャー ユーザー=mha ping_interval=1 リモートワークディレクトリ=/tmp パスワードを123に変更 repl_user=myslave セカンダリチェックスクリプト = /usr/local/bin/masterha_secondary_check -s 20.0.0.11 -s 20.0.0.12 シャットダウンスクリプト="" ssh_user=ルート [サーバー1] ホスト名=20.0.0.10 ポート=3306 [サーバー2] ホスト名=20.0.0.11 ポート=3306 候補マスター=1 チェック_repl_delay=0 [サーバー3] ホスト名=20.0.0.12 ポート=3306 7. 健康チェック1: ssh パスワードレス認証をテストします。正常であれば正常に出力されます。 [root@mha-manager ~]# masterha_check_ssh --conf=<server_config_file> を設定する必要があります。 [root@mha-manager ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf 2020 年 12 月 29 日火曜日 20:19:16 - [警告] グローバル構成ファイル /etc/masterha_default.cnf が見つかりません。スキップします。 2020 年 12 月 29 日火曜日 20:19:16 - [info] /etc/mha/app1.cnf からアプリケーションのデフォルト設定を読み取っています。 2020 年 12 月 29 日火曜日 20:19:16 - [情報] /etc/mha/app1.cnf からサーバー構成を読み取っています。 2020 年 12 月 29 日火曜日 20:19:16 - [情報] SSH 接続テストを開始しています。 2020年12月29日火曜日 20:19:17 - [デバッグ] 2020 年 12 月 29 日火曜日 20:19:16 - [デバッグ] [email protected](20.0.0.10:22) から [email protected](20.0.0.11:22) に SSH 経由で接続しています。 2020年12月29日火曜日 20:19:16 - [デバッグ] 正常です。 2020 年 12 月 29 日火曜日 20:19:16 - [デバッグ] [email protected](20.0.0.10:22) から [email protected](20.0.0.12:22) に SSH 経由で接続しています。 2020年12月29日火曜日 20:19:17 - [デバッグ] 正常です。 2020年12月29日火曜日 20:19:18 - [デバッグ] 2020 年 12 月 29 日火曜日 20:19:17 - [デバッグ] [email protected](20.0.0.12:22) から [email protected](20.0.0.10:22) に SSH 経由で接続しています。 2020年12月29日火曜日 20:19:17 - [デバッグ] 正常です。 2020 年 12 月 29 日火曜日 20:19:17 - [デバッグ] [email protected](20.0.0.12:22) から [email protected](20.0.0.11:22) に SSH 経由で接続しています。 2020年12月29日火曜日 20:19:18 - [デバッグ] 正常です。 2020年12月29日火曜日 20:19:18 - [デバッグ] 2020 年 12 月 29 日火曜日 20:19:16 - [デバッグ] [email protected](20.0.0.11:22) から [email protected](20.0.0.10:22) に SSH 経由で接続しています。 2020年12月29日火曜日 20:19:17 - [デバッグ] 正常です。 2020 年 12 月 29 日火曜日 20:19:17 - [デバッグ] [email protected](20.0.0.11:22) から [email protected](20.0.0.12:22) に SSH 経由で接続しています。 2020年12月29日火曜日 20:19:17 - [デバッグ] 正常です。 2020 年 12 月 29 日火曜日 20:19:18 - [情報] すべての SSH 接続テストが正常に合格しました。 2: MySQL マスター/スレーブ接続をテストします。最後に、「MySQL レプリケーションの健全性は正常です」というメッセージが表示されます。 [root@mha-manager ~]# masterha_check_repl --conf=/etc/mha/app1.cnf 2020 年 12 月 29 日火曜日 20:30:29 - [警告] グローバル構成ファイル /etc/masterha_default.cnf が見つかりません。スキップします。 2020 年 12 月 29 日火曜日 20:30:29 - [info] /etc/mha/app1.cnf からアプリケーションのデフォルト構成を読み取っています。 2020 年 12 月 29 日火曜日 20:30:29 - [情報] /etc/mha/app1.cnf からサーバー構成を読み取っています。 2020 年 12 月 29 日火曜日 20:30:29 - [情報] MHA::MasterMonitor バージョン 0.57。 2020 年 12 月 29 日火曜日 20:30:30 - [情報] GTID フェイルオーバー モード = 0 2020年12月29日火曜日 20:30:30 - [情報] デッドサーバー: 2020年12月29日火曜日 20:30:30 - [情報] 稼働中のサーバー: 2020 年 12 月 29 日火曜日 20:30:30 - [情報] 20.0.0.10 (20.0.0.10:3306) 2020年12月29日火曜日 20:30:30 - [情報] 20.0.0.11(20.0.0.11:3306) 2020 年 12 月 29 日火曜日 20:30:30 - [情報] 20.0.0.12 (20.0.0.12:3306) 2020年12月29日火曜日 20:30:30 - [情報] 生きた奴隷: 2020 年 12 月 29 日火曜日 20:30:30 - [情報] 20.0.0.11(20.0.0.11:3306) バージョン = 5.6.36-log (スレーブ間の最も古いメジャー バージョン) log-bin: 有効 .......省略スクリプトのステータスを確認しています..OK 2020年12月29日火曜日 20:30:55 - [情報] OK。 2020 年 12 月 29 日火曜日 20:30:55 - [警告] Shutdown_script が定義されていません。 2020 年 12 月 29 日火曜日 20:30:55 - [情報] 終了コード 0 を取得しました (マスターは死んでいません)。 MySQL レプリケーションの健全性は正常です。 8: マスター1のVIPアドレスを表示する20.0.0.200が存在するか確認する このVIPアドレスは、マネージャーノードがMHAサービスを停止しても消えません。 mha を初めて起動すると、マスター データベースは VIP アドレスを自動的に生成しないため、手動で有効にする必要があります。 [root@master ~]# ifconfig ens33:1 20.0.0.200/24 アップ [root@master ~]# IPアドレス 2: ens33: <BROADCAST、MULTICAST、UP、LOWER_UP> mtu 1500 qdisc pfifo_fast 状態 UP qlen 1000 リンク/イーサ 00:0c:29:8d:e2:af brd ff:ff:ff:ff:ff:ff inet 20.0.0.10/24 brd 20.0.0.255 スコープ グローバル ens33 valid_lft 永久 preferred_lft 永久 inet 20.0.0.200/24 brd 20.0.0.255 スコープ グローバル セカンダリ ens33:1 valid_lft 永久 preferred_lft 永久 inet6 fe80::a6c1:f3d4:160:102a/64 スコープ リンク valid_lft 永久 preferred_lft 永久 9. MHAを起動してステータスを確認する[root@mha-manager ~]# nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 & [1] 57152 [root@mha-manager ~]# masterha_check_status --conf=/etc/mha/app1.cnf app1 (pid:57152) が実行中です(0:PING_OK)、マスター:20.0.0.10 障害シミュレーションと修復1. 故障シミュレーション1: マスターサーバーをシャットダウンする [root@master ~]# pkill mysqld 2: ログ情報を表示する [root@mha-manager ~]# cat /var/log/masterha/app1/manager.log master 20.0.0.10(20.0.0.10:3306) がダウンしています。 # 20.0.0.10 がダウンしています。詳細については、mha-manager:/var/log/masterha/app1/manager.log にある MHA マネージャー ログを確認してください。 自動(非対話型)フェイルオーバーを開始しました。 20.0.0.10(20.0.0.10:3306) のマスター IP アドレスが無効になりました 最新のスレーブ 20.0.0.11 (20.0.0.11:3306) には、リカバリ用のすべてのリレー ログがあります。 20.0.0.11(20.0.0.11:3306) を新しいマスターとして選択しました。# 20.0.0.11 がプライマリ サーバーになります 20.0.0.11(20.0.0.11:3306): OK: すべてのログの適用に成功しました。 20.0.0.11(20.0.0.11:3306): OK: マスター IP アドレスがアクティブ化されました。 20.0.0.12(20.0.0.12:3306): このホストには最新のリレー ログ イベントがあります。 最新のスレーブからのリレー diff ファイルの生成に成功しました。 3: 仮想アドレスを表示する 仮想アドレスが20.0.0.11に到達しました [root@slave1 ~]# IPアドレス 2: ens33: <BROADCAST、MULTICAST、UP、LOWER_UP> mtu 1500 qdisc pfifo_fast 状態 UP qlen 1000 リンク/イーサ 00:0c:29:49:77:39 brd ff:ff:ff:ff:ff:ff inet 20.0.0.11/24 brd 20.0.0.255 スコープ グローバル ens33 valid_lft 永久 preferred_lft 永久 inet 20.0.0.200/8 brd 20.255.255.255 スコープ グローバル ens33:1 valid_lft 永久 preferred_lft 永久 inet6 fe80::5cbb:1621:4281:3b24/64 スコープ リンク valid_lft 永久 preferred_lft 永久 4: マスタースレーブステータスを確認する マスターサーバーのバイナリファイルを表示する [root@slave1 ~]# mysql mysql> マスターステータスを表示します。 +-------------------+----------+--------------+------------------+------------------+ | ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+------------------+------------------+ | マスターbin.000003 | 120 | | | | +-------------------+----------+--------------+------------------+------------------+ セット内の 1 行 (0.00 秒) 2からステータスを表示 [root@slave2 ~]# mysql mysql> スレーブステータスを表示します\G; ************************** 1. 行 **************************** Slave_IO_State: マスターがイベントを送信するのを待機中 マスターホスト: 20.0.0.11 マスターユーザー: myslave マスターポート: 3306 接続再試行: 60 マスターログファイル: master-bin.000003 読み取りマスターログ位置: 120 リレーログファイル: リレーログbin.000002 リレーログ位置: 284 リレーマスターログファイル: master-bin.000003 スレーブIO実行中: はい スレーブSQL実行中: はい レプリケート_Do_DB: レプリケート_無視_DB: 2. トラブルシューティング1: ダウンデータベースを開く [root@master ~]# systemctl mysqldを起動します [root@master ~]# systemctl ステータス mysqld ● mysqld.service - LSB: MySQL の起動と停止 ロード済み: ロード済み (/etc/rc.d/init.d/mysqld; 不良; ベンダープリセット: 無効) アクティブ: 2020-12-29 21:50:03 CST からアクティブ (実行中)、25 秒前 ドキュメント: man:systemd-sysv-generator(8) プロセス: 977 ExecStart=/etc/rc.d/init.d/mysqld 開始 (コード=終了、ステータス=0/成功) Cグループ: /system.slice/mysqld.service ├─1026 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file... └─1358 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/m 2: ダウンしたデータベースでマスタースレーブレプリケーションを実行する マスタースレーブレプリケーション [ルート@マスター ~]#mysql mysql> マスターを master_host='20.0.0.11'、master_user='myslave'、master_password='123'、master_log_file='master-bin.000003'、master_log_pos=120 に変更します。 クエリは正常、影響を受けた行は 0 行、警告は 2 件 (0.01 秒) # マスター サーバーがダウンした後は、20.0.0.11 がマスター サーバーになります。mysql> start slave; クエリは正常、影響を受けた行は 0 行 (0.01 秒) ステータスを表示 mysql> スレーブステータスを表示します\G; ************************** 1. 行 **************************** Slave_IO_State: マスターがイベントを送信するのを待機中 マスターホスト: 20.0.0.11 マスターユーザー: myslave マスターポート: 3306 接続再試行: 60 マスターログファイル: master-bin.000003 読み取りマスターログ位置: 120 リレーログファイル:mysqld-relay-bin.000002 リレーログ位置: 284 リレーマスターログファイル: master-bin.000003 スレーブIO実行中: はい スレーブSQL実行中: はい レプリケート_Do_DB: レプリケート_無視_DB: 3: mha設定ファイルを変更する [root@mha-manager ~]# vi /etc/mha/app1.cnf セカンダリチェックスクリプト=/usr/local/bin/masterha_secondary_check -s 20.0.0.10 -s 20.0.0.12 # 20.0.0.11 はマスターサーバーなので、20.0.0.10 と 20.0.0.12 をスレーブサーバーとして追加する必要があります [server1] ホスト名=20.0.0.10 候補マスター=1 チェック_repl_delay=0 ポート=3306 [サーバー2] ホスト名=20.0.0.11 ポート=3306 # 20.0.0.10 がダウンしているため、server1 ファイルは自動的に削除されます。server1 を再度追加し、バックアッププライマリサーバーとして設定します。server2 を変更します 4: データベースに入り、再認証する [ルート@マスター ~]#mysql mysql> 'manager' によって識別される 'mha'@'master' に *.* のすべての権限を付与します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) mysql> 権限をフラッシュします。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) 5: mhaを再度起動する [root@mha-manager ~]# nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 & [1] 58927 [root@mha-manager ~]# masterha_check_status --conf=/etc/mha/app1.cnf app1 (pid:58927) が実行中(0:PING_OK)、マスター:20.0.0.11 6: ログを再度確認する [root@mha-manager ~]# cat /var/log/masterha/app1/manager.log ...... 2020 年 12 月 29 日火曜日 22:16:53 - [情報] 停止サーバー: # 停止したサービス2020 年 12 月 29 日火曜日 22:16:53 - [情報] 稼働サーバー: # 存続中のサービス2020 年 12 月 29 日火曜日 22:16:53 - [情報] 20.0.0.10(20.0.0.10:3306) 2020年12月29日火曜日 22:16:53 - [情報] 20.0.0.11(20.0.0.11:3306) 2020年12月29日火曜日 22:16:53 - [情報] 20.0.0.12 (20.0.0.12:3306) ....... 7: プライマリデータベースに書き込まれたデータを同期して表示する 他のデータベースは mysql> データベース ooo を作成します。 クエリは正常、1 行が影響を受けました (0.00 秒) mysql> データベースを表示します。 +--------------------+ | データベース | +--------------------+ | 情報スキーマ | |mysql | |おおおお| | パフォーマンススキーマ | | テスト | | テストデータベース | +--------------------+ セット内の 6 行 (0.00 秒) これで、MySQL で MHA アーキテクチャ デプロイメントを構築する手順に関するこの記事は終了です。MySQL で MHA アーキテクチャ デプロイメントを構築する方法に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: W3C チュートリアル (8): W3C XML スキーマのアクティビティ
最近何もすることがないのでCSSをいじっていますより良いアニメーションライブラリTweenMaxを見...
背景ブロックチェーン ログ モジュールで作業しているときに、コンテナーが実行されている場合は、ログ ...
目次MySQL 8 の隠しインデックス、降順インデックス、関数インデックス1. 隠しインデックス1....
コードをコピーコードは次のとおりです。 <!DOCTYPE HTML PUBLIC "...
1 ダウンロードして準備するまず、公式ウェブサイトからTomcatをダウンロードする必要があります。...
MySQL では、データベースはデータ ディレクトリ内のディレクトリに対応します。データベース内の各...
目次MySQLネイティブレプリケーションに基づくマスター-マスター同期ソリューションGaleraレプ...
Linux chmodコマンドを使用して、ターゲット ファイルにアクセス、読み取り、書き込み、または...
目次序文ネットワーク速度のフロントエンド判定原理のまとめ1. img を読み込むか Ajax リクエ...
目次1. 補足知識ポイント: 関数の暗黙的な変換2. 補足知識: call/apply を使って配列...
目次序文プロトタイプ継承アドバンテージ欠点コンストラクタの継承アドバンテージ欠点組み合わせ継承寄生的...
この記事では、主にリスト構造を使用して水平ナビゲーション構造を設定する 2 つの方法を紹介します。こ...
ページの公開名: #wrapper - ページの外側の端が全体のレイアウト幅を制御します#conta...
mysql コマンドを入力します: mysql -u+(ユーザー名) -p+(パスワード) mysq...
序文MySQLクエリはselectコマンドを使用し、limitとoffsetパラメータを使用して、指...