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.mzph.cn/news/9581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汇编语言(第4版)实验7 寻址方式在结构化数据访问中的应用

参考答案: ①经分析,完整程序代码如下。 assume cs:codesg data segmentdb 1975,1976,1977,1978,1979,1980,1981,1982,1983db 1984,1985,1986,1987,1988,1989,1990,1991,1992db 1993,1994,1995dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140…

微服务笔记---Nacos集群搭建

微服务笔记---Nacos集群搭建 Nacos集群搭建1.集群结构图2.搭建集群2.1.初始化数据库2.2.下载nacos2.3.配置Nacos2.4.启动2.5.nginx反向代理2.6.优化 Nacos集群搭建 1.集群结构图 官方给出的Nacos集群图: 其中包含3个nacos节点,然后一个负载均衡器代理…

Clion开发STM32之W5500系列(DNS服务封装)

概述 在w5500基础库中进行封装,通过域名的方式获取实际的ip地址用于动态获取ntp的ip地址 DNS封装 头文件 /*******************************************************************************Copyright (c) [scl]。保留所有权利。****************************…

7.26作业

用fread和fwrite实现文件拷贝 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<head.h> int main(int argc, const char *argv[]) {FILE* fpfopen("./11.txt","w");FILE* fp1fopen("./12.txt",&quo…

idea的Plugins中搜索不到插件

1、ctrlalts 打开设置 ; 2、搜索框输入plugins; 3、点击plugins; 4、点齿轮按钮&#xff0c;选择HTTP Proxy settings; 如下操作&#xff1a; 5、刷新DNS&#xff0c;ipconfig /flushdns 6、重新打开idea 的plugins 插件列表出来了

无涯教程-jQuery - jQuery.ajax( options )方法函数

jQuery.ajax(options)方法使用HTTP请求加载远程页面。 $.ajax()返回它创建的XMLHttpRequest。在大多数情况下&#xff0c;您不需要该对象直接进行操作&#xff0c;但是如果您需要手动中止请求&#xff0c;则可以使用该对象。 jQuery.ajax( options ) - 语法 $.ajax( options…

51单片机--LCD1602

LCD1602的介绍 LCD1602是一种字符型液晶显示模块&#xff0c;通常用于嵌入式系统、单片机等领域。它由LCD&#xff08;液晶显示屏&#xff09;、HD44780控制驱动主电路及其扩展驱动电路、少量电阻、电容元件等组成。 LCD1602具有以下特点和功能&#xff1a; 显示能力&#xf…

面试总结-Redis篇章(八)——Redis分布式锁

JAVA 面试总结-Redis分布式锁 模拟抢券场景 通过下面方法添加Synchronized锁来防止上述情况&#xff0c;如果上面是单体服务没有问题&#xff0c;但是如果项目是集群部署&#xff0c;会出现下面的问题&#xff0c;因为Synchronized是属于本地的锁端口8080和8081同时访问&#x…

Qt 第二讲 登录框完善,登录成功后,进入新的界面;新建工程文件,默认提供的代码注释信息;前两讲思维导图

一&#xff0c;代码完善 头文件 #ifndef ZUOYE_H #define ZUOYE_H#include <QWidget> #include <QDebug> #include <QIcon> #include <QPushButton> #include <QLineEdit> #include <QLabel> //#include <QTextToSpeech>QT_BEGIN_…

⛳ 面向对象面试题

面向对象面试题目录 ⛳ 面向对象面试题&#x1f69c; 一&#xff0c;成员变量&#xff0c;局部变量&#xff0c;类变量存储在内存的什么地方&#xff1f;&#x1f43e; 1.1&#xff0c;类变量&#xff08;静态成员变量&#xff09;&#x1f4dd; 1.2&#xff0c;成员变量⭐ 1.3…

网络安全进阶学习第七课——文件包含漏洞

文章目录 一、文件包含概念二、文件包含漏洞原理三、文件包含分类文件包含分为两种&#xff1a; 四、与文件包含相关的配置文件&#xff1a;&#xff08;php.ini文件&#xff09;五、与文件包含有关的函数1、include()2、include_once()3、require()4、require_once() 六、文件…

iTOP-STM32MP157开发板Linux Misc驱动-编译驱动程序

这里我们以 stm32mp157 开发板为例&#xff0c;将杂项设备驱动编译成模块&#xff0c;请参考本手册第三十七章 Linux 内核模块。我们将 misc.c 文件拷贝到 Ubuntu 的/home/nfs/03 目录下。将上次编译 helloworld 的 Makefile 文 件拷贝到 misc.c 同级目录下&#xff0c;修改 …

解决Unable to load authentication plugin ‘caching_sha2_password‘

连接Mysql8时报错&#xff1a; java.sql.SQLException: Unable to load authentication plugin caching_sha2_password.原因 不同版本的认证插件不同造成的 8版本前是&#xff1a;default_authentication_pluginmysql_native_password 8版本后是&#xff1a;default_authenti…

Postman抓包教程

目录 什么是抓包&#xff1f; 如何使用 Postman 进行抓包 查看历史抓包数据 使用抓包数据进行接口测试和开发 抓包技巧和注意事项 什么是抓包&#xff1f; 在计算机网络中&#xff0c;抓包是指捕获网络流量的过程。抓包工具可以截获进出计算机网络的数据流&#xff0c;并将…

Python numpy库的应用、matplotlib绘图、opencv的应用

numpy import numpy as npl1 [1, 2, 3, 4, 5]# array():将列表同构成一个numpy的数组 l2 np.array(l1) print(type(l2)) print(l2) # ndim : 返回数组的轴数&#xff08;维度数&#xff09; # shape&#xff1a;返回数组的形状&#xff0c;用元组表示&#xff1b;元组的元素…

SpringCloudAlibaba微服务实战系列(五)Sentinel1.8.5+Nacos持久化

Sentinel数据持久化 前面介绍Sentinel的流控、熔断降级等功能&#xff0c;同时Sentinel应用也在面临着一个问题&#xff1a;我们在Sentinel后台管理界面中配置了一堆流控、降级规则&#xff0c;但是Sentinel一重启&#xff0c;这些规则全部消失了。那么我们就要考虑Sentinel的持…

1、传统锁回顾(Jvm本地锁,MySQL悲观锁、乐观锁)

目录 1.1 从减库存聊起1.2 环境准备1.3 简单实现减库存1.4 演示超卖现象1.5 jvm锁1.6 三种情况导致Jvm本地锁失效1、多例模式下&#xff0c;Jvm本地锁失效2、Spring的事务导致Jvm本地锁失效3、集群部署导致Jvm本地锁失效 1.7 mysql锁演示1.7.1、一个sql1.7.2、悲观锁1.7.3、乐观…

深度学习:常用优化器Optimizer简介

深度学习&#xff1a;常用优化器Optimizer简介 随机梯度下降SGD带动量的随机梯度下降SGD-MomentumSGDWAdamAdamW 随机梯度下降SGD 梯度下降算法是使权重参数沿着整个训练集的梯度方向下降&#xff0c;但往往深度学习的训练集规模很大&#xff0c;计算整个训练集的梯度需要很大…

集睿致远推出CS5466多功能拓展坞方案:支持DP1.4、HDMI2.1视频8K输出

ASL新推出的 CS5466是一款Type-C/DP1.4转HDMI2.1的显示协议转换芯片,&#xff0c;它通过类型C/显示端口链路接收视频和音 频流&#xff0c;并转换为支持TMDS或FRL输出信令。DP接收器支持81.Gbp s链路速率。HDMI输出端口可以作为TMDS或FRL发射机工作。FRL发射机符合HDMI 2.1规范…

OpenCvSharp (C# OpenCV) 二维码畸变矫正--基于透视变换(附源码)

导读 本文主要介绍如何使用OpenCvSharp中的透视变换来实现二维码的畸变矫正。 由于CSDN文章中贴二维码会导致显示失败,大家可以直接点下面链接查看图片: C# OpenCV实现二维码畸变矫正--基于透视变换 (详细步骤 + 代码) 实现步骤 讲解实现步骤之前先看下效果(左边是原图,右边…