久久久久无码精品,亚洲国产精品国语在线,国产成人精品热玖玖玖,国产福利一区二区在线观看

驚!Rsync 文件同步竟遭遇失?。渴职咽纸棠闩挪?,告別同步煩惱!

2024-11-08 14:11:38 Jinyu

問題

rsync客戶端:拋錯異常退出

發(fā)布失敗截圖如下:

圖片

看報錯信息應該是 rsync 同步文件失敗,并非 salt 問題,為確認這點,我們登錄 salt-master,手工執(zhí)行 rsync 命令,確實無返回,排除 salt 及 salt-api 問題。
登錄同步異常服務器,手工執(zhí)行 rsync 同步命令,可以復現(xiàn):








# rsync -avz --delete --exclude='.git' --exclude='.svn' rsync://<rsync_srv>:<rsync_port>/path/to/folder /tmp/rsync-testreceiving incremental file list...rsync: read error: Connection reset by peer (104)rsync error: error in rsync protocol data stream (code 12) at io.c(759) [receiver=3.0.6]rsync: connection unexpectedly closed (99 bytes received so far) [generator]rsync error: error in rsync protocol data stream (code 12) at io.c(600) [generator=3.0.6]

rsync客戶端:進程僵死

周四反饋發(fā)布失敗的同學情況又不一樣了,發(fā)布并未拋明顯異常,但是進度條卡住一直無返回,查詢 salt-master 日志后,rsync 命令成功下發(fā),但確實無結果返回,懷疑服務器執(zhí)行 rsync 命令失敗,進程僵死,手工上服務器執(zhí)行了把,確實如此,只有當手工終止 rsync 命令后(ctrl+c),才拋異常信息:










# rsync -avzP --delete--exclude='.git' --exclude='.svn' rsync://<rsync_srv>:<rsync_port>/path/to/folder /tmp/rsync-testPassword: receiving incremental file list./<rsync-test-pkg>-SNAPSHOT.jar^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(551) [generator=3.0.9]
rsync error: received SIGUSR1 (code 19) at main.c(1298) [receiver=3.0.9]

執(zhí)行第二,甚至第三次時,才成功:










# rsync -avzP --delete--exclude='.git' --exclude='.svn' rsync://<rsync_srv>:<rsync_port>/path/to/folder /tmp/rsync-testPassword: receiving incremental file list./<rsync-test-pkg>-SNAPSHOT.jar60606801 100% 16.13MB/s0:00:03 (xfer#1, to-check=0/3)
sent 21035 bytesreceived 43167123 bytes5758421.07 bytes/sectotal size is 60607326speedup is 1.40

網(wǎng)上搜了下,發(fā)現(xiàn)已經(jīng)有人發(fā)現(xiàn) rsync 類似問題了,引用其博客:

盡管您可能已經(jīng)在rsyncd服務的后端進程中設置了--timeout選項(即在rsyncd.conf配置中),然而,在某些情況下(under the circumstances),這個選項可能根本不起作用,一些極不穩(wěn)定的網(wǎng)絡導致大量TCP超時連接,進而導致 rsync 進程失敗,雖然斷裂的 TCP 連線已經(jīng)消失,但 rsync 應用進程卻可能因為種種原因(如因等候I/O中斷而處于不可中斷狀態(tài)),而遺留在系統(tǒng)之中,并最終變成為僵尸進程(zombie process)。

按照其手冊頁的解釋,rsync 命令本身的 timeout 預設為0,也就是沒有逾時設置,因此運行中的 rsync 進程將會永久地等待遠端的反應。在rsyncd服務后端進程的 rsyncd.conf中設置timeout選項,同時在rsync客戶端命令行中使用timeout選項,實踐證明是可杜絕此問題的。

于是在服務器上添加 --timeout 參數(shù),再次執(zhí)行后確實能夠異常退出了:

# rsync -avzP --timeout=60 --delete--exclude='.git' --exclude='.svn' rsync://<rsync_srv>:<rsync_port>/path/to/folder /tmp/rsync-testPassword: receiving incremental file list./<rsync-test-pkg>-SNAPSHOT.jar2011425333% 19.18MB/s0:00:02[receiver] io timeout after 60 seconds -- exitingrsync error: timeout in data send/receive (code 30) at io.c(140) [receiver=3.0.9]rsync: connection unexpectedly closed (115 bytes received so far) [generator]rsync error: error in rsync protocol data stream (code 12) at io.c(605) [generator=3.0.9]

rsync服務端:異常日志

懷疑過是不是rsync服務端問題,重啟過服務端rsync服務,問題依然存在;換過rsync服務端,問題依然存在,由此可以排除服務端問題。
但無論客戶端拋哪種問題,服務端均能捕捉到,并輸出相應日志:







2018/10/26 14:40:30 [4228] name lookup failed for <rsync-client>: Name or service not known2018/10/26 14:40:30 [4228] connect from UNKNOWN (<rsync-client>)2018/10/26 14:40:30 [4228] rsync on path/to/folder from UNKNOWN (<rsync-client>)2018/10/26 14:40:30 [4228] building file list2018/10/26 14:40:35 [4228] rsync: writefd_unbuffered failed to write 4 bytes to socket [sender]: Connection timed out (110)2018/10/26 14:40:35 [4228] rsync error: error in rsync protocol data stream (code 12) at io.c(1525) [sender=3.0.6]

rsync客戶端:strace排查

通過 strace 來跟蹤 rsync 進程執(zhí)行時的系統(tǒng)調用和所接收的信號,但未發(fā)現(xiàn)系統(tǒng)級明顯異常:

lstat("<rsync-test-pkg>-SNAPSHOT.jar", 0x7fff7d6e0000) = -1 ENOENT (No such file or directory)select(5, [4], [3], [3], {30, 0}) = 2 (in [4], out [3], left {29, 999998})select(5, [4], [], NULL, {30, 0}) = 1 (in [4], left {29, 999999})read(4, "


东明县|
陕西省|
息烽县|
奉贤区|
安顺市|
连山|
临沧市|
黔东|
永川市|
成武县|
双柏县|
邮箱|
眉山市|
木兰县|
常州市|
泸定县|
洮南市|
安宁市|
伊金霍洛旗|
湖北省|
牡丹江市|
云浮市|
德格县|
吉林市|
左云县|
敦煌市|
灵台县|
鹤庆县|
荥阳市|
海淀区|
天等县|
澳门|
新密市|
五家渠市|
葫芦岛市|
石门县|
阿拉善右旗|
乌鲁木齐县|
合江县|
平乐县|
怀集县|