主库:172.25.254.125
备库:172.25.254.225
管理节点:172.25.254.126
在开始之前,请先配置好服务器间的时间同步和名称解析
一:在数据库节点安装mha node
[[email protected] ~]# rpm -ivh epel-release-5-4.noarch.rpm
Retrieving epel-release-5-4.noarch.rpm
warning: /var/tmp/rpm-xfer.yqwfYT: Header V3 DSA signature: NOKEY, key ID 217521f6
Preparing... ########################################### [100%]
1:epel-release ########################################### [100%]
[[email protected] ~]# ls /etc/yum.repos.d/
base.repo epel.repo epel-testing.repo rhel-debuginfo.repo
[[email protected] ~]# yum -y install perl-DBD-MySQL ncftp
[[email protected] ~]# wget mha4mysql-node-0.52.tar.gz -P /usr/local/src/tarbag/
[[email protected] ~]# cd /usr/local/src/tarbag/
[[email protected] tarbag]# tar -zxvpf mha4mysql-node-0.52.tar.gz -C ../software/
[[email protected] tarbag]# cd ../software/mha4mysql-node-0.52/
[[email protected] mha4mysql-node-0.52]# perl Makefile.PL
[[email protected] mha4mysql-node-0.52]# make && make install
二:管理节点
1:按照步骤一安装mha node
2:安装mha manager
[[email protected] ~]# yum -y install perl-Config-Tiny perl-Params-Validate perl-Log-Dispatch perl-Parallel-ForkManager
[[email protected] ~]# wget mha4mysql-manager-0.52.tar.gz -P /usr/local/src/tarbag/
[[email protected] ~]# cd /usr/local/src/tarbag/
[[email protected] tarbag]# tar -zxvpf mha4mysql-manager-0.52.tar.gz -C ../software/
[[email protected] tarbag]# cd ../software/mha4mysql-manager-0.52/
[[email protected] mha4mysql-manager-0.52]# perl Makefile.PL
[[email protected] mha4mysql-manager-0.52]# make && make install
3:编辑配置文件
[[email protected] mha4mysql-manager-0.52]# mkdir /etc/masterha
[[email protected] mha4mysql-manager-0.52]# mkdir -p /masterha/app1
[[email protected] mha4mysql-manager-0.52]# cp samples/conf/* /etc/masterha/
[[email protected] mha4mysql-manager-0.52]# cat /etc/masterha/app1.cnf
[server default]
manager_workdir=/masterha/app1
manager_log=/masterha/app1/manager.log
user=root
password=123456
ssh_user=root
repl_user=r_test
repl_password=123456
ping_interval=1
shutdown_script=""
#master_ip_failover_script="/usr/local/bin/master_ip_failover"
master_ip_online_change_script=""
report_script=""
[server1]
hostname=172.25.254.225
master_binlog_dir="/mydata"
candidate_master=1
[server2]
hostname=172.25.254.126
master_binlog_dir="/mydata"
candidate_master=1
4:配置manager节点和node节点以及node节点间的ssh公钥信任
[[email protected] ~]# ssh-keygen -t rsa
[[email protected] ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
[[email protected] ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
[[email protected] ~]# ssh 172.25.254.225 "ifconfig |grep ‘inet addr‘ |head -1"
inet addr:172.25.254.225 Bcast:172.25.254.255 Mask:255.255.255.0
[[email protected] ~]# ssh 172.25.254.126 "ifconfig |grep ‘inet addr‘ |head -1"
inet addr:172.25.254.126 Bcast:172.25.254.255 Mask:255.255.255.0
5:测试ssh连接
[[email protected] ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf
Wed Jun 6 11:11:25 2012 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Wed Jun 6 11:11:25 2012 - [info] Reading application default configurations from /etc/masterha/app1.cnf..
Wed Jun 6 11:11:25 2012 - [info] Reading server configurations from /etc/masterha/app1.cnf..
Wed Jun 6 11:11:25 2012 - [info] Starting SSH connection tests..
Wed Jun 6 11:11:25 2012 - [debug]
6:测试主从复制情况,默认使用root用户连接
mysql> select user,host,password from mysql.user;
+--------+----------------+-------------------------------------------+
| user | host | password |
+--------+----------------+-------------------------------------------+
| root | localhost | |
| root | dg53.yang.com | |
| root | 127.0.0.1 | |
| root | ::1 | |
| | localhost | |
| | dg53.yang.com | |
| r_test | 192.168.123.14 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+--------+----------------+-------------------------------------------+
7 rows in set (0.08 sec)
mysql> use mysql;
Database changed
mysql> update user set host=‘192.168.123.%‘ where user=‘r_test‘;
Query OK, 1 row affected (0.05 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> commit;
Query OK, 0 rows affected (0.01 sec)
mysql> update user set host=‘192.168.123.%‘ where host=‘localhost‘ and user=‘root‘ and password=‘‘;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update user set password=PASSWORD(‘123456‘) where user=‘root‘ and host=‘192.168.123.%‘;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)
[[email protected] ~]# whereis mysqlbinlog
mysqlbinlog: /usr/bin/mysqlbinlog
[[email protected] ~]# mv /usr/bin/mysql* /tmp
[[email protected] ~]# mv /usr/bin/mysql* /tmp
[[email protected] ~]# ln -s /usr/local/mysql5.5.25/bin/* /usr/local/bin/
[[email protected] ~]# ln -s /usr/local/mysql5.5.25/bin/* /usr/local/bin/
[[email protected] ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf
Wed Jun 6 12:39:03 2012 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Wed Jun 6 12:39:03 2012 - [info] Reading application default configurations from /etc/masterha/app1.cnf..
Wed Jun 6 12:39:03 2012 - [info] Reading server configurations from /etc/masterha/app1.cnf..
Wed Jun 6 12:39:03 2012 - [info] MHA::MasterMonitor version 0.52.
Wed Jun 6 12:39:03 2012 - [info] Dead Servers:
Wed Jun 6 12:39:03 2012 - [info] Alive Servers:
Wed Jun 6 12:39:03 2012 - [info] 192.168.123.13(192.168.123.13:3306)
Wed Jun 6 12:39:03 2012 - [info] 192.168.123.14(192.168.123.14:3306)
Wed Jun 6 12:39:03 2012 - [info] Alive Slaves:
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
Wed Jun 6 12:39:03 2012 - [info] Replicating from 192.168.123.13(192.168.123.13:3306)
Wed Jun 6 12:39:03 2012 - [info] Primary candidate for the new Master (candidate_master is set)
Wed Jun 6 12:39:03 2012 - [info] Current Alive Master: 192.168.123.13(192.168.123.13:3306)
Wed Jun 6 12:39:03 2012 - [info] Checking slave configurations..
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).
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).
Wed Jun 6 12:39:03 2012 - [info] Checking replication filtering settings..
Wed Jun 6 12:39:03 2012 - [info] binlog_do_db= bbs,test, binlog_ignore_db= mysql
Wed Jun 6 12:39:03 2012 - [info] Replication filtering check ok.
Wed Jun 6 12:39:03 2012 - [info] Starting SSH connection tests..
Wed Jun 6 12:39:05 2012 - [info] All SSH connection tests passed successfully.
Wed Jun 6 12:39:05 2012 - [info] Checking MHA Node version..
Wed Jun 6 12:39:05 2012 - [info] Version check ok.
Wed Jun 6 12:39:05 2012 - [info] Checking SSH publickey authentication and checking recovery script configurations on the current master..
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
Wed Jun 6 12:39:05 2012 - [info] Connecting to [email protected](172.25.254.125)..
Creating /var/tmp if not exists.. ok.
Checking output directory is accessible or not..
ok.
Binlog found at /mydata, up to mysql-bin.000011
Wed Jun 6 12:39:06 2012 - [info] Master setting check done.
Wed Jun 6 12:39:06 2012 - [info] Checking SSH publickey authentication and checking recovery script configurations on all alive slave servers..
Wed Jun 6 12:39:06 2012 - [info] Executing command : apply_diff_relay_logs --command=test --slave_user=root --slave_host=172.25.254.225 --slave_ip=172.25.254.225 --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
Wed Jun 6 12:39:06 2012 - [info] Connecting to [email protected](172.25.254.225)..
Checking slave recovery environment settings..
Opening /mydata/relay-log.info ... ok.
Relay log found at /mydata, up to dg54-relay-bin.000019
Temporary relay log file is /mydata/dg54-relay-bin.000019
Testing mysql connection and privileges.. done.
Testing mysqlbinlog output.. done.
Cleaning up test file(s).. done.
Wed Jun 6 12:39:06 2012 - [info] Slaves settings check done.
Wed Jun 6 12:39:06 2012 - [info] Checking replication health on 172.25.254.225
Wed Jun 6 12:39:06 2012 - [info] ok.
Wed Jun 6 12:39:06 2012 - [warning] master_ip_failover_script is not defined.
Wed Jun 6 12:39:06 2012 - [warning] shutdown_script is not defined.
Wed Jun 6 12:39:06 2012 - [info] Got exit code 0 (Not master dead).
MySQL Replication Health is OK.
7:启动管理节点进程
[[email protected] ~]# nohup masterha_manager --conf=/etc/masterha/app1.cnf > /tmp/mha_manager.log < /dev/null 2>&1 &
[1] 25516
[[email protected] ~]# masterha_check_status --conf=/etc/masterha/app1.cnf
app1 (pid:25516) is running(0:PING_OK), master:172.25.254.125
三:测试failover过程
1:当前主库为172.25.254.125,关闭主库
mysql> show slave hosts;
+-----------+------+------+-----------+
| Server_id | Host | Port | Master_id |
+-----------+------+------+-----------+
| 2 | | 3306 | 1 |
+-----------+------+------+-----------+
1 row in set (0.00 sec)
[[email protected] ~]# service mysqld stop
Shutting down MySQL...[ OK ]
2:在管理节点上观察日志输出
[[email protected] ~]# 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 172.25.254.125(172.25.254.125: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 172.25.254.125 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 172.25.254.125(172.25.254.125: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..
3:在原从库192.168.123.14上查看结果
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000023 | 107 | bbs,test | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 172.25.254.125
Master_User: r_test
Master_Port: 3306
Connect_Retry: 60
Master_Log_File:
Read_Master_Log_Pos: 4
Relay_Log_File: dg54-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File:
Slave_IO_Running: No
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 0
Relay_Log_Space: 126
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.00 sec)
ERROR:
No query specified