mysql高可用性アーキテクチャmhaの1つsetup
os:centos 7.4 mysql: 5.7 mha: 0.58
MHA(Master High Availability)は現在、MySQLの高可用性の面で比較的成熟したソリューションであり、MySQLの高可用性環境でのフェイルオーバーと主従向上に優れた高可用性ソフトウェアです.
このソフトウェアは、MHA Manager(管理ノード)とMHAノード(データノード)の2つの部分から構成されています.
MHA Managerは、1台の独立したマシン上に複数のmaster-slaveクラスタを管理したり、1台のslaveノード上に配置したりすることができます.MHA Managerは、クラスタ内のマスターノードをタイミングよく検出します.マスターに障害が発生した場合、最新データのslaveを自動的に新しいマスターに昇格させ、他のすべてのslaveを新しいマスターに再指向することができます.フェイルオーバプロセス全体がアプリケーションに完全に透過的です.
MHA Nodeは各MySQLサーバ上で実行され、MHA Managerとタイミングよく情報をやり取りします.
MHAの自動フェイルオーバー中に、MHAはダウンタイムのプライマリ・サーバからバイナリ・ログを保存しようとし、データの損失を最小限に抑えることができますが、必ずしも可能ではありません.たとえば、プライマリ・サーバのハードウェア障害やsshアクセスができない場合、MHAはバイナリ・ログを保存できず、フェイルオーバのみで最新のデータが失われます.
MySQLの半同期レプリケーションを使用すると、データ損失のリスクを大幅に低減できます.MHAは半同期レプリケーションと組み合わせることができる.slaveが1つだけ最新のバイナリ・ログを受信している場合、MHAは最新のバイナリ・ログを他のすべてのslaveサーバに適用できるため、すべてのノードのデータ整合性を保証できます.
現在、MHAは主に1つのマスターマルチスレーブのアーキテクチャをサポートしており、MHAを構築するには、1つのレプリケーションクラスタに少なくとも3つのデータベースサーバが必要であり、1つのマスター2スレーブ、すなわち1つはmasterとして機能し、1つはスタンバイmasterとして機能し、もう1つはスレーブとして機能しなければならない.
3台の機械は比較的信頼できるクラスタである.
ip計画は以下の通りである.
osのssh無密ログイン
すべてのノードを操作する必要があります
mysql 5.7をインストール
詳しくは略す
mysql 5.7を初期化し、master slaveを構成します.
各ノードのbinlog-do-dbとreplicate-ignore-dbの設定は同じでなければなりません.この2つのパラメータは空で、設定されていません.
マスターパスワードの変更
masterモニタユーザの作成
masterレプリケーション・ユーザーの作成
masterはmysqldumpを使用して、innodbエンジンに--single-transactionを追加することでRRレベルのトランザクションをslave側にインポートします.
ここで、-master-data=2は、バックアップ時にmasterのBinlog位置とPositionを記録することを意味し、-single-transactionはコンシステンシスナップショットを取得することを意味し、-Rはバックアップストレージプロセスと関数を意味し、-triggresはバックアップトリガを意味し、-Aはすべてのライブラリをバックアップすることを意味する.
salveはread onlyに設定されており、ライブラリから外部に読み取りサービスを提供しているため、プロファイルに書き込まれていないだけで、いつでもslaveがmasterに昇格するためです.
これで、1 master、2 slaveが配置されました
mha nodeのインストール
node 2、node 3、node 4にmha nodeソフトウェアmha 4 mysql-node-0.58をそれぞれインストール
インストールが完了すると、次のファイルが存在します.
これらのファイルapplyを簡単に説明します.diff_relay_logsは、差異の中継ログイベントを識別し、その差異のイベントを他のslave filter_に適用するmysqlbinlog不要なROLLBACKイベントを除去(MHAはこのツールを使用しなくなった)purge_relay_logs中継ログの消去(SQLスレッドをブロックしない)save_binary_logs masterのバイナリログの保存とコピー
mha managerのインストール
Node 1ノードはmha 4 mysql-manager-0.58をインストールします.mha managerをインストールする前に、mha nodeをインストールし、上を参照してインストールを完了してから、次の操作を行う必要があります.
インストールが完了すると、次のファイルが存在します.
これらのファイルを簡単に説明します.
役に立つスクリプトを/usr/local/binにコピー
これらのファイルを簡単に説明します.
コンフィギュレーション
mha作業ディレクトリの作成
app1.cnfのいくつかの内容
mha managerノード
relay logのいくつかの内容
各slaveで実行し、relay logの自動設定をOFFにします
pure_relay_logsのいくつかの内容
各slaveでの操作
purge_relay_logsスクリプト削除中継ログはSQLスレッドをブロックしません.
けんさ
MHA MangerからすべてのMHAノードへのSSH接続を確認
最後の行を見ると楽しいです.
レプリケーション環境全体の確認
まずこのいくつかのパラメータを抹消してから,後で詳しく検討して実現する.
よく観察すると、warningが2つ出てきて、まず気にしない.
ここでは、一般的なエラーを検索します.https://www.cnblogs.com/polestar/p/5371080.html
mha managerの起動
managerの起動
manager statusの表示
manager logの表示
mha managerを閉じる
マネージャを閉じる
manager logの表示
終了ログが追加されます.
これでmysql mhaがインストールされても、後でmhaの使用についてblogを書き続けます.
参照先:https://github.com/yoshinorim/mha4mysql-manager/releases https://github.com/yoshinorim/mha4mysql-node/releases
https://github.com/yoshinorim/mha4mysql-manager/wiki https://github.com/yoshinorim/mha4mysql-manager/wiki/Parameters
https://github.com/yoshinorim/mha4mysql-manager https://github.com/yoshinorim/mha4mysql-node
https://code.google.com/p/mysql-master-ha/https://code.google.com/archive/p/mysql-master-ha/https://code.google.com/archive/p/mysql-master-ha/downloads
Google公式サイトのmhaの概要を説明します
mha 4 mysql-node-0.58のいくつかの出力
mha 4 mysql-manager-0.58のいくつかの出力
MHA(Master High Availability)は現在、MySQLの高可用性の面で比較的成熟したソリューションであり、MySQLの高可用性環境でのフェイルオーバーと主従向上に優れた高可用性ソフトウェアです.
このソフトウェアは、MHA Manager(管理ノード)とMHAノード(データノード)の2つの部分から構成されています.
MHA Managerは、1台の独立したマシン上に複数のmaster-slaveクラスタを管理したり、1台のslaveノード上に配置したりすることができます.MHA Managerは、クラスタ内のマスターノードをタイミングよく検出します.マスターに障害が発生した場合、最新データのslaveを自動的に新しいマスターに昇格させ、他のすべてのslaveを新しいマスターに再指向することができます.フェイルオーバプロセス全体がアプリケーションに完全に透過的です.
MHA Nodeは各MySQLサーバ上で実行され、MHA Managerとタイミングよく情報をやり取りします.
MHAの自動フェイルオーバー中に、MHAはダウンタイムのプライマリ・サーバからバイナリ・ログを保存しようとし、データの損失を最小限に抑えることができますが、必ずしも可能ではありません.たとえば、プライマリ・サーバのハードウェア障害やsshアクセスができない場合、MHAはバイナリ・ログを保存できず、フェイルオーバのみで最新のデータが失われます.
MySQLの半同期レプリケーションを使用すると、データ損失のリスクを大幅に低減できます.MHAは半同期レプリケーションと組み合わせることができる.slaveが1つだけ最新のバイナリ・ログを受信している場合、MHAは最新のバイナリ・ログを他のすべてのslaveサーバに適用できるため、すべてのノードのデータ整合性を保証できます.
現在、MHAは主に1つのマスターマルチスレーブのアーキテクチャをサポートしており、MHAを構築するには、1つのレプリケーションクラスタに少なくとも3つのデータベースサーバが必要であり、1つのマスター2スレーブ、すなわち1つはmasterとして機能し、1つはスタンバイmasterとして機能し、もう1つはスレーブとして機能しなければならない.
3台の機械は比較的信頼できるクラスタである.
ip計画は以下の通りである.
192.168.56.101 node1 (mha manager)
192.168.56.102 node2 (mysql master)
192.168.56.103 node3 (mysql master candicate)
192.168.56.104 node4 (mysql slave)
osのssh無密ログイン
すべてのノードを操作する必要があります
# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1;
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2;
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node3;
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node4;
mysql 5.7をインストール
# cd /tmp
# wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo
# wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
# rpm -ivh mysql80-community-release-el7-1.noarch.rpm
# yum clean all
# yum makecache
# yum install mysql-community-client \
mysql-community-common \
mysql-community-devel \
mysql-community-embedded \
mysql-community-embedded-compat \
mysql-community-embedded-devel \
mysql-community-libs \
mysql-community-libs-compat \
mysql-community-minimal-debuginfo \
mysql-community-server \
mysql-community-test
詳しくは略す
mysql 5.7を初期化し、master slaveを構成します.
各ノードのbinlog-do-dbとreplicate-ignore-dbの設定は同じでなければなりません.この2つのパラメータは空で、設定されていません.
マスターパスワードの変更
mysql> set password for 'root'@'localhost'= password('1qaz@WSX');
masterモニタユーザの作成
mysql> create user 'mha_mon'@'192.168.56.%' identified by '2wsx3edc';
mysql> grant all privileges on *.* to 'mha_mon'@'192.168.56.%';
mysql> flush privileges;
masterレプリケーション・ユーザーの作成
mysql> create user 'repl'@'192.168.56.%' identified by '2wsx3edc';
mysql> grant replication slave on *.* to 'repl'@'192.168.56.%';
mysql> flush privileges;
masterはmysqldumpを使用して、innodbエンジンに--single-transactionを追加することでRRレベルのトランザクションをslave側にインポートします.
# mysqldump -uroot -p --master-data=2 --single-transaction -R --triggers -A > mysql_all.sql
ここで、-master-data=2は、バックアップ時にmasterのBinlog位置とPositionを記録することを意味し、-single-transactionはコンシステンシスナップショットを取得することを意味し、-Rはバックアップストレージプロセスと関数を意味し、-triggresはバックアップトリガを意味し、-Aはすべてのライブラリをバックアップすることを意味する.
mysql> change master to
master_host='192.168.56.102',
master_port=3306,
master_user='repl',
master_password='2wsx3edc',
master_log_file='mysql-bin.000005',
master_log_pos=1099;
mysql> start slave;
mysql> stow slave status\G
salveはread onlyに設定されており、ライブラリから外部に読み取りサービスを提供しているため、プロファイルに書き込まれていないだけで、いつでもslaveがmasterに昇格するためです.
mysql> set global read_only=1;
これで、1 master、2 slaveが配置されました
mha nodeのインストール
node 2、node 3、node 4にmha nodeソフトウェアmha 4 mysql-node-0.58をそれぞれインストール
# yum install perl-CPAN perl-DBD-MySQL perl-Config-Tiny \
perl-Email-Date-Format perl-Log-Dispatch perl-Mail-Sender \
perl-Mail-Sendmail perl-MIME-Lite perl-MIME-Types \
perl-Parallel-ForkManager perl-Params-Validate perl-Time-HiRes
# cd /tmp/mha
# wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58.tar.gz
# tar -zxvf mha4mysql-node-0.58.tar.gz
# cd mha4mysql-node-0.58
# perl Makefile.PL
# make
# make install
インストールが完了すると、次のファイルが存在します.
# cd /usr/local/bin/
# ls -l
total 48
-r-xr-xr-x 1 root root 17639 Aug 6 13:32 apply_diff_relay_logs
-r-xr-xr-x 1 root root 4807 Aug 6 13:32 filter_mysqlbinlog
-r-xr-xr-x 1 root root 8337 Aug 6 13:32 purge_relay_logs
-r-xr-xr-x 1 root root 7525 Aug 6 13:32 save_binary_logs
これらのファイルapplyを簡単に説明します.diff_relay_logsは、差異の中継ログイベントを識別し、その差異のイベントを他のslave filter_に適用するmysqlbinlog不要なROLLBACKイベントを除去(MHAはこのツールを使用しなくなった)purge_relay_logs中継ログの消去(SQLスレッドをブロックしない)save_binary_logs masterのバイナリログの保存とコピー
mha managerのインストール
Node 1ノードはmha 4 mysql-manager-0.58をインストールします.mha managerをインストールする前に、mha nodeをインストールし、上を参照してインストールを完了してから、次の操作を行う必要があります.
# cd /tmp/mha
# wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58.tar.gz
# tar -zxvf mha4mysql-manager-0.58.tar.gz
# cd mha4mysql-manager-0.58
# perl Makefile.PL
# make
# make install
インストールが完了すると、次のファイルが存在します.
# cd /usr/local/bin
# ls -l |grep -i master
-r-xr-xr-x 1 root root 1995 Aug 6 14:28 masterha_check_repl
-r-xr-xr-x 1 root root 1779 Aug 6 14:28 masterha_check_ssh
-r-xr-xr-x 1 root root 1865 Aug 6 14:28 masterha_check_status
-r-xr-xr-x 1 root root 3201 Aug 6 14:28 masterha_conf_host
-r-xr-xr-x 1 root root 2517 Aug 6 14:28 masterha_manager
-r-xr-xr-x 1 root root 2165 Aug 6 14:28 masterha_master_monitor
-r-xr-xr-x 1 root root 2373 Aug 6 14:28 masterha_master_switch
-r-xr-xr-x 1 root root 5172 Aug 6 14:28 masterha_secondary_check
-r-xr-xr-x 1 root root 1739 Aug 6 14:28 masterha_stop
これらのファイルを簡単に説明します.
masterha_check_repl MySQL
masterha_check_ssh MHA SSH
masterha_check_status MHA
masterha_conf_host server
masterha_manger MHA
masterha_master_monitor master
masterha_master_switch ( )
役に立つスクリプトを/usr/local/binにコピー
# cd /tmp/mha/mha4mysql-manager-0.58/samples/scripts
# ls -l
total 32
-rwxr-xr-x 1 peiyb peiyb 3648 Mar 23 05:53 master_ip_failover
-rwxr-xr-x 1 peiyb peiyb 9870 Mar 23 05:53 master_ip_online_change
-rwxr-xr-x 1 peiyb peiyb 11867 Mar 23 05:53 power_manager
-rwxr-xr-x 1 peiyb peiyb 1360 Mar 23 05:53 send_report
# cp ./* /usr/local/bin
これらのファイルを簡単に説明します.
master_ip_failover vip ,
master_ip_online_change vip ,
power_manager ,
send_report ,
コンフィギュレーション
mha作業ディレクトリの作成
# mkdir -p /etc/masterha
# cp /tmp/mha/mha4mysql-manager-0.58/samples/conf/* /etc/masterha/
app1.cnfのいくつかの内容
mha managerノード
# vi /etc/masterha/app1.cnf
[server default]
#manager
manager_workdir=/etc/masterha/app1
#manager
manager_log=/var/log/masterha/app1-manager.log
#master binlog , MHA master
master_binlog_dir=/var/lib/mysql
# failover
master_ip_failover_script= /usr/local/bin/master_ip_failover
#
master_ip_online_change_script= /usr/local/bin/master_ip_online_change
#mysql
password=2wsx3edc
#mysql
user=mha_mon
# , ping , 3 , railover
ping_interval=5
# mysql binlog
remote_workdir=/tmp
#mysql
repl_password=2wsx3edc
#mysql
repl_user=repl
#
report_script=/usr/local/send_report
#MHA node2 ,MHA Manager node3 node2
secondary_check_script=/usr/local/bin/masterha_secondary_check -s node3 -s node2
#
shutdown_script=""
#ssh , ssh
ssh_user=root
[server1]
#master
hostname=192.168.56.102
port=3306
[server2]
#candidate master
hostname=192.168.56.103
port=3306
# master, , , slave
candidate_master=1
# slave master 100M relay logs ,MHA slave master,
# slave , check_repl_delay=0,MHA master ,
# candidate_master=1 , master
check_repl_delay=0
[server3]
#slave
hostname=192.168.56.104
port=3306
relay logのいくつかの内容
各slaveで実行し、relay logの自動設定をOFFにします
mysql> set global relay_log_purge=0;
pure_relay_logsのいくつかの内容
各slaveでの操作
# vi /usr/local/bin/purge_relay_log.sh
#!/bin/bash
user=root
passwd=1qaz@WSX
port=3306
log_dir='/var/log/masterha'
work_dir='/var/lib'
purge='/usr/local/bin/purge_relay_logs'
if [ ! -d $log_dir ]
then
mkdir $log_dir -p
fi
$purge --user=$user --password=$passwd --disable_relay_log_purge --port=$port --workdir=$work_dir >> $log_dir/purge_relay_logs1.log 2>&1
# crontab -l
0 5 * * * /bin/bash /usr/local/bin/purge_relay_log.sh
purge_relay_logsスクリプト削除中継ログはSQLスレッドをブロックしません.
けんさ
MHA MangerからすべてのMHAノードへのSSH接続を確認
# masterha_check_ssh --conf=/etc/masterha/app1.cnf
Mon Aug 6 19:00:29 2018 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Mon Aug 6 19:00:29 2018 - [info] Reading application default configuration from /etc/masterha/app1.cnf..
Mon Aug 6 19:00:29 2018 - [info] Reading server configuration from /etc/masterha/app1.cnf..
Mon Aug 6 19:00:29 2018 - [info] Starting SSH connection tests..
Mon Aug 6 19:00:30 2018 - [debug]
Mon Aug 6 19:00:29 2018 - [debug] Connecting via SSH from [email protected](192.168.56.102:22) to [email protected](192.168.56.103:22)..
Mon Aug 6 19:00:29 2018 - [debug] ok.
Mon Aug 6 19:00:29 2018 - [debug] Connecting via SSH from [email protected](192.168.56.102:22) to [email protected](192.168.56.104:22)..
Mon Aug 6 19:00:29 2018 - [debug] ok.
Mon Aug 6 19:00:30 2018 - [debug]
Mon Aug 6 19:00:29 2018 - [debug] Connecting via SSH from [email protected](192.168.56.103:22) to [email protected](192.168.56.102:22)..
Mon Aug 6 19:00:29 2018 - [debug] ok.
Mon Aug 6 19:00:29 2018 - [debug] Connecting via SSH from [email protected](192.168.56.103:22) to [email protected](192.168.56.104:22)..
Mon Aug 6 19:00:30 2018 - [debug] ok.
Mon Aug 6 19:00:31 2018 - [debug]
Mon Aug 6 19:00:30 2018 - [debug] Connecting via SSH from [email protected](192.168.56.104:22) to [email protected](192.168.56.102:22)..
Mon Aug 6 19:00:30 2018 - [debug] ok.
Mon Aug 6 19:00:30 2018 - [debug] Connecting via SSH from [email protected](192.168.56.104:22) to [email protected](192.168.56.103:22)..
Mon Aug 6 19:00:30 2018 - [debug] ok.
Mon Aug 6 19:00:31 2018 - [info] All SSH connection tests passed successfully.
最後の行を見ると楽しいです.
レプリケーション環境全体の確認
まずこのいくつかのパラメータを抹消してから,後で詳しく検討して実現する.
# vi /etc/masterha/app1.cnf
#master_ip_failover_script= /usr/local/bin/master_ip_failover
#master_ip_online_change_script= /usr/local/bin/master_ip_online_change
#report_script=/usr/local/send_report
# masterha_check_repl --conf=/etc/masterha/app1.cnf
Mon Aug 6 22:34:07 2018 - [info] Reading default configuration from /etc/masterha_default.cnf..
Mon Aug 6 22:34:07 2018 - [info] Reading application default configuration from /etc/masterha/app1.cnf..
Mon Aug 6 22:34:07 2018 - [info] Reading server configuration from /etc/masterha/app1.cnf..
Mon Aug 6 22:34:07 2018 - [info] MHA::MasterMonitor version 0.58.
Mon Aug 6 22:34:08 2018 - [info] GTID failover mode = 0
Mon Aug 6 22:34:08 2018 - [info] Dead Servers:
Mon Aug 6 22:34:08 2018 - [info] Alive Servers:
Mon Aug 6 22:34:08 2018 - [info] 192.168.56.102(192.168.56.102:3306)
Mon Aug 6 22:34:08 2018 - [info] 192.168.56.103(192.168.56.103:3306)
Mon Aug 6 22:34:08 2018 - [info] 192.168.56.104(192.168.56.104:3306)
Mon Aug 6 22:34:08 2018 - [info] Alive Slaves:
Mon Aug 6 22:34:08 2018 - [info] 192.168.56.103(192.168.56.103:3306) Version=5.7.22-log (oldest major version between slaves) log-bin:enabled
Mon Aug 6 22:34:08 2018 - [info] Replicating from 192.168.56.102(192.168.56.102:3306)
Mon Aug 6 22:34:08 2018 - [info] 192.168.56.104(192.168.56.104:3306) Version=5.7.23-log (oldest major version between slaves) log-bin:enabled
Mon Aug 6 22:34:08 2018 - [info] Replicating from 192.168.56.102(192.168.56.102:3306)
Mon Aug 6 22:34:08 2018 - [info] Current Alive Master: 192.168.56.102(192.168.56.102:3306)
Mon Aug 6 22:34:08 2018 - [info] Checking slave configurations..
Mon Aug 6 22:34:08 2018 - [info] Checking replication filtering settings..
Mon Aug 6 22:34:08 2018 - [info] binlog_do_db= , binlog_ignore_db=
Mon Aug 6 22:34:08 2018 - [info] Replication filtering check ok.
Mon Aug 6 22:34:08 2018 - [info] GTID (with auto-pos) is not supported
Mon Aug 6 22:34:08 2018 - [info] Starting SSH connection tests..
Mon Aug 6 22:34:10 2018 - [info] All SSH connection tests passed successfully.
Mon Aug 6 22:34:10 2018 - [info] Checking MHA Node version..
Mon Aug 6 22:34:11 2018 - [info] Version check ok.
Mon Aug 6 22:34:11 2018 - [info] Checking SSH publickey authentication settings on the current master..
Mon Aug 6 22:34:11 2018 - [info] HealthCheck: SSH to 192.168.56.102 is reachable.
Mon Aug 6 22:34:11 2018 - [info] Master MHA Node version is 0.58.
Mon Aug 6 22:34:11 2018 - [info] Checking recovery script configurations on 192.168.56.102(192.168.56.102:3306)..
Mon Aug 6 22:34:11 2018 - [info] Executing command: save_binary_logs --command=test --start_pos=4 --binlog_dir=/var/lib/mysql --output_file=/tmp/save_binary_logs_test --manager_version=0.58 --start_file=mysql-bin.000005
Mon Aug 6 22:34:11 2018 - [info] Connecting to [email protected](192.168.56.102:22)..
Creating /tmp if not exists.. ok.
Checking output directory is accessible or not..
ok.
Binlog found at /var/lib/mysql, up to mysql-bin.000005
Mon Aug 6 22:34:11 2018 - [info] Binlog setting check done.
Mon Aug 6 22:34:11 2018 - [info] Checking SSH publickey authentication and checking recovery script configurations on all alive slave servers..
Mon Aug 6 22:34:11 2018 - [info] Executing command : apply_diff_relay_logs --command=test --slave_user='mha_mon' --slave_host=192.168.56.103 --slave_ip=192.168.56.103 --slave_port=3306 --workdir=/tmp --target_version=5.7.22-log --manager_version=0.58 --relay_log_info=/var/lib/mysql/relay-log.info --relay_dir=/var/lib/mysql/ --slave_pass=xxx
Mon Aug 6 22:34:11 2018 - [info] Connecting to [email protected](192.168.56.103:22)..
Checking slave recovery environment settings..
Opening /var/lib/mysql/relay-log.info ... ok.
Relay log found at /var/lib/mysql, up to node3-relay-bin.000002
Temporary relay log file is /var/lib/mysql/node3-relay-bin.000002
Checking if super_read_only is defined and turned on.. not present or turned off, ignoring.
Testing mysql connection and privileges..
mysql: [Warning] Using a password on the command line interface can be insecure.
done.
Testing mysqlbinlog output.. done.
Cleaning up test file(s).. done.
Mon Aug 6 22:34:12 2018 - [info] Executing command : apply_diff_relay_logs --command=test --slave_user='mha_mon' --slave_host=192.168.56.104 --slave_ip=192.168.56.104 --slave_port=3306 --workdir=/tmp --target_version=5.7.23-log --manager_version=0.58 --relay_log_info=/var/lib/mysql/relay-log.info --relay_dir=/var/lib/mysql/ --slave_pass=xxx
Mon Aug 6 22:34:12 2018 - [info] Connecting to [email protected](192.168.56.104:22)..
Checking slave recovery environment settings..
Opening /var/lib/mysql/relay-log.info ... ok.
Relay log found at /var/lib/mysql, up to node4-relay-bin.000005
Temporary relay log file is /var/lib/mysql/node4-relay-bin.000005
Checking if super_read_only is defined and turned on.. not present or turned off, ignoring.
Testing mysql connection and privileges..
mysql: [Warning] Using a password on the command line interface can be insecure.
done.
Testing mysqlbinlog output.. done.
Cleaning up test file(s).. done.
Mon Aug 6 22:34:12 2018 - [info] Slaves settings check done.
Mon Aug 6 22:34:12 2018 - [info]
192.168.56.102(192.168.56.102:3306) (current master)
+--192.168.56.103(192.168.56.103:3306)
+--192.168.56.104(192.168.56.104:3306)
Mon Aug 6 22:34:12 2018 - [info] Checking replication health on 192.168.56.103..
Mon Aug 6 22:34:12 2018 - [info] ok.
Mon Aug 6 22:34:12 2018 - [info] Checking replication health on 192.168.56.104..
Mon Aug 6 22:34:12 2018 - [info] ok.
Mon Aug 6 22:34:12 2018 - [warning] master_ip_failover_script is not defined.
Mon Aug 6 22:34:12 2018 - [warning] shutdown_script is not defined.
Mon Aug 6 22:34:12 2018 - [info] Got exit code 0 (Not master dead).
MySQL Replication Health is OK.
よく観察すると、warningが2つ出てきて、まず気にしない.
Mon Aug 6 22:37:53 2018 - [warning] master_ip_failover_script is not defined.
Mon Aug 6 22:37:53 2018 - [warning] shutdown_script is not defined.
ここでは、一般的なエラーを検索します.https://www.cnblogs.com/polestar/p/5371080.html
mha managerの起動
managerの起動
# 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 &
manager statusの表示
# masterha_check_status --conf=/etc/masterha/app1.cnf
app1 (pid:17385) is running(0:PING_OK), master:192.168.56.102
manager logの表示
# tail -n 1000 -f /var/log/masterha/app1-manager.log
Mon Aug 6 22:45:38 2018 - [info] Reading default configuration from /etc/masterha_default.cnf..
Mon Aug 6 22:45:38 2018 - [info] Reading application default configuration from /etc/masterha/app1.cnf..
Mon Aug 6 22:45:38 2018 - [info] Reading server configuration from /etc/masterha/app1.cnf..
Mon Aug 6 22:45:38 2018 - [info] MHA::MasterMonitor version 0.58.
Mon Aug 6 22:45:39 2018 - [info] GTID failover mode = 0
Mon Aug 6 22:45:39 2018 - [info] Dead Servers:
Mon Aug 6 22:45:39 2018 - [info] Alive Servers:
Mon Aug 6 22:45:39 2018 - [info] 192.168.56.102(192.168.56.102:3306)
Mon Aug 6 22:45:39 2018 - [info] 192.168.56.103(192.168.56.103:3306)
Mon Aug 6 22:45:39 2018 - [info] 192.168.56.104(192.168.56.104:3306)
Mon Aug 6 22:45:39 2018 - [info] Alive Slaves:
Mon Aug 6 22:45:39 2018 - [info] 192.168.56.103(192.168.56.103:3306) Version=5.7.22-log (oldest major version between slaves) log-bin:enabled
Mon Aug 6 22:45:39 2018 - [info] Replicating from 192.168.56.102(192.168.56.102:3306)
Mon Aug 6 22:45:39 2018 - [info] 192.168.56.104(192.168.56.104:3306) Version=5.7.23-log (oldest major version between slaves) log-bin:enabled
Mon Aug 6 22:45:39 2018 - [info] Replicating from 192.168.56.102(192.168.56.102:3306)
Mon Aug 6 22:45:39 2018 - [info] Current Alive Master: 192.168.56.102(192.168.56.102:3306)
Mon Aug 6 22:45:39 2018 - [info] Checking slave configurations..
Mon Aug 6 22:45:39 2018 - [info] Checking replication filtering settings..
Mon Aug 6 22:45:39 2018 - [info] binlog_do_db= , binlog_ignore_db=
Mon Aug 6 22:45:39 2018 - [info] Replication filtering check ok.
Mon Aug 6 22:45:39 2018 - [info] GTID (with auto-pos) is not supported
Mon Aug 6 22:45:39 2018 - [info] Starting SSH connection tests..
Mon Aug 6 22:45:42 2018 - [info] All SSH connection tests passed successfully.
Mon Aug 6 22:45:42 2018 - [info] Checking MHA Node version..
Mon Aug 6 22:45:42 2018 - [info] Version check ok.
Mon Aug 6 22:45:42 2018 - [info] Checking SSH publickey authentication settings on the current master..
Mon Aug 6 22:45:42 2018 - [info] HealthCheck: SSH to 192.168.56.102 is reachable.
Mon Aug 6 22:45:43 2018 - [info] Master MHA Node version is 0.58.
Mon Aug 6 22:45:43 2018 - [info] Checking recovery script configurations on 192.168.56.102(192.168.56.102:3306)..
Mon Aug 6 22:45:43 2018 - [info] Executing command: save_binary_logs --command=test --start_pos=4 --binlog_dir=/var/lib/mysql --output_file=/tmp/save_binary_logs_test --manager_version=0.58 --start_file=mysql-bin.000005
Mon Aug 6 22:45:43 2018 - [info] Connecting to [email protected](192.168.56.102:22)..
Creating /tmp if not exists.. ok.
Checking output directory is accessible or not..
ok.
Binlog found at /var/lib/mysql, up to mysql-bin.000005
Mon Aug 6 22:45:43 2018 - [info] Binlog setting check done.
Mon Aug 6 22:45:43 2018 - [info] Checking SSH publickey authentication and checking recovery script configurations on all alive slave servers..
Mon Aug 6 22:45:43 2018 - [info] Executing command : apply_diff_relay_logs --command=test --slave_user='mha_mon' --slave_host=192.168.56.103 --slave_ip=192.168.56.103 --slave_port=3306 --workdir=/tmp --target_version=5.7.22-log --manager_version=0.58 --relay_log_info=/var/lib/mysql/relay-log.info --relay_dir=/var/lib/mysql/ --slave_pass=xxx
Mon Aug 6 22:45:43 2018 - [info] Connecting to [email protected](192.168.56.103:22)..
Checking slave recovery environment settings..
Opening /var/lib/mysql/relay-log.info ... ok.
Relay log found at /var/lib/mysql, up to node3-relay-bin.000002
Temporary relay log file is /var/lib/mysql/node3-relay-bin.000002
Checking if super_read_only is defined and turned on.. not present or turned off, ignoring.
Testing mysql connection and privileges..
mysql: [Warning] Using a password on the command line interface can be insecure.
done.
Testing mysqlbinlog output.. done.
Cleaning up test file(s).. done.
Mon Aug 6 22:45:43 2018 - [info] Executing command : apply_diff_relay_logs --command=test --slave_user='mha_mon' --slave_host=192.168.56.104 --slave_ip=192.168.56.104 --slave_port=3306 --workdir=/tmp --target_version=5.7.23-log --manager_version=0.58 --relay_log_info=/var/lib/mysql/relay-log.info --relay_dir=/var/lib/mysql/ --slave_pass=xxx
Mon Aug 6 22:45:43 2018 - [info] Connecting to [email protected](192.168.56.104:22)..
Checking slave recovery environment settings..
Opening /var/lib/mysql/relay-log.info ... ok.
Relay log found at /var/lib/mysql, up to node4-relay-bin.000005
Temporary relay log file is /var/lib/mysql/node4-relay-bin.000005
Checking if super_read_only is defined and turned on.. not present or turned off, ignoring.
Testing mysql connection and privileges..
mysql: [Warning] Using a password on the command line interface can be insecure.
done.
Testing mysqlbinlog output.. done.
Cleaning up test file(s).. done.
Mon Aug 6 22:45:44 2018 - [info] Slaves settings check done.
Mon Aug 6 22:45:44 2018 - [info]
192.168.56.102(192.168.56.102:3306) (current master)
+--192.168.56.103(192.168.56.103:3306)
+--192.168.56.104(192.168.56.104:3306)
Mon Aug 6 22:45:44 2018 - [warning] master_ip_failover_script is not defined.
Mon Aug 6 22:45:44 2018 - [warning] shutdown_script is not defined.
Mon Aug 6 22:45:44 2018 - [info] Set master ping interval 5 seconds.
Mon Aug 6 22:45:44 2018 - [info] Set secondary check script: /usr/local/bin/masterha_secondary_check -s node3 -s node2
Mon Aug 6 22:45:44 2018 - [info] Starting ping health check on 192.168.56.102(192.168.56.102:3306)..
Mon Aug 6 22:45:44 2018 - [info] Ping(SELECT) succeeded, waiting until MySQL doesn't respond..
mha managerを閉じる
マネージャを閉じる
# masterha_stop --conf=/etc/masterha/app1.cnf
Stopped app1 successfully.
manager logの表示
# tail -n 1000 -f /var/log/masterha/app1-manager.log
Mon Aug 6 22:52:54 2018 - [info] Got terminate signal. Exit.
終了ログが追加されます.
これでmysql mhaがインストールされても、後でmhaの使用についてblogを書き続けます.
参照先:https://github.com/yoshinorim/mha4mysql-manager/releases https://github.com/yoshinorim/mha4mysql-node/releases
https://github.com/yoshinorim/mha4mysql-manager/wiki https://github.com/yoshinorim/mha4mysql-manager/wiki/Parameters
https://github.com/yoshinorim/mha4mysql-manager https://github.com/yoshinorim/mha4mysql-node
https://code.google.com/p/mysql-master-ha/https://code.google.com/archive/p/mysql-master-ha/https://code.google.com/archive/p/mysql-master-ha/downloads
Google公式サイトのmhaの概要を説明します
MHA for MySQL: Master High Availability Manager and tools for MySQL
A primary objective of MHA is automating master failover and slave promotion within short (usually 10-30 seconds) downtime, without suffering from replication consistency problems, without spending money for lots of new servers, without performance penalty, without complexity (easy-to-install), and without changing existing deployments.
MHA also provides a way for scheduled online master switch: changing currently running master to a new master safely, within a few seconds (0.5-2 seconds) of downtime (blocking writes only).
MHA provides the following functionality, and can be useful in many deployments where requirements such as high availability, data integrity, almost non-stop master maintenance are desired. * Automated master monitoring and failover MHA has a functionality to monitor MySQL master in an existing replication environment, detecting master failure, and doing master failover automatically. Even though some of slaves have not received the latest relay log events, MHA automatically identifies differential relay log events from the latest slave, and applies differential events to other slaves. So all slaves can be consistent. MHA normally can do failover in seconds (9-12 seconds to detect master failure, optionally 7-10 seconds to power off the master machine to avoid split brain, a few seconds for applying differential relay logs to the new master, so total downtime is normally 10-30 seconds). In addition, you can define a specific slave as a candidate master (setting priorities) in a configuration file. Since MHA fixes consistencies between slaves, you can promote any slave to a new master and consistency problems (which might cause sudden replication failure) will not happen. * Interactive (manual) Master Failover You can also use MHA for just failover, not for monitoring master. You can use MHA for master failover interactively. * Non-interactive master failover Non-interactive master failover (not monitoring master, but doing failover automatically) is also supported. This feature is useful especially when you have already used a software that monitors MySQL master. For example, you can use Pacemaker(Heartbeat) for detecting master failure and virtual ip address takeover, and use MHA for master failover and slave promotion. * Online switching master to a different host In many cases, it is necessary to migrate an existing master to a different machine (i.e. the current master has H/W problems on RAID controller or RAM, you want to replace with faster machine, etc). This is not a master crash, but scheduled master maintenance is needed to do that. Scheduled master maintenance causes downtime (at least you can not write master) so should be done as quickly as possible. On the other hand, you should block/kill current running sessions very carefully because consistency problems between different masters might happen (i.e "updating master1, updating master 2, committing master1, getting error on committing master 2" will result in data inconsistency). Both fast master switch and graceful blocking writes are required. MHA provides a way to do that. You can switch master gracefully within 0.5-2 seconds of writer block. In many cases 0.5-2 seconds of writer downtime is acceptable and you can switch master even without allocating scheduled maintenance window. This means you can take actions such as upgrading to higher versions, faster machine, etc much more easily.
mha 4 mysql-node-0.58のいくつかの出力
[root@node4 mha4mysql-node-0.58]# perl Makefile.PL
*** Module::AutoInstall version 1.06
*** Checking for Perl dependencies...
[Core Features]
- DBI ...loaded. (1.627)
- DBD::mysql ...loaded. (4.023)
*** Module::AutoInstall configuration finished.
Checking if your kit is complete...
Looks good
Writing Makefile for mha4mysql::node
[root@node4 mha4mysql-node-0.58]# make
cp lib/MHA/BinlogManager.pm blib/lib/MHA/BinlogManager.pm
cp lib/MHA/BinlogPosFindManager.pm blib/lib/MHA/BinlogPosFindManager.pm
cp lib/MHA/BinlogPosFinderXid.pm blib/lib/MHA/BinlogPosFinderXid.pm
cp lib/MHA/BinlogHeaderParser.pm blib/lib/MHA/BinlogHeaderParser.pm
cp lib/MHA/BinlogPosFinder.pm blib/lib/MHA/BinlogPosFinder.pm
cp lib/MHA/BinlogPosFinderElp.pm blib/lib/MHA/BinlogPosFinderElp.pm
cp lib/MHA/NodeUtil.pm blib/lib/MHA/NodeUtil.pm
cp lib/MHA/SlaveUtil.pm blib/lib/MHA/SlaveUtil.pm
cp lib/MHA/NodeConst.pm blib/lib/MHA/NodeConst.pm
cp bin/filter_mysqlbinlog blib/script/filter_mysqlbinlog
/usr/bin/perl "-Iinc" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/filter_mysqlbinlog
cp bin/apply_diff_relay_logs blib/script/apply_diff_relay_logs
/usr/bin/perl "-Iinc" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/apply_diff_relay_logs
cp bin/purge_relay_logs blib/script/purge_relay_logs
/usr/bin/perl "-Iinc" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/purge_relay_logs
cp bin/save_binary_logs blib/script/save_binary_logs
/usr/bin/perl "-Iinc" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/save_binary_logs
Manifying blib/man1/filter_mysqlbinlog.1
Manifying blib/man1/apply_diff_relay_logs.1
Manifying blib/man1/purge_relay_logs.1
Manifying blib/man1/save_binary_logs.1
[root@node4 mha4mysql-node-0.58]# make install
Installing /usr/local/share/perl5/MHA/BinlogManager.pm
Installing /usr/local/share/perl5/MHA/BinlogPosFindManager.pm
Installing /usr/local/share/perl5/MHA/BinlogPosFinderXid.pm
Installing /usr/local/share/perl5/MHA/BinlogHeaderParser.pm
Installing /usr/local/share/perl5/MHA/BinlogPosFinder.pm
Installing /usr/local/share/perl5/MHA/BinlogPosFinderElp.pm
Installing /usr/local/share/perl5/MHA/NodeUtil.pm
Installing /usr/local/share/perl5/MHA/SlaveUtil.pm
Installing /usr/local/share/perl5/MHA/NodeConst.pm
Installing /usr/local/share/man/man1/filter_mysqlbinlog.1
Installing /usr/local/share/man/man1/apply_diff_relay_logs.1
Installing /usr/local/share/man/man1/purge_relay_logs.1
Installing /usr/local/share/man/man1/save_binary_logs.1
Installing /usr/local/bin/filter_mysqlbinlog
Installing /usr/local/bin/apply_diff_relay_logs
Installing /usr/local/bin/purge_relay_logs
Installing /usr/local/bin/save_binary_logs
Appending installation info to /usr/lib64/perl5/perllocal.pod
mha 4 mysql-manager-0.58のいくつかの出力
[root@node1 mha4mysql-manager-0.58]# perl Makefile.PL
*** Module::AutoInstall version 1.06
*** Checking for Perl dependencies...
[Core Features]
- DBI ...loaded. (1.627)
- DBD::mysql ...loaded. (4.023)
- Time::HiRes ...loaded. (1.9725)
- Config::Tiny ...loaded. (2.14)
- Log::Dispatch ...loaded. (2.41)
- Parallel::ForkManager ...loaded. (1.18)
- MHA::NodeConst ...loaded. (0.58)
*** Module::AutoInstall configuration finished.
Checking if your kit is complete...
Looks good
Writing Makefile for mha4mysql::manager
[root@node1 mha4mysql-manager-0.58]# make
cp lib/MHA/ManagerUtil.pm blib/lib/MHA/ManagerUtil.pm
cp lib/MHA/Config.pm blib/lib/MHA/Config.pm
cp lib/MHA/HealthCheck.pm blib/lib/MHA/HealthCheck.pm
cp lib/MHA/ServerManager.pm blib/lib/MHA/ServerManager.pm
cp lib/MHA/ManagerConst.pm blib/lib/MHA/ManagerConst.pm
cp lib/MHA/FileStatus.pm blib/lib/MHA/FileStatus.pm
cp lib/MHA/ManagerAdmin.pm blib/lib/MHA/ManagerAdmin.pm
cp lib/MHA/ManagerAdminWrapper.pm blib/lib/MHA/ManagerAdminWrapper.pm
cp lib/MHA/MasterFailover.pm blib/lib/MHA/MasterFailover.pm
cp lib/MHA/MasterRotate.pm blib/lib/MHA/MasterRotate.pm
cp lib/MHA/MasterMonitor.pm blib/lib/MHA/MasterMonitor.pm
cp lib/MHA/Server.pm blib/lib/MHA/Server.pm
cp lib/MHA/SSHCheck.pm blib/lib/MHA/SSHCheck.pm
cp lib/MHA/DBHelper.pm blib/lib/MHA/DBHelper.pm
cp bin/masterha_stop blib/script/masterha_stop
/usr/bin/perl "-Iinc" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/masterha_stop
cp bin/masterha_conf_host blib/script/masterha_conf_host
/usr/bin/perl "-Iinc" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/masterha_conf_host
cp bin/masterha_check_repl blib/script/masterha_check_repl
/usr/bin/perl "-Iinc" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/masterha_check_repl
cp bin/masterha_check_status blib/script/masterha_check_status
/usr/bin/perl "-Iinc" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/masterha_check_status
cp bin/masterha_master_monitor blib/script/masterha_master_monitor
/usr/bin/perl "-Iinc" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/masterha_master_monitor
cp bin/masterha_check_ssh blib/script/masterha_check_ssh
/usr/bin/perl "-Iinc" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/masterha_check_ssh
cp bin/masterha_master_switch blib/script/masterha_master_switch
/usr/bin/perl "-Iinc" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/masterha_master_switch
cp bin/masterha_secondary_check blib/script/masterha_secondary_check
/usr/bin/perl "-Iinc" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/masterha_secondary_check
cp bin/masterha_manager blib/script/masterha_manager
/usr/bin/perl "-Iinc" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/masterha_manager
Manifying blib/man1/masterha_stop.1
Manifying blib/man1/masterha_conf_host.1
Manifying blib/man1/masterha_check_repl.1
Manifying blib/man1/masterha_check_status.1
Manifying blib/man1/masterha_master_monitor.1
Manifying blib/man1/masterha_check_ssh.1
Manifying blib/man1/masterha_master_switch.1
Manifying blib/man1/masterha_secondary_check.1
Manifying blib/man1/masterha_manager.1
[root@node1 mha4mysql-manager-0.58]# make install
Installing /usr/local/share/perl5/MHA/ManagerUtil.pm
Installing /usr/local/share/perl5/MHA/Config.pm
Installing /usr/local/share/perl5/MHA/HealthCheck.pm
Installing /usr/local/share/perl5/MHA/ServerManager.pm
Installing /usr/local/share/perl5/MHA/ManagerConst.pm
Installing /usr/local/share/perl5/MHA/FileStatus.pm
Installing /usr/local/share/perl5/MHA/ManagerAdmin.pm
Installing /usr/local/share/perl5/MHA/ManagerAdminWrapper.pm
Installing /usr/local/share/perl5/MHA/MasterFailover.pm
Installing /usr/local/share/perl5/MHA/MasterRotate.pm
Installing /usr/local/share/perl5/MHA/MasterMonitor.pm
Installing /usr/local/share/perl5/MHA/Server.pm
Installing /usr/local/share/perl5/MHA/SSHCheck.pm
Installing /usr/local/share/perl5/MHA/DBHelper.pm
Installing /usr/local/share/man/man1/masterha_stop.1
Installing /usr/local/share/man/man1/masterha_conf_host.1
Installing /usr/local/share/man/man1/masterha_check_repl.1
Installing /usr/local/share/man/man1/masterha_check_status.1
Installing /usr/local/share/man/man1/masterha_master_monitor.1
Installing /usr/local/share/man/man1/masterha_check_ssh.1
Installing /usr/local/share/man/man1/masterha_master_switch.1
Installing /usr/local/share/man/man1/masterha_secondary_check.1
Installing /usr/local/share/man/man1/masterha_manager.1
Installing /usr/local/bin/masterha_stop
Installing /usr/local/bin/masterha_conf_host
Installing /usr/local/bin/masterha_check_repl
Installing /usr/local/bin/masterha_check_status
Installing /usr/local/bin/masterha_master_monitor
Installing /usr/local/bin/masterha_check_ssh
Installing /usr/local/bin/masterha_master_switch
Installing /usr/local/bin/masterha_secondary_check
Installing /usr/local/bin/masterha_manager
Appending installation info to /usr/lib64/perl5/perllocal.pod