Mysql数据库集群之基于MHA的mysql高可用架构

一、数据级高可用简介
随着信息技术的发展,企业越来越依赖于信息化管理,各业务应用的数据信息,主要存储在数据库中,企业对这些数据访问的连续性要求越来越高,为了避免因为数据的中断导致各种损失,数据库的高可用已成了企业信息化建设的重中之中。同时,对于政府、电信、金融、能源、军工等等涉及国计民生的行业或领域的关键业务对于关键数据存储都需要高可用,必须保证数据系统7×24小时全天候运行,防止数据丢失、数据损坏。
二、MHA简介
MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司的youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。
在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。
目前MHA主要支持一主多从的架构。要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库。因为至少需要三台服务器,出于机器成本的考虑,淘宝也在该基础上进行了改造,目前淘宝TMHA已经支持一主一从。从代码层面看,MHA就是一套Perl脚本,那么相信以阿里系的技术实力,将MHA改成支持一主一从也并非难事。

在这里插入图片描述
三、MHA工作原理:
1.从宕机崩溃的master保存二进制日志事件(binlog events);
2.识别含有最新更新的slave;
3.应用差异的中继日志(relay log)到其他slave;
4.应用从master保存的二进制日志事件(binlog events);
5.提升一个slave为新master;
6.使用其他的slave连接新的master进行复制。
四、搭建实验环境

server1.2.3都已安装mysql服务

主机名	      IP	         角色
server1	   172.25.254.1	    master
server2    172.25.254.2	    slave(备master)
server3	   172.25.254.3	    slave 关闭上次实验的 [killalll mysql-proxy]
server4	   172.25.254.4	    MHA

五、MHA的mysql高可用架构搭建
首先实现半同步复制(一主二从)

server1上
更改server1上的配置文件

[root@server1 ~]# vim /etc/my.cnf
[root@server1 ~]# systemctl stop mysqld.service 
[root@server1 ~]# systemctl start mysqld.service 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

设置超时时间
mysql> SET GLOBAL rpl_semi_sync_master_timeout =1000000000000000000;
Query OK, 0 rows affected (0.00 sec)
查看超时时间
mysql> show variables like '%repl%';

在这里插入图片描述
server2上
注意要开启io线程
进行初始化数据库
更新server2上的配置文件

[root@server2 ~]# vim /etc/my.cnf
[root@server2 ~]# systemctl stop mysqld.service 
[root@server2 ~]# systemctl start mysqld.service 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

mysql> stop slave;   关闭
mysql> start slave;  开启

在这里插入图片描述
server3主机配置
更改server3上的配置文件

[root@server3 ~]# vim /etc/my.cnf
[root@server3 ~]# systemctl stop mysqld.service 
[root@server3 ~]# systemctl start mysqld.service 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

mysql> CHANGE MASTER TO MASTER_HOST='172.25.254.1',MASTER_USER='repl',MASTER_PASSWORD='aSD+1-3F=1*',MASTER_AUTO_POSITION=1;
mysql>  INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (0.00 sec)
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.00 sec)
mysql>  SET GLOBAL rpl_semi_sync_master_enabled =1;
Query OK, 0 rows affected (0.03 sec)
mysql> SET GLOBAL rpl_semi_sync_slave_enabled =1;
Query OK, 0 rows affected (0.00 sec)
mysql> STOP SLAVE IO_THREAD;
Query OK, 0 rows affected (0.00 sec)
mysql> START SLAVE IO_THREAD;
Query OK, 0 rows affected (0.00 sec)
mysql> start slave;

在这里插入图片描述
知识点补充:测试半同步复制碰到的问题
server1
在这里插入图片描述
解决方案
杀死sever1上mysql进程
在这里插入图片描述
在这里插入图片描述

再去server2上查看

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当master节点的数据库已经存有数据如何同步到新建立的slave节点上的主机
server3上查看数据是否同步
在这里插入图片描述
在这里插入图片描述
需要手动备份server1数据,同步到server3
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
方便操作server1.2.3进行以下配置
/etc/my.cnf

