• MySQL数据库中MHA高可用的搭建以及原理详解



    前言

    一、MHA安装方式

    1.1.MASTER端

    1.1.1.安装MHA MASTER端

    unzip mha.zip
    yum install *.rpm -y											#安装所有的软件包软件包中自带所需依赖性
    
    • 1
    • 2

    1.1.2.配置文件生成

    cd mha4mysql-manager-0.58/
    mkdir /etc/mha							#建立配置文件目录
    cat samples/conf/app1.cnf > /etc/mha/app1.cnf					
    cat samples/conf/masterha_default.cnf >> /etc/mha/app1.cnf		
    										#生成配置文件masterha_default.cnf为全局配置文件模板
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.1.3配置文件编写

    [server default]
    user=root								#数据库SLAVE节点管理元用户的管理身份
    password=dockerps-A1					#SLAVE节点的管理员密码
    ssh_user=root							#ssh用户的身份
    master_binlog_dir=/var/lib/mysql		#二进制日志存在未目录MASTER节点的
    remote_workdir=/etc/mha/data			#切换时数据保存在MHA_MASTER节点的位置
    repl_user=repl							#复制数据的用户为repl
    repl_password=dockerps-A1				#复制数据库的用户密码为
    secondary_check_script= masterha_secondary_check -s 192.168.63.130 -s 192.168.63.153
    										#对数据库的网络进行检测隔一段时间进行对数据库的SLAVE端发送ping数据包填写两个外部服务器地址
    ping_interval=3							#ping的数据包发送间隔时间
    master_ip_failover_script= /usr/local/bin/master_ip_failover
    										#添加VIP的脚本
    shutdown_script= /usr/local/bin/power_manager
    										#断电重起的脚本生产环境中一般使用的
    # report_script= /script/masterha/send_report
    master_ip_online_change_script= /usr/local/bin/master_ip_online_change
    										#切换vip的脚本
    manager_log=/var/log/mha/app1.log		#数据库切换时日志存储的绝对位置
    
    [server1]
    hostname=192.168.63.131					#主机名的IP地址	
    ssh_port=22								#ssh的端口号
    candidate_master=1						#提生了这个SLAVE node时提升为MASTER node的过程的优先级但是不会一定改变他为MASTER
    check_repl_delay=0
    
    [server2]
    hostname=192.168.63.153
    candidate_master=1
    check_repl_delay=0						#如过Binlog落后超过100M则选择新的MASTER node时MHA则会进行跳过设置为0则会忽略延迟时间
    
    [server3]
    hostname=192.168.63.130
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    vim /etc/my.cnf
    symbolic-links=0
    
    gtid_mode=ON
    enforce-gtid-consistency=ON				
    
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    
    server-id=2
    log-bin=mysql-bin						#每个MySQL node 都要开起二进制日志
    
    mkdir /etc/mha/data						#建立数据目录
    mkidr /var/log/mha						#建立日志目录
    touch /var/log/mha/app1					#建立日志导入的文件
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    1.1.4脚本文件的编写

    vim /usr/local/bin/master_ip_failover
    
    my (
        $command,          $ssh_user,        $orig_master_host, $orig_master_ip,
        $orig_master_port, $new_master_host, $new_master_ip,    $new_master_port
    );
    
    my $vip = '192.168.63.100/24';
    my $ssh_start_vip = "/sbin/ip addr add $vip dev ens33";
    my $ssh_stop_vip = "/sbin/ip addr del $vip dev ens33";
    
    vim /usr/local/bin/master_ip_online_change
    
    my $vip = '192.168.63.100/24';
    my $ssh_start_vip = "/sbin/ip addr add $vip dev ens33";
    my $ssh_stop_vip = "/sbin/ip addr del $vip dev ens33";
    my $exit_code = 0;
    
    my (
      $command,              $orig_master_is_new_slave, $orig_master_host,
      $orig_master_ip,       $orig_master_port,         $orig_master_user,
      $orig_master_password, $orig_master_ssh_user,     $new_master_host,
      $new_master_ip,        $new_master_port,          $new_master_user,
      $new_master_password,  $new_master_ssh_user,
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    1.1.2.SLAVE端安装

    yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y		#包括MySQL node同样安装
    
    • 1

    1.1.3 环境检测

    masterha_check_ssh --conf=/etc/mha/app1.cnf
    										#检测MASTER NODE 和各个MySQL node之间是否可以进行免密连接并且胡同
    masterha_check_repl --conf=/etc/mha/app1.cnf
    										#检测全局的环境是否完整并且正确
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    二、MHA手动切换以及自动切换

    2.1.手动切换MASTER NODE

    2.1.1 MASTER NODE 仍旧工作中需要切换

    masterha_master_switch --conf=/etc/mha/app1.cnf --master_state=alive --new_master_host=192.168.63.153 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000
    									#--conf读取那个配置文件
    									#--master_state=alive表示节点状态工作中
    									#--new_master_host新的MASTER NODE IP
    									#--new_master_port新的MASTER NODE 的端口
    									#--orig_master_is_new_slave指定原有MASER NODE 为新的SLAVE
    									#--running_updates_limit=10000指定等待超时时间
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.1.2 MASTER无法工作时进行切换

    masterha_stop --conf=/etc/mha/app1.cnf
    									#停止master切换工具
    systemctl stop mysqld.service		#停止MySQL的服务进程
    masterha_master_switch --master_state=dead --conf=/etc/mha/app1.cnf --dead_master_host=192.168.63.131 --dead_master_ip=192.168.63.131 --dead_master_port=3306 --new_master_host=192.168.63.153 --new_master_port=3306
    									#dead表示down掉了指定新的MASTER NODE 的IP 以及 port 后即可切换
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.2.自动切换方式

    masterha_manager --conf=/etc/mha/app1.cnf &
    									#使用后台进程的方式进行自动切换MySQL NODE节点进行自动切换
    systemctl stop mysqld.service		#停掉MySQL的MASTER node 节点进行
    CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='dockerps-A1', MASTER_HOST='192.168.63.153', MASTER_PORT='3306', MASTER_AUTO_POSITION=1;
    									#将原有的MASTER NODE调整为SLAVE NODE即可
    
    • 1
    • 2
    • 3
    • 4
    • 5

    总结

  • 相关阅读:
    DytanVO 代码复现(服务器端复现rtx3090)
    Vue 3 的常用响应式 API 总结
    C#,排列组合的堆生成法(Heap’s Algorithm for generating permutations)算法与源代码
    后端API接口性能优化的10种方案,真有用!
    Linux-进程间通信
    数据结构- 树
    vue3封装echarts图表数据无法渲染到页面
    一文了解 io.LimitedReader类型
    【嵌入式UI框架:LVGL】使用恩智浦GUI设计工具,像Qt一样开发MCU界面
    mysql主从复制与读写分离
  • 原文地址:https://blog.csdn.net/b_______/article/details/126192261