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計画は以下の通りである.
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