MySQL高可用(MHA
MHA的概念
- MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。
- MHA 的出现就是解决MySQL 单点的问题。
- MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。
- MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。
MHA 的组成
- 自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失
- 使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性
- 目前MHA支持一主多从架构,最少三台服务,即一主两从
搭建思路
主从复制+MAH
https://editor.youkuaiyun.com/md/?articleId=118904445
实验环境
//
MySQL服务器
master 192.168.142.142 安装 node 组件
slave1 192.168.142.143 安装 node 组件
slave2 192.168.142.144 安装 node 组件
MHA-manager
192.168.142.141 管理节点,安装 manager 组件与node组件
配置软连接
做好主从复制并重启后,配置软连接
将mysql命令和mysql日志文件软连接到/usr/sbin/便于系统识别
//
[root@slave2 ~]# ln -s /usr/local/mysql/bin/mysql /usr/sbin/
[root@slave2 ~]# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/
配置MySQL一主两从
为防止master挂掉myslave能及时替换,从服务器也需要提权
授权给两个用户myslave和mha
//
grant replication slave on *.* to 'myslave'@'192.168.142.%' identified by '123123';
grant all privileges on *.* to 'mha'@'192.168.142.%' identified by 'manager';
以下三条都是为了防止MHA检查MySQL检查不通过,理论可不加
//
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';
所有从库开启只读功能,刷新权限表
//
mysql> set global read_only=1;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
测试检查
安装MHA
所有服务器安装node,manager服务器还要安装manager组件
在此之前先安装环境
//
[root@manager ~]# yum -y install epel-release --nogpgcheck
[root@manager ~]# yum install -y perl-DBD-MySQL \
> perl-Config-Tiny \
> perl-Log-Dispatch \
> perl-Parallel-ForkManager \
> perl-ExtUtils-CBuilder \
> perl-ExtUtils-MakeMaker \
> perl-CPAN
同步所有服务器时间
//
[root@manager ~]# ntpdate ntp.aliyun.com ##所有服务器都做
24 Jul 19:42:29 ntpdate[92335]: step time server 203.107.6.88 offset -1.348249 sec
安装node和manager
把node组件压缩包拖到所有服务器的opt下,并解压安装
//
[root@manager opt]# tar xf mha4mysql-node-0.57.tar.gz -C /root
[root@manager opt]# cd /root/mha4mysql-node-0.57/
[root@manager mha4mysql-node-0.57]# perl Makefile.PL
[root@manager mha4mysql-node-0.57]# make && make install
安装好node组件后有这几个脚本
把manager压缩包拖到manager服务器的opt下,并解压安装
//
[root@manager opt]# tar xf mha4mysql-manager-0.57.tar.gz -C /root //解压还原
[root@manager opt]# cd /root/mha4mysql-manager-0.57/
[root@manager mha4mysql-manager-0.57]# perl Makefile.PL make && make install
在所有服务器上设置ssh免密登录
//
ssh-keygen -t dsa
ssh-copy-id 192.168.142.141
ssh-copy-id 192.168.142.142
ssh-copy-id 192.168.142.143
ssh-copy-id 192.168.142.144
亲测无密码认证
使用脚本管理VIP
//
[root@manager ~]# cp -ra /root/mha4mysql-manager-0.57/samples/scripts/ /usr/local/bin
[root@manager ~]# ls /usr/local/bin/
[root@manager ~]# ls /usr/local/bin/scripts/
[root@manager ~]# cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin
[root@manager ~]# vim /usr/local/bin/master_ip_failover
创建MHA软件目录
//
[root@manager bin]# mkdir /etc/masterha //创建软件目录
[root@manager bin]# cp /root/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha/ //拷贝配置文件
[root@manager bin]# vim /etc/masterha/app1.cnf //修改为以下配置