背景

以前大体介绍过,我们这边是做运维平台的。如果要形象化理解,那么,比如jenkins这种喜闻乐见的软件大致了解吧,jenkins就经常需要同步文件/版本包到远程机器上,jenkins怎么实现的,没去了解。

我们这边算是自研了类似jenkins这类软件,其中,同步文件主要用的是rsync工具,作为非专业运维,来现在公司之前,甚至没用过rsync,scp用得更多。

来了之后也没怎么用这个,因为我没负责这块业务,自己事情也多,所以就懒了。

这次是同事遇到相关问题,我就带着对rsync的一知半解,参与了排查,所幸问题不难,解决了。

问题描述

这个图,因为是公司内的图,所以打码比较厉害。

简单来说,就是客户端机器通过rsync命令,同步本机的一个文件到target服务器的21000端口(target服务器上的21000端口有rsync的服务端在监听,负责接收文件)。

然后运行后,输出了一行提示:

connected to target服务器

就卡住不动了。

然后再过上10多s,程序才正常跑完。

同事也很纳闷,要同步的文件才2kb,怎么要10多s呢?

问题分析过程

熟悉我的同学可能知道,我有点喜欢抓包(甚至有时候,应该先去看日志才是最优的,但就是想不起来先去看日志)

我就在群里看着上面那个图,发了条抓包语句,让他试试。

你这可能得抓包。
tcpdump -i eth1 host target服务器 and tcp port 21000 -w 21000.pcap

这条语句,意思就是,在eht1网卡上抓包,因为tcp是四元组嘛(源端主机、源端端口、目的端主机、目的端接口),我们这里就是抓host为“target服务器”且端口为21000的包,然后写到21000.pcap这个文件。

然后过了一会想起来,这个是线上机器,写到21000.pcap这个文件后,也没法下载到本机来分析。

于是就让同事换了个命令去执行:

tcpdump -i eth1 host xxxx and tcp port 21000 -Ann

这个就是不写文件了,-Ann直接打印到console。

然后,我们再次去执行那个rsync命令,这次就看到了奇怪的一幕了:

  • 首先是正常的三次握手
  • 接下来,客户端在18:06:58,发起请求,请求体只能认出来:"@RSYNCD:30.0"
  • 接下来,服务端表示收到该请求
  • 再接下来,服务端过了10多s后,返回了。返回体:"@RSYNCD 30.0"

我们想想,客户端发起了请求,请求体是@RSYNCD:30.0之类的,看起来像是协商版本啥的;服务端隔了15s返回,也返回了一个版本信息(合理猜测)。

我又想起,好像之前在哪里看到资料,说rsync版本低了,有类似问题。

我就让同事去看看别的正常的服务器上的版本,是什么情况。同事看完后,表示版本无差异。

那其实就陷入僵局了,唯一的思路就是:先去看看这个rsync协议是啥样的,客户端为啥发了个这个过去,服务端要一直卡住呢。

现在,我们至少已经知道了问题的范围:应该是这个rsync服务端的反应有点问题,至于是为啥导致他反应这么慢,那就要去网上查了,看看有什么可能的原因。(我没有target服务器的ssh权限,没有想起来去服务端查看)

然后接下来,就是开始在google、百度上各种搜,关键字换来换去,最终查到了一些资料。

首先是rsync的协议,https://blog.csdn.net/hyforthy/article/details/18091869

和我抓的包的内容进行了应证,讲得还是基本准确的。

但是没有找到更多的细节,其实我是想知道官方文档有没有提到这种:什么情况下,收到客户端发的版本协商请求后,会卡住10多s。

但是很遗憾,官方文档也没讲这些。

最终,也就根据现象,调整关键字,找到了一些网上人的踩坑记录,发给同事看看。

