深入理解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://xiahunao.cn/news/2659730.html

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

相关文章

支付宝 v3 验签如何实现

上次给大家介绍了 支付宝 v3 自签名如何实现,这次顺便再把验签也写一下。 为什么要验签 说起为什么要验签,如果要详细一点解释的话,可以写很多很多...... 我们就简单一点来解释:验签可以证明接收到的信息是支付宝给我的&#xf…

【信息安全原理】——拒绝服务攻击及防御(学习笔记)

📖 前言:拒绝服务攻击(Denial of Service, DoS)是一种应用广泛、难以防范、严重威胁网络安全(破坏可用性)的攻击方式。本章主要介绍DoS的基本概念、攻击原理及防御措施。 目录 🕒 1. 定义&#…

sonarqube安装踩坑记录

如果用java1.8和mysql,则sonarqube版本不能超过7.8,看这里。 sonarqube7.8安装包地址: https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.8.zip 安装步骤: 1、下载sonarqube安装包 wget https://binari…

计算机毕业设计---ssm+mysql+jsp实现的校园二手市场交易平台源码

项目介绍 本系统主要实现的功能有: 前台:(1)二手物品信息查看、搜索。 (2)学生注册登录、个人信息修改。 (3)二手物品信息发布、编辑。 (4)二手物品评论、回…

mybatisX自动生成sql语句,尝试测试方法报错

今天我使用mybatisx自定义mapper方法生成sql语句后,在测试时报错 错误是MyBatis 无法找到映射的语句(Statement)引起的 我是这样操作的,在mapper接口自定义了一个方法 然后alt加enter,自动生成sql 结果 mapper.xml文件…

手机流量卡推广分销网站php源码,多功能的号卡推广分销管理系统

源码简介 拥有多个接口,包括运营商接口,并支持无限三级代理。 最简单易用的PHP系统,它自带自动安装向导,可以让你轻松安装和部署。 该系统集成了多个第三方接口资源,能够满足你的不同需求。采用全系统双色主题&…

MYSQL 索引结构 B+树 hash索引

B-Tree树 当节点存在五个key时,中间的key向上分裂形成树 B树 所有的数据都会出现在叶子节点,叶子节点形成一个单向链表 哈希索引 优点

Vulnhub-Al-Web-1.0 靶机复现完整过程

一、信息收集 1.主机发现 arp-scan -l2.端口扫描 nmap -sV -p- 192.168.200.16PORTSTATESERVICEVERSIONMAC Address80/TCPOpenhttpApache httpd00:0C:29:C4:1B:78 (VMware) 3.目录扫描 python dirsearch.py -u http://192.168.200.16扫描出来这两个文件,首先先…

java基础-回忆性记录

java基础 Java概括 jaava是一种计算机交流的高级编程语言,1995年java衍生,詹姆斯高斯林被世人称之为java之父。 java语言具有跨平台性 java程序并非可以直接运行的,在java程序编译完成后会形成与编译无关的class文件。Java具有跨平台性&a…

ARM CCA机密计算软件架构之内存加密上下文(MEC)

内存加密上下文(MEC) 内存加密上下文是与内存区域相关联的加密配置,由MMU分配。 MEC是Arm Realm Management Extension(RME)的扩展。RME系统架构要求对Realm、Secure和Root PAS进行加密。用于每个PAS的加密密钥、调整或加密上下文在该PAS内是全局的。例如,对于Realm PA…

中国蚁剑-antSword

1.简介 蚁剑是一款开源的跨平台Webshell管理工具,它是一个开源的远程管理工具,主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。蚁剑提供了一个图形化界面,可以通过简单的操作连接和控制目标设备或系统。 蚁剑具有以下…

QT应用篇 三、QML自定义显示SpinBox的加减按键图片及显示值效果

QT应用篇 一、QT上位机串口编程 二、QML用Image组件实现Progress Bar 的效果 三、QML自定义显示SpinBox的加减按键图片及显示值效果 文章目录 QT应用篇前言一、qml需求二、使用组件1.SpinBox组件2.SpinBox中QML的使用 总结 前言 记录自己学习QML的一些小技巧方便日后查找 QT的…

企业数据可视化-亿发数据化管理平台提供商,实现一站式数字化运营

近些年来,国内企业数据化管理升级进程持续加速,以物联网建设、人工智能、大数据和5G网络等新技术的发展,推动了数字经济的蓬勃发展,成为维持经济持续稳定增长的重要引擎。如今许多国内中小型企业纷纷摒弃传统管理模式,…

《Linux系列》Linux磁盘MBR分区扩容

文章目录 Linux磁盘MBR分区扩容1.前言2.控制台磁盘扩容3.分区扩容3.1 fdisk3.2 lsblk3.3 扩容分区 4.扩容文件系统4.1 df4.2 扩容文件系统 Linux磁盘MBR分区扩容 1)参考阿里云扩容分区文档,整理MBR分区扩容 2)本文档适用于MBR分区(fdisk -lu查…

MySQL的日志管理以及备份和恢复

MySQL日志管理 mysql的日志默认保存位置为/usr/local/mysql/data vim /etc/my.cnf #开启二进制日志功能 vim /etc/my.cnf [mysqld]##错误日志,用来记录当MySQL启动、停止或运行时发生的错误信息,默认已开启 log-error/usr/local/mysql/data/mysql_…

LabVIEW的便携式车辆振动测试分析

随着计算机和软件技术的发展,虚拟仪器正逐渐成为机械工业测试领域的主流。在现代机械工程中,特别是车辆振动测试,传统的测试方法不仅设备繁杂、成本高昂,而且操作复杂。为解决这些问题,开发了一款基于美国国家仪器公司…

postman使用-03发送请求

文章目录 请求1.新建请求2.选择请求方式3.填写请求URL4.填写请求参数get请求参数在params中填写(填完后在url中会自动显示)post请求参数在body中填写,根据接口文档请求头里面的content-type选择body中的数据类型post请求参数为json-选择raw-选…

[DAU-FI Net开源 | Dual Attention UNet+特征融合+Sobel和Canny等算子解决语义分割痛点]

文章目录 概要I Introduction小结 概要 提出的架构,双注意力U-Net与特征融合(DAU-FI Net),解决了语义分割中的挑战,特别是在多类不平衡数据集上,这些数据集具有有限的样本。DAU-FI Net 整合了多尺度空间-通…

TiDB 7.1 多租户在中泰证券中的应用

本文详细介绍了中泰证券在系统国产化改造项目中采用 TiDB 多租户技术的实施过程。文章分析了中泰证券数据库系统现状以及引入 TiDB 资源管控技术的必要性,探讨了 TiDB 多租户的关键特性,并阐述了在实际应用中的具体操作步骤。通过该技术的应用&#xff0…

python学习14

前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…