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

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寂冄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值