企业运维 --- LAMP架构( mysql [4] 搭建MHA实现mysql高可用集群 )

2021/9/17 19:05:22

本文主要是介绍企业运维 --- LAMP架构( mysql [4] 搭建MHA实现mysql高可用集群 ),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

  • 一、mysql搭建MHA高可用集群
    • 1.环境部署
    • 2.高可用集群搭建
  • 二、MHA的故障切换
    • 1.手动切换
    • 2.自动切换
    • 3.通过脚本切换

一、mysql搭建MHA高可用集群

1.环境部署

(配置:一主两从模式,当主服务器down掉,从服务器会自动切换为主服务器)
配置之前应该先停止server1/2/3的mysql数据库;
清除/data/mysql目录的数据请添加图片描述
请添加图片描述
请添加图片描述
编辑master端(server1)的mysql配置文件
请添加图片描述
请添加图片描述
进行mysqld非安全初始化,重新生成/data目录
请添加图片描述
再启动mysql数据库
请添加图片描述
master端授予slave主机REPLICATION SLAVE权限,可以使用repl这个用户名和westos这个密码进行连接数据库;
请添加图片描述
查看数据库用户信息
请添加图片描述
请添加图片描述
查看db字段信息
请添加图片描述
编辑slave端(server2)的mysql配置文件
请添加图片描述
请添加图片描述
进行mysqld非安全初始化,重新生成/data 目录;
启动mysql数据库
请添加图片描述
进行CHANGE MASTER TO操作,以确定server2需要同步的主机IP,用户名,密码,使用基于GTID的复制;
启动slave
请添加图片描述
查看slave端状态
请添加图片描述
编辑slave端(server3)的mysql配置文件
请添加图片描述
请添加图片描述
进行mysqld非安全初始化,重新生成/data 目录 ;
启动mysql数据库
请添加图片描述
进行CHANGE MASTER TO操作,以确定server3需要同步的主机IP,用户名,密码,使用基于GTID的复制;
启动slave
请添加图片描述
server2进入数据库,可以查看到repl用户
请添加图片描述请添加图片描述
对于server4,停止之前的mysql路由服务
请添加图片描述
从服务器获取MHA高可用所需安装包
请添加图片描述

2.高可用集群搭建

MHA是一套相对成熟的MySQL高可用方案,能做到在0~30s内自动完成数据库的故障切换操作,
在master服务器不宕机的情况下,基本能保证数据的一致性。
也就是说,当master down掉的时候,slave1顶替成为新的master,原来的master成为新的slave

server4需要安装如下rpm包,其依赖性包都在这个目录
请添加图片描述
所以直接执行如下指令
请添加图片描述
server4将如下rpm包传给mysql各个节点
请添加图片描述请添加图片描述

  • 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线程)

server1/2/3安装rpm包(使用yum install 可以解决依赖性问题)
请添加图片描述
请添加图片描述
请添加图片描述
rpm –ql:可以看到指定 rpm 包安装的详细路径
请添加图片描述

MHA Manager服务器需要为每个监控的Master/Slave集群提供一个专用的配置文件,而所有的Master/Slave集群也可以共享全局配置。

在管理节点 server4 上进行下面配置;
创建配置文件目录,编写app1.conf配置文件
请添加图片描述
配置文件的内容格式可以参考如下;
解压如下tar包
请添加图片描述
查看samples目录下的conf目录下的文件
请添加图片描述
app1.cnf 文件内容解释如下:
manager_workdir=/var/log/masterha/app1 :MHA监控实例根目录
manager_log=/var/log/masterha/app1/manager.log :MHA监控实例日志文件

[serverx] 服务器编号
hostname 主机名
candidate_master 可以做主库

1、candidate_master:从不同的从库服务器中,提升一个可靠的机器为新主库,可以通过在配置文件中对应的从库服务器的配置段下添加candidate_master=1来提升这个从库被提升为新主库的优先级(这个从库要开启binlog,以及没有显著的复制延迟,如果不满足这两个条件,也并不会在主库挂掉的时候成为新主库,所以,这个参数只是提升了优先级,并不是说指定了这个参数就一定会成为新主库)
2、 no_master:通过在目标服务器的配置段落设置no_master=1,它永远也不会变为新主库,用于配置在不想用于接管主库故障的从库上,注意,不能把所有的从库都配置这个参数,这样MHA检测到没有可用备主的时候,会中断故障转移操作

