九五从零开始的运维之路(其三十五)

news2025/7/7 5:30:46

文章目录

  • 前言
  • 一、概述
    • 1.概念
    • 2.组成
    • 3.特点
    • 4.工作原理
    • 5.优点:
  • 二、各节点及其ip地址
  • 三、构建MHA
    • 1.ssh免密登录
    • 2.构建mysql主从复制
      • (一)安装mariadb数据库并启动
      • (二)master服务器
      • (三)slave服务器
      • (四)验证是否实现主从复制
    • 3.MHA安装
      • (一)所有节点安装perl环境
      • (二)所有节点安装node包
    • 4.测试
  • 总结


前言

本篇将简述的内容:Linux系统下的Mariadb高可用–MHA


一、概述

1.概念

MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。
MHA 的出现就是解决MySQL 单点的问题。
MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。
MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。

2.组成

MHA manager
管理节点
MHA node
数据节点
每个节点上都需要安装

3.特点

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

4.工作原理

(一)从宕机崩溃的master 保存二进制日志事件(binlog events);

(二)识别含有最新的更新slave日志

(三)应用差异的中继日志(relay log)到其他的slave

(四)应用从master保存的二进制日志事件

(五)提升一个slave为新的master

(六)使其他的slave连接新的master进行复制

5.优点:

MHA作为一个开源的高可用性解决方案,具有以下优点:

  • 简单易用:安装和配置MHA非常简单,只需几个简单的步骤即可完成。
  • 功能强大:MHA可以自动监控主从复制的状态,并在主节点故障时自动切换到备用节点。
  • 稳定可靠:MHA经过多年的实践和优化,已经在许多生产环境中得到了验证,具有较高的稳定性和可靠性。

二、各节点及其ip地址

managernodenodenode
mgtmasterslave1slave2
192.168.115.3192.168.115.4192.168.115.5192.168.115.6

三、构建MHA

要求:
构建mysql一主两从复制,一台mgt服务
前期准备:
为了方便操作,可先更改主机名
hostnamectl set-hostname 主机名
随后在本地hosts文件内分别
添加ip地址对应其主机名
在这里插入图片描述

1.ssh免密登录

四台主机各自免密登陆
获取密钥并将密钥传送至其他主机

192.168.115.3ssh-keygen
-for i in 4 5 6;do ssh-copy-id root@192.168.115.$i;done
192.168.115.4ssh-keygen
-for i in 3 5 6;do ssh-copy-id root@192.168.115.$i;done
192.168.115.5ssh-keygen
-for i in 4 3 6;do ssh-copy-id root@192.168.115.$i;done
192.168.115.6ssh-keygen
-for i in 4 5 3;do ssh-copy-id root@192.168.115.$i;done

在这里插入图片描述

2.构建mysql主从复制

(一)安装mariadb数据库并启动

for i in 4 5 6;do ssh 192.168.115.$i yum install -y mariadb mariadb-server mariadb;done

(二)master服务器

修改配置文件,开启二进制日志文件

vim  /etc/my.cnf
[mysqld]
server-id = 20
log-bin = master-bin
log-slave-updates = true

启动服务

systemctl start mariadb

做用户赋权

mysql -e "grant replication slave on *.* to 'myslave'@'192.168.115.%' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.115.%' identified by '123.com';"

在这里插入图片描述
查看主机状态

mysql -e "show master status";

在这里插入图片描述

(三)slave服务器

vim /etc/m.cfn
server-id=30
log-bin=master-bin
relay-log=relay-log-bin
relay-log-index=relay-log-bin.index

也做用户赋权

mysql -e "grant replication slave on *.* to 'myslave'@'192.168.115.%' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.115.%' identified by '123.com';"

在Slave服务器授权,启动从库,进行主从库数据同步

mysql -e "change master to master_host='192.168.115.4',master_user='myslave',master_password='123.com',master_log_file='master-bin.000003',master_log_pos=554;"

(四)验证是否实现主从复制

master

mysql -e "create database jx;"

slave

mysql -e "show databases;"

从服务器出现新建库----jx,即说明主从复制搭建成功
在这里插入图片描述

3.MHA安装

(一)所有节点安装perl环境

更新epel源至最新(版本一致即可)

yum install epel-release -y

安装所需依赖

yum -y install perl-DBD-MySQL perl-ExtUtils-MakeMaker perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-CPAN

(二)所有节点安装node包

	tar xf mha4mysql-node-0.57.tar.gz
	cd mha4mysql-node-0.57
	perl Makefile.PL && make && make install

验证
cd /usr/local/bin
看到脚本就OK
在这里插入图片描述

