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了)。

所以,有些錢,是不是可以直接給到家人賬號呢?可以想想。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章