MySQL高可用之MHA集群

目录

一、MHA概述

1.1 什么是 MHA

1.2 MHA 的组成

1.3 MHA 的特点

二、MySQL MHA搭建准备

2.1 实验思路

2.2 实验准备

MHA一主两从高可用集群示意图:

三、搭建 MySQL MHA

3.1 配置主从复制

1、四台服务器都关闭防火墙

2、修改 Master、Slave1、Slave2 节点的主机名

3、 在Master、Slave1、Slave2添加主机映射关系

4、修改 Master、Slave1、Slave2 节点的 Mysql主配置文件/etc/my.cnf

5、在 Master、Slave1、Slave2 节点上都创建两个软链接

6、登录数据库进行授权

7、配置主从同步

3.2 配置MHA

1、所有服务器安装MHA软件

小贴士:

2、在所有服务器上配置无密码认证

3、在 manager 节点上配置 MHA

4、 manager节点编辑配置文件,管理 mysql 节点服务器

5、第一次配置需要在 Master 节点上手动开启虚拟IP

6、在 manager 节点上测试 ssh 无密码认证

7、在 manager 节点上测试 mysql 主从连接情况

8、在 manager 节点上启动 MHA

9、在 manager 节点上查看 MHA 状态 和 MHA 日志,可以看到 master的地址

10、在Mysql1上查看 VIP 地址 192.168.72.100 是否存在

3.3 故障模拟

3.4 故障修复

1)修复mysql1(即修复原来的主节点)

2)修复主从数据

3)在 manager 节点上修改配置文件app1.cnf

4)在 manager 节点上启动 MHA


一、MHA概述

1.1 什么是 MHA

MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。

MHA 的出现就是解决MySQL 单点故障的问题。

MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。

MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。

1.2 MHA 的组成

1)MHA Node(数据节点)

  • MHA Node 运行在每台 MySQL 服务器上。

2)MHA Manager(管理节点)

  • MHA Manager 可以单独部署在一台独立的机器上,管理多个 master-slave 集群;也可以部署在一台 slave 节点上。
  • MHA Manager 会定时探测集群中的 master 节点。当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master, 然后将所有其他的 slave 重新指向新的 master。整个故障转移过程对应用程序完全透明。

1.3 MHA 的特点

  • 自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失
  • 使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。
  • 目前MHA支持一主多从架构,最少三台服务器,即一主两从

012.png

二、MySQL MHA搭建准备

2.1 实验思路

1)MHA架构:①数据库安装 ②一主两从 ③MHA搭建

2)故障模拟:①主库失效 ②备选主库成为主库 ③原故障主库恢复重新加入到MHA成为从库

2.2 实验准备

节点服务器系统主机名IP地址安装工具及服务
MHA manager 服务器CentOS7.4(64 位)manager192.168.72.40MHA node 和 manager 组件
Master 服务器CentOS7.4(64 位)mysql1192.168.72.192MHA node 组件
Slave1 服务器CentOS7.4(64 位)mysql2192.168.72.60MHA node 组件
Slave2 服务器CentOS7.4(64 位)mysql3192.168.72.80MHA node 组件

MHA一主两从高可用集群示意图:

1.png

三、搭建 MySQL MHA

3.1 配置主从复制

1、四台服务器都关闭防火墙

 

2-1.png

2、修改 Master、Slave1、Slave2 节点的主机名

 

2-2.png

2-3.png

2-4.png

3、 在Master、Slave1、Slave2添加主机映射关系

 

2-5.png

2-6.png

4、修改 Master、Slave1、Slave2 节点的 Mysql主配置文件/etc/my.cnf

2-7.png

2-8.png

2-9.png

2-10.png

5、在 Master、Slave1、Slave2 节点上都创建两个软链接

2-11.png

6、登录数据库进行授权

 

所有数据库节点进行mysql主从同步的授权:

2-12.png

所有数据库节点,授权给manager服务器:

2-13.png

7、配置主从同步

在 Master 节点查看二进制文件和同步点(即偏移量),在 Slave1、Slave2 节点执行同步操作。

 

1)在 Master 节点查看二进制文件和同步点:

2-14.png

2)在 Slave1、Slave2 节点执行同步操作:

2-15.png

