Mysql—高可用集群MHA

1:什么是MHA?

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

MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 

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

2:MHA 的组成 

MHA由两部分组成:MHAManager (管理节点) MHA Node (数据库节点)

MHA  Manager 可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台 slave 节点上。 

MHA Manager 会定时探测集群中的 master 节点。 

当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master, 然后将所有其他的 slave 重新指向新的 master。

3:MHA 的特点

自动故障切换过程中,MHA从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失

使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日 志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数 据一致性

目前MHA支持一主多从架构,最少三台服务,即一主两从

4.MHA工作原理

目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群必须最少有3台数据库服务器, 一主二从,即一台充当Master,台充当备用Master,另一台充当从库。

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

MHAManager 会定时探测集群中的master 节点 当master 出现故障时,它可以自动将最新数据的slave 提升为新的master

然后将所有其他的slave 重新指向新的master,VIP自动漂移到新的master。

整个故障转移过程对应用程序完全透明。

5.MHA部署实施

5.1:搭建主两从架构

准备虚拟机:四台虚拟机:172.25.254.10,172.25.254.20,172.25.254.30,172.25.254.50

准备安装包MHA

172.25.254.50上与172.25.254.10,172.25.254.20,172.25.254.30做免密验证

[root@node4 ~]# ssh-keygen

172.25.254.50上与172.25.254.10做免密验证

