MHA Master High Availability

news2024/11/13 16:19:10

一、MHA工作原理和架构

  1. MHA利用 SELECT 1 As Value 指令判断master服务器的健康性,一旦master 宕机,MHA 从宕机崩溃的master保存二进制日志事件(binlog events)
  2. 识别含有最新更新的slave
  3. 应用差异的中继日志(relay log)到其他的slave
  4. 应用从master保存的二进制日志事件(binlog events)
  5. 提升一个slave为新的master
  6. 使其他的slave连接新的master进行复制

二、实现mha

mha服务器: 192.168.91.103
master: 192.168.91.100
slave1: 192.168.91.101
slave2: 192.168.91.102

1.mha服务器安装mha,主服务器,从服务器安装mha

####################主节点需要安装两个###############
yum install epel-release.noarch -y
#有依赖性用yum安装  需要先安装  epel源
yum -y install mha4mysql-*.rpm



################从节点仅安装node包################
yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y




##############主节点上 基于key验证:#####################
ssh-keygen 
cd
ssh-copy-id 127.0.0.1
#自己和自己实现免密钥登录


rsync -a .ssh   192.168.91.100:/root/
rsync -a .ssh   192.168.91.101:/root/
rsync -a .ssh   192.168.91.102:/root/
#注意.ssh 后不能加/

2.建立mha 文件夹 和配置文件

mkdir /etc/mastermha
vim /etc/mastermha/app1.cnf

[server default]
user=mhauser
password=Admin@123
manager_workdir=/data/mastermha/app1/
manager_log=/data/mastermha/app1/manager.log
remote_workdir=/data/mastermha/app1/
ssh_user=root
repl_user=test
repl_password=Admin@123
ping_interval=1
master_ip_failover_script=/usr/local/bin/master_ip_failover
#report_script=/usr/local/bin/sendmail.sh     可以不加
check_repl_delay=0
master_binlog_dir=/data/mysql/


[server1]
hostname=192.168.91.100
candidate_master=1

[server2]
hostname=192.168.91.101
candidate_master=1

[server3]
hostname=192.168.91.102

#实现主节点ip切换的脚本
vim   master_ip_failove