2-16.png

3)两个从库必须设置为只读模式:

2-17.png

4)在Master主库插入数据,slave中验证数据同步:

2-18.png

2-20.png

2-21.png

3.2 配置MHA

1、所有服务器安装MHA软件

  • 对于每个操作系统版本不一样,这里 CentOS7.4 必须选择 0.57 版本。
  • 在所有服务器上必须先安装 node 组件,最后在 MHA-manager 节点上安装 manager 组件,因为 manager组件 依赖 node 组件。
 

(1)所有服务器上首先安装 epel 源,之后安装 MHA 依赖的环境:

3-1.png

3-2.png

(2)先在所有服务器上安装 node 组件:

3-3.png

3-4.png

(3)最后在 MHA manager 节点上安装 manager 组件:

3-5.png

3-6.png

小贴士:

#manager 组件安装后在/usr/local/bin/ 下面会生成几个工具,主要包括以下几个:

工具说明
masterha_check_ssh检查 MHA 的 SSH 配置状况
masterha_check_repl检查 MySQL 复制状况
masterha_manger启动 manager的脚本
masterha_check_status检测当前 MHA 运行状态
masterha_master_monitor检测 master 是否宕机
masterha_master_switch控制故障转移(自动或者手动)
masterha_conf_host添加或删除配置的 server 信息
masterha_stop关闭manager

#node 组件安装后也会在/usr/local/bin/ 下面会生成几个脚本(这些工具通常由 MHAManager 的脚本触发,无需人为操作)主要如下:

工具说明
save_binary_logs保存和复制 master 的二进制日志
apply_diff_relay_logs识别差异的中继日志事件并将其差异的事件应用于其他的 slave
filter_mysqlbinlog去除不必要的 ROLLBACK 事件(MHA 已不再使用这个工具)
purge_relay_logs清除中继日志(不会阻塞 SQL 线程)

2、在所有服务器上配置无密码认证

 

(1)在 manager 节点上配置到所有数据库节点的无密码认证

3-7.png

3-8.png

3-9.png

(2)在 mysql1 上配置到数据库节点 mysql2 和 mysql3 的无密码认证

3-10.png

3-11.png

(3)在 mysql2 上配置到数据库节点 mysql1 和 mysql3 的无密码认证

3-12.png

3-13.png

(4)在 mysql3 上配置到数据库节点 mysql1 和 mysql2 的无密码认证

3-14.png

3-15.png

3、在 manager 节点上配置 MHA

(1)在 manager 节点上复制相关脚本到/usr/local/bin/ 目录。

4-1.png

(2)将master_ip_failover(自动切换时 VIP 的管理脚本)复制到/usr/local/bin 目录,这里使用master_ip_failover脚本来管理 VIP 和故障切换。

4-2.png

(3)修改/usr/local/bin/master_ip_failover 脚本,删除原有内容,所有内容全都重新添加。

4-3.png

4、 manager节点编辑配置文件,管理 mysql 节点服务器

创建 MHA 软件目录并拷贝配置文件,这里使用app1.cnf配置文件来管理 mysql 节点服务器。

 

4-4.png

编辑配置文件 /etc/masterha/app1.cnf

4-5.png

app1.cnf配置文件注释:

 

5、第一次配置需要在 Master 节点上手动开启虚拟IP

 

4-6.png

6、在 manager 节点上测试 ssh 无密码认证

在 manager 节点上测试 ssh 无密码认证,如果正常最后会输出 successfully,如下所示。

4-7.png

7、在 manager 节点上测试 mysql 主从连接情况

在 manager 节点上测试 mysql 主从连接情况,最后出现MySQL Replication Health is OK 字样说明正常。如下所示。

 

4-8.png

4-9.png

8、在 manager 节点上启动 MHA

 

4-10.png

9、在 manager 节点上查看 MHA 状态 和 MHA 日志,可以看到 master的地址

 

4-11.png

10、在Mysql1上查看 VIP 地址 192.168.72.100 是否存在

查看 Mysql1 的 VIP 地址 192.168.72.100 是否存在,这个 VIP 地址不会因为 manager 节点停止 MHA 服务而消失。

4-12.png

3.3 故障模拟

