赞
踩
MHA (Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,MHA是由日本人开发,是一套优秀的MysQL故障切换和主从复制的高可用软件
在MysQL故障切换的过程中,MHA能做到0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能够最大程度上保证数据库的一致性,以达到真正意义上的高可用
MHA由perl语言编写,该工具仅仅使用于MySQLReplication坏境,目的在于维持Master主库的高可用性
MHA是基于标准的MySQL主从复制(异步/半同步)
MHA由两部分组成管理节点(MHA manager)和数据节点(MHA Node)两部分组成MHA manager 可以单独部署在一台服务器上,可以部署在一台slave上面
主从复制架构:主从复制(一主多从) ;MHA架构(多主多从)﹔MMM架构(3主多从)
自动故障切换过程中,MHA总会试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失
但这并不总是可行,例如如果主服务器硬件故障或者无法通过ssh访问,MHA则无法保存二进制日志,只能进行故障转移而丢失了最新的数据
使用MySQL5.5的半同步复制,可以大大降低数据去失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性,有时候可故意设置从节点慢于主节点,当发生意外删除数据库倒是数据丢失时可从从节点二进制日志中恢复。
为了解决故障切换,数据尽可能的保存,以及所有节点日志的一致性
MHA Manager(管理节点)
Manager作用:可以借助于node组件,实现健康检查(ssh,主从复制),故障切换功能
MHA Node(数据节点):部署在所有mysql服务器
node组件的作用:
1.定时汇报给主manager节点mysql服务的状态
2.监控本地mysql服务功能
1.预选:先去除binlog和relay log相差100M的日志
2.优选:再从服务器选择同步数据量较多的从服务器
基于上一篇博文MySQL主从复制,本篇来配置MHA
MySQL服务器
master:192.168.80.2 安装node组件
slave1:192.168.80.3 安装node组件
slave2:192.168.80.4 安装node组件
MHA-manager :
192.168.80.1 管理节点,安装 manager 组件与node组件
定义节点服务器名称
hostnamectl set-hostname manager;
安装编译依赖环境(三台MySQL服务器)
yum -y install ncurses-devel gcc-c++ perl-Module-Install
master、slave1、slave2分别做两个软链接 第一个是mysql命令
第二个mysqlbinlog是节点恢复
ln -s /usr/local/mysql/bin/mysql /usr/sbin
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin
配置MySQL 一主两从
⭐⭐在所有数据库节点上授权两个用户,一个是从库同步使用,另一个是manager使用
grant replication slave on *.* to 'myslave'@'192.168.80.%' identified by '123456';
grant all privileges on *.* to 'mha'@'192.168.80.%' identified by 'manager';
⭐⭐下面三条授权理论上不用添加,但是实验环境通过MHA检查MySQL主从报错,
报两个从库通过主机名连接不上主库,所以所有数据库都需要添加以下授权
通过mha检查的时候,是通过主机名的形式进行监控,这种情况会容易报错
grant all privileges on *.* to 'mha'@'master' identified by 'manager';
grant all privileges on *.* to 'mha'@'slave1' identified by 'manager';
grant all privileges on *.* to 'mha'@'slave2' identified by 'manager';
所有从库开启只读功能(不会对超级管理员super生效,只会对普通用户)
set global read_only=1;
只读功能验证
在master服务器上远程登录slave1
mysql -umyslave -p123456 -h 192.168.80.3-P 3306
创建一个表,发出报错信息
flush privileges;
在master上查看二进制文件和同步点
show master status;
change master to master_host='192.168.80.2',master_user='myslave',master_password='123456',master_log_file='master-bin.000002',master_log_pos=3018;
start slave;
show slave status\G;
在所有服务器上安装MHA依赖环境,首先安装epel源,只有安装了源 perl才会有
安装epel源,并且不进行gph检查
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN
yum install epel-release --nogpgcheck -y
yum install -y perl-DBD-MySQL \ #perl针对于mysql数据库
perl-Config-Tiny \ #从配置文件中提拿其中的值
perl-Log-Dispatch \ #log-日志
perl-Parallel-ForkManager \ #多线程管理
perl-ExtUtils-CBuilder \
#扩展工具CBuilder MakeMaker
perl-ExtUtils-MakeMaker \
perl-CPAN #cpan perl中的数据库
注意:MHA 软件包对于每个操作系统版本不一样,这里Centos7.4必须选择0.57版本
在所有服务器上必须先安装node组件,最后在MHA-manager节点上安装manager组件
因为manager依赖node组件,
ntpdate ntp.aliyun.com
上传mha4mysql-node-0.57.tar.gz 至/opt目录,解压
tar zxf mha4mysql-node-0.57.tar.gz -C /root
cd /root
cd mha4mysql-node-0.57
perl Makefile.PL
make && make install
注意:以上操作在四台服务器上都要一起做
必须先安装node才能安装manager组件
上传mha4mysql-manager-0.57.tar.gz 至manager服务器的/opt目录下解压
tar zxf mha4mysql-manager-0.57.tar.gz -C /root
cd /root/mha4mysql-manager-0.57
perl Makefile.PL
make && make install
manager 安装后在/usr/local/bin目录下会生成几个工具,主要包括以下:
masterha-check_ssh 检查MHA的SSH配置状况(免交互)
masterha_check_repl 检查MySQL复制状况
masterha_manager 启动manager的脚本
masterha_check_status 检查当前MHA运行状态
masterha_master_monitor 检查master是否宕机
masterha_master_switch 控制故障转移(自动或者手动)
masterha_conf_host 添加或删除配置的server信息
masterha_stop 关闭manager
node 安装后也会在/usr/local/bin目录下生成几个脚本,需要进行检查,主要包括以下
save_binary_logs #保存和复制master的二进制日志
apply_diff_relay_logs #识别差异的中继日志时间,并将其差异的事件应用于其他的slave
filter_mysqlbinlog #去除不必要的ROLLBACK回滚事件(MHA 已不适用这个工具)
purge_relay_logs #清除中继日志(不会阻塞 SQL线程)
在四台服务器上都配置无密码认证
ssh-keygen -t rsa #一路回车
ssh-copy-id 192.168.80.1
ssh-copy-id 192.168.80.2
ssh-copy-id 192.168.80.3
ssh-copy-id 192.168.80.4
1、在MHA节点上复制相关脚本到/usr/local/bin目录
cp -ra /root/mha4mysql-manager-0.57/samples/scripts/ /usr/local/bin
#-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容
#-r: 递归
拷贝后会有四个执行文件
#去除#开头的部分,PS:第一行添加#
% s/^#//
创建MHA软件目录并拷贝配置文件
mkdir /etc/masterha
cp /root/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha/
vim /etc/masterha/app1.cnf
[server default] manager_log=/var/log/masterha/app1/manager.log manager_workdir=/var/log/masterha/app1 master_binlog_dir=/usr/local/mysql/data master_ip_failover_script=/usr/local/bin/master_ip_failover master_ip_online_change_script=/usr/local/bin/master_ip_online_change password=manager ping_interval=1 remote_workdir=/tmp repl_password=123456 repl_user=myslave secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.80.3 -s 192.168.80.4 shutdown_script="" ssh_user=root user=mha [server1] hostname=192.168.80.2 port=3306 [server2] candidate_master=1 hostname=192.168.80.3 check_repl_delay=0 port=3306 [server3] hostname=192.168.80.4 port=3306
masterha_check_repl -conf=/etc/masterha/app1.cnf
[root@manager ~]# nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
[1] 52037
[root@manager ~]# jobs
[1]+ 运行中 nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
[root@manager ~]#
[root@manager ~]# masterha_check_status --conf=/etc/masterha/app1.cnf
app1 (pid:52037) is running(0:PING_OK), master:192.168.80.2
[root@manager ~]#
[root@manager ~]# tail -f /var/log/masterha/app1/manager.log #实时监控日志
此时将master停止,slave1称为新的master
后台重新启动MHA后,
[root@manager ~]# masterha_check_status --conf=/etc/masterha/app1.cnf
app1 (pid:52937) is running(0:PING_OK), master:192.168.80.3 #虚拟IP变成192.168.80.3
3.5.1启动数据库
3.5.2 将其改为slave,加入主从
change master to master_host='192.168.80.3',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=2891;
;
start slave;
3.5.3修改mha主配置文件
[root@manager ~]# vim /etc/masterha/app1.cnf //插入记录,因为在其失效时,会自动删除
[server1]
hostname=192.168.80.2
port=3306
masterha_check_repl -conf=/etc/masterha/app1.cnf
查看到当前的master节点
masterha_check_status --conf=/etc/masterha/app1.cnf
总结:
MHA 故障转移
以本质而言分为两部分
①bin-log尽可能的save (抢救)并保存在/tmp目录,同时将master 的VIP(192.168.80.20)“飘逸”到主-备节点,并起起来
②新master 的bin-log会与master的bin-log,进行同步检测,尽量趋于一致,同时其他的slave服务器会变更master,指向新master(slavel 192.168.80.3 change master to new_master);最后进行主从复制check
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。