[root@node4 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.10

输入密码172.25.254.10主机解析创建成功

172.25.254.50上与172.25.254.20做免密验证

[root@node4 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.20

输入密码172.25.254.20主机解析创建成功

172.25.254.50上与172.25.254.30做免密验证

[root@node4 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.30

输入密码172.25.254.30主机解析创建成功

确定本地解析是否存在

[root@node4 ~]# vim /etc/hosts

5.2:创建半同步模式

还原10,20,30主机的配置文件信息

172.25.254.10与172.25.254.20和172.25.254.30主机创建半同步模式

[root@node1 ~]# vim /etc/my.cnf

停止数据库

[root@node1 ~]# /etc/init.d/mysqld stop

清除mysql数据

[root@node1 ~]# rm -fr /data/mysql/*

对数据库进行初始化

[root@node1 ~]# mysqld --user=mysql --initialize

启动数据库

[root@node1 ~]# /etc/init.d/mysqld start

登录数据库,输入自己的密码

[root@node1 ~]# mysql -uroot -p'LEfu9_uS*B<h'

修改密码'lee'

mysql> alter user root@localhost identified by 'lee';

建立同步用户'lee'

mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'lee';

同意远程授权

mysql> GRANT REPLICATION SLAVE ON *.*  TO 'repl'@'%';

开启半同步模式

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

打开半同步功能

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;

mysql> SHOW MASTER STATUS;

mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';

mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';

同理172.25.254.20也进行相应的配置

[root@node2 ~]# vim /etc/my.cnf

停止数据库

[root@node2 ~]# /etc/init.d/mysqld stop

清除mysql数据

[root@node2 ~]# rm -fr /data/mysql/*

对数据库进行初始化

[root@node2 ~]# mysqld --user=mysql --initialize

[root@node2 ~]# /etc/init.d/mysqld start

[root@node2 ~]# mysql -uroot -p'kird_l5Pkg#0'

修改密码

mysql> alter user root@localhost identified by 'lee';

mysql> CHANGE MASTER TO MASTER_HOST='172.25.254.10', MASTER_USER='repl', MASTER_PASSWORD='lee', MASTER_AUTO_POSITION=1;

开启slave模式

mysql> start slave;

加载半同步模块

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

打开半同步功能

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;

mysql> STOP SLAVE IO_THREAD;

mysql> START SLAVE IO_THREAD;

mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';

mysql> SHOW SLAVE STATUS\G

172.25.254.20与172.25.254.10主机建立半同步模式成功

172.25.254.30

[root@node3 ~]# vim /etc/my.cnf

停止数据库

[root@node2 ~]# /etc/init.d/mysqld stop

清除mysql数据

[root@node2 ~]# rm -fr /data/mysql/*

[root@node3 ~]# mysql -uroot -p'1;o0/rSwpg2L'

mysql> alter user root@localhost identified by 'lee';

mysql> CHANGE MASTER TO MASTER_HOST='172.25.254.10', MASTER_USER='repl', MASTER_PASSWORD='lee', MASTER_AUTO_POSITION=1;

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;

mysql> start slave;

mysql> SHOW SLAVE STATUS\G

172.25.254.30与172.25.254.10建立半同步模式成功

5.3:安装MHA所需要的软件

[root@node4 ~]# cd MHA-7/
[root@node4 MHA-7]# yum install *.rpm

在172.25.254.50传递软件包到172.25.254.10,172.25.254.20和172.25.254.30主机上

[root@node4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.10:/root

[root@node4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.20:/root
[root@node4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.30:/root

172.25.254.10,172.25.254.20和172.25.254.30主机上对传递的包进行安装

[root@node1 ~]# yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
[root@node2 ~]# yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
[root@node3 ~]# yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm 

172.25.254.50上生成配置文件并解压压缩包

[root@node4 MHA-7]# mkdir /etc/masterha
[root@node4 MHA-7]# tar zxf mha4mysql-manager-0.58.tar.gz 

将底下的文件app1.conf进行拷贝

[root@node4 MHA-7]# cd mha4mysql-manager-0.58/
[root@node4 mha4mysql-manager-0.58]# ls

[root@node4 mha4mysql-manager-0.58]# cd samples/conf
[root@node4 conf]# cat masterha_default.cnf app1.cnf > /etc/masterha/app1.cnf 

进入新拷贝的文件中修改配置文件

[root@node4 conf]# vim /etc/masterha/app1.cnf

由于172.25.254.10,172.25.254.20,172.25.254.30主机不允许建立远程连接

由于创建主从复制,172.25.254.10上建立远程连接就可以全部建立成功

mysql> CREATE USER root@'%' identified by 'lee';

mysql> grant ALL ON *.* to root@'%';

在172.25.254.50主机上进行检测将其底下文件传递到10,20和30主机上

[root@node4 ~]# cd .ssh/
[root@node4 .ssh]# ls

[root@node4 ~]#scp id_rsa root@172.25.254.10:/root/.ssh/

[root@node4 ~]#scp id_rsa root@172.25.254.20:/root/.ssh/

[root@node4 ~]#scp id_rsa root@172.25.254.30:/root/.ssh/

检测网络及SSH免密验证

[root@node4 ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf

保证了连接完整性

检测数据主从复制情况

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

数据主从复制没有问题

至此MHA的部署完成!!!

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

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

相关文章

【py】使用numpy读取文件,并统计

我们需要编写一个脚本来读取文本文件&#xff0c;然后进行字数统计和词频统计。 以下是一个简单的Python脚本&#xff0c;它使用numpy来处理数据。 首先&#xff0c;确保你已经安装了numpy库。如果没有安装&#xff0c;可以通过运行pip install numpy来安装。 然后&#xff0c…

Gin框架操作指南06:POST绑定(下)

官方文档地址&#xff08;中文&#xff09;&#xff1a;https://gin-gonic.com/zh-cn/docs/ 注&#xff1a;没用过Gin的读者强烈建议先阅读第一节&#xff1a;Gin操作指南&#xff1a;开山篇。 本节继续演示POST绑定&#xff0c;包括将request-body绑定到不同的结构体中&#x…

小猿口算辅助工具(nodejs版)

github 地址&#xff1a;https://github.com/pbstar/xyks-helper 实现原理 通过屏幕截图截取到题目区域的两个数字&#xff0c;然后通过 ocr 识别出数字&#xff0c;最后通过计算得出答案&#xff0c;并通过模拟鼠标绘制答案。 依赖插件 node-screenshots&#xff1a;屏幕截…

微知-Mellanox驱动中的iSCSI是什么?有哪三种网络存储有哪三种?iSER是什么?(iSCSI协议(总线),SAN 存储区域网络)

背景 本文根据Mellanox网卡驱动中关于iSCSI模块&#xff0c;来介绍iSCSI是什么&#xff1f;该技术发展演进背景&#xff1f; 关于iSCSI iSCSI是一种协议&#xff0c;SCSI是总线。比如常说的SAS&#xff08;Serial Attach SCSI&#xff09;存储盘对比与家用的SATA&#xff0…

Facebook上的隐私保护:如何加强个人数据的安全性?

在数字化时代&#xff0c;个人数据的保护已成为用户日益关注的话题&#xff0c;尤其是在社交媒体平台如Facebook上。用户在享受社交媒体带来的便利时&#xff0c;如何有效保护个人隐私&#xff0c;维护自身的数据安全&#xff0c;成为了一个亟需解决的问题。 Facebook的隐私保护…

算法备案不再难!一篇文章让你成为备案达人

随着互联网的迅猛发展&#xff0c;算法推荐已成为众多互联网信息服务的重要组成部分。然而&#xff0c;算法推荐技术的广泛应用也带来了一系列风险和挑战。为了保障公众利益&#xff0c;规范互联网信息服务算法推荐活动&#xff0c;相关部门出台了《互联网信息服务算法推荐管理…

Dubbo接口级和应用级注册,Dubbo消费者注册到Nacos

学习文档 视频学习 代码演示环境 Dubbo 3.2.9Nacos 2.3.0 一、什么是接口级和应用级 假设有一个服务A&#xff0c;里面提供了2个Dubbo接口XdxOneService、XdxTwoService&#xff0c;Dubbo生产者把服务注册到Nacos&#xff08;或其它的注册中心&#xff09; 以应用级别注册&a…

MySQL之Buffer Pool缓冲池详解

为什么要有 Buffer Pool&#xff1f; 虽然说 MySQL 的数据是存储在磁盘里的&#xff0c;但是也不能每次都从磁盘里面读取数据&#xff0c;这样性能是极差的。 要想提升查询性能&#xff0c;加个缓存就行了嘛。所以&#xff0c;当数据从磁盘中取出后&#xff0c;缓存内存中&am…

软件功能测试重点和流程有哪些?专业软件测评服务公司推荐

软件功能测试就是对产品的各功能进行验证&#xff0c;根据功能测试用例&#xff0c;逐项测试&#xff0c;检查产品是否达到用户要求的功能。功能测试也叫黑盒测试或数据驱动测试&#xff0c;只需考虑需要测试的各个功能&#xff0c;不需要考虑整个软件的内部结构及代码.一般从软…

Unity修改鼠标图片【超简单】

1.向Unity导入需要修改的鼠标图片&#xff0c;在Unity内设置图片的Texture Type为Cursor。 2.编写代码 [SerializeField] Texture2D mouseTex;//放图片 void Start() {Cursor.SetCursor(mouseTex, Vector2.zero, CursorMode.Auto); }3.代码挂载在某物体&#xff08;或者随便哪…

2024年区块链钱包现状与未来趋势分析

钱包作为Web3世界的入口&#xff0c;充当了用户与区块链应用交互、管理资金和传递信息的关键工具。随着区块链技术的发展&#xff0c;钱包生态系统日益多样化&#xff0c;涌现出大量不同类型的解决方案。这些解决方案不仅极大地改善了用户体验&#xff0c;还推动了区块链技术和…

string模拟优化和vector使用

1.简单介绍编码 utf_8变长编码&#xff0c;常用英文字母使用1个字节&#xff0c;对于其它语言可能2到14&#xff0c;大部分编码是utf_8&#xff0c;char_16是编码为utf_16, char_32是编码为utf_32&#xff0c; wchar_t是宽字符的&#xff0c; utf_16是大小为俩个字节&a…

玩转大模型(二)启动一个大模型

写这篇文章是几个月前了&#xff0c;现在模型和框架已经更新了好几轮了&#xff0c;但不影响吧&#xff0c;后面会把这几个月的发展专门用一篇文章补上。 在上一篇中&#xff0c;硬件全都准备好了&#xff0c;软件也已经安装完成&#xff0c;相应的配置都已经做完&#xff0c;…

StarRocks大批量数据导入方案-使用 Kafka connector 导入数据

本文详细介绍如何使用Routine Load 导入数据 一、准备工作 1.1 安装基础环境 主要是安装StarRocks和Kafka&#xff0c;本文直接跳过不做详细介绍~ 二、概念及原理 2.1 概念 导入作业&#xff08;Load job&#xff09; 导入作业会常驻运行&#xff0c;当导入作业的状态为 R…

使用idea和vecode创建vue项目并启动(超详细)

一、idea创建vue项目 创建项目之前先下载好插件 新建项目找到vue生成器 写好名称&#xff0c;找到自己需要存放的地址&#xff0c;node解释器安装方式可以看我上一个博客&#xff0c;vueCLI是选择vue的版本&#xff0c;我们可以使用idea自带的vue版本默认是vue3&#xff0c;创…

SQL注入漏洞(三)

报错注入 group by重复键冲突 &#xff08;count()floor()rand()group by 组合&#xff09;就是利用 count()、rand()、floor()、 group by 这几个特定的函数结合在一起产生的注入漏洞。 ?id1 and (select 1 from (select count(*),concat(0x5e,(select version() from inf…

[含文档+PPT+源码等]精品基于Nodejs实现的微信小程序校园心理健康平台设计与实现

《[含文档PPT源码等]精品基于Nodejs实现的微信小程序校园心理健康平台设计与实现》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等福利&#xff01; 软件开发环境及开发工具&#xff1a; 操作系统&#xff1a;Windows 10、Windows 7、Windows 8 开…

前端excel的实现方案Luckysheet

一、介绍 Luckysheet是一款纯前端类似excel的在线表格&#xff0c;功能强大、配置简单、完全开源的插件。目前已暂停维护&#xff0c;但是其已有功能大概能满足常见需求的使用。 二、引入 ①cdn引入&#xff08;目前应该已经不支持&#xff0c;可自行尝试&#xff09; <l…

mysql 10 单表访问方法

01.优化的过程 对于我们这些 MySQL 的使用者来说&#xff0c; MySQL 其实就是一个软件&#xff0c;平时用的最多的就是查询功能。DBA时不时丢过来一些慢查询语句让优化&#xff0c;我们如果连查询是怎么执行的都不清楚还优化个毛线&#xff0c;所以是时候掌握真正的技术了。我…

LED显示屏与手机连接:简单便捷的操作指南

随着科技的飞速发展&#xff0c;LED显示屏已经成为现代商业和公共信息展示的重要工具。它们不仅在户外广告中扮演着重要角色&#xff0c;室内应用也越来越广泛。智能手机的普及使得我们希望能够通过手机直接控制LED显示屏&#xff0c;以实现更灵活、更便捷的信息展示。那么&…