rsync同步檔案到遠端機器,卡住10多秒--問題解決過程

三國夢迴發表於2022-03-23

背景

以前大體介紹過,我們這邊是做運維平臺的。如果要形象化理解,那麼,比如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了)。

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

相關文章