只有mgt安装manager包

tar xf mha4mysql-manager-0.57.tar.gz
cd /root/mha4mysql-manager-0.57
perl Makefile.PL && make && make install
cp samples/scripts/master_ip_failover /usr/local/bin/
cp samples/scripts/master_ip_online_change	 /usr/local/bin/

脚本说明
在这里插入图片描述

master_ip_failover 自动切换时 VIP 管理的脚本
master_ip_online_change 在线切换时 vip 的管理
power_manager 故障发生后关闭主机的脚本
send_report 因故障切换后发送报警的脚本

配置文件建立

mkdir /etc/masterha
vim /etc/masterha/app1.cnf
mkdir /var/log/masterha/app1

测试MHA

masterha_check_ssh --conf=/etc/masterha/app1.cnf
masterha_check_repl --conf=/etc/masterha/app1.cnf

启动命令

nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &

查看是否运行

在这里插入图片描述

4.测试

停用master的mariadb服务

systemctl stop mariadb

查看 /var/log/masterha/app1/manager.log
可发现
已启动自动(非交互式)故障转移。
在这里插入图片描述

能看到区域ip漂移到slave1服务器上

在这里插入图片描述

slave1
在这里插入图片描述

slave2

在这里插入图片描述
可以看到
master服务down掉后
slave1充当主服务器
slave2依旧为从服务器
依旧可实现主从复制


总结

通过使用MHA,我们可以在Linux系统下实现Mariadb的高可用性,提高数据库的稳定性和可靠性。MHA具有简单易用、功能强大、稳定可靠等特点,是一个值得推荐的高可用性解决方案。

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

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

相关文章

【Java转Go】快速上手学习笔记(二)之基础篇一

目录 创建项目数据类型变量常量类型转换计数器键盘交互流程控制代码运算符 创建项目 上篇我们安装好了Go环境&#xff0c;和用IDEA安装Go插件来开发Go项目&#xff1a;【Java转Go】快速上手学习笔记&#xff08;一&#xff09;之环境安装篇 。 这篇我们开始正式学习Go语言。我…

【数据结构OJ题】链表中倒数第k个结点

原题链接&#xff1a;https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId13&&tqId11167&rp2&ru/activity/oj&qru/ta/coding-interviews/question-ranking 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 …

数据结构的树存储结构

数据结构的树存储结构 之前介绍的所有的数据结构都是线性存储结构。本章所介绍的树结构是一种非线性存储结构&#xff0c;存储的是具有“一对多”关系的数据元素的集合。 (A) (B) 图 1 树的示例 图 …

vue树状结构以及设计思路

设计思路&#xff1a;多级数组循环遍历&#xff0c;第一层样式加三角形折叠&#xff0c;第二层在文字前方加 —&#xff08;横线&#xff09;&#xff0c;第三层加横线&#xff0c;第四层加点。给第二层第三层左侧加左边框&#xff0c;用translateY进行位移就形成了树状样式。 …

《起风了》C++源代码

使用方法 Visual Studio、Dev-C、Visual Studio Code等C/C创建一个 .cpp 文件&#xff0c;直接粘贴赋值即可。 #include <iostream> #include <Windows.h> #pragma comment(lib,"winmm.lib") using namespace std; enum Scale {Rest 0, C8 108, B7 …

SpringBoot08——前端数据模拟MockJS+vue-element-admin后台集成

感觉用到再说吧 2. vue-element-admin后台集成 3.JWT跨域认证 看自己的demo2源码吧

好用的networkx绘图包

1. NetworkX简介 NetworkX 是一个用于创建、操作和研究复杂网络的 Python 库。它可以创建、分析和可视化各种类型的网络(包括有向图和无向图)&#xff0c;例如社交网络、Web图、生物网络等。 NetworkX 提供了许多图的算法和分析工具&#xff0c;比如节点的度、网络的直径、最短…

jvm内存溢出排查(使用idea自带的内存泄漏分析工具)

文章目录 1.确保生成内存溢出文件2.使用idea自带的内存泄漏分析工具3.具体实验一下 1.确保生成内存溢出文件 想分析堆内存溢出&#xff0c;一定在运行jar包时就写上参数-XX:HeapDumpOnOutOfMemoryError&#xff0c;可以看我之前关于如何运行jar包的文章。若你没有写。可以写上…

express学习笔记8 - 文件上传 下载以及预览

一、上传 1、 安装multer (任意选其中一种) yarn add multer --S npm install multer --S 2、新建配置文件(utils/multerConfig) const multer require(multer); const mkdirp require(mkdirp); // const sd require(silly-datetime); const path require(path);con…

