当前位置: 首页 > news >正文

MySQL MHA高可用架构搭建

快捷查看指令 ctrl+f 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改)

MySQL MHA高可用架构搭建

MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL主从复制架构提供了 automating master failover (自动化主故障转移)功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。
在 MySQL 故障切换过程中,MHA 能够做到 0~30 秒内自动完成数据库的故障切换操作,并且,在进行故障切换的过程中,MHA 能最大成都上保证数据库的一致性,以达到真正意义上的高可用

在这里插入图片描述

所需工具

MHA Manager(管理节点):管理所有主从复制数据库,通常单独部署在一台机器上

MHA Node(数据节点):运行在每个mysql所在的机器上以及管理节点所在机器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它自动将最新数据的slave提升为master,然后将其它所有的slave指向新的master。

步骤

  1. 准备一个已经基于GTID搭建好的mysql主从复制集群,以及一台新的linux用于部署管理节点
  1. 设置所有机器可以免密登录
    #所有机器生成ssh密钥
    [root@localhost ~]# ssh-keygen -t rsa
    #所有机器发送免密登录请求到所有机器(包括自己)
    [root@localhost ~]# ssh-copy-id 192.168.157.111
    [root@localhost ~]# ssh-copy-id 192.168.157.112
    [root@localhost ~]# ssh-copy-id 192.168.157.113
    [root@localhost ~]# ssh-copy-id 192.168.157.114
  1. 所有节点安装mha运行环境
    [root@localhost mysql]# yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN
  1. 所有机器安装mha的数据节点软件(包括将来的管理节点)

在这里插入图片描述

将数据节点下载到所有机器
#通过rpm命令安装
[root@localhost ~]# rpm -ivh /tmp/mha4mysql-node-0.57-0.el7.noarch.rpm

  1. 检查mysql环境
    #mha在运行时会调用一些mysql的命令,需要提前检查命令是否在Linux默认环境中
    [root@localhost ~]# which mysql
    /usr/bin/mysql #检查mysql命令,此为正常
    [root@localhost ~]# which mysqlbinlog
    /usr/bin/which: no mysqlbinlog in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
    #检查mysqlbinlog命令,此为不正常,需要将此命令在/usr/bin下简历软连接
    [root@localhost ~]# ln -s /opt/liuyh/mysql/bin/mysqlbinlog /usr/bin/
    [root@localhost ~]# which mysqlbinlog
    /usr/bin/mysqlbinlog # 正常
  1. 所有数据库创建mha管理用户并赋予权限
    mysql> grant all on . to ‘mha’@‘%’ identified by ‘111111’;
    #注意,此前已经完成了主从复制,只需在主库创建,从库自动同步
  1. 管理节点配置–安装管理节点运行环境
    [root@localhost ~]# yum install -y perl-Config-Tiny epel-release perl-Parallel-ForkManager perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
  1. 管理节点配置-安装管理节点
    #下载管理节点
    #使用rpm安装
    [root@localhost ~]# rpm -ivh /tmp/mha4mysql-manager-0.57-0.el7.noarch.rpm
  1. 管理节点配置-创建mha目录
    [root@localhost ~]# mkdir -p /etc/mha
    [root@localhost ~]# mkdir -p /var/log/mha/app1
  1. 管理节点配置-创建配置文件并修改
    [root@localhost ~]# vi /var/log/mha/app1.cnf

配置文件内容

[server default]
manager_log=/var/log/mha/log/manager.log
manager_workdir=/var/log/mha/app.log
master_binlog_dir=/opt/liuyh/log
user=mha
password=123456
ping_interval=2
repl_user=testslave
repl_password=123456
ssh_user=root
[server1]
candidate_master=1
check_repl_delay=0
hostname=192.168.240.134
port=3306
[server2]
check_repl_delay=0
hostname=192.168.240.135
port=3306
[server3]
check_repl_delay=0
hostname=192.168.240.136
port=3306

