星途物语 星途物语
首页
  • 随手记录
  • 故障处理
  • Nginx
  • MySQL
  • Ansible
  • Nexus
  • Tomcat
  • Docker
  • Zabbix
  • Prometheus
  • Git
  • GitLab
  • Jenkins
  • Kubernetes
  • Shell
  • Python
  • 圈圈空间
  • 做饭这件事
收藏站点
留言板
归档
GitHub (opens new window)

星途物语

尚记时,记之
首页
  • 随手记录
  • 故障处理
  • Nginx
  • MySQL
  • Ansible
  • Nexus
  • Tomcat
  • Docker
  • Zabbix
  • Prometheus
  • Git
  • GitLab
  • Jenkins
  • Kubernetes
  • Shell
  • Python
  • 圈圈空间
  • 做饭这件事
收藏站点
留言板
归档
GitHub (opens new window)
  • 随手记录

    • QPS优化记录
    • 阿里云SLB演示
    • DDOS预防
    • Linux内核优化
    • rsync同步守护进程
    • NFS文件同步
    • Tomcat升级
    • 编译安装mysql后添加到systemd管理
    • 防火墙笔记
    • python自动化巡检服务器
  • 故障处理

    • 处理防MIME攻击后出现的问题解决
  • MySQL学习笔记

    • MySQL5.7安装
    • MySQL常用操作语句
    • MySQL主从架构实施
    • MySQL主主架构实施
    • MySQL MHA高可用实施
    • MyCat读写分离
    • MySQL创建用户时的授权
    • MySQL备份
    • MySQL通配符
  • Nginx学习笔记

    • 状态码含义
    • 匹配优先级
    • Nginx常用操作
    • 添加第三方模块
    • 关于路径匹配
    • 转发和重写
    • 内置变量
    • Nginx配置文件结构
  • Tomcat学习笔记

    • 部署Tomcat
    • 修改发布目录
    • Tomcat调优
  • Redis学习笔记

    • 通过 tar.gz 包安装部署 redis
    • redis 配置文件
    • 哨兵集群
    • redis常用命令
    • 虚拟机安装 redis.tar.gz 遇到的问题
  • Ansible学习笔记

    • 部署和使用 ansible
    • ansible 自带的密码认证参数
    • 批量免密操作:批量分发公钥
    • 配置主机清单
    • ansible 小知识
    • 模块介绍
    • 剧本
    • 一键部署 rsync 环境
    • 批量安装一个tomcat
    • 批量安装一个nginx
    • 批量安装 zabbix-agent
  • Zabbix学习笔记

    • 部署 zabbix 服务端、客户端
    • 自定义监控
    • 触发器
    • 监控项类型
    • 简单检查模式
    • zabbix web 界面结构信息
    • 邮件报警
    • 微信报警
    • snmp 监控网络设备
    • 部署 zabbix 服务端、客户端
    • jmx 监控 java 应用
    • ipmi 监控硬件
    • 自动化注册
    • 监控项的主要项和相关项
    • percona 监控 mysql
  • Git学习笔记

    • 配置 git
    • 常用命令
  • GitLab学习笔记

    • 环境准备
    • 安装 gitlab
    • gitlab 忘记 root 管理员密码的处理办法
  • Jenkins学习笔记

    • 安装部署
    • jenkins 使用脚本完成项目构建
    • jenkins 自动构建最新项目
    • 将 jenkins 自动部署的结果返回给 gitlab
    • jenkins 上线 java 项目
    • jenkins pipeline
  • Docker学习笔记

    • 安装 docker
    • 配置 docker 源
    • docker 中的常见名词
    • 镜像管理命令
    • 容器管理命令
    • 创建容器
    • 数据卷
    • docker network
    • 搭建 LNMP
    • Dockerfile
    • Dockerfile 搭建 tomcat
    • docker 镜像磁盘扩容
    • docker composer
    • Harbor 私有镜像仓库
    • docker 面试题
    • docker desktop 运行时与虚拟机冲突
    • docker离线安装
  • Nexus学习笔记
  • Prometheus学习笔记

    • 核心组件
    • 工作原理
    • 安装和配置
    • 启动 Prometheus
    • PromQL 使用
    • 数据模型
    • Exporter
    • 演示服务
    • Grafana 数据可视化
    • Prometheus 告警
  • Kubernetes学习笔记

    • K8S的介绍
    • K8S集群环境的搭建
    • K8S资源管理
    • K8S的实战入门
  • 运维
  • MySQL学习笔记
星途物语
2025-01-01

MySQL MHA高可用实施

用于 MySQL 数据库的高可用性解决方案,旨在实现主节点自动故障转移和数据一致性

MHA 的主要目的是在主节点发生故障时,能够迅速地将一个从节点提升为新的主节点,从而最大限度地减少数据库的停机时间

