mysql高可用之MHA

环境

系统
redhat 6.5
selinux=disabled
iptables=off

管理节点
server1 : 172.25.60.1/24

数据节点
master :(server2)172.25.60.2/24
slave1:(server3)172.25.60.3/24
slave2:(server4)172.25.60.4/24

配置MHA

1.首先配置mysql主从复制

这里我配置了
master:server2
slave:server3 & 4

2.配置ssh互相通信

在所有结点(包括数据结点和管理结点)设置ssh密钥

ssh-keygen

在管理结点上(分发公钥给所有数据结点):

##server1(172.25.60.1):
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.60.2
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.60.3
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.60.4

在数据结点上(分发公钥给所有数据结点):

##server2(master):
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.60.3
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.60.4

##server3(slave):
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.60.2
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.60.4

##server4(slave):
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.60.2
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.60.3

3.配置数据结点

(1)安装需要的包
mha4mysql-node-0.54-0.el6.noarch.rpm

yum install perl-devel perl-CPAN perl-DBD-MySQL -y

rpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm

(2)mysql配置

##**授权监控用户**

shell> mysql -p
Enter password: 
mysql> grant all privileges on *.* to root@'172.25.60.%' identified by 'Westos+101';

4.配置管理结点

(1)需要的包
mha4mysql-manager-0.56-0.el6.noarch.rpm
mha4mysql-node-0.56-0.el6.noarch.rpm

(2)安装依赖性包
可以yum下载的:

yum install perl-devel perl-CPAN perl-DBD-MySQL -y

其他rpm包:

perl-Log-Dispatch-2.27-1.el6.noarch.rpm
perl-Mail-Sender-0.8.16-3.el6.noarch.rpm
perl-Mail-Sendmail-0.79-12.el6.noarch.rpm
perl-MIME-Lite-3.027-2.el6.noarch.rpm
perl-MIME-Types-1.28-2.el6.noarch.rpm
perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm
perl-Config-Tiny-2.12-7.1.el6.noarch.rpm
perl-Email-Date-Format-1.002-5.el6.noarch.rpm

(3)安装

rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm 

(4)配置MHA manger
mkdir -p /etc/masterha/app1   ##创建MHA目录
vim /etc/masterha/app1/app.cnf  ##编辑配置文件

[server default]
manager_workdir=/etc/masterha           ##工作目录
manager_log=/etc/masterha/mha.log       ##日志

password=Westos+101         ##监控密码
user=root                   ##监控用户
ping_interval=1             ##设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行railover

repl_password=Westos+101    ##主从复制用户密码
repl_user=root              ##主从复制用户名

ssh_user=root               ##ssh用户名

[server2]
hostname=172.25.60.2
port=3306
candidate_master=1          
check_repl_delay=0

[server3]
hostname=172.25.60.3
port=3306
candidate_master=1          ##设置为候选master,如果设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个主库不是集群中事件最新的slave
check_repl_delay=0          ##默认情况下如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为一个新的master,因为对于这个slave的恢复需要花费很长时间,通过设置check_repl_delay=0,MHA触发切换在选择一个新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换的过程中一定是新的master

[server4]
hostname=172.25.60.4
port=3306
no_master=1

(4)检测ssh配置

[root@server1 app1]# masterha_check_ssh --conf=/etc/masterha/app1/app.cnf

mysql高可用之MHA_第1张图片

(5)检查MHA配置

[root@server1 app1]# masterha_check_repl --conf=/etc/masterha/app1/app.cnf

mysql高可用之MHA_第2张图片
mysql高可用之MHA_第3张图片

5.MHA Manager 端日常主要操作步骤

(1)启用服务

[root@server1 MHA]# nohup masterha_manager --conf=/etc/masterha/app1/app.cnf > /etc/masterha/app1/mha_manager.log 2>&1 &

当有slave 节点宕掉时,默认是启动不了的,加上 –ignore_fail_on_start 即使有节点宕掉也能启动MHA,如下:

nohup masterha_manager --conf=/etc/masterha/app1/app.cnf --ignore_fail_on_start >/etc/masterha/app1/mha_manager.log 2>&1 &

(2)检查状态
可以使用masterha_check_status –conf=/etc/masterha/app1/app.cnf来查看mha状态
这里写图片描述

注意:
关闭MHA服务的命令:

masterha_stop --conf=/etc/masterha/app1/app.cnf

(3)检查日志

tail -f /etc/masterha/app1/manager.log

(4)主从切换后续工作
主库切换后,把原主库修复成新从库,然后重新检查状态,检查日志,启用服务。原主库数据文件完整的情况下,可通过以下方式找出最后执行的CHANGE MASTER命令:

grep "CHANGE MASTER TO MASTER" /etc/masterha/app1/manager.log | tail -1

(5)检查是否有下列文件,有则删除
发生主从切换后,MHAmanager服务会自动停掉,且在manager_workdir目录下面生成文件app.failover.complete,若要启动MHA,必须先确保无此文件)

测试

自动failover测试
在原master(server2)上:

/etc/init.d/mysqld stop

这里写图片描述

在备用master(server3)上查看master信息:

mysql> show master status\G;

mysql高可用之MHA_第4张图片

在slave(server4)上查看slave信息发现master切换为server3:

mysql> show slave status\G;

mysql高可用之MHA_第5张图片

最后将server2上的mysql重新启用,并设置为slave

mysql> change master to master_host='172.25.60.3',master_user='slave',master_password='Westos+101',MASTER_AUTO_POSITION=1;

mysql高可用之MHA_第6张图片

注意:
自动切换成功后,MHA manager服务就自动停止了,所以需要重启

你可能感兴趣的:(运维,mysql)