MySQLMHA高可用环境搭建
简介:
MHA(Master High
Availability)目前在MySQL高可用方面是一个相对成熟的解决方案。
该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。
目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器。
官方介绍:https://code.google.com/p/mysql-master-ha/
图01展示了如何通过MHA Manager管理多组主从复制。可以将MHA工作原理总结为如下:
(1)从宕机崩溃的master保存二进制日志事件(binlog events);
(2)识别含有最新更新的slave;
(3)应用差异的中继日志(relay log)到其他的slave;
(4)应用从master保存的二进制日志事件(binlog events);
(5)提升一个slave为新的master;
(6)使其他的slave连接新的master进行复制;
MHA软件由两部分组成,Manager工具包和Node工具包,具体的说明如下。
Manager工具包主要包括以下几个工具:
复制代码
masterha_check_ssh 检查MHA的SSH配置状况
masterha_check_repl 检查MySQL复制状况
masterha_manger 启动MHA
masterha_check_status 检测当前MHA运行状态
masterha_master_monitor 检测master是否宕机
masterha_master_switch 控制故障转移(自动或者手动)
masterha_conf_host 添加或删除配置的server信息
复制代码
Node工具包(这些工具通常由MHA
Manager的脚本触发,无需人为操作)主要包括以下几个工具:
save_binary_logs 保存和复制master的二进制日志
apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs 清除中继日志(不会阻塞SQL线程)
部署
角色 IP地址
=========================
Master 192.168.60.57
Slave 192.168.60.58
Slave 192.168.60.59
Monitor host 192.168.60.59
[if !supportLists]1. [endif]Mysql 服务器安装部署
分别在三台机器上分别部署mysql(基于GTID,ROW模式)
参照链接http://www.cnblogs.com/zfxJava/p/6004188.html配置
用户名和密码设置相同root/Pnt2017
[if !supportLists]2. [endif]把上面的三个mysql节点配置成1主两从(192.168.60.57主,192.168.60.58从,192.168.60.59从)
1、配置主库:
1)、授权给从数据库服务器
在192.168.60.57,192.168.60.58上
mysql> GRANTREPLICATION SLAVE ON *.* to 'rep'@'192.168.60.%' identified by 'reppasswd';
mysql>FLUSHPRIVILEGES;
2、配置从库:
分别在192.168.60.58,192.168.60.59上
mysql>stopslave;
mysql> CHANGEMASTER TO MASTER_HOST='192.168.60.57', MASTER_USER='rep',MASTER_PASSWORD='reppasswd', MASTER_AUTO_POSITION=1;
mysql>startslave;
mysql> showslave status\G;
查看slave的状态,如果下面两项值为YES,则表示配置正确:
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
三台机器相互免密登录配置
分别在192.168.60.57,192.168.60.58,192.168.60.59上执行下面的
sudo su - root
ssh-keygen 一直按回车
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@192.168.60.57
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@192.168.60.58
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@192.168.60.59
验证免密码登录配置成功:
在192.168.60.57,192.168.60.58,192.168.60.59上执行,sshroot@192.168.60.58;sshroot@192.168.60.59;ssh root@192.168.60.57如果不提示输入密码则表示配置好了;
创建MHA管理用户,在master192.168.60.57上创建。
mysql> grant all privileges on *.* to
'mha'@'192.168.60.%' identified by 'mhapwd';
mysql> flush privileges;
Mha node和管理节点安装部署
1.把虚IP漂移perl脚本,mha 检测脚本,mha管理节点,mha node节点ftp到服务器/home/admin/soft
Mha node安装
在192.168.60.57,192.168.60.58,192.168.60.59
查看perl版本号
perl -MShell -e "print\"module installed\n\""
perl -Mperl-DBD-MySQL -e "print\"moduleinstalled\n\""
安装perl支持包
yum -y install perl-DBD-MySQL ncftp perl-DBI
安装mha node软件包
rpm -ivh mha4mysql-node-0.57-0.el7.noarch.rpm
Mha manager安装以及配置
在192.168.60.59上
[if !supportLists]1. [endif]确认你的CentOS 的版本首先通过以下命令确认你的CentOS 版本
$ cat /etc/redhat-release CentOS release 6.4 (Final)
2.
下载EPEL 的rpm 安装包现在从上面的地址下载CentOS 版本所对应的EPEL 的版本
$ wgethttp://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
3. 安装EPEL
通过以下命令安装EPEL 软件包
$ sudo rpm -ivh epel-release-6-8.noarch.rpm
安装perl支持软件包
yum -y install perl-Cofig-Tiny perl-Time-HiRes.x86_64perl-Parallel-ForkManager perl-Log-Dispatch-Perl.noarch perl-DBD-MySQL ncftp
安装mha manager
rpm -ivh mha4mysql-manager-0.57......rpm
在主节点192.168.60.57上创建虚IP
/sbin/ifconfig eth0:1 192.168.60.90/24
用ip addr 查看配置情况
注释掉(删除VIP:/sbin/ifconfig eth0:1 down)
mha管理节点配置
在192.168.60.59上
mkdir -p /etc/mha
mkdir -p /home/mysql_mha
cd /etc/mha
vi mysql_mha.cnf
[server default]
user=mha
password=mhapwd
manager_workdir=/mnt/db/mysql_mha
manager_log=/mnt/db/mysql_mha/manager.log
remote_workdir=/mnt/db/mysql_mha
ssh_user=root
repl_user=rep
repl_password=reppasswd
ping_interval=1
master_binlog_dir=/mnt/db/mysql/data
master_ip_failover_script=/usr/bin/mha_master_ip_failover.pl
secondary_check_script=/usr/bin/masterha_secondary_check-s 192.168.60.58 -s 192.168.60.59 -s 192.168.60.57
[server1]
hostname=192.168.60.57
candidate_master=1
[server2]
hostname=192.168.60.58
candidate_master=1
[server3]
hostname=192.168.60.59
no_master=1
mha manager检测命令以及启动监控
[if !supportLists]1. [endif]检查SSH配置(node5 Monitor 监控节点上操作),如下:
# masterha_check_ssh--conf=/etc/mha/mysql_mha.cnf
[if !supportLists]2. [endif]检查整个复制环境状况(node5 监控节点上操作),如下:
# masterha_check_repl--conf=/etc/mha/mysql_mha.cnf
[if !supportLists]3. [endif]开启MHA Manager监控()如下:
# nohup masterha_manager --conf=/etc/mha/mysql_mha.cnf--remove_dead_master_conf --ignore_last_failover < /dev/null> /mnt/db/mysql_mha/manager.log 2>&1 &
参数说明:
--remove_dead_master_conf #该参数代表当发生主从切换后,老的主库的ip将会从配置文件中移除。
--manger_log #日志存放位置
--ignore_last_failover #在缺省情况下,如果MHA检测到连续发生宕机,会生成mysql_mha.failover.complete文件,会造成MHA管理进程无法启动。
4. 查看MHA Manager监控是否正常:
# masterha_check_status --conf=/etc/mha/mysql_mha.cnf
5. 查看启动日志(node5操作)如下:
# tail -n20 /mnt/db/mysql_mha/manager.log
6. 关闭MHA Manage监控:
(1) 关闭
# masterha_stop --conf=/etc/mha/mysql_mha.cnf
(2) 启动
# nohup masterha_manager --conf=/etc/mha/mysql_mha.cnf--remove_dead_master_conf --ignore_last_failover < /dev/null> /mnt/db/mysql_mha/manager.log 2>&1
六、MHA Failover切换
1. 自动Failover切换
(1) 模拟master mysql关闭
在192.168.60.57上执行servicemysqld stop
(2)VIP将会切换到node2
(3) /etc/mha/mysql_mha.cnf中将原主服务器配置文件清掉。
(4) masterha_manager监控进程会自动退出关闭,并在/mnt/db/mysql_mha下生成mysql_mha.failover.complete文件,manager.log会记录全过程,从服务器会自动从新的主服务器复制。
(5) 原主服务器mysqld启动的,需要清掉/mnt/db/mysql_mha 下生成mysql_mha.failover.complete文件,添加node1配置文件到/etc/mha/mysql_mha.cnf,通过manager.log中的记录的故障点,重新同步主服务器,成为从节点。
在57上用ip addr 查看虚IP是否 漂移
在58上用ip addr查看虚IP 90是否漂移过来
在59上执行show slave
status\G 查看主节点是否已经是58了.
重启57上的mysql 服务:service mysqld restart;
mysql -uroot -pPnt2017
mysql>stop slave;
mysql> CHANGE MASTER TOMASTER_HOST='192.168.60.58', MASTER_USER='rep', MASTER_PASSWORD='Pnt2017',MASTER_AUTO_POSITION=1;
mysql>start slave;
mysql> show slave status\G;
可以看到57的主节点已经是58了,后续可以类似的down掉58上的mysql 服务,虚IP飘到57上,主节点切到57上;
也可以进行手动切换命令如下:
masterha_master_switch--master_state=dead --conf=/etc/mha/mysql_mha.cnf--dead_master_host=192.168.60.57 --dead_master_port=3306--new_master_host=192.168.60.58 --new_master_port=3306 --ignore_last_failover
参考链接:http://www.linuxidc.com/Linux/2016-05/130925.htm
http://www.cnblogs.com/gomysql/p/3675429.html