#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
use Getopt::Long;
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.91.188/24';    #设置Virtual IP   此处注释需要删除   *****
my $gateway = '192.168.91.2';     #网关Gateway IP   此处注释需要删除   *****
my $interface = 'ens33';
my $key = "1";
my $ssh_start_vip = "/sbin/ifconfig $interface:$key $vip;/sbin/arping -I $interface -c 3 -s $vip $gateway >/dev/null 2>&1";
my $ssh_stop_vip = "/sbin/ifconfig $interface:$key down";
GetOptions(
'command=s' => \$command,
'ssh_user=s' => \$ssh_user,
'orig_master_host=s' => \$orig_master_host,
'orig_master_ip=s' => \$orig_master_ip,
'orig_master_port=i' => \$orig_master_port,
'new_master_host=s' => \$new_master_host,
'new_master_ip=s' => \$new_master_ip,
'new_master_port=i' => \$new_master_port,
);
exit &main();
sub main {
print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";
if ( $command eq "stop" || $command eq "stopssh" ) {
# $orig_master_host, $orig_master_ip, $orig_master_port are passed.
# If you manage master ip address at global catalog database,
# invalidate orig_master_ip here.
my $exit_code = 1;
eval {
print "Disabling the VIP on old master: $orig_master_host \n";
&stop_vip();
$exit_code = 0;
};
if ($@) {
warn "Got Error: $@\n";
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "start" ) {
# all arguments are passed.
# If you manage master ip address at global catalog database,
# activate new_master_ip here.
# You can also grant write access (create user, set read_only=0, etc) here.
my $exit_code = 10;
eval {
print "Enabling the VIP - $vip on the new master - $new_master_host \n";
&start_vip();
$exit_code = 0;
};
if ($@) {
warn $@;
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "status" ) {
print "Checking the Status of the script.. OK \n";
`ssh $ssh_user\@$orig_master_host \" $ssh_start_vip \"`;
exit 0;
}
else {
&usage();
exit 1;
}
}
# A simple system call that enable the VIP on the new master
sub start_vip() {
`ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}
# A simple system call that disable the VIP on the old_master
sub stop_vip() {
`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}
sub usage {
print
"Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}


mv master_ip_failover  /usr/local/bin/
chmod +x /usr/local/bin/master_ip_failover 

准备主从复制

vim  /etc/my.cnf
#修改文件
[mysqld]
server_id=100
log-bin=/data/mysql/mysql-bin
skip_name_resolve=1
general_log 

mkdir /data/mysql/   -p
#建立文件夹
chown mysql.mysql /data/ -R
#注意修改权限
systemctl restart mysqld


grant replication slave on *.* to test@'192.168.91.%' identified by 'Admin@123';
#建立复制用户
grant all on *.* to mhauser@'192.168.91.%' identified by 'Admin@123';
#建立  mha管理账户

show processlist;
#查看线程

vim  /etc/my.cnf

#修改文件
[mysqld]
server_id=102
log-bin=/data/mysql/mysql-bin
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
skip_name_resolve=1
general_log 
#read only  #只读可加
#skip_name_resolve=1  禁用反向解析


mkdir /data/mysql/   -p
#建立文件夹
chown mysql.mysql /data/ -R
#注意修改权限
systemctl restart mysqld



CHANGE MASTER TO
  MASTER_HOST='192.168.91.100',
  MASTER_USER='test',
  MASTER_PASSWORD='Admin@123',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=154;

show slave status\G;
#查看设置的状态
start slave;
#开启线程,开启主从复制

配置虚拟ip 在mysql 主节点上

ifconfig ens33:1 192.168.91.188/24

检查 mha 环境

masterha_check_ssh --conf=/etc/mastermha/app1.cnf
#connection tests passed successfully.

masterha_check_repl --conf=/etc/mastermha/app1.cnf

开启mha

#开启MHA,默认是前台运行,生产环境一般为后台执行
nohup masterha_manager --conf=/etc/mastermha/app1.cnf &> /dev/null 
#非后台
masterha_manager --conf=/etc/mastermha/app1.cnf

#查看状态
masterha_check_status --conf=/etc/mastermha/app1.cnf

测试实验是否成功

在主服务器上可以看到主服务器不停地给mha服务器发送心跳线

tail -f   /var/lib/mysql/localhost.log 

在这里插入图片描述
在主服务器上出现故障后,在mha服务器日志里可以看到mha已经成功切换从服务器为主

tail  -f  /data/mastermha/app1/manager.log

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

celery执行任务报错ValueError: not enough values to unpack

背景 在做用户注册模块的时候需要对手机号验证的过程进行优化,目前想到的方式是通过celeryrabbitmq的方式进行异步处理,选择使用celery是因为使用方便、性能好、可分布式部署。 环境信息 目前使用地win11容器化启动 rabbitmq:3.13.2 python:3.6.8 cel…

21. Java AQS 原理

1. 前言 本节内容主要是对 AQS 原理的讲解,之所以需要了解 AQS 原理,是因为后续讲解的 ReentrantLock 是基于 AQS 原理的。本节内容相较于其他小节难度上会大一些,基础薄弱的学习者可以选择性学习本节内容或者跳过本节内容。 了解什么是 AQ…

【目录】阅读须知!全博文、专栏大纲

首先要和大家说一下,博主的文章并不是想到哪里写到哪里,而是以整个大后端为主题,成体系的在写专栏,从和后端紧相关的计算机核心课程开始、到JAVA SE、JAVA EE、到数据库、MQ等各类中间件、再到业务场景、性能优化。当然也会涉及一…

Git秘籍大公开:从基础概念到高级技巧的全面解析

文章目录 前言一、Git基础介绍1. 作用2. 为什么要进行源代码管理?3. Git的诞生4. Git管理源代码特点5. Git操作流程图解 二、工作区暂存区和仓库区介绍1. 工作区2. 暂存区3. 仓库区 三、Git单人本地仓库操作1. 安装git2. 查看git安装结果3. 创建项目4. 创建本地仓库5. 配置个人…

鸿蒙系统:未来智能生态的引领者

在当今这个日新月异的互联网领域,操作系统作为连接硬件与软件的桥梁,其重要性不言而喻。随着华为鸿蒙系统(HarmonyOS)的崛起,一场关于操作系统未来的讨论再次被推向高潮。 鸿蒙OS,华为的全新力作&#xff…

字节码编程javassist之打印方法耗时和入参

写在前面 本文看下如何实现打印方法耗时和入参。 1:程序 需要增强的类: public class ApiTest1 {public Integer strToInt(String str01, String str02) {return Integer.parseInt(str01);}}插桩类 package com.dahuyou.javassist.huohuo.aa;import…

【数据结构】线性表----栈详解

栈 栈(Stack)是一种常见的数据结构,它具有**后进先出(Last In, First Out, LIFO)**的特点。栈的运作类似于物理世界中的叠盘子:最新放上去的盘子最先被拿走,而最底部的盘子最后才能被取出。 如…

C语言学习记录Day2

for循环 for(表达式1;表达式2;表达式3) 循环语句; 注:表达式1:初始化部分.表达式2:条件判断部分 表达式3:调整部分 不可再for循环体内修改循环变量,防止f…

【5G VoNR】VoNR流程简述

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G技术研究。 博客内容主要围绕…

支持向量机 (support vector machine,SVM)

支持向量机 (support vector machine,SVM) flyfish 支持向量机是一种用于分类和回归的机器学习模型。在分类任务中,SVM试图找到一个最佳的分隔超平面,使得不同类别的数据点在空间中被尽可能宽的间隔分开。 超平面方…

const 修饰不同内容区分

1.修饰局部变量 const int a 1;int const a 1; 这两种是一样的 注意: const int b; 该情况下编译器会报错:常量变量"b”需要初始值设定项 将一个变量没有赋初始值直接const修饰后,在以后时无法更改内容的。 2.修饰常量字符串 a.…

Python前沿技术:机器学习与人工智能

Python前沿技术:机器学习与人工智能 一、引言 随着科技的飞速发展,机器学习和人工智能(AI)已经成为了计算机科学领域的热门话题。Python作为一门易学易用且功能强大的编程语言,已经成为了这两个领域的首选语言之一。本…

U盘管理软件有哪些?3款好用的软件亲测有效!

在数字化办公与数据交换日益频繁的今天,U盘作为便携的存储设备,其重要性不言而喻。 然而,U盘的使用也带来了数据泄露、病毒感染等安全隐患。为了有效管理U盘,确保数据安全与合规性,市场上涌现出了众多U盘管理软件。 小…

电脑选购全解析!你需要知道的一切!

在选择电脑类型时,你可以考虑以下因素: 你的主要用途是什么? 你是否需要携带电脑? 你的预算是多少? 你对性能和图形要求有多高? 你是否需要特定的软硬件功能?根据这些因素,你可以…

生成式人工智能:开发者的得力助手还是职业威胁?

在过去的几年里,生成式人工智能(AIGC)在软件开发领域引发了广泛关注。AI工具在代码生成、错误检测、自动化测试等方面的应用,正在迅速改变开发者的工作方式。AI究竟是在帮助开发者提高效率,还是在逐渐取代他们&#xf…

预提待摊费用处理费时费力?这样做更高效!

一笔费用发生之后,发票取得时间、资金支付时间、费用所属时间都可能不一致,在权责记账规则下,“预提”、“待摊”的账务处理方法成为企业财务业务处理的常用手段。相应地,预提和摊销业务在企业极为常见,仅针对企业规模…

Android network - NUD检测机制(Android 14)

Android network - NUD检测机制 1. 前言2. 源码分析2.1 ClientModeImpl2.2 IpClient2.3 IpReachabilityMonitor 1. 前言 在Android系统中,NUD(Neighbor Unreachable Detection)指的是网络中的邻居不可达检测机制,它用于检测设备是…

雅特力AT32F423开启FPU跟不开启FPU性能差异

在大多数Cortex-M的处理器中调试端口包含一个32位的自由运行计数器,它可以计算 CPU 的时钟周期。计数器是 Debug 观察和跟踪(DWT)模块的一部分,可以很容易地用于测量代码的执行时间。下面的代码是启用和初始化这个特性非常有用。 注意测试需要重新断电上…

浅谈信息技术高效课堂管理:策略、技巧与实践

引言: 在信息化教育的浪潮中,信息技术课程正逐渐成为学校教育体系中的重要组成部分。然而,信息技术课堂的特殊性——高互动性、高度依赖电子设备,给课堂管理带来了前所未有的挑战。如何在保证教学效率的同时,维护良好…

钡铼技术低成本解决方案:注塑机OPC UA接入的智慧选择

在工业4.0与“中国制造2025”战略的引领下,传统注塑机行业正面临前所未有的转型升级挑战。为了在这场技术革新浪潮中保持竞争力,积极接纳并实施OPC UA标准已成为必然趋势。那么,对于传统注塑机而言,如何平滑过渡实现对OPC UA的支持…