请添加图片描述
接下来配置监控全局配置文件app1.conf;
在这里插入图片描述
ping_interval=3 :设置监控主库,发送ping包的时间间隔
secondary_check_script=/usr/bin/masterha_secondary_check -s xxx :二次检查的主机,实现多路监测master的可用性
请添加图片描述
修改数据库密码( %允许来自任何ip的连接,localhost允许本机的连接);
请添加图片描述
客户端使用root身份、westos 密码进行连接测试,可以成功登录数据库
请添加图片描述
继续编辑配置文件,写入要监控的服务器;
设定表示,可以作为候选master,server3始终是slave;
candidate_master=1 :指定failover时此slave会接管master,即使数据不是最新的。
check_repl_delay:默认情况下,如果从库落后主库100M的relay logs,MHA不会选择这个从库作为新主库,因为它会增加恢复的时间,设置这个参数为0,MHA在选择新主库的时候,则忽略复制延迟,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换的过程中一定是新的master
请添加图片描述
MHA配置检测:执行SSH通信检测
在MHA Manager服务器上执行,出现报错,是由于没有做主机SSH互通
请添加图片描述
当使用 ssh-keygen 产生公钥与私钥对之后,使用 ssh-copy-id 将本机的公钥复制到远程机器的 ~/ .ssh/authorized_key.文件中,:这样以后登录到远程主机就可以不用输入密码
请添加图片描述
将server1的/root/.ssh/id_rsa.pub 公钥复制给server2/3/4
请添加图片描述
检查四台机器之间是否ssh互通,各个机器都进行检查,如果不通,则通过ssh-copy-id命令将公钥复制给相应的机器
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
再次进行MHA配置检测:执行SSH通信检测
请添加图片描述
出现了成功的提示,说明SSH连接没有问题
请添加图片描述
检测MySQL主从复制,在MHA Manager服务器上执行:
在这里插入图片描述
出现了“MySQL Replication Health is OK.”说明集群没有问题
请添加图片描述

二、MHA的故障切换

1.手动切换

  • MHA的故障切换过程,共包括以下的步骤:
    (1)配置文件检查阶段,这个阶段会检查整个集群配置文件配置
    (2)宕机的master处理,这个阶段包括虚拟ip摘除操作,主机关机操作
    (3)复制dead maste和最新slave相差的relay log,并保存到MHA Manger具体的目录下
    (4)识别含有最新更新的slave
    (5)应用从master保存的二进制日志事件(binlog events)
    (6)提升一个slave为新的master进行复制
    (7)使其他的slave连接新的master进行复制

  • MHA在线切换的大概过程:
    1.检测复制设置和确定当前主服务器
    2.确定新的主服务器
    3.阻塞写入到当前主服务器
    4.等待所有从服务器赶上复制
    5.授予写入到新的主服务器
    6.重新设置从服务器

为了保证数据完全一致性,在最快的时间内完成切换,MHA的在线切换必须满足以下条件才会切换成功,否则会切换失败。
1.所有slave的IO线程都在运行
2.所有slave的SQL线程都在运行
3.所有的show slave status的输出中Seconds_Behind_Master参数小于或者等于running_updates_limit秒,如果在切换过程中不指定running_updates_limit,那么默认情况下running_updates_limit为1秒。
4.在master端,通过show processlist输出,没有一个更新花费的时间大于running_updates_limit秒。

