rsync同步文件到远程机器,卡住10多秒--问题解决过程
背景
以前大体介绍过,我们这边是做运维平台的。如果要形象化理解,那么,比如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多秒--问题解决过程的更多相关文章
- rsync同步文件(多台机器同步代码...)
常用组合 rsync -av --delete-after --exclude-from="a.txt" x/x -e ssh x:/x/x a.txt 制定忽略的文件, ...
- 使用rsync同步文件
rsync是Unix/Linux下同步文件的一个高效算法,它能同步更新两处计算机的文件与目录,并适当利用查找文件中的不同块以减少数据传输.关于rsync的核心算法,有兴趣的看下这篇文章. 这里介绍一下 ...
- rsync 同步文件重复拷贝问题
rsync 是同步文件的利器,一般用于多个机器之间的文件同步与备份,同时也支持在本地的不同目录之间互相同步文件.在这种场景下,rsync 远比 cp 命令更加合适,它只会同步需要更新的文件,默认情况下 ...
- rsync 同步文件
rsync 同步文件 rsync -avz roo@192.168.4.12::/home/a ./a --exclude "data" exclude 去掉/a/data 文件 ...
- Windows服务器之间rsync同步文件
两台windows7机器 server:192.168.12.104 client:192.168.12.103 目的:将server上的E盘的目录FYFR里面的内容定时同步到client上的D盘下F ...
- 通过 lsyncd + rsync 同步文件
通过rsyncd实现将源服务器上的文件同步到目标服务器,通过lsyncd监控源服务器上的文件是否有变动,若有变动调用rsyncd服务对差异的文件进行同步. 0. lsyncd有三种同步文件的方式: ( ...
- rsync同步文件
rsync中的参数 -r 是递归 -l 是链接文件,意思是拷贝链接文件:-p 表示保持文件原有权限:-t 保持文件原有时间:-g 保持文件原有用户组:-o 保持文件原有属主:-D 相当于块设备文件: ...
- Git版本控制,rsync同步文件,完成线上部署
之前项目开发完成,测试阶段,借着此时,由于公司暂时用两台aliyun ecs 做业务层,所以每次都需要同步线上文件,进而想着搞一搞服务器端(小公司,新项目,先小搞一把),搭建一套小的版本控制上线的 ...
- 【Linux】rsync同步文件 & 程序自启动
rsync使用 1. 为什么使用rsync? rsync解决linux系统下文件同步时, 增量同步问题. 使用场景: 线上需要定时备份数据文件(视频资源), 使用rsync完成每天的增量备份. 参见: ...
随机推荐
- JS IndexOf移除符合规则的一项
RemoveItem: function (val) { var index = selectedUsers.indexOf(val); if (index > -1) { selectedUs ...
- Git配置多个github账号免密登录
在公司开发中,有时候会存在公司账户跟私人账户共存,并随时需要切换的情况,这种情况下git可以配置多个ssh-key,无缝切换账号. 假如有两个github账号,一个是私人github账号,一个是公司g ...
- vue 定义全局函数和变量
背景 最近我在整一个网站,介绍一些有意思的网站和实用工具的网站并且把他们收集起来,网站刚建有些不成熟希望给点意见 我用的是前端框架的vue, 但是我没有打包,直接甩到服务器上了, 不想扯了, 步骤 1 ...
- 帆软报表(finereport)控件背景色更改
setTimeout(function() { $('.fr-trigger-btn-up').css({ "background-color": "#003399&qu ...
- SQLServer、Mysql、Oracle 创建、删除用户和授予用户权限
SQLServer 1.创建用户 CREATE LOGIN [用户名称] WITH PASSWORD='用户密码', DEFAULT_DATABASE=[默认数据库名称], CHECK_EXPIRAT ...
- MySQL高性能学习笔记
索引 何为索引?有什么作用? 索引是一种用于快速查询和检索数据的数据结构.常见的索引结构有: B 树, B+树和 Hash. 索引的作用就相当于目录的作用.打个比方: 我们在查字典的时候,如果没有目录 ...
- 《PHP程序员面试笔试宝典》——如何回答算法设计问题?
如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 程序员面试中的很多算法设计问题,都是历年来各家企业的"炒现饭",不管求职者以前对算法知识掌握得是否扎 ...
- Solution -「HDU 5498」Tree
\(\mathcal{Description}\) link. 给定一个 \(n\) 个结点 \(m\) 条边的无向图,\(q\) 次操作每次随机选出一条边.问 \(q\) 条边去重后构成生成 ...
- Solution -「洛谷 P6021」洪水
\(\mathcal{Description}\) Link. 给定一棵 \(n\) 个点的带点权树,删除 \(u\) 点的代价是该点点权 \(a_u\).\(m\) 次操作: 修改单点点权. ...
- 人工智能进度好慢,呜呜呜 还是先来学python!!!!!!!二十三讲、二十四讲!
0:十转2 def my_bin(x): a ='' if x : a = my_bin(x//2) return a+str(x%2) else: a+='0b' return a print(my ...