在Mysql1上停止mysql服务,MHA 会自动修改 app1.cnf 文件内容,将宕机的 mysql1 节点删除。 mysql2 会自动接管 VIP,成为新的master。

(1)在 Master 节点 Mysql1 上停止mysql服务:

5-1.png

(2)在 manager 节点上监控观察日志记录,manager选举了mysql2作为新的主服务器:

5-2.png

5-3.png

(3)查看manager节点的配置文件。MHA 会自动修改 app1.cnf 文件内容,将宕机的 mysql1 节点删除。

5-4.png

(4) mysql2 已接管 VIP

5-5.png

3.4 故障修复

1)修复mysql1(即修复原来的主节点)

 

6-1.png

2)修复主从数据

在新的主库服务器 Mysql2 查看二进制日志文件和同步点:

6-2.png

在原主库服务器 mysql1 执行同步操作,同步现在主库中的数据:

6-3.png

3)在 manager 节点上修改配置文件app1.cnf

重新把三台mysql节点服务器这个记录添加进去,因为它检测到主节点失效时候会自动删除主节点。

将mysql1添加为新的候选master。

6-4.png

4)在 manager 节点上启动 MHA

 

6-5.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/47810.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

汇编调用C语言定义的全局变量

在threadx移植中,系统的systick通过了宏定义的方式定义,很难对接库函数的时钟频率,不太利于进行维护 所以在C文件中自己定义了一个systick_Div的变量,通过宏定义方式设定systick的时钟频率 在汇编下要加载这个systick分频系数 …

STM32 串口基础知识学习

串行/并行通信 串行通信:数据逐位按顺序依次传输。 并行通信:数据各位通过多条线同时传输。 对比 传输速率:串行通信较低,并行通信较高。抗干扰能力:串行通信较强,并行通信较弱。通信距离:串…

在Windows server 2012上使用virtualBox运行CentOS7虚拟机,被强制休眠(二)

问题场景 本月7月10日处理了一个虚拟机被强制暂停的问题,详见:在Windows server 2012上使用virtualBox运行CentOS7虚拟机,被强制暂停当时是由于C盘存储空间不足,导致虚拟机被强制暂停,将虚拟机迁移后,问题…

Mybatis-plus 配置自定义sql(.xml文件)查询语句的步骤

这是使用Mybatis-plus 的自动生成实体类代码生成.xml文件, 所以他会在java目录下,不在resources目录下 如果在java目录下的xml文件,需要分别配置application.yml和pom.xml文件 application.yml 文件进行以下配置: mybatis-plus…

【C刷题】矩阵相等判断与序列中删除指定的数字

目录 BC105-矩阵相等判断 方法1:两矩阵输入完毕后,进行比较 方法2:在接收过程中直接比较 BC98 - 序列中删除指定的数字 方法1:把要删除的元素改为0 方法2:打印不用删除的元素 方法3:定义两个下标 i 和 j(动图演示) 此篇文章是关于牛客网刷题的做题思路和代码…

Docker的数据管理和Dockerfile的指令

Docker的数据管理 一、Docker数据的概念1、数据卷2、数据卷容器 二、端口映射三、容器互联(使用centos镜像)四、Docker 镜像的创建1、基于现有镜像创建(1)首先启动一个镜像,在容器里做修改(2)然…

记录Selenium自动化测试过程中接口的调用信息

上一篇博客,我写了python自动化框架的一些知识和粗浅的看法,在上一篇中我也给自己提出一个需求:如果记录在测试过程中接口的调用情况?提出这个需求,我觉得是有意义的。你在测试过程中肯定会遇到一些莫名其妙的问题&…

K8S故障排查

故障现象:部署pod时,报错没发调度到节点。 排查步骤: 1、查看集群的状态 [rootk8s-master1 nginx]#kubectl get nodes2、查看k8s组件的状态-kubelet,kube-apiservice 3、查看docker的Cgroup driver和k8s的Cgroup driver类型&…

创建Electron项目

一、使用vite 构建 electron项目 npm init vitelatest Need to install the following packages:create-vitelatest Ok to proceed? (y) y √ Project name: ... CertificateDownload √ Package name: ... certificatedownload √ Select a framework: Vue √ Select a var…

Packet Tracer - 配置和验证 NTP

