mysql>grant all privileges on *.* to 'mha'@'192.168.56.%'> 创建软连接
如果MySQL服务不是yum安装,要在所有MySQLServer上,无论主从都要执行如下两个命令。
# ln-s /application/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
# ln-s /application/mysql/bin/mysql /usr/bin/mysql 配置SSH公钥认证
几台服务器进行相同操作,仅分发到的服务不同而已,这里仅列出一台。
###
添加统一用户
在生产环境下使用root用户不安全,也不规范。并且环境统一也比较方便管理,因此可以创建统一的普通用户来进行。
##### 创建密钥对
[root@mha-manager ~]#ssh-keygen -t dsa 将公钥分发到各个主机上
[root@mha-manager ~]#ssh-copy-id -i .ssh/id_dsa.pub root@192.168.56.12
[root@mha-manager ~]#ssh-copy-id -i .ssh/id_dsa.pub root@192.168.56.13
[root@mha-manager ~]#ssh-copy-id -i .ssh/id_dsa.pub root@192.168.56.14 验证
[root@mha-manager ~]# ssh root@192.168.56.12
Last login: Thu May 1921:05:07 2016 from mysql-master
[root@mysql-master ~]# exit
[root@mha-manager ~]# ssh root@192.168.56.13
Last login: Wed May 1812:43:20 2016 from 172.16.1.1
[root@mysql-slave01 ~]# exit
[root@mha-manager ~]# ssh root@192.168.56.14
Last login: Wed May 1817:56:40 2016 from 172.16.1.1
[root@mysql-slave02 ~]# exit 配置hosts
[root@mha-manager ~]# vim /etc/hosts
192.168.56.11 mha-manager
192.168.56.12 mysql-master
192.168.56.13 mysql-slave01
192.168.56.14 mysql-slave02
root@mha-manager ~]# scp /etc/hosts root@192.168.56.12:/etc/
hosts 100% 271 0.3KB/s 00:00
[root@mha-manager ~]# scp /etc/hosts root@192.168.56.13:/etc/
hosts 100% 271 0.3KB/s 00:00
[root@mha-manager ~]# scp /etc/hosts root@192.168.56.14:/etc/
hosts 100% 271 0.3KB/s 00:00 部署MHANode
在所有运行MySQL服务的服务器上运行MHA Node,无论是master还是slave。由于MHA Manager需要MHA Node,因此在运行MHA Manager的服务器上也需要安装MHA Node。当然也可以在任意一个slave上运行MHA Manager。因为部署步骤相同,所以就列出一个安装步骤(在mha-manager服务器上) 创建目录
[root@mha-manager ~]# mkdir /softs 安装MHA Node
[root@mha-manager ~]# rpm-ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@mha-manager ~]# yum install -y perl-DBD-MySQL perl-DBI cpan
[root@mha-manager ~]# cd/softs/
[root@mha-manager softs]# git clone https://github.com/kevin-hao/mha-node.git
[root@mha-manager softs]# cd mha-node/
[root@mha-manager mha-node]#perl Makefile.PL
[root@mha-managermha-node]#make && make install
[root@mha-manager mha-node]#cd
其它MySQL服务器上的部署步骤一样,再次省略。 部署MHAManager
MHA Manager仅运行在作为manager的服务器上。当然也可以部署在其中任意一台slave上。 安装MHA Manager
[root@mha-manager ~]# yum install -y perl perl-Config-Tiny perl-Email-Date-Forma perl-Log-Dispatch perl-MIME-Liteperl-MIME-Types perl-Mail-Sender perl-Mail-Sendmail perl-MailTools perl-Parallel-ForkManagerperl-Params-Validate perl-Time-HiRes perl-TimeDate
[root@mha-manager ~]# cd /softs/
[root@mha-manager softs]# git clone https://github.com/kevin-hao/mha-manager.git
[root@mha-manager softs]# cd mha-manager/
[root@mha-manager mha-manager]#perl Makefile.PL
[root@mha-manager mha-manager]#make && make install
[root@mha-manager mha-manager]#cd 规范mha目录
[root@mha-manager ~]# mkdir -p /application/mha/conf
[root@mha-manager ~]# cp /softs/mha-manager/samples/conf/* /application/mha/conf/ 配置app1.cnf
[root@mha-manager ~]#mkdir -p /application/mha/workstatus/app1
[root@mha-manager ~]# cd /application/mha/conf/
[root@mha-manager conf]# cp app1.cnf app1.cnf.ori
[root@mha-manager conf]# vim app1.cnf
[server default]
port=3306
user=mha
password=123456
repl_user=repuser
repl_password=123456
remote_workdir=/var/log/mha/app1
master_binlog_dir=/data/mysql_log/
manager_workdir=/application/mha/workstatus/app1
manager_log=/application/mha/logs/app1.log
[server1]
hostname=mysql-master
[server2]
hostname=mysql-slave01
candidate_master=1
[server3]
hostname=mysql-slave02
candidate_master=1 配置全局配置文件
[root@mha-manager conf]# cp masterha_default.cnf masterha_default.cnf.ori
[root@mha-manager conf]# vim masterha_default.cnf
[server default]
log-level=debug
check_repl_delay=1
check_repl_filter=1
ping_interval=5
ping_type=CONNECT
[root@mha-manager conf]# cd 检查配置
操作在mha-manager上进行 检查ssh连接性
[root@mha-manager ~]#masterha_check_ssh --conf=/application/mha/conf/app1.cnf
Wed May 25 23:12:39 2016 -[warning] Global configuration file /etc/masterha_default.cnf not found.Skipping.
Wed May 25 23:12:39 2016 -[info] Reading application default configuration from/application/mha/conf/app1.cnf..
Wed May 25 23:12:39 2016 -[info] Reading server configuration from /application/mha/conf/app1.cnf..
Wed May 25 23:12:39 2016 -[info] Starting SSH connection tests..
Wed May 25 23:12:40 2016 -[debug]
Wed May 25 23:12:39 2016 -[debug] Connecting via SSH fromroot@mysql-master(192.168.56.12:22) to root@mysql-slave01(192.168.56.13:22)..
Wed May 25 23:12:40 2016 -[debug] ok.
Wed May 25 23:12:40 2016 -[debug] Connecting via SSH fromroot@mysql-master(192.168.56.12:22) to root@mysql-slave02(192.168.56.14:22)..
Wed May 25 23:12:40 2016 -[debug] ok.
Wed May 25 23:12:41 2016 -[debug]
Wed May 25 23:12:40 2016 -[debug] Connecting via SSH fromroot@mysql-slave01(192.168.56.13:22) to root@mysql-master(192.168.56.12:22)..
Wed May 25 23:12:40 2016 -[debug] ok.
Wed May 25 23:12:40 2016 -[debug] Connecting via SSH fromroot@mysql-slave01(192.168.56.13:22) to root@mysql-slave02(192.168.56.14:22)..
Wed May 25 23:12:41 2016 -[debug] ok.
Wed May 25 23:12:41 2016 -[debug]
Wed May 25 23:12:40 2016 -[debug] Connecting via SSH fromroot@mysql-slave02(192.168.56.14:22) to root@mysql-master(192.168.56.12:22)..
Wed May 25 23:12:41 2016 -[debug] ok.
Wed May 25 23:12:41 2016 -[debug] Connecting via SSH fromroot@mysql-slave02(192.168.56.14:22) to root@mysql-slave01(192.168.56.13:22)..
Wed May 25 23:12:41 2016 -[debug] ok.
Wed May 25 23:12:41 2016 -[info] All SSH connection tests passed successfully. 检查主从复制状态
[root@mha-manager ~]# masterha_check_repl --conf=/application/mha/conf/app1.cnf
***********中间省略*************
Wed May 25 23:13:19 2016 -[info]
mysql-master(192.168.56.12:3306)(current master)
+--mysql-slave01(192.168.56.13:3306)
+--mysql-slave02(192.168.56.14:3306)
Wed May 25 23:13:19 2016 -[info] Checking replication health on mysql-slave01..
Wed May 25 23:13:19 2016 -[info] ok.
Wed May 25 23:13:19 2016 -[info] Checking replication health on mysql-slave02..
Wed May 25 23:13:19 2016 -[info] ok.
Wed May 25 23:13:19 2016 -[warning] master_ip_failover_script is not defined.
Wed May 25 23:13:19 2016 -[warning] shutdown_script is not defined.
Wed May 25 23:13:19 2016 -[info] Got exit code 0 (Not master dead).
MySQL Replication Health isOK. /dev/null2>&1 & 检查manager状态
[root@mha-manager ~]#masterha_check_status --conf=/application/mha/conf/app1.cnf
app1 (pid:27335) isrunning(0:PING_OK), master:mysql-master master故障切换测试
在master上停止mysqld进程,然后查看log可以看出进行了切换。
[root@mysql-master ~]#/etc/init.d/mysqld stop
[root@mha-manager ~]# tail -F /application/mha/logs/app1.log
----- Failover Report -----
app1: MySQL Master failovermysql-master(192.168.56.12:3306) to mysql-slave01(192.168.56.13:3306) succeeded
Mastermysql-master(192.168.56.12:3306) is down!
Check MHA Manager logs atmha-manager:/application/mha/logs/app1.log for details.
Started automated(non-interactive)failover.
The latest slavemysql-slave01(192.168.56.13:3306) has all> Selectedmysql-slave01(192.168.56.13:3306) as a new master.
mysql-slave01(192.168.56.13:3306):OK: Applying all logs succeeded.
mysql-slave02(192.168.56.14:3306):This host has the latest>
Generating> mysql-slave02(192.168.56.14:3306):OK: Applying all logs succeeded. Slave started, replicating frommysql-slave01(192.168.56.13:3306)
mysql-slave01(192.168.56.13:3306):Resetting slave info succeeded.
Master failover tomysql-slave01(192.168.56.13:3306) completed successfully. 在mysql-slave02上查看
[root@mysql-slave02 ~]#mysql -uroot -p123456 -e "show slave status\G"
Warning: Using a password onthe command line interface can be insecure.
***************************1. row ***************************
Slave_IO_State: Waiting formaster to send event Master_Host: 192.168.56.13 //master改变了
Master_User: repuser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 120