MySQL高可用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支持一主多从架构,最少三台服务器,即一主两从

二、MySQL MHA搭建准备 

节点服务器    系统    主机名    IP地址    安装工具及服务
MHA manager 服务器    CentOS7.4(64 位)    manager    192.168.52.100    MHA node 和 manager 组件
Master 服务器    CentOS7.4(64 位)    mysql1    192.168.52.140    MHA node 组件
Slave1 服务器    CentOS7.4(64 位)    mysql2    192.168.52.130    MHA node 组件
Slave2 服务器    CentOS7.4(64 位)    mysql3    192.168.52.120    MHA node 组件
 

三、搭建 MySQL MHA 

1、 配置主从复制

1.1所有服务器关闭防火墙与selinux

systemctl stop firewalld 
systemctl disable firewalld
setenforce 0

1.2 Master、Slave1、Slave2 节点安装mysql5.7 

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

#Master 节点
hostnamectl set-hostname mysql1
su 
#Slave1节点
hostnamectl set-hostname mysql2
su ​
#Slave2节点
hostnamectl set-hostname mysql3
su

 

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

#三台添加同样的配置
vim /etc/hosts
192.168.92.7 mysql1
192.168.92.6 mysql2
192.168.92.9 mysql3

 

网络连通性测试 

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

Master节点,开启二进制日志。

Slave1、Slave2 节点,开启二进制日志和中继日志。

#Master 节点
vim /etc/my.cnf
[mysqld]
server-id = 1
log_bin = master-bin         #开启二进制日志
log-slave-updates = true     #允许slave从master复制数据时可以写入到自己的二进制日志
-------------------------------------------- ​
systemctl restart mysqld     #重启mysql​
#Slave1节点
vim /etc/my.cnf
[mysqld]
server-id = 2               #三台服务器的 server-id 不能相同
log_bin = master-bin        #开启中继日志
relay-log = relay-log-bin   
relay-log-index = slave-relay-bin.index
----------------------------------------------------- ​
systemctl restart mysqld​
#Slave2节点
vim /etc/my.cnf
[mysqld]
server-id = 3               #三台服务器的 server-id 不能相同
log_bin = master-bin        #开启中继日志
relay-log = relay-log-bin   #添加定义中继日志文件位置与名称一般与二进制文件在同一目录
relay-log-index = slave-relay-bin.index 
------------------------------------------------
systemctl restart mysqld     #重启mysql

 

 

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

ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/ ​
ls /usr/sbin/mysql*     #查看软链接

1.7登录数据库进行授权 

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

grant replication slave on *.* to 'myslave'@'192.168.92.%' identified by '123123';   
#从服务器同步使用

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

#所有数据库节点进行manager授权
grant all privileges on *.* to 'my'@'192.168.92.%' identified by 'abc123'; 
#为了防止因主机名导致的连接不上问题,再次对登录地址进行授权​ 
grant all privileges on *.* to 'my'@'mysql1' identified by 'abc123';              
grant all privileges on *.* to 'my'@'mysql2' identified by 'abc123';
grant all privileges on *.* to 'my'@'mysql3' identified by 'abc123';
flush privileges;   #刷新权限

1.8配置主从同步 

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

#在 Master 节点查看二进制文件和同步点(即偏移量)
show master status;

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

#在 Slave1、Slave2 节点执行同步操作
change master to 
master_host='192.168.92.7',
master_user='myslave',
master_password='123123',
master_log_file='master-bin.000001',
master_log_pos=1893; 
------------------------------------------------ ​
start slave;     #开启同步,如有报错执行 reset slave;
------------------------------------ ​
#在 Slave1、Slave2 查看节点状态
show slave status\G     
#确保 IO 和 SQL 线程都是 Yes,代表同步正常。Slave_IO_Running: YesSlave_SQL_Running: Yes

一般Slave_IO_Running:No的可能性

  • 网络不通
  • my.cnf配置有问题
  • 密码、file文件名、pos偏移量不对
  • 防火墙没有关闭

 两个从库设置为只读模式

 #两个从库必须设置为只读模式set global read_only=1;

在Master主库插入数据 

#在Master主库插入数据,测试数据库同步##
create database my; 
use my;
create table city(id int);
insert into city values (1);

从数据库中验证数据同步

#从数据库中验证是否同步成功
show databases;
use my;
show tables;
select * from city;

 

