MySQL高可用性(MySQL High Availability)解析

ops/2024/10/17 22:26:33/

MHA (Master High Availability Manager) 是一种用于 MySQL 主从复制架构的高可用性解决方案,可以实现自动故障转移,从而减少停机时间并提高系统的可用性。

MHA 的工作原理

MHA 通过监控主库的状态并在检测到主库故障时自动进行故障转移来实现高可用性。以下是 MHA 的主要工作流程:

  1. 监控

    • MHA Manager 节点定期检查主库和从库的状态。
    • 如果检测到主库宕机,MHA Manager 会尝试确定哪个从库是最新的,并将其提升为新的主库。
  2. 选举新的主库

    • MHA 会选择一个最新的从库作为新的主库。
    • 这个选择过程基于从库的二进制日志位置和 GTID(全局事务标识符)。
  3. 数据同步

    • 在提升新的主库之前,MHA 会将其他从库的数据同步到新的主库,以确保所有从库的一致性。
  4. 故障转移

    • MHA 会更新 DNS 记录或 VIP(虚拟 IP 地址),以便客户端能够连接到新的主库。
    • 故障转移完成后,MHA 会通知管理员并记录日志。

MHA 的组件

MHA 主要由以下两个组件组成:

  1. MHA Manager

    • 负责监控主库和从库的状态。
    • 在检测到主库故障时,启动故障转移过程。
    • 通常部署在一个独立的服务器上,但也可以部署在从库上。
  2. MHA Node

    • 部署在每个 MySQL 服务器上(包括主库和从库)。
    • 与 MHA Manager 通信,报告自身的状态。
    • 参与故障转移过程中的数据同步和角色转换。

MHA 的配置步骤

以下是配置 MHA 的基本步骤:

  1. 安装 MHA

    • 在 MHA Manager 和所有 MHA Node 上安装 MHA 软件包。
    • 例如,在 Ubuntu 上可以通过以下命令安装:
      sudo apt-get install mha4mysql-manager mha4mysql-node
      
  2. 配置 SSH 免密登录

    • 确保 MHA Manager 和所有 MHA Node 之间可以免密登录。
    • 使用 ssh-keygen 生成密钥对,并使用 ssh-copy-id 将公钥复制到目标节点。
  3. 配置 MHA Manager

    • 创建 MHA Manager 的配置文件(例如 /etc/mha/app1.cnf)。
    • 示例配置文件内容如下:
      [server default]
      manager_workdir=/var/log/mha
      manager_log=/var/log/mha/manager.log
      user=mha_user
      password=mha_password
      ssh_user=root
      repl_user=repl_user
      repl_password=repl_password[server1]
      hostname=192.168.1.100
      port=3306[server2]
      hostname=192.168.1.101
      port=3306
      candidate_master=1[server3]
      hostname=192.168.1.102
      port=3306
      no_master=1
      
  4. 配置 MHA Node

    • 在每个 MHA Node 上创建一个脚本,用于处理故障转移后的清理工作。
    • 例如,创建 /usr/local/bin/master_ip_failover 脚本:
      #!/bin/bash
      MASTER_IP="192.168.1.200"
      MASTER_PORT="3306"
      CURRENT_MASTER="$1"
      NEW_MASTER="$2"if [ "$CURRENT_MASTER" = "$NEW_MASTER" ]; thenexit 0
      fi/sbin/ip addr del $MASTER_IP/24 dev eth0
      /sbin/ip addr add $MASTER_IP/24 dev eth0
      exit 0
      
    • 确保脚本具有可执行权限:
      chmod +x /usr/local/bin/master_ip_failover
      
  5. 启动 MHA Manager

    • 使用 masterha_check_ssh 检查 SSH 免密登录是否正常。
    • 使用 masterha_check_repl 检查 MySQL 复制是否正常。
    • 启动 MHA Manager:
      masterha_manager --conf=/etc/mha/app1.cnf
      

MHA 的优缺点

优点
  • 自动故障转移:能够在主库故障时自动切换到新的主库,减少了手动干预的需求。
  • 数据一致性:在故障转移过程中,MHA 会尽量保持数据的一致性。
  • 灵活性:支持多种故障转移策略和配置选项。
缺点
  • 复杂性:配置和管理 MHA 需要一定的技术知识和经验。
  • 依赖于复制延迟:如果从库的复制延迟较大,可能会导致数据丢失。
  • 单点故障:MHA Manager 本身可能成为单点故障,需要对其进行冗余设计。

http://www.ppmy.cn/ops/126315.html

相关文章

显卡的HDMI和DP接口的区别,如何给显卡选择最佳效果的显示器

1、HDMI和DisplayPort(DP)的区别 在显卡接口的选择上,HDMI和DisplayPort(DP)是两种常见的连接方式。它们在兼容性、性能以及分辨率等方面存在区别。具体分析如下: 兼容性 HDMI:广泛兼容多种设备…

本地合并develop分支到分支a

步骤 切换到a分支: 首先,你需要切换到目标分支a。 git checkout a合并develop分支到a分支: 使用git merge命令将develop分支合并到当前分支(即a分支)。 git merge develop解决冲突(如果有)&…

React(四) 事件总线,setState的原理,PureComponent优化React性能,ref获取类组件与函数组件

文章目录 一、全局事件总线二、setState的原理1. 为什么要使用setState修改数据2. setState的三种用法(1) 基本使用(2) 传入回调函数(3) setState是一个异步调用 3. setState为什么要设置成异步 二、PureComponent优化性能1. React的diff算法以及Key的优化(扩展)(1) diff算法(2…

多仓多门店库存管理与系统设计

库存是供应链之魂。 在新零售模式下,仓库和门店遍布全国甚至全球,如果库存管理不到位,就没法给企业赋能,无法给客户带来极致购物体验。 商品的库存数是整个供应链业务的核心,是业务能顺利流转的基础,如何…

Axure PR 9 滑动条 设计交互

​大家好,我是大明同学。 这期内容,我们来探讨Axure中滑动条设计与交互技巧。 滑动条 创建滑动条所需的元件 1.打开一个新的 RP 文件并在画布上打开 Page 1。 2.在元件库中拖出一个矩形元件。 3.选中矩形元件,样式窗格中,将宽…

双调TSP问题最牛逼的解法,不接受所有人反驳

为什么我取这个标题呢?因为我的解 又简单 又好写 我找遍了许多答案,却没发现一个满意的,通过询问GPT,再通过自己的改善,总算得到正确的解了!!! 首先你得明白是如何递推的。 我们规…

基础sql

在执行删除操作之前,建议先运行一个 SELECT 查询来确认你要删除的记录。这可以帮助你避免误删数据。 删除字段id默认值为空字符串的所有数据 delete from users where id ; 删除字段id默认值为null的所有数据 delete from users where id is null; 删除字段upd…

【firefox】火狐浏览器、火狐浏览器驱动、selenium版本号对应关系

火狐浏览器、火狐浏览器驱动、selenium版本号对应关系 链接地址:geckodriver、firefox、selenium版本号对应关系