什么叫加杠杆投资_个人炒股如何加杠杆

加杠杆投资是指通过借款或者杠杆交易的方式&#xff0c;以较小的自有资金控制较大的资金进行投资。在加杠杆的情况下&#xff0c;投资者可以获得更高的投资回报&#xff0c;但同时也面临较高的风险。 个人炒股加杠杆可以通过以下几种方式实现&#xff1a; 1. 股票配资&#x…

GT Code - 图译算法编辑器(集成QT、C++、C、Linux、Git、java、web、go、高并发、服务器、分布式、网络编程、云计算、大数据项目)

目录 项目概述 发文意义 项目介绍 功能分析 设计概要 功能展示 项目文档 项目概述 “GT Code 图译算法编辑器”是一款跨平台、轻量级的代码编辑器&#xff0c;主要面向软件开发人员&#xff0c;它实现了编辑、编译、绘制代码流程图、生成调试演示动画等功能&#xff0c;以…

透过源码理解Flutter中widget、state和element的关系

1、framework源码组成 Flutter中widget、state、element的源码位于framework.dart中&#xff0c;整个文件6693行(版本Flutter 3.12.0-14.0.pre.28)。整个代码可划分为若干部分&#xff0c;主要包括key、widget、state、element四部分。 1.1 key 关于key的代码65行到272行&am…

STM32存储左右互搏 I2C总线FATS读写EEPROM ZD24C1MA

STM32存储左右互搏 I2C总线FATS读写EEPROM ZD24C1MA 在较低容量存储领域&#xff0c;EEPROM是常用的存储介质&#xff0c;可以通过直接或者文件操作方式进行读写。不同容量的EEPROM的地址对应位数不同&#xff0c;在发送字节的格式上有所区别。EEPROM是非快速访问存储&#xf…

【C语言】每日一题(多数元素)

多数元素&#xff0c;链接奉上 方法 1.摩尔投票2.合理但错误的方法2.1暴力循环2.2排序求出中间元素中间元素 1.摩尔投票 先来简单的介绍摩尔投票&#xff1a; 摩尔投票是一种用来解决绝对众数问题的算法。 什么是绝对众数呢&#xff1f; 在一个集合中&#xff0c;如果一个元素…

Java:迭代器常用方法、增强for循环、Lambda 表达式遍历集合、遍历集合案例

Java 迭代器概述&#xff1a;Iterator 迭代器常用方法 使用迭代器遍历集合时&#xff0c;一开始 it.next()在赵敏的位置&#xff0c;所以第一个打印输出的是赵敏&#xff0c;第二次就到了小昭的位置&#xff0c;第三次到了素素&#xff0c;第四次灭绝&#xff0c;如果多打印了…

探索Java中的面向对象与函数式编程思想

文章目录 &#x1f389; 欢迎来到 Java 学习路线专栏~探索Java中的面向对象与函数式编程思想1. 思想概述面向对象思想函数式编程思想 2. 面向对象思想写代码3. Lambda表达式格式4. 练习4.1 无参无返回值4.2 有参有返回值 5. Lambda省略格式6. 使用Lambda的前提条件 &#x1f38…

智慧乡村综合管控平台_数字孪生

数字乡村是伴随网络化、信息化和数字化在农业农村经济社会发展中的应用&#xff0c;既是乡村振兴的战略方向&#xff0c;也是建设数字中国的重要内容。为了进一步提升乡村治理智能化、专业化水平&#xff0c;解决建设顶层缺失、数据孤岛等问题&#xff0c;数字孪生技术被广泛应…

谈谈智慧农业系统

目录 1.智慧农业的概念 2.智慧农业会用到什么技术 3.智慧农业的优势 4.智慧农业的发展前景 1.智慧农业的概念 智慧农业&#xff08;Smart Agriculture&#xff09;&#xff0c;也被称为农业4.0&#xff0c;是利用先进的信息技术和物联网技术来改进农业生产效率、可持续性和农…

JAVA生成订单号根,可自定义长度、前缀

效率还可以&#xff0c;生成100万数据大概在1秒多左右&#xff0c;不想写说明了&#xff0c;直接粘贴~ public static void main(String[] args) {System.out.println("开始时间" new SimpleDateFormat("YYYY-MM-dd HH:mm:ss:SSS").format(new Date()));L…

Java中调用伪原创API的方法【源码】

在Java中调用API的GET请求可以使用HttpURLConnection或者第三方库如OkHttp等。 使用HttpURLConnection的示例代码: import java.net.HttpURLConnection; import java.net.URL;URL url new URL("http://example.com/api?param1a&param2b"); HttpURLConnectio…