深入理解Mysql MHA高可用集群搭建:从实验到实战

1. 简介

MHA(Master High Availability)是一个高效的开源MySQL高可用性解决方案。由日本开发者yoshinorim(前DeNA员工,现在Facebook)创建,MHA支持MySQL的主从复制架构,自动化主节点故障转移。当主节点发生故障,MHA能迅速将最新数据的从节点升级为新主节点。这个过程中,MHA从其他从节点获取额外信息,确保数据一致性。MHA还能在线切换主节点,按需调整主从节点关系。它已被证明是一个成熟的MySQL高可用方案,能在30秒内完成故障切换,并最大限度地保证数据一致性。值得一提的是,淘宝也在开发一个类似的产品TMHA,目前支持一主一从架构。

2. MHA服务

MHA服务包括两种角色:MHA Manager(管理节点)和MHA Node(数据节点)。

  • MHA Manager:通常部署在一台独立的机器上,管理多个master/slave集群,每个集群称为一个application。它负责整个集群的管理和协调。
  • MHA Node:安装在每台MySQL服务器(无论是master、slave还是manager)上。它负责监控、解析日志和加快故障恢复的过程。

工具与功能

MHA提供了一系列工具,分布在Manager节点和Node节点上:

  • Manager节点工具
    • masterha_check_ssh:检测SSH环境。
    • masterha_check_repl:检测MySQL复制环境。
    • masterha_manager:MHA的主服务程序。
    • masterha_check_status:探测MHA运行状态。
    • masterha_master_monitor:监测MySQL主节点可用性。
    • masterha_master_switch:切换主节点的工具。
    • masterha_conf_host:添加或删除配置节点。
    • masterha_stop:关闭MHA服务的工具。
  • Node节点工具:(这些通常由Manager的脚本触发,无需手动操作)
    • save_binary_logs:保存并复制主节点的二进制日志。
    • apply_diff_relay_logs:识别并应用差异中继日志事件。
    • purge_relay_logs:清除中继日志。
  • 自定义扩展
    • secondary_check_script:通过多网络路由检测主节点可用性。
    • master_ip_failover_script:更新应用程序使用的master IP。
    • report_script:发送报告。
    • init_conf_load_script:加载初始配置参数。
    • master_ip_online_change_script:更新主节点IP地址。

工作原理

MHA的工作原理可以概括为以下几个步骤:

  1. 从故障的master节点保存二进制日志事件(binlog events)。
  2. 识别拥有最新更新的slave节点。
  3. 将差异的中继日志(relay log)应用到其他slave节点。
  4. 应用从master节点保存的二进制日志事件。
  5. 提升一个slave节点为新master。
  6. 使其他slave节点开始复制新master的数据。

3.MySQL Replication 环境的实验配置

3.1 准备实验 MySQL Replication 环境

3.1.1 相关配置

在本实验中,我们将设置一个包含四个节点的 MySQL Replication 环境,运行于 CentOS 7.3 系统。MHA (Master High Availability) 对 MySQL 复制环境有特定的配置需求,例如:

  • 所有节点必须开启二进制日志(bin-log)和中继日志(relay-log)。
  • 从节点(Slave)需设置为只读模式(read-only)。
  • 关闭中继日志自动清理功能(relay_log_purge)。

节点配置如下:

  • Manager (192.168.37.111): 作为控制器,负责监控和管理。
  • Master (192.168.37.122): 数据库主服务器。配置了 bin-log 和 relay-log,关闭了 relay_log_purge。
  • Slave1Slave2 (192.168.37.133 和 192.168.37.144): 数据库从服务器。与 Master 相同的日志配置。

为方便操作,我们在所有节点的 /etc/hosts 文件中添加了对应的域名解析配置。

3.1.2 主节点(Master)的初始配置

对于主节点 Master 的数据库配置,我们进行以下设置:

  • 设置 server-id 为 1,以保证集群中节点 ID 的唯一性。
  • 开启二进制日志(log-bin)和中继日志(relay-log)。
  • 关闭名称解析(skip_name_resolve,非必须)。

完成配置后,重启 MariaDB 服务以应用更改。