rpl_semi_sync_master_timeout =1000000000000000000 不要添加超时间会影响数据同步
rpl_semi_sync_master_enabled =1
rpl_semi_sync_slave_enabled =1
#更改完后要重启服务
systemctl stop mysqld.service 
 systemctl start mysqld.service

在这里插入图片描述
server4配置高可用
高可用都是奇数节点没有偶数节点,当其中一个master节点挂掉,奇数可以投票选择出新的master,偶数的话会出现相同的票数,所以不能使用偶数节点
先测试数据同步是否正常,此时已经取消了超时时间设置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
server4上进行配置
获取软件包

[root@client Desktop]# ls
MHA-7
[root@client Desktop]# scp -r MHA-7/ server4:
root@server4's password: 
mha4mysql-manager-0.58-0.el7.centos.noarch.rpm                                                                                                             100%   79KB   4.1MB/s   00:00    
mha4mysql-manager-0.58.tar.gz                                                                                                                              100%   91KB  38.7MB/s   00:00    
mha4mysql-node-0.58-0.el7.centos.noarch.rpm                                                                                                                100%   35KB  24.4MB/s   00:00    
perl-Config-Tiny-2.14-7.el7.noarch.rpm                                                                                                                     100%   25KB  19.4MB/s   00:00    
perl-Email-Date-Format-1.002-15.el7.noarch.rpm                                                                                                             100%   17KB 578.1KB/s   00:00    
perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm                                                                                                                  100%   82KB  18.0MB/s   00:00    
perl-Mail-Sender-0.8.23-1.el7.noarch.rpm                                                                                                                   100%   59KB   3.3MB/s   00:00    
perl-Mail-Sendmail-0.79-21.el7.noarch.rpm                                                                                                                  100%   29KB  13.8MB/s   00:00    
perl-MIME-Lite-3.030-1.el7.noarch.rpm                                                                                                                      100%   96KB  31.8MB/s   00:00    
perl-MIME-Types-1.38-2.el7.noarch.rpm                                                                                                                      100%   38KB   8.8MB/s   00:00    
perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm                                                                                                            100%   28KB  10.1MB/s   00:00    
[root@client Desktop]# 

软件包全部安装在server4既是:manager管理者需要配置免密登录, 也是node节点
在这里插入图片描述
在这里插入图片描述
server1.2.3安装软件包
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在server4上
管理节点创建一个目录,编辑配置文件

[root@server4 ~]# mkdir /etc/masterha
[root@server4 ~]# cd /etc/masterha/
[root@server4 masterha]# vim masterha.cnf
[root@server4 ~]# mkdir /etc/masterha
[root@server4 ~]# cd /etc/masterha/
[root@server4 masterha]# vim masterha.cnf
[server default]
manager_workdir=/etc/masterha       工作目录地址
manager_log=/var/log/masterha.log   日志存放地址
master_binlog_dir=/etc/masterha     binlongd地址

password=aSD+1-3F=1*   密码
user=root  用户
ping_interval=1  间隔1s
remote_workdir=/tmp 数据存放目录
repl_password=aSD+1-3F=1*  用户密码
repl_user=repl  用户repl用户复制数据的
ssh_user=root  ssh登录用户
以下是指定工作主机
[server1]  指定变量名称。这里不代表主机,可以随意设置  
hostname=172.25.254.1    指定第一台主机ip
port=3306  端口号

[server2]
hostname=172.25.254.2
port=3306
candidate_master=1  指定此台主机可以成为master一员
check_repl_delay=0  MHA忽略复制延迟选择一个新master

[server3]
hostname=172.25.254.3
port=3306
no_master=1  不能成为master节点

接下来做免密登录使四台虚拟机都能相互免密登录
生成秘钥
在这里插入图片描述
上传公钥
在这里插入图片描述
在这里插入图片描述
测试免密登陆
在这里插入图片描述
公钥私钥全部上传到其他主机
在这里插入图片描述
测试免密登陆
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在server4检测ssh连接
在这里插入图片描述
在server4检测数据同步
在这里插入图片描述
解决报错
在server1
在这里插入图片描述

在server4上再次测试检测

[root@server4 ~]# masterha_check_repl --conf=/etc/masterha/masterha.cnf