手动切换,将当前集群mysql数据库的master切换为server2(这条指令是在作为master的server1状态完好时执行的)
请添加图片描述
都选择yes
请添加图片描述
请添加图片描述
请添加图片描述
可以看到切换成功的提示信息
请添加图片描述
server2进入数据库,执行 show slave master 返回错误,因为当前server2已经切换为了master,这条指令是用于提供有关从服务器线程的关键参数的信息
请添加图片描述
server1进入数据库,可以看到slave的状态,以及当前的master为server2
请添加图片描述
server3进入数据库,可以看到slave的状态,以及当前的master为server2
请添加图片描述
当我们停止server2的mysql数据库后
请添加图片描述
slave端查看状态就会出错
请添加图片描述
请添加图片描述
此时我们再次手动切换,将master切换为server1(这条指令是在作为master的server2 down 掉后执行的)
请添加图片描述
请添加图片描述
请添加图片描述
切换成功
请添加图片描述
然后 server1进入数据库,执行 show slave master 返回错误,因为当前server1已经切换为了master,这条指令是用于提供有关从服务器线程的关键参数的信息
请添加图片描述
server3进入数据库,可以看到slave的状态,以及当前的master为server1
请添加图片描述
我们将server2的数据库开启
请添加图片描述
server2进入数据库后要重新执行CHANGE MASTER TO操作,以确定需要同步的主机IP,用户名,密码,以及使用基于GTID的主从复制方式;
开启salve
请添加图片描述

2.自动切换

请添加图片描述

每次failover 切换后会在管理目录生成文件app1.failover.complete ,下次在切换的时候会发现有这个文件导致切换不成功(不会再进行主库的切换),需要手动清理掉。但是,也可以加上参数–ignore_last_failover 来启动mha manager

将 MHA Manager服务在后台启动
请添加图片描述
请添加图片描述
停止server1的mysql服务
请添加图片描述
当MHA Manager 的 进程执行完毕,会生成如下文件(此时就表明master已经切换成功了)
请添加图片描述
请添加图片描述
可以看到server2已经无法查看slave状态,因为它是master
请添加图片描述
server3查看slave状态
请添加图片描述
将server1的mysql服务启动
请添加图片描述
重新执行CHANGE MASTER TO操作
请添加图片描述

3.通过脚本切换

接下来我们将配置文件的mysqlfailover 参数打开,通过脚本进行自动切换;

mysqlfailover 是mysql utilities工具包中包含的一个重要的高可用命令,用于对主从复制架构进行健康检测以及实现故障自动转移。它会定期按指定的时间间隔探测各节点的健康状态,一旦在捕获到主节点不可用时,将触发故障转移相关动作,自动执行故障切换到当前最佳的从服务器上。同时整个主从架构内的其他从节点将指向新的主节点,自动完成主从拓扑结构更新。

首先应该将前一个实验自动切换完毕后生成的文件删掉
请添加图片描述
编辑配置文件;
#master_ip_failover_script=/usr/bin/master_ip_failover #failover自动切换脚本
#master_ip_online_change_script= /usr/local/bin/master_ip_online_change #手动切换脚本
请添加图片描述
server4从服务器获取failover自动/手动切换脚本,放到/etc/masterha目录下
请添加图片描述
请添加图片描述
请添加图片描述
赋予脚本可执行权限
请添加图片描述
编辑配置文件,设定vip(因为用户访问入口只能有一个,所以需要配置vip)
请添加图片描述
请添加图片描述
请添加图片描述
由于此时的master为server2,因此在server2上添加脚本设定的vip
请添加图片描述
客户端进行连接测试,可以登录数据库
请添加图片描述
进行手动切换,将master切换为server1
请添加图片描述
请添加图片描述
请添加图片描述
切换成功
请添加图片描述
客户端连接测试无误
请添加图片描述
可以看到vip已经不在server2上了
请添加图片描述
已经漂移到了server1上(server1是当前的master)
请添加图片描述
slave端查看状态
请添加图片描述
请添加图片描述
我们再次使用自动切换的方式,切换master
请添加图片描述
请添加图片描述
然后将当前master节点的mysql服务停止
请添加图片描述
请添加图片描述
可以看到vip 已经不在server1上了(说明此时自动切换已经完成)
请添加图片描述
客户端进行连接测试,仍能登录数据库
请添加图片描述
slave端查看状态
请添加图片描述
自动切换完成,可以看到生成的文件
请添加图片描述
请添加图片描述



这篇关于企业运维 --- LAMP架构( mysql [4] 搭建MHA实现mysql高可用集群 )的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程