MHA分管理节点和数据库节点,数据库节点由mysql主从或者主主从构成,当主库挂掉后,管理节点会自动将从节点提升为主节点;管理节点的角色类似于oracle数据库中的fast start failover中的observer,但mha上层可以通过keepalive部署VIP,程序连接数据库使用VIP,从而实现后台数据库的故障切换透明化

MHA节点包含三个脚本,依赖perl模块;
save_binary_logs:保存和复制当掉的主服务器二进制日志;
apply_diff_relay_logs:识别差异的relay log事件,并应用于其他salve服务器;
purge_relay_logs:清除relay log文件;
需要在所有mysql服务器上安装MHA节点,MHA管理服务器也需要安装。MHA管理节点模块内部依赖MHA节点模块;
MHA管理节点通过ssh连接管理mysql服务器和执行MHA节点脚本。MHA节点依赖perl的DBD::mysql模块;

本文环境介绍,操作系统均为rhel5.4
主库:192.168.123.13/dg53.yang.com
备库:192.168.123.14/dg54.yang.com
管理节点:192.168.123.15/dg55.yang.com

在开始之前,请先配置好服务器间的时间同步和名称解析

一:在数据库节点安装mha node

  1. [root@dg53 ~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
  2. Retrieving http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
  3. warning: /var/tmp/rpm-xfer.yqwfYT: Header V3 DSA signature: NOKEY, key ID 217521f6
  4. Preparing...                ########################################### [100%]
  5. 1:epel-release           ########################################### [100%]
  6. [root@dg53 ~]# ls /etc/yum.repos.d/
  7. base.repo  epel.repo  epel-testing.repo  rhel-debuginfo.repo
  8. [root@dg53 ~]# yum -y install perl-DBD-MySQL  ncftp
  9. [root@dg53 ~]#  wget http://mysql-master-ha.googlecode.com/files/mha4mysql-node-0.52.tar.gz -P /usr/local/src/tarbag/
  10. [root@dg53 ~]# cd /usr/local/src/tarbag/
  11. [root@dg53 tarbag]# tar -zxvpf mha4mysql-node-0.52.tar.gz -C ../software/
  12. [root@dg53 tarbag]# cd ../software/mha4mysql-node-0.52/
  13. [root@dg53 mha4mysql-node-0.52]# perl Makefile.PL
  14. [root@dg53 mha4mysql-node-0.52]# make && make install

二:管理节点
1:按照步骤一安装mha node

2:安装mha manager

  1. [root@dg55 ~]# yum -y install perl-Config-Tiny perl-Params-Validate perl-Log-Dispatch perl-Parallel-ForkManager
  2. [root@dg55 ~]# wget http://mysql-master-ha.googlecode.com/files/mha4mysql-manager-0.52.tar.gz -P /usr/local/src/tarbag/
  3. [root@dg55 ~]# cd /usr/local/src/tarbag/
  4. [root@dg55 tarbag]# tar -zxvpf mha4mysql-manager-0.52.tar.gz -C ../software/
  5. [root@dg55 tarbag]# cd ../software/mha4mysql-manager-0.52/
  6. [root@dg55 mha4mysql-manager-0.52]# perl Makefile.PL
  7. [root@dg55 mha4mysql-manager-0.52]# make && make install

3:编辑配置文件

  1. [root@dg55 mha4mysql-manager-0.52]# mkdir /etc/masterha
  2. [root@dg55 mha4mysql-manager-0.52]# mkdir -p /masterha/app1
  3. [root@dg55 mha4mysql-manager-0.52]# cp samples/conf/* /etc/masterha/
  4. [root@dg55 mha4mysql-manager-0.52]# cat /etc/masterha/app1.cnf
  5. [server default]
  6. manager_workdir=/masterha/app1
  7. manager_log=/masterha/app1/manager.log
  8. user=root
  9. password=123456
  10. ssh_user=root
  11. repl_user=r_test
  12. repl_password=123456
  13. ping_interval=1
  14. shutdown_script=""
  15. #master_ip_failover_script="/usr/local/bin/master_ip_failover"
  16. master_ip_online_change_script=""
  17. report_script=""
  18. [server1]
  19. hostname=192.168.123.13
  20. master_binlog_dir="/mydata"
  21. candidate_master=1
  22. [server2]
  23. hostname=192.168.123.14
  24. master_binlog_dir="/mydata"
  25. candidate_master=1

4:配置manager节点和node节点以及node节点间的ssh公钥信任

  1. [root@dg55 ~]# ssh-keygen -t rsa
  2. [root@dg55 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.123.13
  3. [root@dg55 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.123.14
  4. [root@dg55 ~]# ssh 192.168.123.13 "ifconfig |grep 'inet addr' |head -1"
  5. inet addr:192.168.123.13  Bcast:192.168.123.255  Mask:255.255.255.0
  6. [root@dg55 ~]# ssh 192.168.123.14 "ifconfig |grep 'inet addr' |head -1"
  7. inet addr:192.168.123.14  Bcast:192.168.123.255  Mask:255.255.255.0

5:测试ssh连接

  1. [root@dg55 ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf
  2. Wed Jun  6 11:11:25 2012 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
  3. Wed Jun  6 11:11:25 2012 - [info] Reading application default configurations from /etc/masterha/app1.cnf..
  4. Wed Jun  6 11:11:25 2012 - [info] Reading server configurations from /etc/masterha/app1.cnf..
  5. Wed Jun  6 11:11:25 2012 - [info] Starting SSH connection tests..
  6. Wed Jun  6 11:11:25 2012 - [debug]
  7. Wed Jun  6 11:11:25 2012 - [debug]  Connecting via SSH from root@192.168.123.13(192.168.123.13) to root@192.168.123.14(192.168.123.14)..
  8. Wed Jun  6 11:11:25 2012 - [debug]   ok.
  9. Wed Jun  6 11:11:26 2012 - [debug]
  10. Wed Jun  6 11:11:25 2012 - [debug]  Connecting via SSH from root@192.168.123.14(192.168.123.14) to root@192.168.123.13(192.168.123.13)..
  11. Wed Jun  6 11:11:26 2012 - [debug]   ok.
  12. Wed Jun  6 11:11:26 2012 - [info] All SSH connection tests passed successfully.

6:测试主从复制情况,默认使用root用户连接

  1. mysql> select user,host,password from mysql.user;
  2. +--------+----------------+-------------------------------------------+
  3. | user   | host           | password                                  |
  4. +--------+----------------+-------------------------------------------+
  5. | root   | localhost      |                                           |
  6. | root   | dg53.yang.com  |                                           |
  7. | root   | 127.0.0.1      |                                           |
  8. | root   | ::1            |                                           |
  9. |        | localhost      |                                           |
  10. |        | dg53.yang.com  |                                           |
  11. | r_test | 192.168.123.14 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
  12. +--------+----------------+-------------------------------------------+
  13. 7 rows in set (0.08 sec)
  14. mysql> use mysql;
  15. Database changed
  16. mysql> update user set host='192.168.123.%' where user='r_test';
  17. Query OK, 1 row affected (0.05 sec)
  18. Rows matched: 1  Changed: 1  Warnings: 0
  19. mysql> commit;
  20. Query OK, 0 rows affected (0.01 sec)
  21. mysql> update user set host='192.168.123.%' where host='localhost' and user='root' and password='';
  22. Query OK, 0 rows affected (0.00 sec)
  23. Rows matched: 1  Changed: 1  Warnings: 0
  24. mysql> update user set password=PASSWORD('123456') where user='root' and host='192.168.123.%';
  25. Query OK, 0 rows affected (0.00 sec)
  26. Rows matched: 1  Changed: 0  Warnings: 0
  27. mysql> flush privileges;
  28. Query OK, 0 rows affected (0.02 sec)
  29. [root@dg53 ~]# whereis mysqlbinlog
  30. mysqlbinlog: /usr/bin/mysqlbinlog
  31. [root@dg53 ~]# mv /usr/bin/mysql* /tmp
  32. [root@dg54 ~]# mv /usr/bin/mysql* /tmp
  33. [root@dg53 ~]# ln -s /usr/local/mysql5.5.25/bin/* /usr/local/bin/
  34. [root@dg54 ~]# ln -s /usr/local/mysql5.5.25/bin/* /usr/local/bin/
  35. [root@dg55 ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf
  36. Wed Jun  6 12:39:03 2012 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
  37. Wed Jun  6 12:39:03 2012 - [info] Reading application default configurations from /etc/masterha/app1.cnf..
  38. Wed Jun  6 12:39:03 2012 - [info] Reading server configurations from /etc/masterha/app1.cnf..
  39. Wed Jun  6 12:39:03 2012 - [info] MHA::MasterMonitor version 0.52.
  40. Wed Jun  6 12:39:03 2012 - [info] Dead Servers:
  41. Wed Jun  6 12:39:03 2012 - [info] Alive Servers:
  42. Wed Jun  6 12:39:03 2012 - [info]   192.168.123.13(192.168.123.13:3306)
  43. Wed Jun  6 12:39:03 2012 - [info]   192.168.123.14(192.168.123.14:3306)
  44. Wed Jun  6 12:39:03 2012 - [info] Alive Slaves:
  45. Wed Jun  6 12:39:03 2012 - [info]   192.168.123.14(192.168.123.14:3306)  Version=5.5.25-log (oldest major version between slaves) log-bin:enabled
  46. Wed Jun  6 12:39:03 2012 - [info]     Replicating from 192.168.123.13(192.168.123.13:3306)
  47. Wed Jun  6 12:39:03 2012 - [info]     Primary candidate for the new Master (candidate_master is set)
  48. Wed Jun  6 12:39:03 2012 - [info] Current Alive Master: 192.168.123.13(192.168.123.13:3306)
  49. Wed Jun  6 12:39:03 2012 - [info] Checking slave configurations..
  50. Wed Jun  6 12:39:03 2012 - [warning]  read_only=1 is not set on slave 192.168.123.14(192.168.123.14:3306).
  51. Wed Jun  6 12:39:03 2012 - [warning]  relay_log_purge=0 is not set on slave 192.168.123.14(192.168.123.14:3306).
  52. Wed Jun  6 12:39:03 2012 - [info] Checking replication filtering settings..
  53. Wed Jun  6 12:39:03 2012 - [info]  binlog_do_db= bbs,test, binlog_ignore_db= mysql
  54. Wed Jun  6 12:39:03 2012 - [info]  Replication filtering check ok.
  55. Wed Jun  6 12:39:03 2012 - [info] Starting SSH connection tests..
  56. Wed Jun  6 12:39:05 2012 - [info] All SSH connection tests passed successfully.
  57. Wed Jun  6 12:39:05 2012 - [info] Checking MHA Node version..
  58. Wed Jun  6 12:39:05 2012 - [info]  Version check ok.
  59. Wed Jun  6 12:39:05 2012 - [info] Checking SSH publickey authentication and checking recovery script configurations on the current master..
  60. Wed Jun  6 12:39:05 2012 - [info]   Executing command: save_binary_logs --command=test --start_file=mysql-bin.000011 --start_pos=4 --binlog_dir=/mydata --output_file=/var/tmp/save_binary_logs_test --manager_version=0.52
  61. Wed Jun  6 12:39:05 2012 - [info]   Connecting to root@192.168.123.13(192.168.123.13)..
  62. Creating /var/tmp if not exists..    ok.
  63. Checking output directory is accessible or not..
  64. ok.
  65. Binlog found at /mydata, up to mysql-bin.000011
  66. Wed Jun  6 12:39:06 2012 - [info] Master setting check done.
  67. Wed Jun  6 12:39:06 2012 - [info] Checking SSH publickey authentication and checking recovery script configurations on all alive slave servers..
  68. Wed Jun  6 12:39:06 2012 - [info]   Executing command : apply_diff_relay_logs --command=test --slave_user=root --slave_host=192.168.123.14 --slave_ip=192.168.123.14 --slave_port=3306 --workdir=/var/tmp --target_version=5.5.25-log --manager_version=0.52 --relay_log_info=/mydata/relay-log.info  --slave_pass=xxx
  69. Wed Jun  6 12:39:06 2012 - [info]   Connecting to root@192.168.123.14(192.168.123.14)..
  70. Checking slave recovery environment settings..
  71. Opening /mydata/relay-log.info ... ok.
  72. Relay log found at /mydata, up to dg54-relay-bin.000019
  73. Temporary relay log file is /mydata/dg54-relay-bin.000019
  74. Testing mysql connection and privileges.. done.
  75. Testing mysqlbinlog output.. done.
  76. Cleaning up test file(s).. done.
  77. Wed Jun  6 12:39:06 2012 - [info] Slaves settings check done.
  78. Wed Jun  6 12:39:06 2012 - [info]
  79. 192.168.123.13 (current master)
  80. +--192.168.123.14
  81. Wed Jun  6 12:39:06 2012 - [info] Checking replication health on 192.168.123.14..
  82. Wed Jun  6 12:39:06 2012 - [info]  ok.
  83. Wed Jun  6 12:39:06 2012 - [warning] master_ip_failover_script is not defined.
  84. Wed Jun  6 12:39:06 2012 - [warning] shutdown_script is not defined.
  85. Wed Jun  6 12:39:06 2012 - [info] Got exit code 0 (Not master dead).
  86. MySQL Replication Health is OK.

7:启动管理节点进程

  1. [root@dg55 ~]# nohup masterha_manager --conf=/etc/masterha/app1.cnf > /tmp/mha_manager.log  < /dev/null 2>&1 &
  2. [1] 25516
  3. [root@dg55 ~]# masterha_check_status --conf=/etc/masterha/app1.cnf
  4. app1 (pid:25516) is running(0:PING_OK), master:192.168.123.13

三:测试failover过程
1:当前主库为192.168.123.13,关闭主库

  1. mysql> show slave hosts;
  2. +-----------+------+------+-----------+
  3. | Server_id | Host | Port | Master_id |
  4. +-----------+------+------+-----------+
  5. |         2 |      | 3306 |         1 |
  6. +-----------+------+------+-----------+
  7. 1 row in set (0.00 sec)
  8. [root@dg53 ~]# service mysqld stop
  9. Shutting down MySQL...[  OK  ]

2:在管理节点上观察日志输出

[root@dg55 ~]# tail -f /masterha/app1/manager.log
Wed Jun  6 14:50:48 2012 - [info]
192.168.123.13 (current master)
 +--192.168.123.14

Wed Jun  6 14:50:48 2012 - [warning] master_ip_failover_script is not defined.
Wed Jun  6 14:50:48 2012 - [warning] shutdown_script is not defined.
Wed Jun  6 14:50:48 2012 - [info] Set master ping interval 1 seconds.
Wed Jun  6 14:50:48 2012 - [warning] secondary_check_script is not defined. It is highly recommended setting it to check master reachability from two or more routes.
Wed Jun  6 14:50:48 2012 - [info] Starting ping health check on 192.168.123.13(192.168.123.13:3306)..
Wed Jun  6 14:50:48 2012 - [info] Ping succeeded, sleeping until it doesn't respond..

Wed Jun  6 14:51:32 2012 - [warning] Got error on MySQL ping: 2006 (MySQL server has gone away)
Wed Jun  6 14:51:32 2012 - [info] HealthCheck: SSH to 192.168.123.13 is reachable.
Wed Jun  6 14:51:33 2012 - [warning] Got error on MySQL connect: 2013 (Lost connection to MySQL server at 'reading initial communication packet', system error: 111)
Wed Jun  6 14:51:33 2012 - [warning] Connection failed 1 time(s)..
Wed Jun  6 14:51:34 2012 - [warning] Got error on MySQL connect: 2013 (Lost connection to MySQL server at 'reading initial communication packet', system error: 111)
Wed Jun  6 14:51:34 2012 - [warning] Connection failed 2 time(s)..
Wed Jun  6 14:51:35 2012 - [warning] Got error on MySQL connect: 2013 (Lost connection to MySQL server at 'reading initial communication packet', system error: 111)
Wed Jun  6 14:51:35 2012 - [warning] Connection failed 3 time(s)..
Wed Jun  6 14:51:35 2012 - [warning] Master is not reachable from health checker!
Wed Jun  6 14:51:35 2012 - [warning] Master 192.168.123.13(192.168.123.13:3306) is not reachable!
Wed Jun  6 14:51:35 2012 - [warning] SSH is reachable.
Wed Jun  6 14:51:35 2012 - [info] Connecting to a master server failed. Reading configuration file /etc/masterha_default.cnf and /etc/masterha/app1.cnf again, and trying to connect to all servers to check server status..
Wed Jun  6 14:51:35 2012 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Wed Jun  6 14:51:35 2012 - [info] Reading application default configurations from /etc/masterha/app1.cnf..
Wed Jun  6 14:51:35 2012 - [info] Reading server configurations from /etc/masterha/app1.cnf..
Wed Jun  6 14:51:35 2012 - [info] Dead Servers:
Wed Jun  6 14:51:35 2012 - [info]   192.168.123.13(192.168.123.13:3306)
Wed Jun  6 14:51:35 2012 - [info] Alive Servers:
Wed Jun  6 14:51:35 2012 - [info]   192.168.123.14(192.168.123.14:3306)
Wed Jun  6 14:51:35 2012 - [info] Alive Slaves:
Wed Jun  6 14:51:35 2012 - [info]   192.168.123.14(192.168.123.14:3306)  Version=5.5.25-log (oldest major version between slaves) log-bin:enabled
Wed Jun  6 14:51:35 2012 - [info]     Replicating from 192.168.123.13(192.168.123.13:3306)
Wed Jun  6 14:51:35 2012 - [info]     Primary candidate for the new Master (candidate_master is set)
Wed Jun  6 14:51:35 2012 - [info] Checking slave configurations..
Wed Jun  6 14:51:35 2012 - [warning]  read_only=1 is not set on slave 192.168.123.14(192.168.123.14:3306).
Wed Jun  6 14:51:35 2012 - [warning]  relay_log_purge=0 is not set on slave 192.168.123.14(192.168.123.14:3306).
Wed Jun  6 14:51:35 2012 - [info] Checking replication filtering settings..
Wed Jun  6 14:51:35 2012 - [info]  Replication filtering check ok.
Wed Jun  6 14:51:35 2012 - [info] Master is down!
Wed Jun  6 14:51:35 2012 - [info] Terminating monitoring script.
Wed Jun  6 14:51:35 2012 - [info] Got exit code 20 (Master dead).
Wed Jun  6 14:51:35 2012 - [info] MHA::MasterFailover version 0.52.
Wed Jun  6 14:51:35 2012 - [info] Starting master failover.
Wed Jun  6 14:51:35 2012 - [info]
Wed Jun  6 14:51:35 2012 - [info] * Phase 1: Configuration Check Phase..
Wed Jun  6 14:51:35 2012 - [info]
Wed Jun  6 14:51:35 2012 - [info] Dead Servers:
Wed Jun  6 14:51:35 2012 - [info]   192.168.123.13(192.168.123.13:3306)
Wed Jun  6 14:51:35 2012 - [info] Checking master reachability via mysql(double check)..
Wed Jun  6 14:51:35 2012 - [info]  ok.
Wed Jun  6 14:51:35 2012 - [info] Alive Servers:
Wed Jun  6 14:51:35 2012 - [info]   192.168.123.14(192.168.123.14:3306)
Wed Jun  6 14:51:35 2012 - [info] Alive Slaves:
Wed Jun  6 14:51:35 2012 - [info]   192.168.123.14(192.168.123.14:3306)  Version=5.5.25-log (oldest major version between slaves) log-bin:enabled
Wed Jun  6 14:51:35 2012 - [info]     Replicating from 192.168.123.13(192.168.123.13:3306)
Wed Jun  6 14:51:35 2012 - [info]     Primary candidate for the new Master (candidate_master is set)
Wed Jun  6 14:51:35 2012 - [info] ** Phase 1: Configuration Check Phase completed.
Wed Jun  6 14:51:35 2012 - [info]
Wed Jun  6 14:51:35 2012 - [info] * Phase 2: Dead Master Shutdown Phase..
Wed Jun  6 14:51:35 2012 - [info]
Wed Jun  6 14:51:35 2012 - [info] Forcing shutdown so that applications never connect to the current master..
Wed Jun  6 14:51:35 2012 - [warning] master_ip_failover_script is not set. Skipping invalidating dead master ip address.
Wed Jun  6 14:51:35 2012 - [warning] shutdown_script is not set. Skipping explicit shutting down of the dead master.
Wed Jun  6 14:51:35 2012 - [info] * Phase 2: Dead Master Shutdown Phase completed.
Wed Jun  6 14:51:35 2012 - [info]
Wed Jun  6 14:51:35 2012 - [info] * Phase 3: Master Recovery Phase..
Wed Jun  6 14:51:35 2012 - [info]
Wed Jun  6 14:51:35 2012 - [info] * Phase 3.1: Getting Latest Slaves Phase..
Wed Jun  6 14:51:35 2012 - [info]
Wed Jun  6 14:51:35 2012 - [info] The latest binary log file/position on all slaves is mysql-bin.000021:107
Wed Jun  6 14:51:35 2012 - [info] Latest slaves (Slaves that received relay log files to the latest):
Wed Jun  6 14:51:35 2012 - [info]   192.168.123.14(192.168.123.14:3306)  Version=5.5.25-log (oldest major version between slaves) log-bin:enabled
Wed Jun  6 14:51:35 2012 - [info]     Replicating from 192.168.123.13(192.168.123.13:3306)
Wed Jun  6 14:51:35 2012 - [info]     Primary candidate for the new Master (candidate_master is set)
Wed Jun  6 14:51:35 2012 - [info] The oldest binary log file/position on all slaves is mysql-bin.000021:107
Wed Jun  6 14:51:35 2012 - [info] Oldest slaves:
Wed Jun  6 14:51:35 2012 - [info]   192.168.123.14(192.168.123.14:3306)  Version=5.5.25-log (oldest major version between slaves) log-bin:enabled
Wed Jun  6 14:51:35 2012 - [info]     Replicating from 192.168.123.13(192.168.123.13:3306)
Wed Jun  6 14:51:35 2012 - [info]     Primary candidate for the new Master (candidate_master is set)
Wed Jun  6 14:51:35 2012 - [info]
Wed Jun  6 14:51:35 2012 - [info] * Phase 3.2: Saving Dead Master's Binlog Phase..
Wed Jun  6 14:51:35 2012 - [info]
Wed Jun  6 14:51:35 2012 - [info] Fetching dead master's binary logs..
Wed Jun  6 14:51:35 2012 - [info] Executing command on the dead master 192.168.123.13(192.168.123.13:3306): save_binary_logs --command=save --start_file=mysql-bin.000021  --start_pos=107 --binlog_dir=/mydata --output_file=/var/tmp/saved_master_binlog_from_192.168.123.13_3306_20120606145135.binlog --handle_raw_binlog=1 --disable_log_bin=0 --manager_version=0.52
  Creating /var/tmp if not exists..    ok.
 Concat binary/relay logs from mysql-bin.000021 pos 107 to mysql-bin.000021 EOF into /var/tmp/saved_master_binlog_from_192.168.123.13_3306_20120606145135.binlog ..
  Dumping binlog format description event, from position 0 to 107.. ok.
  Dumping effective binlog data from /mydata/mysql-bin.000021 position 107 to tail(126).. ok.
 Concat succeeded.
Wed Jun  6 14:51:36 2012 - [info] scp from root@192.168.123.13:/var/tmp/saved_master_binlog_from_192.168.123.13_3306_20120606145135.binlog to local:/masterha/app1/saved_master_binlog_from_192.168.123.13_3306_20120606145135.binlog succeeded.
Wed Jun  6 14:51:36 2012 - [info] HealthCheck: SSH to 192.168.123.14 is reachable.
Wed Jun  6 14:51:37 2012 - [info]
Wed Jun  6 14:51:37 2012 - [info] * Phase 3.3: Determining New Master Phase..
Wed Jun  6 14:51:37 2012 - [info]
Wed Jun  6 14:51:37 2012 - [info] Finding the latest slave that has all relay logs for recovering other slaves..
Wed Jun  6 14:51:37 2012 - [info] All slaves received relay logs to the same position. No need to resync each other.
Wed Jun  6 14:51:37 2012 - [info] Searching new master from slaves..
Wed Jun  6 14:51:37 2012 - [info]  Candidate masters from the configuration file:
Wed Jun  6 14:51:37 2012 - [info]   192.168.123.14(192.168.123.14:3306)  Version=5.5.25-log (oldest major version between slaves) log-bin:enabled
Wed Jun  6 14:51:37 2012 - [info]     Replicating from 192.168.123.13(192.168.123.13:3306)
Wed Jun  6 14:51:37 2012 - [info]     Primary candidate for the new Master (candidate_master is set)
Wed Jun  6 14:51:37 2012 - [info]  Non-candidate masters:
Wed Jun  6 14:51:37 2012 - [info]  Searching from candidate_master slaves which have received the latest relay log events..
Wed Jun  6 14:51:37 2012 - [info] New master is 192.168.123.14(192.168.123.14:3306)
Wed Jun  6 14:51:37 2012 - [info] Starting master failover..
Wed Jun  6 14:51:37 2012 - [info]
From:
192.168.123.13 (current master)
 +--192.168.123.14

To:
192.168.123.14 (new master)
Wed Jun  6 14:51:37 2012 - [info]
Wed Jun  6 14:51:37 2012 - [info] * Phase 3.3: New Master Diff Log Generation Phase..
Wed Jun  6 14:51:37 2012 - [info]
Wed Jun  6 14:51:37 2012 - [info]  This server has all relay logs. No need to generate diff files from the latest slave.
Wed Jun  6 14:51:37 2012 - [info] Sending binlog..
Wed Jun  6 14:51:37 2012 - [info] scp from local:/masterha/app1/saved_master_binlog_from_192.168.123.13_3306_20120606145135.binlog to root@192.168.123.14:/var/tmp/saved_master_binlog_from_192.168.123.13_3306_20120606145135.binlog succeeded.
Wed Jun  6 14:51:37 2012 - [info]
Wed Jun  6 14:51:37 2012 - [info] * Phase 3.4: Master Log Apply Phase..
Wed Jun  6 14:51:37 2012 - [info]
Wed Jun  6 14:51:37 2012 - [info] *NOTICE: If any error happens from this phase, manual recovery is needed.
Wed Jun  6 14:51:37 2012 - [info] Starting recovery on 192.168.123.14(192.168.123.14:3306)..
Wed Jun  6 14:51:37 2012 - [info]  Generating diffs succeeded.
Wed Jun  6 14:51:37 2012 - [info] Waiting until all relay logs are applied.
Wed Jun  6 14:51:37 2012 - [info]  done.
Wed Jun  6 14:51:37 2012 - [info] Getting slave status..
Wed Jun  6 14:51:37 2012 - [info] This slave(192.168.123.14)'s Exec_Master_Log_Pos equals to Read_Master_Log_Pos(mysql-bin.000021:107). No need to recover from Exec_Master_Log_Pos.
Wed Jun  6 14:51:37 2012 - [info] Connecting to the target slave host 192.168.123.14, running recover script..
Wed Jun  6 14:51:37 2012 - [info] Executing command: apply_diff_relay_logs --command=apply --slave_user=root --slave_host=192.168.123.14 --slave_ip=192.168.123.14  --slave_port=3306 --apply_files=/var/tmp/saved_master_binlog_from_192.168.123.13_3306_20120606145135.binlog --workdir=/var/tmp --target_version=5.5.25-log --timestamp=20120606145135 --handle_raw_binlog=1 --disable_log_bin=0 --manager_version=0.52 --slave_pass=xxx
Wed Jun  6 14:51:37 2012 - [info]
Applying differential binary/relay log files /var/tmp/saved_master_binlog_from_192.168.123.13_3306_20120606145135.binlog on 192.168.123.14:3306. This may take long time...
Applying log files succeeded.
Wed Jun  6 14:51:37 2012 - [info]  All relay logs were successfully applied.
Wed Jun  6 14:51:37 2012 - [info] Getting new master's binlog name and position..
Wed Jun  6 14:51:37 2012 - [info]  mysql-bin.000023:107
Wed Jun  6 14:51:37 2012 - [info]  All other slaves should start replication from here. Statement should be: CHANGE MASTER TO MASTER_HOST='192.168.123.14', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000023', MASTER_LOG_POS=107, MASTER_USER='r_test', MASTER_PASSWORD='xxx';
Wed Jun  6 14:51:37 2012 - [warning] master_ip_failover_script is not set. Skipping taking over new master ip address.
Wed Jun  6 14:51:37 2012 - [info] ** Finished master recovery successfully.
Wed Jun  6 14:51:37 2012 - [info] * Phase 3: Master Recovery Phase completed.
Wed Jun  6 14:51:37 2012 - [info]
Wed Jun  6 14:51:37 2012 - [info] * Phase 4: Slaves Recovery Phase..
Wed Jun  6 14:51:37 2012 - [info]
Wed Jun  6 14:51:37 2012 - [info] * Phase 4.1: Starting Parallel Slave Diff Log Generation Phase..
Wed Jun  6 14:51:37 2012 - [info]
Wed Jun  6 14:51:37 2012 - [info] Generating relay diff files from the latest slave succeeded.
Wed Jun  6 14:51:37 2012 - [info]
Wed Jun  6 14:51:37 2012 - [info] * Phase 4.2: Starting Parallel Slave Log Apply Phase..
Wed Jun  6 14:51:37 2012 - [info]
Wed Jun  6 14:51:37 2012 - [info] All new slave servers recovered successfully.
Wed Jun  6 14:51:37 2012 - [info]
Wed Jun  6 14:51:37 2012 - [info] * Phase 5: New master cleanup phease..
Wed Jun  6 14:51:37 2012 - [info]
Wed Jun  6 14:51:37 2012 - [info] Resetting slave info on the new master..
Wed Jun  6 14:51:37 2012 - [info] Master failover to 192.168.123.14(192.168.123.14:3306) completed successfully.
Wed Jun  6 14:51:37 2012 - [info]

----- Failover Report -----

app1: MySQL Master failover 192.168.123.13 to 192.168.123.14 succeeded

Master 192.168.123.13 is down!

Check MHA Manager logs at dg55.yang.com:/masterha/app1/manager.log for details.

Started automated(non-interactive) failover.
The latest slave 192.168.123.14(192.168.123.14:3306) has all relay logs for recovery.
Selected 192.168.123.14 as a new master.
192.168.123.14: OK: Applying all logs succeeded.
Generating relay diff files from the latest slave succeeded.
192.168.123.14: Resetting slave info succeeded.
Master failover to 192.168.123.14(192.168.123.14:3306) completed successfully.

3:在原从库192.168.123.14上查看结果

  1. mysql> show master status;
  2. +------------------+----------+--------------+------------------+
  3. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  4. +------------------+----------+--------------+------------------+
  5. | mysql-bin.000023 |      107 | bbs,test     | mysql            |
  6. +------------------+----------+--------------+------------------+
  7. 1 row in set (0.00 sec)
  8. mysql> show slave status\G;
  9. *************************** 1. row ***************************
  10. Slave_IO_State:
  11. Master_Host: 192.168.123.13
  12. Master_User: r_test
  13. Master_Port: 3306
  14. Connect_Retry: 60
  15. Master_Log_File:
  16. Read_Master_Log_Pos: 4
  17. Relay_Log_File: dg54-relay-bin.000001
  18. Relay_Log_Pos: 4
  19. Relay_Master_Log_File:
  20. Slave_IO_Running: No
  21. Slave_SQL_Running: No
  22. Replicate_Do_DB:
  23. Replicate_Ignore_DB:
  24. Replicate_Do_Table:
  25. Replicate_Ignore_Table:
  26. Replicate_Wild_Do_Table:
  27. Replicate_Wild_Ignore_Table:
  28. Last_Errno: 0
  29. Last_Error:
  30. Skip_Counter: 0
  31. Exec_Master_Log_Pos: 0
  32. Relay_Log_Space: 126
  33. Until_Condition: None
  34. Until_Log_File:
  35. Until_Log_Pos: 0
  36. Master_SSL_Allowed: No
  37. Master_SSL_CA_File:
  38. Master_SSL_CA_Path:
  39. Master_SSL_Cert:
  40. Master_SSL_Cipher:
  41. Master_SSL_Key:
  42. Seconds_Behind_Master: NULL
  43. Master_SSL_Verify_Server_Cert: No
  44. Last_IO_Errno: 0
  45. Last_IO_Error:
  46. Last_SQL_Errno: 0
  47. Last_SQL_Error:
  48. Replicate_Ignore_Server_Ids:
  49. Master_Server_Id: 1
  50. 1 row in set (0.00 sec)
  51. ERROR:
  52. No query specified

备注:本文只简单记录了mha的环境部署过程,更多高级的内容,例如配合keepalive使用VIP,让客户端连接数据库透明化以及手动failover和master_ip_failover_script脚本,半同步复制等功能后续将继续研究!

参考文章,感谢作者分享
http://who0168.blog.51cto.com/253401/699030
http://huoding.com/2011/12/18/139
http://www.vmcd.org/2012/04/mysql-high-availability-mha/

Mysql5.5部署MHA相关推荐

  1. MySQL5.6 部署MHA

    趁着最近几天休息,就把之前没有补全的博客也来补补. 今天就和大家聊聊MySQL高可用方案中的MHA 在中小型架构中,针对MySQL做高可用 用的最多的可能就是keepalived/heartbeat+ ...

  2. MySQL 部署MHA集群部署

    目录 MySQL 部署MHA集群部署 MHA集群概述 MHA介绍 MHA简介 MHA组成 MHA工作过程 MHA集群架构 MHA工作过程 拓扑结构 IP规划 拓扑图 部署MHA集群 准备集群环境 安装 ...

  3. 三十六.MHA集群概述 、 部署MHA集群 测试配置

    1.准备MHA集群环境 准备6台虚拟机,并按照本节规划配置好IP参数 在这些虚拟机之间实现SSH免密登录 在相应节点上安装好MHA相关的软件包 使用6台RHEL 7虚拟机,如图-1所示.准备集群环境, ...

  4. centos 部署mysql5.7_centos7部署MySQL 5.7

    一.部署安装MySQL 注:在安装MySQL前需要卸载掉当前已有的mariadb,然后需要安装gcc环境 1.安装cmake [root@mysql ~]# wget https://github.c ...

  5. centos 部署mysql5.7_centos7部署mysql-5.7

    Mysql-5.7.21二进制部署方式可以不用编译,但要指定版本,包也比较大 一.环境声明 [mysql-Server] 主机名 = host-1 系统 = centos-7.3 地址 = 1.1.1 ...

  6. mysql5.7 部署文档-rpm

    一.准备工作 1.1.目录规划 (1)/mysql 使用单独的逻辑卷. mkdir /mysql lvcreate -n lv_mysql -L +100g vg mkfs.ext4 /dev/map ...

  7. mysql HA方案: MHA

    mysql-master-ha mysql 做热备和高可用的方法有很多种, 比如: mmm: http://mysql-mmm.org/ mha: https://code.google.com/p/ ...

  8. 业界最具影响力MySQL精品文章荟萃(300篇)

    更多精彩文章可关注:51CTO技术博客微信:blog51cto  让你轻松享受更多技术文章~ MySQL是一种关联数据库管理系统,SQL语言是用于访问数据库的最常用标准化语言.本文档收集的资料有MyS ...

  9. MySQL之MHA高可用配置及故障切换(理论加实战详细部署步骤)

    MySQL之MHA高可用配置及故障切换(理论加实战详细部署步骤) 文章目录 一.MHA介绍 (一).什么是MHA (二).MHA 的组成 (三).MHA 的特点 二.搭建 MySQL MHA (一). ...

最新文章

  1. OpenCV 实战:3 步实现图像降噪
  2. 【CIC滤波器】基于MATLAB/FPGA的数字CIC滤波器的设计
  3. 推荐计算机与通信领域SCI期刊,因子稳中看升,对中国作者友好,毕业优选!
  4. JS面向对象,创建,继承
  5. 云原生时代来袭 下一代云数据库技术将走向何方?
  6. react 怎么获取表格_react学习之js-xlsx导入和导出excel表格
  7. leetcode —— 19. 删除链表的倒数第N个节点
  8. 一分钟教你在PyTorch跑模型的时候提取中间层查看图片
  9. Web应用工作原理、动态网页技术
  10. 如何发布一个Android库
  11. Python 进阶——重访 list (二)
  12. linux下升级glibc-2.14问题
  13. 自动驾驶仿真:VTD的SCP命令详解
  14. 项目管理:如何制作项目进度表
  15. ucfirst() 把字符串中的首字符转换为大写
  16. gitlab 账号注册及修改资料
  17. Day12:使用正则表达式
  18. Openstack API 开发 快速入门
  19. MATLAB之微分方程求解(十一)
  20. python十二星座符号_12种编程语言类比12星座女

热门文章

  1. expect监控 雏形 scp用法
  2. 我的Go语言学习之旅一:WIN下Go的安装
  3. CSS clear 清除浮动,兼容各浏览器
  4. idea:忽略大小写提示设置
  5. 磨刀不误砍柴工-git新手教程
  6. 查看、修改linux系统的最大链接数限制、文件描述符限制、端口范围限制、虚拟内存等...
  7. 最全Pycharm教程
  8. mysql cmd链接不上数据库情况汇总
  9. 使用Area(区域)会遇到的问题
  10. Lintcode Subarray Sum Closest