3.1.3 从节点(Slave)的配置

对于两个从节点 Slave,我们进行以下操作:

  • 设置唯一的 server-id(2 和 3)。
  • 开启中继日志(relay-log)和二进制日志(log-bin)。
  • 启用只读模式(read_only)和日志更新(log_slave_updates)。
  • 根据需要设置中继日志清理(relay_log_purge)。
  • 可选关闭名称解析(skip_name_resolve)。

每次配置更改后,重启 MariaDB 服务以应用设置。

3.1.4 配置一主多从复制架构

在 Master 节点上,我们配置了权限以允许 Slave 连接和复制。具体命令包括授予复制权限和显示 Master 状态。

在每个 Slave 节点上,我们设置了连接到 Master 的参数,启动了复制服务,并检查了复制状态。

以上步骤完成了 MySQL Replication 环境的基本配置。

3.2 安装配置MHA

3.2.1 在Master节点进行授权
  • 目标:在所有MySQL节点中授权一个具有管理权限的用户,以便在本地网络中远程访问其他节点。
  • 操作:在Master节点运行SQL语句授权。
    • 示例命令grant all on *.* to 'mhaadmin'@'192.168.%.%' identified by 'mhapass';
3.2.2 准备SSH互通环境
  • 目的:在MHA集群中,各节点需要通过SSH互信通信来实现远程控制和数据管理。
  • 步骤
    1. 在Manager节点生成密钥对。
    2. 设置Manager节点可以远程连接本地主机。
    3. 将私钥文件和authorized_keys文件复制给所有其他节点。
    4. 在所有节点上进行上述操作。
    5. 验证所有节点的SSH无密码互通。
3.2.3 安装MHA包
  • 操作:在Manager节点和其他节点上安装MHA包。
      • 所有节点:mha4mysql-node-0.56-0.el6.norch.rpm
      • Manager节点额外安装:mha4mysql-manager-0.56-0.el6.noarch.rpm
    • 安装方法:使用rz命令上传包,然后使用yum进行安装。
3.2.4 初始化MHA,进行配置
  • 配置文件:Manager节点为每个监控的master/slave集群提供专用配置文件。
  • 文件位置:全局配置文件位于/etc/masterha_default.cnf,或者通过application的配置提供。
3.2.5 定义MHA管理配置文件
  • 步骤:在MySQL主节点上为MHA创建管理用户,以便于后续使用。
  • 配置:创建/etc/mha_master目录并编写mha.cnf文件,配置包括管理用户、密码、工作目录等。
3.2.6 对四个节点进行检测
  • SSH互信通信检测:在Manager机器上运行命令检测SSH连接。
  • MySQL复制集群连接配置检测
    • 使用masterha_check_repl命令检查。
    • 如有错误,可能需在master节点上创建从节点账号。
    • 再次运行检测命令以验证配置。

总结

此文档详细介绍了MHA的安装配置过程,包括授权、SSH互通设置、MHA包安装、配置文件定义和系统检测。这些步骤确保了MHA集群的正确安装和高效运行。

3.3 启动 MHA

在 manager 节点上执行以下命令来启动 MHA:

nohup masterha_manager -conf=/etc/mha_master/mha.cnf &> /etc/mha_master/manager.log &

启动成功后,检查 master 节点的状态:

masterha_check_status -conf=/etc/mha_master/mha.cnf

如果服务正常运行,将显示 mha (pid:7598) is running(0:PING_OK)。要停止 MHA,使用:

masterha_stop -conf=/etc/mha_master/mha.cnf

