mysql mha高可用

一、前言

     在原本的一主两从数据库架构中,是没有高可用功能的,当主库挂了时不会自动将剩下的从从升级为主库,只能等待主库恢复才能使用,或者手动切换,但是手动切换后需要更改后端服务中的数据库地址信息,在此情况下,需要引入mha服务来实现一主两从数据库的高可用,mha服务可以在主库挂掉时,自动从剩下的从库中选举出一个主库,再将剩下的从库变更为新主库的从库,该mha也有缺点,只能一次性使用,当发生了一次主从切换后,mha manage服务就会挂掉,挂掉的主库信息也会从mha manage配置文件中剔除,当原主库恢复后,需要手动将原主库更改为新主库的从库,再将信息写入mha manage的配置文件中,再启动mha manage,这样下次主从发生故障时mha manage才会再次发挥作用

     mha对mysql高可用的实现原理,在主从的每个节点,以及mha manage节点部署mha node服务收集每个节点的信息发送到mha manage,当主节点发生故障时,mha manage节点会及时监控到,mha manage会首先检查每个从节点的健康状态,没问题就会在剩下的从节点中选举出新的主节点,然后对剩下的从节点进行主从配置并将从节点更改为只读,这样就完成了主从节点的故障切换

二、构架

ip服务
10.1.60.113mysql、mha node
10.1.60.114mysql、mha node
10.1.60.115mysql、mha node
10.1.60.22mha manage、mha node

三、部署

     需要提前部署好一主两从架构的mysql

     参考:mysql一主两从读写分离搭建_mysql 一主两从搭建-CSDN博客

     在github上下载mha node和mha manage安装包 

     mha manage

     参考: Release mha4mysql-manager-0.58 · yoshinorim/mha4mysql-manager · GitHub

     mha node

     参考:https://github.com/yoshinorim/mha4mysql-node/releases/tag/v0.58

     所有节点安装mha依赖

yum install epel-release --nogpgcheck -y
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN

     在所有主机中创建存放mha安装包目录

      mkdit /opt/mha && cd /opt/mha

      将mha node安装包放到所有节点的mha目录下,mha manage安装包只放到mha manage目录下

     先在所有节点安装mha node服务

     tar -zxvf mha4mysql-node-0.58.tar.gz && ls

    cd  mha4mysql-node-0.58

     perl Makefile.PL

     make && make install

     mha node服务安装完成后在mha manage节点安装mha manage服务

     tar -zxvf mha4mysql-manager-0.58.tar.gz && ls

    cd mha4mysql-manager-0.58

    perl Makefile.PL

    make && make install

    在所有mysql节点创建软连接

    ln -s /usr/local/mysql/bin/mysql /usr/sbin/

    ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/

   配置所有节点互相免密登陆

#113节点执行
ssh-keygen  #一直按回车键即可ssh-copy-id 10.1.60.114ssh-copy-id 10.1.60.115ssh-copy-id 10.1.60.22#114节点执行
ssh-keygen  #一直按回车键即可ssh-copy-id 10.1.60.113ssh-copy-id 10.1.60.115ssh-copy-id 10.1.60.22#115节点执行
ssh-keygen  #一直按回车键即可ssh-copy-id 10.1.60.114ssh-copy-id 10.1.60.113ssh-copy-id 10.1.60.22#22节点执行
ssh-keygen  #一直按回车键即可ssh-copy-id 10.1.60.114ssh-copy-id 10.1.60.115ssh-copy-id 10.1.60.113

 在mha manage上执行以下拷贝文件命令

cp -rp /opt/mha/mha4mysql-manager-0.58/samples/scripts/send_report /usr/local/bin

ls /opt/mha/mha4mysql-manager-0.58/samples/scripts

script目录下有四个文件解释

master_ip_failover:发生故障时自动切换VIP的管理脚本

master_ip_online_change:在线切换vip 的管理脚本

power_manager:故障发生后关闭主机的脚本

send_report:故障切换后发送报警邮件的脚本

我的mysql架构中使用了proxysql读写分离组件,有集成主从故障切换的功能,所以不需要vip,就只拷贝了发送告警的脚本

在mysql主从配置的主库中创建以下用于监控的用户

mysql -u root -p

grant all privileges on *.* to 'mha'@'%' identified by '12345678'

flush privileges;

在mha manage节点中拷贝配置文件

mkdir /etc/masterha

cp /opt/mha/mha4mysql-manager-0.58/samples/conf/app1.cnf   /etc/masterha

编辑配置文件

vi /etc/masterha/app1.cnf