2 、配置MHA 

2.1安装MHA软件

所有服务器上都安装MHA依赖的环境,首先安装 epel 源

  • 对于每个操作系统版本不一样,这里 CentOS7.4 必须选择 0.57 版本。
  • 在所有服务器上必须先安装 node 组件,最后在 MHA-manager 节点上安装 manager 组件,因为 manager组件 依赖 node 组件。
#安装epel源
yum install epel-release --nogpgcheck -y​
#安装 MHA依赖环境
yum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN

所有服务器上首先安装epel源 

所有服务器安装MHA依赖的环境 

 安装 MHA 软件包,必须先在所有服务器上安装 node 组件 

 在所有服务器上安装 node 组件

#将安装包上传到/opt/目录中,解压安装node组件
cd /opt/
tar zxvf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57
perl Makefile.PL
make && make install 

 最后在 MHA manager 节点上安装 manager 组件

在 MHA manager 节点上安装 manager 组件##(manager组件依赖node 组件)
cd /opt/
tar zxvf mha4mysql-manager-0.57.tar.gz
cd mha4mysql-manager-0.57
perl Makefile.PL
make && make install

 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.2在所有服务器上配置无密码认证

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

ssh-keygen -t rsa             #一路按回车键,生成密钥。"-t rsa"指定密钥的类型。
ssh-copy-id 192.168.92.7    #将公钥传给所有数据库节点,形成免密码连接登录
ssh-copy-id 192.168.92.6
ssh-copy-id 192.168.92.9

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

 

 在 mysql1主节点服务器上配置到数据库节点 mysql2 和 mysql3 的无密码认证

ssh-keygen -t rsa
#将公钥传给两个从节点,形成免密码连接登录
ssh-copy-id 192.168.92.6
ssh-copy-id 192.168.92.9

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

ssh-keygen -t rsa
ssh-copy-id 192.168.52.140 #master服务器
ssh-copy-id 192.168.52.120 #slave2服务器

 

 

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

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

相关文章

笔记本电脑win7 Wireless-AC 7265连不上wifi6

1.背景介绍 旧路由器连接人数有限,老旧,信号不稳定更换了新路由器,如 TL-XDR5430易展版用户电脑连不上新的WIFI网络了,比较着急 核心问题:有效解决笔记本连接wifi上网问题,方法不限 2.环境信息 Windows…

Nginx 高级

文章目录 Nginx反向代理概念配置 负载均衡概念配置 动静分离概念配置 网关防盗链keepalivednginx跨域 Nginx 反向代理 概念 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器&…

LabVIEW挖坑指南

一、挖坑指南 1.1、输出变量放在条件框内 错误写法: 现象:如果没进入对应的分支,输出为默认值 正常写法: 让每个分支输出的值都在预料之内。 1.2、统计耗时不准 错误写法 现象:统计出来的耗时是2000ms 正常写法&a…

ES8 学习 -- async 和 await / 对象方法扩展 / 字符串填充

文章目录 1. async 和 await1.1 基本语法1.2 使用示例1.3 案例练习 2. 对象方法扩展2.1 Object.values(obj)2.2 Object.entries(obj)2.3 Object.getOwnPropertyDescriptors(obj)使用示例 3. 字符串填充4. 函数参数的末尾加逗号 1. async 和 await async 函数,使得异…

基于SSM的“汽车销售分析与管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“汽车销售分析与管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 销售经理系统首页图 客户管理图 车辆…

c++的学习之路:8、内存管理与模板

一、 C/C内存分布 首先在c语言的动态内存管理中我知道了代码是如何存储数据的,然后c是根据c语言底层变化来的,那么c语言的内存管理就是适用c的内存管理,在c语言中程序是分为几个部分存储,例如在栈堆等等,他们的分布如…

Golang并发模型-Pipeline模型、Fan-in Fan-out模型

这段时间由于项目的需要,本人正在研究关于如何优雅的进行go的并发,以下是结合资料和视频的结果,文末会给出参考资料 Go语言的并发模型主要通过goroutine和channel实现,通过这个我们可以更有效地使用IO和CPU 这里我们围绕生成一个…

【随笔】Git 基础篇 -- 分支与合并(九)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

mysql 基本查询