3.4 测试 MHA 故障转移

  1. 模拟主节点崩溃:在 master 节点关闭 mariadb 服务。

    killall -9 mysqld mysqld_safe rm -rf /var/lib/mysql/*

  2. 查看 manager 节点日志

    tail -200 /etc/mha_master/manager.log

    日志显示 manager 检测到节点故障,并自动将 192.168.37.133 提升为主节点。

3.5 修复复制集群

  1. 准备新的 MySQL 节点:基于 master 节点的备份恢复数据,配置为新的 master 的从节点。
  2. 备份和数据恢复:在新的 master 节点进行备份,将数据恢复到新节点。
  3. 配置主从关系:设置新的主节点和从节点,检查主从状态。

3.6 再次检查操作

  1. 使用 masterha_check_repl 检查复制状态。
  2. 如果无误,重新启动 manager 并查看状态:

    masterha_manager -conf=/etc/mha_master/mha.cnf > /etc/mha_master/manager.log 2>&1 & masterha_check_status -conf=/etc/mha_master/mha.cnf

3.7 故障转换恢复注意事项

  1. 备份和手动提升:在从节点上做备份,并将主节点手动提升为从节点。
  2. 配置文件修改:自动转换后,可能需要手动修复主节点并修改配置文件。
  3. 重新运行检测命令:手动修复后,再次运行检测命令以确保恢复成功。

以上步骤详细介绍了如何启动和管理 MHA,以及在出现问题时的故障排查和修复流程。

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

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

相关文章

<JavaEE> TCP 的通信机制(五) -- 延时应答、捎带应答、面向字节流

目录 TCP的通信机制的核心特性 七、延时应答 1)什么是延时应答? 2)延时应答的作用 八、捎带应答 1)什么是捎带应答? 2)捎带应答的作用 九、面向字节流 1)沾包问题 2)“沾包…

Go配置镜像源

1. 简介 GOPROXY是一个加速Go语言包下载和更新的工具。它通过镜像源的方式,帮助开发者快速获取Go语言包,提高开发效率。GOPROXY的使用非常简单,只需在终端中设置其地址,然后使用go get、go mod等命令即可享受更快的下载速度。对于…

帕金森病的病因是什么?

帕金森病是一种常见的神经系统变性疾病,其确切的病因尚未完全明了,但可以确定的是,它是多种因素共同作用的结果。下面将从多个方面详细介绍帕金森病的病因。 首先,年龄老化是帕金森病发病最主要的因素之一。随着年龄的增长&#…

node实现对git仓库的管理

一、项目背景 一份代码,发布多个小程序。想让技术支持部通过脚本自己获取代码,并通过脚本自动提交到客户的小程序后台。他们自行发布。 现已注册第三方平台,开发人员通过“开发小程序”上传模板。开发人员把代码上传到模板,支持…

JavaSE基础50题:28.(数组练习)冒泡排序

概述 给定一个整型数组,实现冒泡排序。 如:给一组数组{5,10,8,3,7}进行冒泡排序。 j一直往下走,和下一个数字进行比较,如果当前数字大于下一个数字,则两个数字交换&…

【Java干货教程】JSON,JSONObject,JSONArray类详解

一、定义 JSON:就是一种轻量级的数据交换格式,被广泛应用于WEB应用程序开发。JSON的简洁和清晰的层次结构,易于阅读和编写;同时也易于机器解析和生成,有效的提升网络传输效率;支持多种语言,很多…

ERROR: No matching distribution found for torch==2.0.1解决方案

大家好,我是水滴~~ 本文主要介绍在安装 stable-diffusion-webui 时出现的 ERROR: No matching distribution found for torch2.0.1 问题的解决方案,希望能对你有所帮助。 《Python入门核心技术》专栏总目录・点这里 文章目录 问题描述解决方案离线安装 …

Mysql相关面试题及答案

1、什么是MySQL? MySQL是一个开源的关系型数据库管理系统(RDBMS),它基于SQL(Structured Query Language,结构化查询语言)进行操作。MySQL是最流行的数据库系统之一,特别是对于Web应…

对于高速链路,需要考虑 TVS 管结电容的要求

TVS管,即瞬态电压抑制器,是一种用于保护电路免受瞬态过电压损害的半导体器件。在高速链路(如USB、HDMI、以太网等)中,TVS管被广泛用于抑制外部电涌、静电放电(ESD)等引起的瞬态电压,以保护敏感的电子组件。 TVS管的结电容:是在TVS管的PN结上形成的固有电容…

前端通过增加XHR钩子来全局增加header

引言 前端通过修改 XHR 原型来全局增加 header 是采用 XMLHttpRequest 加 hook 方式实现一个简单业务场景。这样可以提高代码的可维护性和可扩展性,减少重复代码的编写。 比如,在用户登录后,后端返回了一个 token,前端需要在发送…

PostgreSQL 数据库归档最近被问及的问题问题 与 4 毋 处世学

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内,可以解决你的问题。加群请联系 liuaustin3 ,(共1790人左右 1 2 3 4 5&#xff0…

小型企业成为网络犯罪分子获取数据的目标

在过去十年的大部分时间里,网络犯罪的巨额资金来自针对大型组织的勒索软件攻击。这种威胁仍然存在。但犯罪分子可能会将注意力转向中小企业 (SMB)。这对消费者的影响将是巨大的。 将软件即服务 (SaaS) 技术用于核心业务功能继续将中小企业整合到全球供应链中。由于…

优雅的处理tkMapper批量插入、分批次插入

Springboot框架下tkMapper想实现批量插入,一般是需要自定义BaseMapper来继承InsertListMapper tkmapper提供的有两个insertList方法, 一个支持主键自动生成 tk.mybatis.mapper.additional.insert 一个不支持主键生成 tk.mybatis.mapper.common.specia…

Linux期末考试复习

gcc编译 案例.c源代码-E预处理后.i文件gcc -E test.c -o test.i-S编译后.s文件gcc -S test.i -o test.s-c汇编.o文件 库文件gcc -c test.s -o test.o-I 链接后目标文件 gcc 不使用 –E、–S 和 –c选项&#xff0c;则会依次自动执行预处理、编译和汇编。 头文件#include <…

Java内存溢出如何解决,Java oom排查方法,10个定位解决办法

引言 在Java开发过程中&#xff0c;有效的内存管理是保证应用程序稳定性和性能的关键。不正确的内存使用可能导致内存泄露甚至是致命的OutOfMemoryError&#xff08;OOM&#xff09;。为了避免这些问题&#xff0c;本文将分享10个关于Java内存管理的实用技巧。 正文 1、使用…

2023年的技术回顾

技术趋势 在人工智能领域&#xff0c;2023年见证了AI技术的快速发展&#xff0c;包括新的算法、模型的改进以及AI在各个领域的广泛应用。深度学习、机器学习、自然语言处理等领域取得了显著的进步&#xff0c;推动了AI在语音识别、图像识别、自动驾驶、医疗诊断等领域的应用。…

Chatgpt如何共享可以防止封号!

ChatGPT 是一个基于 GPT-3.5/GPT-4 模型的对话系统&#xff0c;它主要用于处理自然语言对话。通过训练模型来模拟人类的语言行为&#xff0c;ChatGPT 可以通过文本交流与用户互动。每个新版本的 GPT 通常都会在模型规模、性能和其他方面有一些改进。在目前免费版GPT-3.5 中&…

OpenWrt版本更迭说明

以下是OpenWrt的主要版本历史&#xff1a; OpenWrt 0.9&#xff1a;2004年发布的最初版本。 OpenWrt 7.09&#xff1a;2007年发布&#xff0c;支持超过100个路由器模型。 OpenWrt 8.09&#xff1a;2009年发布&#xff0c;引入了“Backfire”代码名称&#xff0c;添加了多个硬…

【第十二课】KMP算法(acwing-831 / c++代码 / 思路 / 视频+博客讲解推荐)

目录 暴力做法 代码如下 KMP算法 不同的next求法-----视频讲解/博客推荐 视频推荐 博客推荐 课本上的方法- prefix的方法- 求next数组思路---next数组存放前缀表的方式 s和p匹配思路 代码如下 暴力做法 遍历s主串中每一个元素&#xff0c;如果该元素等于模板串p中…

数据智慧:C#中编程实现自定义计算的Excel数据透视表

前言 数据透视表&#xff08;Pivot Table&#xff09;是一种数据分析工具&#xff0c;通常用于对大量数据进行汇总、分析和展示。它可以帮助用户从原始数据中提取关键信息、发现模式和趋势&#xff0c;并以可视化的方式呈现。 在数据透视表中&#xff0c;数据分析师通常希望进…