网上的文档如下(https://blog.csdn.net/weixin_30488313/article/details/97145611):

然后转手发给了同事,让他跟着这里面去检查。

这边我的意思就是,rsync服务端,收到客户端请求后,是可以拿到客户端的ip的,某些情况下,有些软件,经常会拿着这个ip,去反查一下ip对应的hostname,因此,我就推断是这个原因。

不过当时已经是周五下班时间了,我也没有rsync服务端机器的权限,没办法排查。同事应该是又有其他问题紧急处理了。

我们就都没管了。

今天想起来这个事情,问了下同事,同事说,就是这个问题,一模一样。

解决办法,采用了简单的方式,修改了hosts文件;

  • 或者机器连接的的dns系统能解析到客户端ip也是可以解决这个问题的。
  • 再或者就是,升级rsync服务端,升级后,支持不解析客户端ip。

总结

展示了日常处理问题的一些方法,希望对大家有所帮助。

另外,扯点闲篇,深圳终于疫情好了不少了,上周还是2天出一次小区,一户只能出去一个。

由于我这边是合租,平时大家也没沟通,不知道别人用没用出去的名额,我也就懒得出去了,所以是小区里宅了一周多。再加上之前的两周居家,算起来,居家已经3周多了。。

明天终于可以去公司上班了,不想待家里了,真没多少效率,太考验自制力了。

这两天出了东航的事情,也给我提了个醒,之前看到知乎问题是,有个年轻人去世了,家里老人挨家银行去问,看看有没有儿子的钱存在该银行。

总之很麻烦。

这还是现金存款部分,要是再有个什么基金、港美股、保险、证券账户、虚拟货币等各类资产,怕是家人也不知道,真要有点啥,那个钱,就要是给国家做贡献了(问题是国家也不会去动你的账户。。这就算是dead account了)。

所以,有些钱,是不是可以直接给到家人账号呢?可以想想。

rsync同步文件到远程机器,卡住10多秒--问题解决过程的更多相关文章

  1. rsync同步文件(多台机器同步代码...)

    常用组合   rsync -av --delete-after --exclude-from="a.txt"  x/x -e ssh x:/x/x   a.txt 制定忽略的文件, ...

  2. 使用rsync同步文件

    rsync是Unix/Linux下同步文件的一个高效算法,它能同步更新两处计算机的文件与目录,并适当利用查找文件中的不同块以减少数据传输.关于rsync的核心算法,有兴趣的看下这篇文章. 这里介绍一下 ...

  3. rsync 同步文件重复拷贝问题

    rsync 是同步文件的利器,一般用于多个机器之间的文件同步与备份,同时也支持在本地的不同目录之间互相同步文件.在这种场景下,rsync 远比 cp 命令更加合适,它只会同步需要更新的文件,默认情况下 ...

  4. rsync 同步文件

    rsync 同步文件 rsync -avz roo@192.168.4.12::/home/a ./a  --exclude "data" exclude 去掉/a/data 文件 ...

  5. Windows服务器之间rsync同步文件

    两台windows7机器 server:192.168.12.104 client:192.168.12.103 目的:将server上的E盘的目录FYFR里面的内容定时同步到client上的D盘下F ...

  6. 通过 lsyncd + rsync 同步文件

    通过rsyncd实现将源服务器上的文件同步到目标服务器,通过lsyncd监控源服务器上的文件是否有变动,若有变动调用rsyncd服务对差异的文件进行同步. 0. lsyncd有三种同步文件的方式: ( ...

  7. rsync同步文件

    rsync中的参数 -r 是递归 -l 是链接文件,意思是拷贝链接文件:-p 表示保持文件原有权限:-t 保持文件原有时间:-g 保持文件原有用户组:-o 保持文件原有属主:-D 相当于块设备文件: ...

  8. Git版本控制,rsync同步文件,完成线上部署

    之前项目开发完成,测试阶段,借着此时,由于公司暂时用两台aliyun  ecs  做业务层,所以每次都需要同步线上文件,进而想着搞一搞服务器端(小公司,新项目,先小搞一把),搭建一套小的版本控制上线的 ...

  9. 【Linux】rsync同步文件 & 程序自启动

    rsync使用 1. 为什么使用rsync? rsync解决linux系统下文件同步时, 增量同步问题. 使用场景: 线上需要定时备份数据文件(视频资源), 使用rsync完成每天的增量备份. 参见: ...

随机推荐

  1. 大话devops

    一.敏捷的局限性的促使devops诞生 敏捷的局限性:敏捷只注重开发阶段的敏捷,未涉及到整个产品生命周期流程其他环节导致采用敏捷开发流程后效果不明显. devops成为企业数字化转型的助推器,扮演基础 ...

  2. 基于SSM风格的Java源代码生成器

    一.序言 UCode Cms 是一款Maven版的Java源代码生成器,是快速构建项目的利器.代码生成器模块属于可拆卸模块,即按需引入.代码生成器生成SSM(Spring.SpringBoot.Myb ...

  3. VMware Workstation批量克隆虚拟机

    由于经常要用vmware创建虚拟机做一些测试,集群的测试使用连接克隆,可以节省磁盘的空间(如果不是因为穷,没人愿意向生活低头) 于是找到了这个bat脚本,做了一些修改和学习,为大家加上了一些注释,方便 ...

  4. Mybatis动态开发

    1.单表动态SQL之if 2.单表动态SQL之foreach 3.单表动态SQL之片段抽取 Sql 中可将重复的 sql 提取出来,使⽤时⽤ include 引⽤即可,最终达到 sql 重⽤的⽬的

  5. 你所不知道的 C# 10新特性

    我们很高兴地宣布 C# 10 作为 .NET 6 和 Visual Studio 2022 的一部分已经发布了.在这篇文章中,我们将介绍 C# 10 的许多新功能,这些功能使您的代码更漂亮.更具表现力 ...

  6. k8s核心资源之:名称空间(ns)

    简介 是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或者用户组. 常见的pod.service.replicaSet和deployment等都是属于某一个namespac ...

  7. 【转】k8s集群自定义clusterRole样例

    对pod资源可以删除,进入终端执行命令,其他资源只读权限 apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: an ...

  8. can_has_stdio?

    得到一个用±<>这样符号组成的五角星,结合题目stdio,估计是c语言编译后的文件 查到BrianFuck语言,找个在线编译器或者找到编译码(c++)得到flag 在线编译网站 brain ...

  9. 《Java从入门到精通》学习笔记(详细)

    目录 03 Java语言基础 基本数据类型 变量与常量 运算符 类型转换 代码规范 标识符命名规范 常用输入输出 04 流程控制 条件语句 循环语句 循环控制 练习 05 字符串 创建字符串 连接字符 ...

  10. 洛谷P3267.侦察守卫

    题目大意 一颗 \(n(1\leq n\leq 5\times 10^5)\) 个节点的树,在某一点 \(i\) 花费 \(w_{i}(w_{i}\leq 1000)\) 放置一个侦察守卫后可以监视到 ...