学习了mysql函数&#xff0c;接下来学习mysql基本查询。 1&#xff0c;基本查询语句 MySQL从数据表中查询数据的基本语句为SELECT 语句。SELECT语句的基本格式是&#xff1a; SELECT (*I <字段列表>} FROM <表1>,<表2>..[WHERE<表达式> [GROUP BY <…

手写简易操作系统(二十一)--硬盘驱动

前情提要 上面一节我们实现了 malloc 和 free 的系统调用&#xff0c;这一节我们来实现硬盘驱动。 一、硬盘分区 我们的文件系统安装在一块全新的硬盘中&#xff0c;我们先创建它&#xff0c;然后在给他分区。 1.1、创建硬盘 首先是创建&#xff0c;这个之前我们已经干过一…

Linux网络编程一(协议、TCP协议、UDP、socket编程、TCP服务器端及客户端)

文章目录 协议1、分层模型结构2、网络应用程序设计模式3、ARP协议4、IP协议5、UDP协议6、TCP协议 Socket编程1、网络套接字(socket)2、网络字节序3、IP地址转换4、一系列函数5、TCP通信流程分析 第二次更新&#xff0c;自己再重新梳理一遍… 协议 协议&#xff1a;指一组规则&…

Kafka架构概述

Kafka的体系结构 Kafka是由Apache软件基金会管理的一个开源的分布式数据流处理平台。Kafka具有支持消息的发布/订阅模式、高吞吐量与低延迟、持久化、支持水平扩展、高可用性等特点。可以将Kafka应用于大数据实时处理、高性能数据管道、流分析、数据集成和关键任务应用等场景。…

20240402—Qt如何通过动态属性设置按钮样式?

前言 正文 1、点击UI文件 2、选择Bool型或是QString 3、设置后这里出现动态属性 4、这qss文件中绑定该动态属性 QPushButton[PopBlueBtn"PopBlueBtn"]{background-color:#1050B7;color:#FFFFFF;font-size:20px;font-family:Source Han Sans CN;//思源黑体 CNbor…

【JavaEE初阶系列】——一万字带你了解 JUC常见类 以及 线程安全集合类(哈希表)

目录 &#x1f6a9;JUC(java.util.concurrent) 的常见类 &#x1f388;Callable 接口 &#x1f308;理解 Callable(相关面试题) &#x1f308;理解 FutureTask &#x1f4dd;线程创建方式 &#x1f388; ReentrantLock可重入锁 &#x1f308;ReentrantLock 优势&#x…

4.2日java总结,以及窗口的创建

今日份学习——字符串的进阶 1.StringBulider StringBulider是一个java里的关键字&#xff0c;可以看做一个容器&#xff0c;但是其是一个可以改变的容器&#xff0c;对其有四种操作可以进行&#xff0c;分别是添加元素&#xff08;append&#xff09;&#xff0c;反转元素&a…

谷粒商城实战(009 缓存-分布式锁)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第158p-第p165的内容 分布式锁 原理和使用 使用下shell对产生的命令进行发送 查看 -> 撰写 -> 撰写栏 idea 选中的代码提取成方法 加锁…

【教学类-09-07】20240401细线迷宫图02+箭头图片(A4横版一页-2份竖版)

作品展示 作品展示 word模板 重点说明 代码展示 批量制作细线条的迷宫图(A4横板一面2张竖版)箭头图片 作者&#xff1a; 1、落难Coder https://blog.csdn.net/u014297502/article/details/124839912 2、AI对话大师 3、阿夏 作者&#xff1a;2024年4月3日 numint(input(几人&…

Android14之BpBinder构造函数Handle拆解(二百零四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Docker:探索容器化技术,重塑云计算时代应用交付与管理

一&#xff0c;引言 在云计算时代&#xff0c;随着开发者逐步将应用迁移至云端以减轻硬件管理负担&#xff0c;软件配置与环境一致性问题日益凸显。Docker的横空出世&#xff0c;恰好为软件开发者带来了全新的解决方案&#xff0c;它革新了软件的打包、分发和管理方式&#xff…

AIGC之gradio系列学习教程(一)

主题:本篇即为入门,后续将会从函数和使用场景介绍。 Gradio 是一个开源 Python 包,可让快速为机器学习模型、API 或任何任意 Python 函数构建演示或 Web 应用程序。然后,您可以使用 Gradio 的内置共享功能在短短几秒钟内共享演示或 Web 应用程序的链接。无需 JavaScript、…