Packet Tracer - 配置和验证 NTP 地址分配表 设备 接口 IP 地址 子网掩码 N1 NIC 209.165.200.225 255.255.255.0 R1 G0/0 209.165.200.226 255.255.255.0 R2 G0/0 209.165.200.227 255.255.255.0 目标 在本练习中,您将在 R1 和 R2 中配置 NTP 以…

1.react useState使用与常见问题

文章目录 0. 取消批处理合并更新, render 2次1. 合并更新,setCount(异步更新) 3次相当于1次, count值为12. 如何取消批处理合并,让值累加?,改为回调函数写法,内部会依次执行函数, 执行3次 count值为33. 异步更新,获取异步更新的值?useEffect4.利用扩展运算符的形式来解决对象…

NSS [SWPUCTF 2021 新生赛]pop

NSS [SWPUCTF 2021 新生赛]pop 倒推一下,最后一步是调用getflag函数,admin和password要求为w44m和08067。 第一步应该从w22m类的魔术方法__destruct()入手,所以中间第二步应该是w33m(第一步w22m类的魔术方法__destruct()里面的ec…

【LeetCode热题100】打卡第44天:倒数第30~25题

文章目录 【LeetCode热题100】打卡第44天:倒数第30~25题⛅前言 移动零🔒题目🔑题解 寻找重复数🔒题目🔑题解 二叉树的序列化与反序列化🔒题目🔑题解 最长递增子序列🔒题目&#x1f5…

pytorch分类和回归:阿里天池宠物年龄预测

文章目录 dog年龄预测论文Deep expectation of real and apparent age from a single image without facial landmarks分类的损失函数1.多分类交叉熵损失函数:2.KLDiv Loss: 分布差异3.facenet 三元组损失函数 timm and torchvisiontorchvision 尝试一&a…

全面防护!Fortinet发布混合式部署防火墙HMF

在企业IT复杂性日益增长、网络安全威胁日趋紧迫、网络安全设施可维护性逐渐降低的背景下,企业迫切寻求可无缝跨越所有IT区域,有效简化企业防护架构的统一解决方案。近日, Fortinet Accelerate 2023中国区15城巡展圆满落幕,在收官之…

SpringBoot 项目使用 Redis 对用户 IP 进行接口限流

一、思路 使用接口限流的主要目的在于提高系统的稳定性,防止接口被恶意打击(短时间内大量请求)。 比如要求某接口在1分钟内请求次数不超过1000次,那么应该如何设计代码呢? 下面讲两种思路,如果想看代码可…

【JavaScript 07】函数声明 地位平等 函数提升 属性方法 作用域 参数 arguments对象 闭包 IIFE立即调用函数表达式 eval命令

函数 1 概述1.1 声明1.2 重复声明 1.3 圆括号/return/recursion1.4 一等公民1.5 函数提升 2 函数属性与方法2.1 name属性2.2 length属性2.3 toString() 3 函数作用域3.1 概念3.2 函数内部变量提升3.3 函数本身作用域 4 参数4.1 概念4.2 省略4.3 传递4.4 同名4.5 arguments 对象…

亚马逊测评自养号:如何正确选择学习对象与获取可靠技术知识?

亚马逊是一家知名的跨境电商平台,吸引了越来越多的人涉足这个领域。随着商家数量的增加,亚马逊的竞争力也在不断提高。在亚马逊平台上,产品评价对于卖家账号的评估以及产品曝光量、销量等方面具有直接影响。因此,对于任何一个希望…

【云原生系列】openstack搭建过程及使用

目录 搭建步骤 准备工作 正式部署OpenStack 安装的过程 安装组件如下 登录页面 进入首页 创建实例步骤 上传镜像 配置网络 服务器配置 dashboard配置 密钥配置免密登录 创建实例 绑定浮动ip 免密登录实例 搭建步骤 准备工作 1.关闭防火墙和网关 systemctl dis…

模型调参及优化

调参 调权重参数,偏置参数 训练数据集用来训练参数w,b 调超参数 验证数据集用来选择超参数学习率lr,隐藏层大小等 如何调参 当泛化误差和训练误差都没有降下去说明欠拟合;当训练误差降下去,但泛化误差出现上升形式&…
最新文章