[server default]
manager_log=/var/log/masterha/app1/manager.log  #mha manage日志
manager_workdir=/var/log/masterha/app1          #mha manage工作目录
master_binlog_dir=/var/lib/mysql/           #主库保存binlog的位置,这里的路径要与主库里配置的binlog的路径一致,以便MHA能找到
user=mha               #监控用户 
password=12345678      #监控用户密码
ping_interval=1         #设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行failover
remote_workdir=/tmp     #远端mysql在发生切换时binlog的保存位置
repl_password=12345678   # 主从复制密码
repl_user=deploy             # 主从复制用户    
report_script=/usr/local/bin/send_report #设置发生故障切换后发送的报警的脚本
ssh_user=root               #设置ssh的登录用户名[server1]                 #发生故障切换后会删除对应故障的地址项配置
hostname=10.1.60.113     #myqsl地址
port=3306                #myqsl端口[server2]
hostname=10.1.60.114
port=3306[server3]
hostname=10.1.60.115
port=3306

配置故障切换告警

vi /usr/local/bin/send_report

my $smtp='smtp.qq.com';             # smtp服务器
my $mail_from='123456@qq.com';    # 发件箱
my $mail_user='123456';           # 用户名 QQ号
my $mail_pass='iozjqgxcvasdwlbffb';   # 授权码
my $mail_to=['123456@qq.com'];    # 收件箱

执行mha脚本检查各节点ssh连接状态

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

检查数据库主从架构状态

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

 

 启动mha manage服务

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 &

tail -f /var/log/masterha/app1/manager.log

ps -ef|grep manage

至此mha搭建完成,现在是当mha发生主从故障切换时需要手动重新配置mha manage服务,重新在配置文件中新增故障的主节点信息,再重新启动mha manage服务 

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

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

相关文章

架构设计到底是什么?

文章目录 架构设计有哪些内容&#xff1f;架构原理与技术认知分布式技术原理与设计中间件常用组件的原理和设计问题数据库原理与设计问题分布式缓存原理与设计问题互联网高性能高可用设计问题 技术认知架构分析问题分析能力边界 架构设计&#xff0c;是中高级研发工程师逃不开的…

windows远程桌面怎么开启?

文章目录 如下三种开启方式&#xff0c;任选一即可方式1.在系统属性中开启远程桌面方式2.通过系统设置开启远程桌面方式3.注册表编辑器开启远程桌面使用远程桌面 如下三种开启方式&#xff0c;任选一即可 配合 组网工具或者内网穿透 超级爽 局域网其他pc如何访问宿主机虚拟机IP…

@RequestParam、@PathVariable、@RequestBody、@RequestAttribute详解

一、RequestParam注解 作用&#xff1a;用于将指定的请求参数赋值给方法中的形参。 属性&#xff1a; 1&#xff09;value&#xff1a;请求参数名&#xff08;必须配置&#xff09; 2&#xff09;required&#xff1a;是否必需&#xff0c;默认为 true&#xff0c;即请求中必须…

Elasticsearch:什么是文本分类?

文本分类定义 - text classification 文本分类是一种机器学习&#xff0c;它将文本文档或句子分类为预定义的类或类别。 它分析文本的内容和含义&#xff0c;然后使用文本标签为其分配最合适的标签。 文本分类的实际应用包括情绪分析&#xff08;确定评论中的正面或负面情绪&…

GLTF/GLB模型在线预览、编辑、动画查看以及材质修改

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 GLTF在线编辑器提供了一个内置的模型查看器&#xff0c;可以加载和预…

Linux docker安装nacos

1&#xff1a;首先下载安装docker&#xff0c;这里不做描述&#xff0c;可以自行百度安装。 2&#xff1a;通过docker下载nacos&#xff0c; docker pull nacos/nacos-server:latest3&#xff1a;搭建临时nacos容器&#xff0c;此步骤的目的是为了获取nacos的配置文件和日志 …

Ubuntu 常用命令之 awk 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 AWK是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具。在Ubuntu系统下&#xff0c;AWK命令主要用于数据处理和生成报告。 AWK命令的参数主要有 -F&#xff1a;指定输入文件分隔符&#xff0c;FS变量就是指定输入字…

Salesforce回归后:谁在成为中国市场上的CRM首选?

怎样的C RM才是在中国这片土地上的最佳答案&#xff1f; 在Salesforce重新回归的今天&#xff0c;其所面临的产品、生态、技术、服务、数据等问题也恰是中国本土的CRM厂商被多年磨练和审视的问题。 在如Salesforce等国外软件进军中国市场的同时&#xff0c;中国本土的CRM厂商…

深度学习14—注意力机制与自注意力机制

