Mysql运维篇(五) 部署MHA--主机环境配置
一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。如有侵权,请留言,我及时删除!
大佬博文
https://www.cnblogs.com/gomysql/p/3675429.html
MySQL 高可用(MHA) - 知乎
一、MHA简介:
MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。
在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。
目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器,出于机器成本的考虑,淘宝也在该基础上进行了改造,目前淘宝TMHA已经支持一主一从。另外对于想快速搭建的可以参考:MHA快速搭建
我们自己使用其实也可以使用1主1从,但是master主机宕机后无法切换,以及无法补全binlog。master的mysqld进程crash后,还是可以切换成功,以及补全binlog的。
官方介绍:https://code.google.com/p/mysql-master-ha/
图01展示了如何通过MHA Manager管理多组主从复制。可以将MHA工作原理总结为如下:

(1)从宕机崩溃的master保存二进制日志事件(binlog events);
(2)识别含有最新更新的slave;
(3)应用差异的中继日志(relay log)到其他的slave;
(4)应用从master保存的二进制日志事件(binlog events);
(5)提升一个slave为新的master;
(6)使其他的slave连接新的master进行复制;
MHA软件由两部分组成,Manager工具包和Node工具包,具体的说明如下。
Manager工具包主要包括以下几个工具:
(1)从宕机崩溃的master保存二进制日志事件(binlog events);
(2)识别含有最新更新的slave;
(3)应用差异的中继日志(relay log)到其他的slave;
(4)应用从master保存的二进制日志事件(binlog events);
(5)提升一个slave为新的master;
(6)使其他的slave连接新的master进行复制;
MHA软件由两部分组成,Manager工具包和Node工具包,具体的说明如下。
Manager工具包主要包括以下几个工具:
Node工具包(这些工具通常由MHA Manager的脚本触发,无需人为操作)主要包括以下几个工具:
save_binary_logs 保存和复制master的二进制日志 apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的slave filter_mysqlbinlog 去除不必要的ROLLBACK事件(MHA已不再使用这个工具) purge_relay_logs 清除中继日志(不会阻塞SQL线程)
++++++++++++++++++++++++部署MHA环境++++++++++++++++++++++++++++++++++++
一、主机设置
1、环境配置
操作系统:centos 7
数据库:MySQL 5.7
IP地址:133.96.10.20;133.96.10.30;133.96.10.40;
2、创建mysql用户--ALL
[root@mysql03 home]# groupadd mysql
[root@mysql03 home]# useradd -g mysql mysql
Creating mailbox file: File exists
用户uid和gid保持一致
[mysql@mysql03 ~]$ id
uid=1001(mysql) gid=1001(mysql) groups=1001(mysql) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[mysql@mysql03 ~]$
[root@mysql02 home]# passwd mysql
3、三台主机操作hosts配置
vi /etc/hosts
192.168.10.20 mysql01
192.168.10.30 mysql02
192.168.10.40 mysql03
设置环境变量--创建MySQL用户组及MySQL用户
[root@mysql5 /]# vi /etc/profile
export PATH=/usr/local/mysql/bin:$PATH (安装目录)
[root@mysql5 /]#source /etc/profile
4、root、mysql用户信任关系建立(重要,信任关系混乱,会造成部署失败)
[root@master ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:GIp8704sc3412f6yanmh0f+W35jSubYiMK9RhcNFj+o root@master
The key's randomart image is:
+---[RSA 2048]----+
| .o |
| . o o |
| . + o . |
| . . . o + |
| o o . S o+ |
| . o oo= + |
| o = .=E* + ..|
| B ..* * =+o|
| .+..o.+.B*==|
+----[SHA256]-----+
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.20
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.30
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.40
测试信任关系1
[root@mysql03 ~]# ssh root@192.168.10.20
Last login: Sat Feb 24 22:35:35 2024 from mysql02
[root@mysql01 ~]# ssh root@192.168.10.30
Last login: Sat Feb 24 22:35:59 2024 from mysql01
[root@mysql02 ~]#
[root@mysql02 ~]# ssh root@192.168.10.40
Last login: Sat Feb 24 22:36:03 2024 from mysql02
测试信任关系2
[root@mysql03 bin]# ssh 192.168.10.20 date
Sat Feb 24 22:45:58 CST 2024
[root@mysql03 bin]# ssh 192.168.10.30 date
Sat Feb 24 22:46:03 CST 2024
[root@mysql03 bin]# ssh 192.168.10.40 date
Sat Feb 24 22:46:09 CST 2024
[root@mysql03 bin]#
5、关闭防火墙、SELINUX
[root@mysql03 home]# systemctl stop firewalld.service
[root@mysql03 home]#
[root@mysql03 home]# systemctl status firewalld.service
â— firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Sun 2024-02-25 09:43:15 CST; 3s ago
Docs: man:firewalld(1)
Process: 781 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
Main PID: 781 (code=exited, status=0/SUCCESS)
Feb 24 23:07:58 mysql5 systemd[1]: Starting firewalld - dynamic firewall daemon...
Feb 24 23:07:59 mysql5 systemd[1]: Started firewalld - dynamic firewall daemon.
Feb 24 23:07:59 mysql5 firewalld[781]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It ... it now.
Feb 25 09:43:14 mysql03 systemd[1]: Stopping firewalld - dynamic firewall daemon...
Feb 25 09:43:15 mysql03 systemd[1]: Stopped firewalld - dynamic firewall daemon.
Hint: Some lines were ellipsized, use -l to show in full.
禁止防火墙开机启动
[root@mysql03 home]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@mysql03 home]#
关闭SELinux /#永久关闭SELinux开启自启动
setenforce 0
vi /etc/sysconfig/selinux
SELINUX=disable
6、依赖包检查
检查当前环境 mariadb,如果存在就卸载
[root@mysql5 opt]# rpm -qa | grep mariadb
[root@mysql5 opt]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
[root@mysql5 opt]# rpm -e --nodeps mariadb-5.5.68-1.el7.x86_64
检查当前环境 libaio,如果缺少使用yum进行安装
[root@mysql5 opt]# rpm -qa | grep libaio
libaio-0.3.109-13.el7.x86_64
[root@mysql5 opt]# yum install -y libaio-devel
7、创建MySQL数据目录
[root@mysql03 home]# mkdir -p /data/mysql/
[root@mysql03 home]# chown mysql:mysql /data/
[root@mysql03 home]# chmod -R 755 /data/
[root@mysql03 home]# mkdir -p /data/mysql/data
相关文章:
Mysql运维篇(五) 部署MHA--主机环境配置
一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。如有侵权,请留言,我及时删除! 大佬博文 https://www.cnblogs.com/gomysql/p/3675429.html MySQL 高可用(MHA&#x…...
Offer必备算法09_分治快排_四道力扣OJ(快排三路划分)
目录 分治快排算法原理 ①力扣75. 颜色分类 解析代码 ②力扣912. 排序数组 解析代码 ③力扣215. 数组中的第K个最大元素 解析代码 ④力扣LCR 159. 库存管理 III(剑指 Offer . 最小的k个数) 解析代码 本篇完。 分治快排算法原理 分治就是分而治…...
Linux下性能分析的可视化图表工具
1 sar 和sadf 1.1 简介 sar命令可以记录系统下的常见活动信息,例如CPU使用率、网络统计数据、Block I/O数据、内存使用情况 等。 sar命令的“-o [file_name]”参数可以将系统活动数据记录到file_name文件,然后通过sadf来解析,sadf命令的“-g…...
泽攸科技JS系列高精度台阶仪在半导体领域的应用
泽攸科技JS系列高精度台阶仪是一款先进的自主研发的国产台阶仪,采用了先进的扫描探针技术。通过扫描探针在样品表面上进行微观测量,台阶仪能够准确获取表面形貌信息。其工作原理基于探针与样品表面的相互作用力,通过测量探针的微小位移&#…...
c++实现栈和队列类
c实现栈和队列类 栈(Stack)Stack示意图Stack.cpp 队列(queue)queue 示意图queue.cpp 栈(Stack) Stack示意图 Stack.cpp #pragma once #include "ListStu.cpp"template<typename T> class Stack { public: /* * void push(T& tDate)* 参数一 :…...
MySQL优化之索引下推
(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ 👀👀👀 个人博客:小奥的博客 👍👍👍:个人CSDN ⭐️⭐️⭐️:传送门 🍹 本人24应届生一枚,技术和水平有限&am…...
【Java程序设计】【C00338】基于Springboot的银行客户管理系统(有论文)
基于Springboot的银行客户管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的银行客户管理系统,本系统有管理员、员工以及用户二种角色; 管理员:个人中心、管理员管理、客…...
C语言中大小写字母的转化
目录 C语言中大小写字母的转化 一、引言 二、C语言中的大小写转换函数 toupper()函数 tolower()函数 三、注意事项 四、总结 C语言中大小写字母的转化 一、引言 在C语言编程中,字符的处理是一个重要的环节。字符包括字母、数字、标点符号等,其中…...
Camunda7.18流程引擎启动出现Table ‘camunda_platform_docker.ACT_GE_PROPERTY‘的解决方案
文章目录 1、问题描述2、原因分析3、解决方案3.1、方案一:降低mysql版本3.2、方案二:增加nullCatalogMeansCurrent参数(推荐) 4、总结 1、问题描述 需要在docker中,部署Camunda流程引擎。通过启动脚本camunda-platfor…...
红队打靶:DR4G0N B4LL打靶思路详解(vulnhub)
目录 写在开头 第一步:主机发现 第二步:Web渗透 第三步:curl批量访问(无果) 第四步:Vulnhub目录发现 第五步: 图片隐写破解 第六步:ssh私钥登录 第七步:变量劫持提…...
SQL Server添加用户登录
我们可以模拟一下让这个数据库可以给其它人使用 1、在计算机中添加一个新用户TeacherWang 2、在Sql Server中添加该计算机用户的登录权限 exec sp_grantlogin LAPTOP-61GDB2Q7\TeacherWang -- 之后这个计算机用户也可以登录数据库了 3、添加数据库的登录用户和密码࿰…...
pytest如何在类的方法之间共享变量?
在pytest中,setup_class是一个特殊的方法,它用于在类级别的测试开始之前设置一些初始化的状态。这个方法会在类中的任何测试方法执行之前只运行一次。 当你在setup_class中使用self来修改类属性时,你实际上是在修改类的一个实例属性。在Pyth…...
配置前端项目到 github-pages
Quickstart for GitHub Pages - GitHub Docs...
VSCode使用教程
文章目录 VSCode简介VSCode下载安装配置语言环境CJavaPython VSCode偏好配置中文配置界面颜色字体大小快捷键 个人常规喜好 VSCode简介 VSCode(全称:Visual Studio Code)是一款由微软开发且跨平台的免费源代码编辑器。该软件支持语法高亮、代…...
vscode——本地配置(C和C++环境配置)(2)
vscode——本地配置(2) 配置C语言编译看看.json文件编译多个C文件C/C调试 今天我们继续来看vscode的配置,如果没看过上一次的文章,大家可以点击: https://blog.csdn.net/qq_67693066/article/details/136315696 配置C语…...
【从零开始学习重要知识点 | 第一篇】快速了解什么是幂等性以及常见解决方案
前言: 当我们在设计和实现分布式系统时,幂等性是一个非常重要的概念。幂等性可以简单地理解为:对于同一操作,不论执行多少次,产生的影响都是相同的。这个概念在分布式系统中非常重要,因为在这种环境下&…...
Jvm之内存泄漏
1 内存溢出 1.1 概念 java.lang.OutOfMemoryError,是指程序在申请内存时,没有足够的内存空间供其使用,出现OutOfMemoryError。产生该错误的原因主要包括:JVM内存过小。程序不严密,产生了过多的垃圾。 程序体现: 内…...
尚硅谷webpack5笔记2
Loader 原理 loader 概念 帮助 webpack 将不同类型的文件转换为 webpack 可识别的模块。 loader 执行顺序 分类pre: 前置 loadernormal: 普通 loaderinline: 内联 loaderpost: 后置 loader执行顺序4 类 loader 的执行优级为:pre > normal > inline > post 。相…...
笔记本Win 10系统查看电池健康状况
博主最近换了个笔记本电池,之前的电池容量明显变小了很多,而且出现了轻微鼓包的情况。所以用gpt问了一下怎么用系统的方法查看电池情况。 在Windows 10系统中,您可以通过以下步骤来查看笔记本电脑电池的健康状况: 打开命令提示符&…...
算法--动态规划(线性DP、区间DP)
这里写目录标题 tip数组下标从0开始还是从1开始 数学三角形介绍算法思想例题代码 最长上升子序列介绍算法思想例题代码 最长公共子序列介绍算法思想例题代码 tip 数组下标从0开始还是从1开始 如果代码中涉及到数组下标为i-1(有时候哪怕不是同一个数组也符合情况&am…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
【汇编逆向系列】六、函数调用包含多个参数之多个整型-参数压栈顺序,rcx,rdx,r8,r9寄存器
从本章节开始,进入到函数有多个参数的情况,前面几个章节中介绍了整型和浮点型使用了不同的寄存器在进行函数传参,ECX是整型的第一个参数的寄存器,那么多个参数的情况下函数如何传参,下面展开介绍参数为整型时候的几种情…...
Spring AI中使用ChatMemory实现会话记忆功能
文章目录 1、需求2、ChatMemory中消息的存储位置3、实现步骤1、引入依赖2、配置Spring AI3、配置chatmemory4、java层传递conversaionId 4、验证5、完整代码6、参考文档 1、需求 我们知道大型语言模型 (LLM) 是无状态的,这就意味着他们不会保…...
OCC笔记:TDF_Label中有多个相同类型属性
注:OCCT版本:7.9.1 TDF_Label中有多个相同类型的属性的方案 OCAF imposes the restriction that only one attribute type may be allocated to one label. It is necessary to take into account the design of the application data tree. For exampl…...
