1. MHAの紹介1. MHAとは何ですか? MHA (Master High Availability) は、MySQL 高可用性環境におけるフェイルオーバーおよびマスタースレーブレプリケーションに最適なソフトウェアです。 2. MHAの構成MHA ノード (データ ノード) MHA マネージャー (管理ノード) 3. MHAの特徴
2. MySQL MHAをビルドする1. 実験的なアイデア:1. MHAアーキテクチャ 1) データベースのインストール 2.故障シミュレーション 1) メインデータベースに障害が発生する (II)実験手順MHA マネージャー ノード サーバー: CentOS7.4 (64 ビット) manager/192.168.126.10、MHA ノードとマネージャー コンポーネントをインストール マスター ノード サーバー: CentOS7.4 (64 ビット) mysql1/192.168.126.20、mysql5.7、MHA ノード コンポーネントをインストール スレーブ 1 ノード サーバー: CentOS7.4 (64 ビット) mysql2/192.168.126.30、mysql5.7、MHA ノード コンポーネントをインストール スレーブ 2 ノード サーバー: CentOS7.4 (64 ビット) mysql3/192.168.126.40、mysql5.7、MHA ノード コンポーネントをインストール 各マシンのファイアウォールを無効にする systemctl 停止 ファイアウォール systemctl ファイアウォールを無効にする 強制0を設定する 1. mysql15.7をインストールする マスター、スレーブ1、スレーブ2ノードにmysql5.7をインストールします(mysqlのインストールの詳細については、以前のブログ投稿を参照してください) 2. マスター、スレーブ1、スレーブ2ノードのホスト名を変更する ホスト名ctl ホスト名の設定 Mysql1 ホスト名ctl ホスト名の設定 Mysql2 ホスト名ctl ホスト名の設定 Mysql3 3. マスター、スレーブ1、スレーブ2ノードのMySQLメイン構成ファイル/etc/my.cnfを変更します。 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.マスター、スレーブ1、スレーブ2ノードに2つのソフトリンクを作成します。 : := mysql /usr/local/mysql/bin/mysql /usr/sbin/ を使います。 ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/ 5.マスター 1 台とスレーブ 2 台で MySQL を構成する(1)すべてのデータベースノードはmysqlによって承認されています mysql -uroot -p *.* のレプリケーション スレーブを 'myslave'@'192.168.126.%' (識別名 '123') に付与します。#スレーブ データベースの同期では、*.* のすべての権限を 'mha'@'192.168.126.%' (識別名 'manager') に付与します。#manager では、*.* のすべての権限を 'mha'@'Mysql1' (識別名 'manager') に付与します。#スレーブ ライブラリがホスト名を使用してマスター ライブラリに接続できないようにします。*.* のすべての権限を 'mha'@'Mysql2' (識別名 'manager') に付与します。 'manager' によって識別される 'mha'@'Mysql3' に *.* のすべての権限を付与します。 権限をフラッシュします。 (2)マスターノード上のバイナリファイルと同期ポイントを表示する (3)スレーブ1ノードとスレーブ2ノードで同期操作を実行する マスターをmaster_host='192.168.126.20'、master_user='myslave'、master_password='123'、master_log_file='master-bin.000001'、master_log_pos=1747に変更します。 スレーブを起動します。 (4)スレーブ1ノードとスレーブ2ノードでデータ同期結果を確認する スレーブステータスを表示\G // IO スレッドと SQL スレッドの両方が Yes であり、同期が正常であることを確認します。 スレーブIO実行中: はい スレーブSQL実行中: はい (5)両方のスレーブライブラリを読み取り専用モードに設定する必要があります。 グローバル read_only=1 を設定します。 6. 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 を選択する必要があります。 インストール パッケージ: ノードコンポーネントはすべてのサーバーにインストールする必要があります 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 作成 && インストール マネージャー コンポーネントがインストールされると、主に次のツールを含むいくつかのツールが /usr/local/bin の下に生成されます。
#ノード コンポーネントがインストールされると、/usr/local/bin の下にいくつかのスクリプトが生成されます (これらのツールは通常、MHAManager スクリプトによってトリガーされ、手動操作は必要ありません)。主なものは次のとおりです。 purge_relay_logs リレーログをクリアします(SQL スレッドをブロックしません) 7.すべてのサーバーでパスワードレス認証を構成する (1)マネージャーノード上のすべてのデータベースノードにパスワードフリー認証を設定する ssh-keygen -t rsa #Enterキーを押し続ける ssh-copy-id 192.168.126.20 sshコピーID 192.168.126.30 sshコピーID 192.168.126.40 (2)mysql1でデータベースノードmysql2とmysql3へのパスワードフリー認証を構成する ssh-keygen -t rsa sshコピーID 192.168.126.30 sshコピーID 192.168.126.40 (3)データベースノードmysql1とmysql3へのmysql2のパスワードフリー認証を構成する ssh-keygen -t rsa sshコピーID 192.168.126.20 sshコピーID 192.168.126.40 (4)mysql3でデータベースノードmysql1とmysql2へのパスワードフリー認証を構成する ssh-keygen -t rsa sshコピーID 192.168.126.20 sshコピーID 192.168.126.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.126.200'; #vipmy のアドレスを指定します $brdc = '192.168.126.255'; #vipmy のブロードキャスト アドレスを指定します $ifdev = 'ens33'; #vipmy にバインドされているネットワーク カードを指定します $key = '1'; #vipmy にバインドされている仮想ネットワーク カードのシリアル番号を指定します $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip"; #この変数の値が ifconfig ens33:1 192.168.126.200 であることを表します my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down"; #この変数値はifconfig ens33:1 192.168.126.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.126.30 -s 192.168.126.40 シャットダウンスクリプト="" ssh_user=ルート ユーザー=mha [サーバー1] ホスト名=192.168.126.20 ポート=3306 [サーバー2] 候補マスター=1 チェック_repl_delay=0 ホスト名=192.168.126.30 ポート=3306 [サーバー3] ホスト名=192.168.126.40 ポート=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.126.30 -s 192.168.126.40 #チェックするスレーブ サーバーの IP アドレスを指定します shutdown_script="" #障害発生後に障害のあるホストをシャットダウンするためのスクリプトを設定します (このスクリプトの主な機能は、ブレイン スプリットを防ぐためにホストをシャットダウンすることですが、ここでは使用しません) ssh_user=root #sshログインユーザー名を設定 user=mha #監視ユーザーrootを設定 [サーバー1] ホスト名=192.168.126.20 ポート=3306 [サーバー2] ホスト名=192.168.126.30 ポート=3306 候補マスター=1 #候補マスターに設定します。このパラメータを設定すると、マスターデータベースがクラスター内の最新のスレーブでなくても、マスタースレーブスイッチが発生した後にスレーブデータベースがマスターデータベースに昇格されます。 チェック_repl_delay=0 #デフォルトでは、スレーブがマスターより 100M 以上のリレー ログで遅れている場合、スレーブの回復に長い時間がかかるため、MHA はスレーブを新しいマスターとして選択しません。check_repl_delay=0 を設定すると、MHA は新しいマスターを選択するときにレプリケーションの遅延を無視するようにスイッチをトリガーします。このパラメータは、candidate_master=1 のホストに非常に役立ちます。候補マスターは、切り替え中に新しいマスターになる必要があるためです。 [サーバー3] ホスト名=192.168.126.40 ポート=3306 9.最初の構成では、マスターノードの仮想IPを手動で有効にする必要があります。 /sbin/ifconfig ens33:1 192.168.126.200/24 10.マネージャーノードで ssh パスワードレス認証をテストします。正常であれば、以下のように正常に出力されます。 masterha_check_ssh -conf=/etc/masterha/app1.cnf 11.マネージャー ノードで MySQL マスター スレーブ接続をテストします。MySQL レプリケーションの健全性に問題がないと表示されたら、正常です。下記の通りです。 masterha_check_repl -conf=/etc/masterha/app1.cnf 12.マネージャーノードで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 アドレスが構成ファイルから削除されることを意味します。 –ignore_last_failover: デフォルトでは、MHA が連続したダウンタイムを検出し、2 つのダウンタイム間の間隔が 8 時間未満の場合、フェイルオーバーは実行されません。この制限は、ピンポン効果を回避するためのものです。このパラメータは、最後の MHA トリガー スイッチによって生成されたファイルを無視することを意味します。デフォルトでは、MHA スイッチが発生した後、ディレクトリがログ、つまり上記で設定したログ app1.failover.complete ファイルに記録されます。次回の切り替え時にディレクトリにファイルが存在する場合、最初の切り替え後にファイルを削除しない限り、スイッチをトリガーすることはできません。便宜上、ここでは –ignore_last_failover に設定されています。 13. MHA ステータスを確認すると、現在のマスターが Mysql1 ノードであることがわかります。 masterha_check_status --conf=/etc/masterha/app1.cnf 14. MHA ログを確認すると、以下に示すように、現在のマスターが 192.168.126.20 であることがわかります。 cat /var/log/masterha/app1/manager.log | grep "現在のマスター" Mysql1 の VIP アドレス 192.168.126.200 が存在するかどうかを確認します。マネージャー ノードが MHA サービスを停止しても、この VIP アドレスは消えません。 ifconfig //マネージャー サービスをシャットダウンするには、次のコマンドを使用します。 masterha_stop --conf=/etc/masterha/app1.cnf または、プロセス ID を直接強制終了してシャットダウンすることもできます。 (III)故障シミュレーション#マネージャーノード上のログレコードを監視および観察する tail -f /var/log/masterha/app1/manager.log #マスターノードMysql1のmysqlサービスを停止します systemctl を停止します。 またはpkill -9 mysql #通常の自動切り替え後、MHA プロセスは終了します。 HMA は app1.cnf ファイルの内容を自動的に変更し、ダウンした mysql1 ノードを削除します。 mysql2がVIPを引き継ぐかどうかを確認する 候補マスター データベースのフェイルオーバーのアルゴリズム: トラブルシューティングの手順: 1. MySQLを修復する systemctl で mysqld を再起動します。 2.マスターとスレーブを修復する #現在のマスター サーバー上のバイナリ ファイルと同期ポイントを表示します。Mysql2 show master status; # 元のマスター サーバー mysql1 で同期操作を実行します。マスターを master_host='192.168.126.30'、master_user='myslave'、master_password='123'、master_log_file='master-bin.000001'、master_log_pos=1747 に変更します。 スレーブを起動します。 スレーブステータスを表示\G 3.マネージャーノード上の構成ファイル app1.cnf を変更します (障害を検出すると自動的に消えるので、このレコードを追加します) vim /etc/masterha/app1.cnf ...... セカンダリチェックスクリプト=/usr/local/bin/masterha_secondary_check -s 192.168.126.20 -s 192.168.126.40 ...... [サーバー1] ホスト名=192.168.126.30 ポート=3306 [サーバー2] 候補マスター=1 チェック_repl_delay=0 ホスト名=192.168.126.20 ポート=3306 [サーバー3] ホスト名=192.168.126.40 ポート=3306 4.マネージャーノードで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 & #中国語と英語の文字が互換性がなくエラーを報告する問題を解決する dos2unix /usr/local/bin/master_ip_failover これで、MySQL MHA の高可用性構成とフェイルオーバーの詳細な展開手順に関するこの記事は終了です。MySQL MHA の高可用性構成の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
Docker の基盤技術: Docker の基盤となる 2 つのコア テクノロジーは、名前空間とコ...
インターネット上で多くの関連チュートリアルを見てきましたが、インストール プロセスにはまだいくつかの...
目的nextTickの役割といくつかの簡単な使用シナリオを理解する文章その機能は何ですか?遅延コール...
1. 概要Promise オブジェクトは、ES6 で提案された非同期プログラミングの仕様です。非同期...
純粋な CSS で固定ヘッダーを実装するのが難しい主な理由は 2 つあります。まず、最大のシェアを持...
この記事では、JavaScriptでカルーセルを実装するための具体的なコードを参考までに紹介します。...
国内市場ではIE6~7のサポートに対する一定の需要がまだありますが、フロントエンド開発者として、私た...
1. mysqlbinlog: [エラー] 不明な変数 'default-character...
導入: springboot プロジェクトを実行する Docker の構成は実は非常にシンプルで、L...
説明 ソリューションVMware 15 仮想マシン ブリッジ モードではインターネットにアクセスでき...
少し前に、「ORACLE でコミットされていないトランザクションの SQL ステートメントを見つける...
1. スクリプトを動的に読み込むウェブサイトの需要が高まるにつれて、スクリプトの需要も徐々に増加しま...
この記事の例では、動的な時計を実装するためのJS + CSSの具体的なコードを参考までに共有していま...
1. 従来のLRUリンクリストについて簡単に説明するLRU:最も最近使われなかったものLRU リンク...
1 MVCCとは何かMVCC の正式名称は、マルチバージョン同時実行制御です。データベースへの同時ア...