# 关键字作用以及编写实例参考
[server default]
manager_workdir=/var/log/masterha/app1.log #设置manager的工作目录
manager_log=/var/log/masterha/app1/manager.log #设置manager的日志
master_binlog_dir=/data/mysql #设置master 保存binlog的位置,以便MHA可以找到master的日志,我这里的也就是mysql的数据目录
master_ip_failover_script= /usr/local/bin/master_ip_failover #设置自动failover时候的切换脚本
master_ip_online_change_script= /usr/local/bin/master_ip_online_change #设置手动切换时候的切换脚本
password=123456 #设置mysql中root用户的密码,这个密码是前文中创建监控用户的那个密码
user=root #设置监控用户root
ping_interval=1 #设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行failover
remote_workdir=/tmp #设置远端mysql在发生切换时binlog的保存位置
repl_password=123456 #设置复制用户的密码
repl_user=repl #设置复制环境中的复制用户名
report_script=/usr/local/send_report #设置发生切换后发送的报警的脚本
secondary_check_script= /usr/local/bin/masterha_secondary_check -s server03 -s server02  # 一旦MHA到server02的监控之间出现问题,MHA Manager将会尝试从server03登录到server02
shutdown_script="" #设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机放在发生脑裂,这里没有使用)
ssh_user=root #设置ssh的登录用户名
[server1]
hostname=10.0.0.201 #数据库的ip
port=3306  #数据库的端口
[server2]
hostname=10.0.0.204
port=3306
candidate_master=1 #设置为候选master,如果设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个主库不是集群中事件最新的
slave_check_repl_delay=0 #默认情况下如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为一个新的master,因为对于这个slave的恢复需要花费很长时间,通过设置check_repl_delay=0,MHA触发切换在选择一个新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换 的过程中一定是新的master
[server3]
hostname=10.0.0.202
port=3306
  1. 管理节点配置-检查mha的ssh连接情况
    [root@localhost ~]# masterha_check_ssh --conf=/var/log/mha/app1.cnf

在这里插入图片描述

  1. 管理节点配置-检查主从复制状态

在这里插入图片描述

  1. 启动mha
    [root@localhost mha]# nohup masterha_manager --conf=/var/log/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover /var/log/mha/log/manager.log 2>&1 &

/var/log/mha/log/manager.log 设置该文件为日志文件,保证该文件目录存在

  1. 手动关闭主库,模拟主库宕机
  1. 再次查看主从复制情况
    [root@localhost ~]# masterha_check_repl --conf=/var/log/mha/app1.cnf

在这里插入图片描述

相关文章:

  • SELinux零知识学习三十二、SELinux策略语言之角色和用户(3)
  • 【C++干货铺】非类型模板 | 模板特化 | 模板分离编译
  • 【C4D如何将多个选集设置为一个选集】
  • 前端(HTML + CSS + JS)
  • 成品日志函数
  • Scrapy爬虫异步框架(一篇文章齐全)
  • 插入排序(形象类比)
  • ubuntu修改系统语言
  • Windows系统管理之备份与恢复
  • PgSQL技术内幕-Analyze做的那些事-pg_stat_all_tables
  • Hibernate 脏检查和刷新缓存机制
  • 【开源】基于Vue.js的天然气工程运维系统的设计和实现
  • EMG肌肉信号处理合集 (一)
  • 【DP】mobiusp正在创作乐曲
  • ubuntu20.04配置OpenCV的C++环境
  • 时间复杂度分析经典问题——最大子序列和
  • 【个人向】《HTTP图解》阅后小结
  • JavaScript 基础知识 - 入门篇(一)
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Mac转Windows的拯救指南
  • PAT A1050
  • PhantomJS 安装
  • select2 取值 遍历 设置默认值
  • Spring-boot 启动时碰到的错误
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 计算机常识 - 收藏集 - 掘金
  • 聊一聊前端的监控
  • 数据仓库的几种建模方法
  • 我的业余项目总结
  • 我与Jetbrains的这些年
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • - 转 Ext2.0 form使用实例
  • Java数据解析之JSON
  • kubernetes资源对象--ingress
  • 大数据全解:定义、价值及挑战
  • ​力扣解法汇总946-验证栈序列
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #pragma once与条件编译
  • #Spring-boot高级
  • (2)STL算法之元素计数
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (转)大道至简,职场上做人做事做管理
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .net 反编译_.net反编译的相关问题
  • .net 简单实现MD5
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • @DataRedisTest测试redis从未如此丝滑
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • @在php中起什么作用?
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname