故障分析 | 如何提高 MHA 的网络容忍能力?(下)

安全运维工程师需要具备哪些综合能力? 运维工程师需要掌握基础的服务,如SSH服务、NFS网络文件系统、DHCP/DNS、数据同步服务等;常用数据库;常用服务,如JavaWeb服务Tomcat、Jboss、Weblogic等;系统监控与报警;容器技术等职业技能。 首先我们从运维工程师的工作职能入手,岗位工作内容: 1、平台架构组建 运维工程师的基本工作之一,主要负责参与并审核架构设计的合理性和可运维性,以确保系统上线后,安全、高效、稳定运行。保障并不断提升服务的可用性和数据安全性,提升用户体验。 2、日常运营保障 初级运维负责运用运维技 阅读详情

作者:刘开洋

爱可生交付服务部团队北京 DBA,主要负责处理 MySQL 的 troubleshooting 和我司自研数据库自动化管理平台 DMP 的日常运维问题,对数据库及周边技术有浓厚的学习兴趣,喜欢看书,追求技术。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

说明

本节主要介绍对 secondary_check_script 调用 masterha_secondary_check 脚本的说明。

[root@yang-03 ~]# cat /usr/bin/masterha_secondary_check
#!/usr/bin/env perl
···
$| = 1;
GetOptions(
  'help'              => \$help,
  'version'           => \$version,
  'secondary_host=s'  => \@monitoring_servers,
  'user=s'            => \$ssh_user,
  'port=s'            => \$ssh_port,
  'options=s'         => \$ssh_options,
  'master_host=s'     => \$master_host,
  'master_ip=s'       => \$master_ip,
  'master_port=i'     => \$master_port,
  'master_user=s'     => \$master_user,
  'master_password=s' => \$master_password,
  'ping_type=s'       => \$ping_type,
  'timeout=i'         => \$timeout,
);
 
if ($version) {
  print "masterha_secondary_check version $MHA::ManagerConst::VERSION.\n";
  exit 0;
}
 
if ($help) {
  pod2usage(0);
}
 
unless ($master_host) {
  pod2usage(1);
}
 
sub exit_by_signal {
  exit 1;
}
local $SIG{INT} = $SIG{HUP} = $SIG{QUIT} = $SIG{TERM} = \&exit_by_signal;
 
$ssh_user    = "root" unless ($ssh_user);
$ssh_port    = 22     unless ($ssh_port);
$master_port = 3306   unless ($master_port);
 
if ($ssh_options) {
  $MHA::ManagerConst::SSH_OPT_CHECK = $ssh_options;
}
$MHA::ManagerConst::SSH_OPT_CHECK =~ s/VAR_CONNECT_TIMEOUT/$timeout/;
 
# 0: master is not reachable from all monotoring servers
# 1: unknown errors
# 2: at least one of monitoring servers is not reachable from this script
# 3: master is reachable from at least one of monitoring servers
my $exit_code = 0;
 
foreach my $monitoring_server (@monitoring_servers) {
  my $ssh_user_host = $ssh_user . '@' . $monitoring_server;
  my $command =
"ssh $MHA::ManagerConst::SSH_OPT_CHECK -p $ssh_port $ssh_user_host \"perl -e "
    . "\\\"use IO::Socket::INET; my \\\\\\\$sock = IO::Socket::INET->new"
    . "(PeerAddr => \\\\\\\"$master_host\\\\\\\", PeerPort=> $master_port, "
    . "Proto =>'tcp', Timeout => $timeout); if(\\\\\\\$sock) { close(\\\\\\\$sock); "
    . "exit 3; } exit 0;\\\" \"";
  my $ret = system($command);
  $ret = $ret >> 8;
  if ( $ret == 0 ) {
    print
"Monitoring server $monitoring_server is reachable, Master is not reachable from $monitoring_server. OK.\n";
    next;
  }
  if ( $ret == 3 ) {
    if ( defined $ping_type
      && $ping_type eq $MHA::ManagerConst::PING_TYPE_INSERT )
    {
      my $ret_insert;
      my $command_insert =
          "ssh $MHA::ManagerConst::SSH_OPT_CHECK -p $ssh_port $ssh_user_host \'"
        . "/usr/bin/mysql -u$master_user -p$master_password -h$master_host "
        . "-e \"CREATE DATABASE IF NOT EXISTS infra; "
        . "CREATE TABLE IF NOT EXISTS infra.chk_masterha (\\`key\\` tinyint NOT NULL primary key,\\`val\\` int(10) unsigned NOT NULL DEFAULT '0'\) engine=InnoDB; "
        . "INSERT INTO infra.chk_masterha values (1,unix_timestamp()) ON DUPLICATE KEY UPDATE val=unix_timestamp()\"\'";
      my $sigalrm_timeout = 3;
      eval {
        local $SIG{ALRM} = sub {
          die "timeout.\n";
        };
        alarm $sigalrm_timeout;
        $ret_insert = system($command_insert);
        $ret_insert = $ret_insert >> 8;
        alarm 0;
      };
      if ( $@ || $ret_insert != 0 ) {
        print
"Monitoring server $monitoring_server is reachable, Master is not writable from $monitoring_server. OK.\n";
        next;
      }
    }
    print "Master is reachable from $monitoring_server!\n";
    $exit_code = 3;
    last;
  }
  else {
    print "Monitoring server $monitoring_server is NOT reachable!\n";
    $exit_code = 2;
    last;
  }
}
 
exit $exit_code;
···

看到上面的脚本有点头大,作为一个专一的 DBA,一直追求着 shell,Perl 语言不熟啊,细看之后发现与 shell 脚本有异曲同工之妙,从相应的注释中,我们找到了该检查脚本的返回值,即 0,1,2,3,分别代表的含义如下:

# 0: master is not reachable from all monotoring servers
# 1: unknown errors
# 2: at least one of monitoring servers is not reachable from this script
# 3: master is reachable from at least one of monitoring servers

下面就让我们做几个测试体会体会吧。

验证

本实验使用 iptables 进行网络故障场景的模拟,以下图中四条链路是否连通来进行测试,查看对应监控脚本的返回值是否和上面讲的一致。

检查命令:

shell > masterha_secondary_check -s remote_host1 -s remote_host2 .. --user=root  --master_host=master_ip  --master_ip=master_ip  --master_port=3306 --master_user=mha --master_password=*** --ping_type=SELECT
test 1

output:

Master is reachable from remote_host1!

test 2

output:

Master is reachable from remote_host1!

test 3

output:

ssh: connect to host remote_host1 port 22: Connection timed out.

Monitoring server remote_host1 is NOT reachable!

test 4

output:

Master is reachable from remote_host1!

test 5

output:

Monitoring server remote_host1 is reachable, Master is not reachable from remote_host1. OK.

Master is reachable from remote_host2!

test 6

output:

ssh: connect to host remote_host1 port 22: Connection timed out.

Monitoring server remote_host1 is NOT reachable!

test 7

output:

当输入的命令有误时,即符合 unknown errors,返回值为 1。

test 8

output:

Monitoring server remote_host1 is reachable, Master is not reachable from remote_host1. OK.

Monitoring server remote_host2 is reachable, Master is not reachable from remote_host2. OK.

PS:这里有一个问题,在使用监控服务器 slave 检查主从之间网络连通性时,masterha_secondary_check 脚本对监控主机的使用存在优先级,它会优先使用 remote_host1,如果 remote_host1 与 master 之间网络不同,才会使用 remote_host2 检查与 master 之间的网络连通性。

总结

通过测试验证,发现 MHA 通过调用 secondary_check_script 参数对于网络问题具有一定的容忍能力,只是相关文档描述过于简略,如需继续使用,需要不断进行验证测试,总体来讲,MHA 的功能还是及其强大的。

Yolov5实现道路裂缝检测 Yolov5实现道路裂缝检测 参考代码链接 Github代码链接 基于Pytorch的Yolov5道路裂缝检测程序运行说明。大家可以结合我的说明和原文说明使用,有问题欢迎询问。 文章目录Yolov5实现道路裂缝检测环境要求测试训练自己的数据集1.创建dataset.yaml文件2.创建标签文件3.组织文件路径4.选择模型5.开始训练 环境要求 Python 3.8或之后的版本 还要安装requirements.txt文件中所有依赖包,包括1.7及以上版本的torch $ pip install -r req 阅读详情

相关推荐

腾讯大佬总结的170道 python面试题

简述基于 TCP 协议的套接字通信流程。19.面向对象中`__new__` 和 `__init__` 区别。86. 解释 Python 中的`//`,`%`和`**`运算符。45.isinstance 的作用以及与 type()的区别。3. 简述下 Python 中的字符串、列表、元组和字典。143. 如何高效的找到 redis 中的某个 KEY。140. 如何保证 redis 中的数据都是热点数据。147. redis 中的 watch 的命令的作用。108. 简述 进程、线程、协程的区别以及应用场景。

AudiA6LV6的博客 486

mha高可用

mha高可用 实际操作 1初始化环境 systemctl stop firewalld systemctl disable firewalld setenforce 0 2.修改 Master、Slave1、Slave2 节点的主机名 hostnamectl set-hostname mysql1 hostnamectl set-hostname mysql2 hostnamectl set-hostname mysql3 vim /etc/hosts 192.168.91.100 Mysql1 192

ITwang1的博客 1218

Zephyr RTOS线程间通讯实战:消息队列与信号量的5个经典应用场景

本文深入探讨了Zephyr RTOS中线程间通讯的核心机制,通过消息队列与信号量的组合,详细解析了传感器数据处理流水线、命令分发系统、日志记录、资源池管理以及周期性任务协同调度等5个经典应用场景。这些实战模式为构建高效、稳定且可维护的嵌入式多线程系统提供了清晰的设计蓝图和代码范例。

tomato的博客 94

MySQL高可用系列之MHA(二)

参数说明 MHA提供了一系列配置参数,深入理解每个参数的具体含义,对优化配置、合理使用MHA非常重要,很多高可用性也都是通过合理配置一些参数而实现的。 MHA包括如下配置参数,分别说明如下: hostname/ip/port (Local Only) hostname为MySQL Server的IP地址或主机名; ip为MySQL Server的IP地址,缺省从$hostname中获取;

dba成长之路 3023

SageMath下载与安装

SageMath的下载与安装

旺旺的碎冰冰~的博客 7490

学习心得——COMSOL Multiphysics with MATLAB联合仿真及寻优计算

学习心得——COMSOL Multiphysics with MATLAB联合仿真及寻优计算

weixin_41678956的博客 8657

MHA高可用架构部署以及配置(详细)

MHA高可用架构部署

m0_62948770的博客 1万+

手把手教你搞定Pattern Recognition期刊的LaTeX投稿(附完整模板下载与避坑指南)

本文详细指导如何在Pattern Recognition期刊上使用LaTeX进行投稿,包括模板下载、环境配置、核心排版规范及投稿材料准备。特别强调期刊对格式的严格要求,如数学符号、图像引用等细节,并提供实用技巧和避坑指南,帮助作者高效完成投稿流程。

weixin_30876945的博客 394

Mysql高可用架构之MHA

一.MHA(Master High Availability):在mysql高可用方面一个相对成熟的解决方案,作为mysql高可用性环境故障切换和主从提升的高可用软件。在mysql故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,在切换过程中,MHA能在最大程度上保证数据的一致性 二.MHA的组成:管理节点(MHA Manager)和数据节点(MHA Node)

cywdeboke的博客 545

元数据治理实战:构建企业数据地图与血缘体系

元数据(Metadata)是描述数据的数据,是你能了解“数据是怎么来的”、“它是做什么的”、“能不能用”的基础信息。📌 举个例子:order_idstringods_order定义:平台内用户在订单系统中产生的唯一订单编号更新时间:每天凌晨 2 点,由 Airflow 调度任务生成所属人:张三(数据开发部)🔍 这些信息本身不直接参与计算,但它们是数据可管理、可追踪、可评估的基础。模块实战建议元数据类型技术 + 业务 + 操作元数据三类统一治理治理路径。

晴天彩虹雨的博客 290

BUG调试案例六:RK3568+国产YT8531网络PING调试案例

这次调试过程让我对后续类似问题的应对更加有信心。如果芯片在其他项目中已被验证可用,那么在我们的设计中原则上也应该能够正常工作。如果出现异常,就必须坚持追根溯源,找出具体原因和根本问题。每一次问题的解决,都是一次深入理解系统和提升能力的机会 —— 在不断探索和学习中,也在持续成长。

案例文章,高速信号 2326

【MHA】MySQL高可用MHA介绍5-所有参数

如果您使用设置 --orig_master_is_new_slave(这意味着当前主服务器作为新主服务器的新从属服务器运行)进行在线主服务器切换,而没有设置 repl_password,那么启动从属服务器将失败,因为当前主服务器上的默认复制密码为空(MHA 将在原始主服务器上执行 change master 而不在其他从属服务器上设置复制密码)。通过将 candidate_master 设置为 1,只要满足成为新主服务器的条件(例如启用了二进制日志,不会显著延迟复制等),服务器就会优先考虑成为新主服务器。

DBA之路的博客 1196

QGis二次开发 —— 1.1、ubuntu24.04下搭建QGis3.40.12二次开发环境(附:全部问题解决方法)

QGis二次开发 —— 1.1、ubuntu24.02下搭建QGis3.40.12二次开发环境(附:全部问题解决方法)

250

故障分析 | 如何提高 MHA 的网络容忍能力?(上)

作者:刘开洋 爱可生交付服务部团队北京 DBA,主要负责处理 MySQL 的 troubleshooting 和我司自研数据库自动化管理平台 DMP 的日常运维问题,对数据库及周边技术有浓厚的学习兴趣,喜欢看书,追求技术。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 一、问题说明 MHA 虽然停止更新了,但是其高可用的强大仍然为很多公司所青睐。我司客户由于一次网络故障,导致公司整体的网络通信出现问题,网络丢包严重,导致 MHA 管理下的 MySQL.

ActionTech的博客 358

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

自学网络安全方向要如何开始?

运维工程师需具备的技能:熟练掌握主机、网络及操作系统基本知识,在出现问题时可以及时解决问题。懂开发能实现自动化运维,将重复性的简单工作交给脚本程序处理提升工作效率。

技术专家 1124

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

非常值得一看,最低月薪上万的运维安全工程师学习路线

在运维工作中,经常被贴上这样的标签:背锅侠?电脑修理工?救火队员?35岁被退休?996/007等等,安全运维工程师真的这么不堪吗?网络安全产业就像一个江湖,各色人等聚集。相对于欧美国家基础扎实(懂加密、会防护、能挖洞、擅工程)的众多名门正派,我国的人才更多的属于旁门左道(很多白帽子可能会不服气),因此在未来的人才培养和建设上,需要调整结构,鼓励更多的人去做“正向”的、结合“业务”与“数据”、“自动化”的“体系、建设”,才能解人才之渴,真正的为社会全面互联网化提供安全保障。

2401_84618514的博客 1311

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

非常值得一看,最低月薪上万的运维安全工程师学习路线_运维学习路线

在运维工作中,经常被贴上这样的标签:背锅侠?电脑修理工?救火队员?35岁被退休?996/007等等,安全运维工程师真的这么不堪吗?

2401_84215240的博客 1131

一名合格的运维工程师都要掌握什么

想成为合格运维工程师,需要掌握不少技能,Linux运维工程师讲究的是广度,下面这些技能推荐你们学习: Linux 系统基础⼊门-Linux的基础知识内容,命令使用,以及用户和权限等核⼼知识点 Linux 系统管理和进阶-Linux从进程、资源、任务、⽂件、软件包、磁盘等管理⽅法 Linux 企业常用服务-企业级常用服务如DNS、FTP、Http、mail Linux 企业级安全原理和防范技巧以及网络和安全-Linux安全架构、安全威胁模型、以及加密、解密等原理,常见攻击和防范⼿段 Shell 编程⼊门及进

alenzzzhang 1946

值得一看!年薪50万运维安全工程师学习路线。零基础入门到精通,看这篇就够了!赶紧收藏!

网络安全产业就像一个江湖,各色人等聚集。相对于欧美国家基础扎实(懂加密、会防护、能挖洞、擅工程)的众多名门正派,我国的人才更多的属于旁门左道(很多白帽子可能会不服气),因此在未来的人才培养和建设上,需要调整结构,鼓励更多的人去做“正向”的、结合“业务”与“数据”、“自动化”的“体系、建设”,才能解人才之渴,真正的为社会全面互联网化提供安全保障。

2402_84205067的博客 899

值得一看!年薪50万运维安全工程师学习路线

前言在运维工作中,经常被贴上这样的标签:背锅侠?电脑修理工?救火队员?35岁被退休?996/007等等,安全运维工程师真的这么不堪吗?一、运维安全是什么?首先我们从运维工程师的工作职能入手,岗位工作内容:1、平台架构组建运维工程师的基本工作之一,主要负责参与并审核架构设计的合理性和可运维性,以确保系统上线后,安全、高效、稳定运行。保障并不断提升服务的可用性和数据安全性,提升用户体验。2、日常运营保障。

ZL_1618的博客 1413

非常值得一看,最低月薪上万的运维安全工程师学习路线_运维学习路线_运维开发学习路线

本文探讨了安全运维工程师的职业现状与发展路径。针对外界对运维人员"背锅侠""电脑修理工"等刻板印象,文章指出安全运维的重要性和前景。内容包含:运维安全定义、必备技能、职业前景分析;零基础学习路线与配套视频资源;网络安全文档书籍、黑客技术资料;工具包源码合集及面试题库等学习资源。文章旨在为想进入网络安全领域的新人提供系统学习路径,帮助打破对运维工程师的偏见认知,获取专业成长所需的各类资料。

kjuhfkicf154的博客 434
上一篇: 数据传输 | DTLE 在弱网络环境下的性能报告
下一篇: 第24期:索引设计(多值索引的适用场景)
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值