1:什么是MHA?
MHA(Master High Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。
MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。
MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。
2:MHA 的组成
MHA由两部分组成:MHAManager (管理节点) MHA Node (数据库节点)
MHA Manager 可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台 slave 节点上。
MHA Manager 会定时探测集群中的 master 节点。
当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master, 然后将所有其他的 slave 重新指向新的 master。
3:MHA 的特点
自动故障切换过程中,MHA从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失
使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日 志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数 据一致性
目前MHA支持一主多从架构,最少三台服务,即一主两从
4.MHA工作原理
目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群必须最少有3台数据库服务器, 一主二从,即一台充当Master,台充当备用Master,另一台充当从库。
MHA Node 运行在每台 MySQL 服务器上
MHAManager 会定时探测集群中的master 节点 当master 出现故障时,它可以自动将最新数据的slave 提升为新的master
然后将所有其他的slave 重新指向新的master,VIP自动漂移到新的master。
整个故障转移过程对应用程序完全透明。
5.MHA部署实施
5.1:搭建主两从架构
准备虚拟机:四台虚拟机:172.25.254.10,172.25.254.20,172.25.254.30,172.25.254.50
准备安装包MHA
172.25.254.50上与172.25.254.10,172.25.254.20,172.25.254.30做免密验证
[root@node4 ~]# ssh-keygen
172.25.254.50上与172.25.254.10做免密验证
[root@node4 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.10
输入密码172.25.254.10主机解析创建成功
172.25.254.50上与172.25.254.20做免密验证
[root@node4 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.20
输入密码172.25.254.20主机解析创建成功
172.25.254.50上与172.25.254.30做免密验证
[root@node4 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.30
输入密码172.25.254.30主机解析创建成功
确定本地解析是否存在
[root@node4 ~]# vim /etc/hosts
5.2:创建半同步模式
还原10,20,30主机的配置文件信息
172.25.254.10与172.25.254.20和172.25.254.30主机创建半同步模式
[root@node1 ~]# vim /etc/my.cnf
停止数据库
[root@node1 ~]# /etc/init.d/mysqld stop
清除mysql数据
[root@node1 ~]# rm -fr /data/mysql/*
对数据库进行初始化
[root@node1 ~]# mysqld --user=mysql --initialize
启动数据库
[root@node1 ~]# /etc/init.d/mysqld start
登录数据库,输入自己的密码
[root@node1 ~]# mysql -uroot -p'LEfu9_uS*B<h'
修改密码'lee'
mysql> alter user root@localhost identified by 'lee';
建立同步用户'lee'
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'lee';
同意远程授权
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
开启半同步模式
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
打开半同步功能
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
mysql> SHOW MASTER STATUS;
mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';
mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';
同理172.25.254.20也进行相应的配置
[root@node2 ~]# vim /etc/my.cnf
停止数据库
[root@node2 ~]# /etc/init.d/mysqld stop
清除mysql数据
[root@node2 ~]# rm -fr /data/mysql/*
对数据库进行初始化
[root@node2 ~]# mysqld --user=mysql --initialize
[root@node2 ~]# /etc/init.d/mysqld start
[root@node2 ~]# mysql -uroot -p'kird_l5Pkg#0'
修改密码
mysql> alter user root@localhost identified by 'lee';
mysql> CHANGE MASTER TO MASTER_HOST='172.25.254.10', MASTER_USER='repl', MASTER_PASSWORD='lee', MASTER_AUTO_POSITION=1;
开启slave模式
mysql> start slave;
加载半同步模块
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
打开半同步功能
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
mysql> STOP SLAVE IO_THREAD;
mysql> START SLAVE IO_THREAD;
mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';
mysql> SHOW SLAVE STATUS\G
172.25.254.20与172.25.254.10主机建立半同步模式成功
172.25.254.30
[root@node3 ~]# vim /etc/my.cnf
停止数据库
[root@node2 ~]# /etc/init.d/mysqld stop
清除mysql数据
[root@node2 ~]# rm -fr /data/mysql/*
[root@node3 ~]# mysql -uroot -p'1;o0/rSwpg2L'
mysql> alter user root@localhost identified by 'lee';
mysql> CHANGE MASTER TO MASTER_HOST='172.25.254.10', MASTER_USER='repl', MASTER_PASSWORD='lee', MASTER_AUTO_POSITION=1;
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
mysql> start slave;
mysql> SHOW SLAVE STATUS\G
172.25.254.30与172.25.254.10建立半同步模式成功
5.3:安装MHA所需要的软件
[root@node4 ~]# cd MHA-7/
[root@node4 MHA-7]# yum install *.rpm
在172.25.254.50传递软件包到172.25.254.10,172.25.254.20和172.25.254.30主机上
[root@node4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.10:/root
[root@node4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.20:/root
[root@node4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.30:/root
172.25.254.10,172.25.254.20和172.25.254.30主机上对传递的包进行安装
[root@node1 ~]# yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
[root@node2 ~]# yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
[root@node3 ~]# yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
172.25.254.50上生成配置文件并解压压缩包
[root@node4 MHA-7]# mkdir /etc/masterha
[root@node4 MHA-7]# tar zxf mha4mysql-manager-0.58.tar.gz
将底下的文件app1.conf进行拷贝
[root@node4 MHA-7]# cd mha4mysql-manager-0.58/
[root@node4 mha4mysql-manager-0.58]# ls[root@node4 mha4mysql-manager-0.58]# cd samples/conf
[root@node4 conf]# cat masterha_default.cnf app1.cnf > /etc/masterha/app1.cnf
进入新拷贝的文件中修改配置文件
[root@node4 conf]# vim /etc/masterha/app1.cnf
由于172.25.254.10,172.25.254.20,172.25.254.30主机不允许建立远程连接
由于创建主从复制,172.25.254.10上建立远程连接就可以全部建立成功
mysql> CREATE USER root@'%' identified by 'lee';
mysql> grant ALL ON *.* to root@'%';
在172.25.254.50主机上进行检测将其底下文件传递到10,20和30主机上
[root@node4 ~]# cd .ssh/
[root@node4 .ssh]# ls
[root@node4 ~]#scp id_rsa root@172.25.254.10:/root/.ssh/
[root@node4 ~]#scp id_rsa root@172.25.254.20:/root/.ssh/
[root@node4 ~]#scp id_rsa root@172.25.254.30:/root/.ssh/
检测网络及SSH免密验证
[root@node4 ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf
保证了连接完整性
检测数据主从复制情况
[root@node4 ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf
数据主从复制没有问题
至此MHA的部署完成!!!