在这里插入图片描述
手动操作当其中一个master坏了选举出新的master
挂掉server1应该选择server2当选新的master,因为配置文件写的是只能是server2,server3不能当选master


[root@server4 masterha]# pwd
/etc/masterha
[root@server4 masterha]# vim masterha.cnf 

在这里插入图片描述
挂掉一台测试
在这里插入图片描述

[root@server4 ~]# masterha_master_switch 
--master_state=dead 
--conf=/etc/masterha/masterha.cnf 
--dead_master_host=172.25.254.1 
--dead_master_ip=172.25.254.1 
--dead_master_port=3306 
--new_master_host=172.25.254.2 
--new_master_port=3306

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述检查新更改的master节点状态
在这里插入图片描述
在这里插入图片描述

以上为手动关闭数据库进行master节点切换,接着配置在线切换master节点(不关闭master节点的数据库)

在这里插入图片描述
在这里插入图片描述

[root@server4 ~]# ll /etc/masterha/
total 4
-rw-r--r-- 1 root root 415 May 18 04:53 masterha.cnf
-rw-r--r-- 1 root root   0 May 18 16:25 masterha.failover.complete
[root@server4 ~]# rm -rf /etc/masterha/masterha.failover.complete  删除此文件
[root@server4 ~]# ll /etc/masterha/
total 4
-rw-r--r-- 1 root root 415 May 18 04:53 masterha.cnf
[root@server4 ~]# masterha_master_switch 
--conf=/etc/masterha/masterha.cnf 
--master_state=alive 
--new_master_host=172.25.254.1 
--new_master_port=3306 
--orig_master_is_new_slave 
--running_updates_limit=10000

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实现自动切换master节点

root@server4 ~]# ll /etc/masterha/    没有故障文件
-rw-r--r-- 1 root root 415 May 18 04:53 masterha.cnf
[root@server4 ~]# nohup masterha_manager --conf=/etc/masterha/masterha.cnf &> /dev/null &
[1] 10403
[root@server4 ~]# ps ax

在这里插入图片描述

停止当前server1的master节点
[root@server1 ~]# systemctl stop mysqld.service

server4的管理节点自动切换master节点
在这里插入图片描述
在这里插入图片描述
每一次切换都会生成一个master.failover.complete文件(简称故障文件),要将这个文件删除,否则会出错
创建一个监控master的进程(此进程拥有守护进程),这个进程会实时监控master节点的状态,一旦master节点出现故障(宕机)
server4(管理节点)就会自动执行/etc/masterha/masterha.cnf脚本,在正常运行的节点中选择一个最新的来作为新的master节点
同时当前的进程更会挂掉,因为他监控的master已经不再当前集群
复位将server1加入到半同步复制群组中
在这里插入图片描述
通过脚本实现vip的自动漂移
获取自动脚本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@server4 bin]# vim /etc/masterha/masterha.cnf 

在这里插入图片描述
在server2(master)节点上添加一个VIP
在这里插入图片描述
在server4上进行手动切换master节点到server1上
删除故障脚本

[root@server4 masterha]# rm -rf masterha.failover.complete  

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在server1上查看VIP已经成功漂移
在这里插入图片描述
在server上2查看VIP状态和节点状态
在这里插入图片描述
在这里插入图片描述
在server3查看master节点
在这里插入图片描述

测试一下全自动切换master节点
管理节点server4上开启masterha_manager进程

[root@server4 ~]# nohup masterha_manager --conf=/etc/masterha/masterha.cnf &> /dev/null &
[1] 10823

server1上关闭数据库服务

[root@server1 ~]# systemctl stop mysqld.service 

查看server2成为新的master节点
在这里插入图片描述
在这里插入图片描述
server3查看新的master节点为server2
在这里插入图片描述

用户在访问时直接访问172.25.254.100就可以正常访问,不会受到master节点更改主机而受到影响

数据库mysql知识点补充

在这里插入图片描述
在这里插入图片描述

开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。
slow_query_log 慢查询开启状态
slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录)
long_query_time 查询超过多少秒才记录
mysql> set global slow_query_log=1 开启慢查询


在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值