背景

以前大体介绍过,我们这边是做运维平台的。如果要形象化理解,那么,比如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. 利用LNMP实现wordpress站点搭建

    一.部署MySQL 1.1 二进制安装mysql5.6 # 准备用户,依赖包,二进制程序 [root@nginx ~]# yum install -y libaio perl-Data-Dumper ...

  2. MacOS常用命令行工具

    转自:https://blog.csdn.net/u014102846/article/details/77964493 https://ohmyz.sh/ https://github.com/ro ...

  3. 3、网络并发编程--udp代码、操作系统发展史、多道技术、进程理论

    昨日内容回顾 socket基本使用 # 内置的模块 import socket s = socket.socket() # 默认是TCP协议 也可以切换为UDP协议 s.bind((ip,port)) ...

  4. 7、Linux基础--权限、查看用户信息

    笔记 1.晨考 1.Linux系统中的文件"身份证号"是什么 index node 号码 2.什么是硬链接,什么是软连接 硬链接是文件的入口,软连接是快捷方式. 3.硬链接中保存的 ...

  5. 前端表单标签form 及 简单应用

    今日内容 form 表单(重点) 后端框架之 flask 简介 内容详细 form 表单 1.作用 form 表单可以在前端获取用户输入的数据并发送给后端(服务端) 2.input 标签 获取用户数据 ...

  6. Dapp开发petshop——truffle官方例程

    truffle-pet-shop pet-shop是truffle的官方例程. 之前参考https://learnblockchain.cn/2018/01/12/first-dapp/的中文教程,但 ...

  7. CentOS8系统上Zookeeper安装启动

    下载Zookeeper安装包,下载地址为:https://zookeeper.apache.org/releases.html.注意选择bin的gz包,否则安装不成功,提示找不到相应的类. 一.单机模 ...

  8. 【FAQ】接入HMS Core应用内支付服务过程中一些常见问题总结

    HMS Core应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程.开发者的应用集成IAP SDK后,调用IAP SDK接口,启动IAP收银台,即 ...

  9. systemd配置文件填写了ExecStop=/usr/bin/kill -9 $MAINPID之后重启在messages发生了报错

    原因在于systemd模块需要增加自动化检测,检测有一项为检测messages日志内是否有systemd的failed 写了一个检测脚本,脚本的检测messages内容为/bin/cat /var/l ...

  10. linux光盘使用、rpm软件包、yum软件仓库安装使用

    转至:https://blog.51cto.com/zpeng/1532520 一.光盘文件使用 1,RHEL5(x86_64)光盘结构 Cluster              //集群二进制包 C ...