注&#xff1a;以下均为个人学习笔记&#xff0c;发布只为方便学习阅读&#xff0c;若觉侵权&#xff0c;请联系删除&#xff01;&#xff01; 1.李沐老师课堂学习理解笔记 1.1 随意线索和不随意线索 1.2 注意力机制 通过注意力池化层来有偏向性的选择某些输入。 1.3 注意力…

Linux 音视频SDK开发实践

一、兼容性适配处理 为什么需要兼容处理&#xff1f; 1、c兼容处理 主要有ABI兼容性问题&#xff0c;不同ubuntu系统依赖的ABI版本如下&#xff1a; ubuntu 18.04ubuntu 16.04ubuntu 14.04g7.55.44.8stdc版本libstdc.so.6.0.25libstdc.so.6.0.21libstdc.so.6.0.19GLIBCXXG…

BearPi Std 板从入门到放弃 - 后天篇(3)(ESP8266透传点灯)

简介 电脑搭建一个TCP Server&#xff0c; ESP8266 串口设置好透传模式, 再由TCP Server发送指令控制灯的亮灭; 开灯指令&#xff1a; led_on回车 &#xff1b; 关灯指令: led_off回车 主芯片: STM32L431RCT6 LED : PC13 \ 推挽输出即可 \ 高电平点亮 串口: Usart1 / LPUART E…

指针---你真的会使用指针吗?

指针作为C语言中的一个部分&#xff0c;可以说指针是C语言的核心&#xff0c;那么它的难度肯定是不言而喻的&#xff0c;总是能把人给绕得找不到方向。 今天我就好好的说一说指针这个东西。 1、何为指针&#xff1f; 指针是C语言中用来存放地址的一个变量类型。我们可以将指针看…

Uniapp + Vue3 + Pinia + Vant3 框架搭建

现在越来越多项目都偏向于Vue3开发&#xff0c;想着uniapp搭配Vue3试试效果怎么样&#xff0c;接下来就是详细操作步骤。 初始化Uniapp Vue3项目 App.vue setup语法 <script setup>import {onLaunch,onShow,onHide} from dcloudio/uni-apponLaunch(() > {console.l…

同源策略:保护你的网页免受恶意攻击的第一道防线(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

使用Flask逐步搭建Web应用程序

大家好&#xff0c;Flask是一个使用Python编写的轻量级Web应用框架。它被设计成简单、易于学习和使用的&#xff0c;同时具备足够的灵活性和扩展性&#xff0c;以满足各种规模的Web应用开发需求。本文我们将介绍一个使用Flask逐步搭建Web应用程序的简单入门示例。 1.安装Flask…

计算机存储术语: 扇区,磁盘块,页

扇区(sector) 硬盘的读写以扇区为基本单位。磁盘上的每个磁道被等分为若干个弧段&#xff0c;这些弧段称之为扇区。硬盘的物理读写以扇区为基本单位。通常情况下每个扇区的大小是 512 字节。linux 下可以使用 fdisk -l 了解扇区大小&#xff1a; $ sudo /sbin/fdisk -l Disk …

Vue3-24-组件-异步组件的介绍

什么是异步组件 个人理解 &#xff1a;异步组件 就是在用到这个组件的时候再进行加载&#xff0c;而不是 一上来就全部加载完成。即用即取的一个思想。异步组件中使用到的方法 &#xff1a; defineAsyncComponent () 方法 &#xff1a; 返回一个Promise 对象; 我们在开发过程中…

Unity中Shader缩放矩阵

文章目录 前言一、直接相乘缩放1、在属性面板定义一个四维变量&#xff0c;用xyz分别控制在xyz轴上的缩放2、在常量缓存区申明该变量3、在顶点着色器对其进行相乘&#xff0c;来缩放变换4、我们来看看效果 二、使用矩阵乘法代替直接相乘缩放的原理1、我们按如下格式得到缩放矩阵…

java实现回文数算法

判断一个数是否为回文数可以使用以下算法&#xff1a; 将数字转化为字符串&#xff1b;初始化左右两个指针&#xff0c;分别指向字符串的首尾&#xff1b;循环比较左右指针指向的字符&#xff0c;如果相等则继续比较&#xff0c;直到左右指针相遇或者发现不相等的字符为止&…

ES集群G1回收器,堆空间无法被回收问题

ES堆空间不足的问题&#xff0c;困扰了我有两年的时间。dump堆去分析&#xff0c;也未能分析出来&#xff0c;堆到底是被什么占用了。 我把堆空间给了31.9G&#xff0c;这是指针压缩生效的临界值&#xff0c;如果再大就指针压缩失效了。 痛苦的是&#xff0c;随着时间的增长。堆…