主要特点:

  • 自动故障转移:当 MySQL 主节点发生故障时,MHA 能够自动检测到这个故障,并将一个健康的从节点提升为新的主节点。这样可以确保数据库服务的高可用性
  • 数据一致性:在进行故障转移之前,MHA 会检查所有从节点的数据,以确保新的主节点的数据与旧的主节点一致。这有助于避免数据丢失或不一致的情况
  • 恢复操作:MHA 支持恢复操作,可以在主节点恢复后,将其重新配置为从节点,以便重新加入到复制链中
  • 管理工具:MHA 提供了管理和监控工具,包括 mha-manager 和 mha-node,用于管理集群的状态和执行故障转移操作

MHA 组成:

  • MHA Manager:主要负责监控 MySQL 节点的状态,并在检测到主节点故障时执行故障转移操作。它还负责协调从节点的提升过程
  • MHA Node:安装在每个 MySQL 节点上,负责向 MHA Manager 发送节点状态信息,并在需要时执行一些操作(例如故障转移或数据同步)
  • MHA Admin:提供了管理和配置 MHA 的工具,帮助用户配置和维护 MHA 环境

MHA Manager 通常需要部署在一台独立的机器上,而不是与 MySQL 数据库节点(主节点或从节点)共享同一台服务器。这是为了确保 MHA Manager 的高可用性和独立性,同时避免因 MySQL 节点故障导致 MHA Manager 失效

环境准备

在所有 mysql 节点安装 mha node,在管理端安装 mha node 和 manager

环境准备:

首先切换下载源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.tencentyun.com/repo/centos7_base.repo

wget -O /etc/yum.repos.d/epel.repo http://mirrors.tencentyun.com/repo/epel-7.repo

或者是

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

yum clean all

yum makecache

yum update

安装 mha 所需要的环境:

yum install compat-db mysql-libs perl-Compress-Raw-Bzip2 perl-Compress-Raw-Zlib perl-Config-Tiny perl-DBD-MySQL perl-DBI perl-Email-Date-Format perl-Log-Dispatch perl-Mail-Sender perl-Mail-Sendmail perl-MailTools perl-MIME-Base32 perl-MIME-Lite perl-MIME-Types perl-Parallel-ForkManager perl-Params-Validate perl-TimeDate perl-Time-HiRes

在所有节点端安装 mha node:rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

在管理端安装 node 和 manager :rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm

开始配置 mha 高可用

作业前提:所有节点需要配置无密码 ssh 登录,mha 检测环境需要用到;开放所有机器的 mysql 端口

在所有的 mysql 节点,创建用于 mha 的用户,mysql 配置好主从后,只用在一个机器中做配置即可

CREATE USER 'mha_manager'@'%' IDENTIFIED BY '123456zzlZZL!';

GRANT ALL PRIVILEGES ON . TO 'mha_manager'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

image-20240816102916342

看下 21 和 22 机器

image-20240816102939696 image-20240816103001090

对 mha manager 进行配置,通常位于 /etc/mha.cnf

[server1]
# 主服务器
hostname=10.0.0.20
user=mha_manager
#password=123456zzlZZL!
ssh_user=root

[server2]
# 从服务器1
hostname=10.0.0.21
user=mha_manager
ssh_user=root

[server3]
# 从服务器2
hostname=10.0.0.22
user=mha_manager
ssh_user=root

[mha_manager]
# MHA Manager 配置
manager_user=mha_manager
manager_password=123456zzlZZL!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

验证配置文件:masterha_check_repl --conf=/etc/mha.cnf

然后启动 mha manager:masterha_manager --conf=/etc/mha.cnf

问题1:可能会遇到之前主从配置的用户的权限问题

GRANT REPLICATION SLAVE ON . TO 'zzl'@'%' IDENTIFIED BY '123456zzlZZL!';

FLUSH PRIVILEGES;

问题2:log_bin 二进制文件位置找不到

现在 master 上查看 log_bin 的位置:mysql -u root -p -e "SHOW VARIABLES LIKE 'log_bin%';"

在 mha manager 的配置文件中加入:master_binlog_dir=实际位置

例如,log_bin 在 /usr/local/mysql/data/ 下,那么就配置 master_binlog_dir=/usr/local/mysql/data/

问题3:mha manager 需要用到 mysqlbinlog

确保 mysqlbinlog 工具存在并且在系统的 PATH 环境变量中,通常,mysqlbinlog 位于 MySQL 安装目录的 bin 子目录下

如果工具存在但路径不在 PATH 中,你可以通过以下命令来临时设置 PATH

export PATH=$PATH:/usr/local/mysql/bin

或者将其添加到 /etc/profile 文件中,以便系统重启后自动加载

echo 'export PATH=$PATH:/usr/local/mysql/bin' >> ~/.bashrc

source ~/.bashrc

mysqlbinlog --version:查看 mysqlbinlog 是否配置好

解决完所有问题后,正常启动成功

#MySQL
MySQL主主架构实施
MyCat读写分离

← MySQL主主架构实施 MyCat读写分离→

Theme by Vdoing | Copyright © 2025-2025 | 鄂ICP备2024086820号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式