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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/218630.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DNS/ICMP协议、NAT技术

目录 DNS协议DNS背景域名简介 ICMP协议ICMP功能ping命令traceroute命令 NAT技术NAT技术背景NAT IP转换过程NAPTNAT技术的缺陷NAT和代理服务器 网络协议总结应用层传输层网络层数据链路层 DNS协议 DNS(Domain Name System,域名系统)协议&…

EMQX-5.3.1单机集群部署并基于Nginx实现负载均衡

本例单机集群部署使用三个节点,分别为node1、node2、node3 一、安装与配置 1 创建数据目录 mkdir -p node1/data node1/logs mkdir -p node2/data node2/logs mkdir -p mode3/data node3/logs 2 数据目录授权 chown 1000 node1/ node2/ node3/ chown 1000 n…

应用可观测性OpenTelemetry简介

应用可观测性OpenTelemetry简介 OpenTelmetry遥测方案可观测性三支柱日志 Logs指标跟踪 什么是OpenTelemetryOpenTelemetry架构和组件OpenTelemetry与OpenCensus、OpenTracing是什么关系 OpenTelmetry遥测方案 可观测性三支柱 日志 Logs 日志是特定事件在特定时间点发生的文本…

Echarts 创建饼状图-入门实例

安装 npm install echartsmain.js 引入 import *as echarts from echarts Vue.prototype.$echarts echarts定义容器 <div ref"myChart" style"width: 500px; height: 500px;"></div>option 为配置项 成品 <script>export default {na…

STM32_8(DMA)

一、DMA DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&#xff0c;节省了CPU的资源12个独立可配置的通道&#xff1a; DMA1&#xff08;7个通道&#xff09;&#xff…

VS2022的props配置

最近在点云处理项目过程中&#xff0c;使用了PCL库&#xff0c;遇到了需要在多个vs工程中导入相同库的问题。每次新建项目都要配置很多include文件路径&#xff0c;导入一堆.lib文件&#xff0c;非常头疼&#xff0c;可以通过props属性表来解决这个问题。 一、什么是props属性…

基于 Python中的深度学习:神经网络与卷积神经网络

当下&#xff0c;深度学习已经成为人工智能研究和应用领域的关键技术之一。作为一个开源的高级编程语言&#xff0c;Python提供了丰富的工具和库&#xff0c;为深度学习的研究和开发提供了便利。本文将深入探究Python中的深度学习&#xff0c;重点聚焦于神经网络与卷积神经网络…

单调栈 模板

class Solution { public: //从后往前的方法 vector<int> dailyTemperatures(vector<int>& temperatures) {int n temperatures.size();vector<int> ans(n);//创建一个大小为n的数组stack<int> st;//这个时候栈中没有任何元素for(int i n-1;i &g…

运维高级--centos7源码安装Apache

安装必要的依赖项&#xff1a; sudo yum groupinstall "Development Tools" sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel这将安装编译和构建所需的基本工具&#xff0c;以及 Apache HTTP Server 所需的一些依赖项。 下载 Apache HTT…

C语言——字符串、打印字符串的三种方式

文章目录 前言一、字符串1.字符串常量2.注意 scanf() 读取字符串例如&#xff0c;scanf() 输入中间有空格的字符串后观察打印情况 3.sizeof()函数计算字符串尺寸&#xff0c;strlen()函数计算字符串长度例子&#xff1a; 4.字符数组定义和初始化(1)传统的字符集合赋值&#xff…

STM32 配置中断常用库函数

单片机学习 目录 一、配置AFIO相关库函数 1.1函数GPIO_AFIODeInit 1.2函数GPIO_EventOutputConfig 1.3函数GPIO_EventOutputCmd 1.4函数GPIO_EXTILineConfig 二、配置EXTI相关库函数 2.1函数EXTI_DeInit 2.2函数EXTI_Init 2.3函数EXTI_StructInit 2.4函数 EXTI_Gener…

Linux系统常用指令大全(图文详解)

目录 前言 一、UNIX的登录与退出 1、登录 &#xff08;1&#xff09;执行格式&#xff1a; &#xff08;2&#xff09;步骤 2、退出 二、UNIX命令格式 三、常用命令 1、目录操作 &#xff08;1&#xff09;显示目录文件 ls &#xff08;2&#xff09;建新目录 …