คุณจะซิงโครไนซ์ไฟล์ขนาดใหญ่ (ภาพดิสก์ VM) ระหว่างเครื่องได้อย่างไร


22

มีคำสั่งเช่น rsync ซึ่งสามารถซิงโครไนซ์ไฟล์ขนาดใหญ่กระจัดกระจายจากเซิร์ฟเวอร์ linux หนึ่งไปยังเซิร์ฟเวอร์อื่นได้หรือไม่

มันเป็นสิ่งสำคัญมากที่ไฟล์ปลายทางยังคงกระจัดกระจาย อาจยาวกว่า (แต่ไม่ใหญ่กว่า) กว่าไดรฟ์ที่บรรจุอยู่ ควรส่งเฉพาะบล็อกที่มีการเปลี่ยนแปลงข้ามสาย

ฉันได้ลอง rsync แล้ว แต่ก็ไม่มีความสุข https://groups.google.com/forum/#!topic/mailing.unix.rsync/lPOScZgFE9M

ถ้าฉันเขียนโปรแกรมเพื่อทำสิ่งนี้ฉันจะประดิษฐ์ล้อใหม่อีกครั้งหรือไม่? http://www.finalcog.com/synchronise-block-devices

ขอบคุณ

คริส


rsync ไม่มีประสิทธิภาพอย่างมากกับไฟล์ขนาดใหญ่ ถึงแม้จะมี - แทนที่มันจะอ่านไฟล์ทั้งหมดในโฮสต์เป้าหมายก่อนแล้วจึงเริ่มอ่านไฟล์บนโลคัลโฮสต์และถ่ายโอนความแตกต่าง (เพียงแค่รัน dstat หรือคล้ายกันในขณะที่รัน rsync และสังเกต)
ndemou

คำตอบ:


21
rsync --ignore-existing --sparse ...

เพื่อสร้างไฟล์ใหม่ในโหมดกระจาย

ติดตามโดย

rsync --inplace ...

เพื่ออัปเดตไฟล์ที่มีอยู่ทั้งหมด (รวมถึงไฟล์ที่กระจัดกระจายที่สร้างไว้ก่อนหน้านี้)


3
ย้อนกลับไปยังได้rsync --existing --inplaceและจากนั้นrsync --ignore-existing --sparseจะมีการเพิ่มความเร็วในการซิงค์
ไมค์

2
ทุกคนสามารถอธิบายความคิดเห็นของไมค์และวิธีนี้ควรเร่งการซิงค์ได้อย่างไร
Preexo

ฉันคิดว่าไมค์หมายถึงการเปลี่ยนแปลงในสถานที่แรกแล้วเพิ่มใหม่เพื่อที่จะได้ไม่ต้องถูกแทนที่ - อีกครั้งเนื่องจากความแตกต่างของเวลาระหว่างการโทรครั้งแรกและครั้งที่สอง จะเป็นจริงถ้าคุณ rsync โดยตรงจากที่เก็บข้อมูลและ VM กำลังทำงานอยู่ นอกเสียจากว่าเขาจะหมายถึงอะไรอย่างอื่น?
หยวน

ฉันเห็นด้วยกับหยวน คำสั่งที่สองของ Steves จะซิงค์ไฟล์ใหม่อีกครั้งคุณสามารถปลอดภัยได้โดยใช้ลำดับคำสั่ง Mikes
falstaff

rsync ไม่มีประสิทธิภาพอย่างมากกับไฟล์ขนาดใหญ่ ดูความคิดเห็นของฉันในคำถาม
ndemou

5

Rsync โอนการเปลี่ยนแปลงไปยังแต่ละไฟล์เท่านั้นและด้วย - แทนที่ควรจะเขียนบล็อกที่มีการเปลี่ยนแปลงโดยไม่ต้องสร้างไฟล์ใหม่ ของพวกเขาจากหน้าคุณสมบัติ

rsync เป็นโปรแกรมถ่ายโอนไฟล์สำหรับระบบ Unix rsync ใช้ "อัลกอริทึม rsync" ซึ่งให้วิธีการที่รวดเร็วมากสำหรับการนำไฟล์ระยะไกลมาซิงค์ ทำได้โดยการส่งความแตกต่างในไฟล์ผ่านลิงค์โดยไม่ต้องให้ไฟล์ทั้งสองชุดปรากฏที่ปลายด้านหนึ่งของลิงค์ล่วงหน้า

การใช้ - ตำแหน่งควรทำงานให้คุณ สิ่งนี้จะแสดงความคืบหน้าบีบอัดการถ่ายโอน (ที่ระดับการบีบอัดเริ่มต้น) ถ่ายโอนเนื้อหาของไดเร็กทอรีหน่วยเก็บข้อมูลโลคัลซ้ำ (เรื่องสแลชต่อท้ายแรก) ทำการเปลี่ยนแปลงไฟล์ในตำแหน่งและใช้ ssh สำหรับการขนส่ง

rsync -v -z -r --inplace --progress -e ssh /path/to/local/storage/ \
user@remote.machine:/path/to/remote/storage/ 

ฉันมักจะใช้แฟล็ก -a ด้วยซึ่งทำสิ่งอื่น ๆ อีกเล็กน้อย มันเทียบเท่ากับ -rlptgoD ฉันจะปล่อยให้พฤติกรรมที่แน่นอนสำหรับคุณที่จะค้นหาในหน้าคน


1
'-S' ใช้สำหรับไฟล์ที่กระจัดกระจายไม่ใช่ 'chops long lines' จากหน้า man: -S, - sparse จัดการไฟล์ sparse อย่างมีประสิทธิภาพ ฉันจะลองดูนะขอบคุณ
fadedbee

ขอบคุณฉันคงที่ - ฉันกำลังจะออกจากสิ่งที่กล่าวไว้ในลิงก์ที่คุณให้
reconbot

ไม่น่าเสียดายที่นี่ไม่ได้แก้ปัญหา มันจะซิงค์ไฟล์ แต่เปลี่ยนไฟล์ sparse ที่ปลายสุดไปเป็นไฟล์ที่ไม่กระจาย ฉันใช้ ssh / rsync ซึ่งมาพร้อมกับ Ubuntu 9.04
fadedbee

ความคิดเห็นด้านบนของฉันไม่ถูกต้อง ปัญหาคือ rsync สร้างไฟล์ที่ไม่กระจายในสำเนาแรก --inplace rsync ทำงานอย่างถูกต้องโดยมีไฟล์ปลายทางอยู่แล้วและยาว (ไม่ใหญ่) เท่ากับไฟล์ต้นทาง ตอนนี้ฉันมีวิธีแก้ไข แต่ฉันต้องตรวจสอบว่าแต่ละไฟล์มีอยู่แล้วบนเซิร์ฟเวอร์เป้าหมาย ถ้าเป็นเช่นนั้นฉันทำ - แทนที่ถ้าไม่มีฉันใช้ - เบาบาง มันไม่เหมาะ แต่ใช้งานได้
fadedbee

rsync ไม่มีประสิทธิภาพอย่างมากกับไฟล์ขนาดใหญ่ ดูความคิดเห็นของฉันในคำถาม
ndemou

4

ฉันสิ้นสุดการเขียนซอฟต์แวร์เพื่อทำสิ่งนี้:

http://www.virtsync.com

นี่คือซอฟต์แวร์เชิงพาณิชย์ที่คิดต้นทุน $ 49 ต่อเซิร์ฟเวอร์จริง

ตอนนี้ฉันสามารถจำลองไฟล์กระจัดกระจาย 50GB (ซึ่งมีเนื้อหา 3GB) ในเวลาไม่เกิน 3 นาทีสำหรับบรอดแบนด์ที่อยู่อาศัย

chris@server:~$ time virtsync -v /var/lib/libvirt/images/vsws.img backup.barricane.com:/home/chris/
syncing /var/lib/libvirt/images/vsws.img to backup.barricane.com:/home/chris/vsws.img (dot = 1 GiB)
[........>.........................................]
done - 53687091200 bytes compared, 4096 bytes transferred.

real    2m47.201s
user    0m48.821s
sys     0m43.915s 

4
TBH ช่วงเวลาที่ระบุที่คุณสามารถซิงค์ค่อนข้างไม่มีความหมายเพราะเห็นได้ชัดว่าขึ้นอยู่กับปริมาณข้อมูลที่เปลี่ยนแปลง สิ่งที่จะแม่นยำมากกว่านี้คือการใช้เวลา 3 นาทีเพื่อหาว่าบล็อกใดมีการเปลี่ยนแปลงและแม้ความเร็วนั้นอาจขึ้นอยู่กับดิสก์ i / o ของคุณและอาจมีรอบ CPU ที่ใช้งานได้
ความเป็นจริง

6
คุณควรเปิดเผยว่านี่เป็นซอฟต์แวร์เชิงพาณิชย์ที่มีราคา 98 ดอลลาร์หรือมากกว่าสำหรับการใช้งานเครือข่าย
Reid

ขอขอบคุณที่ชี้ให้เราทราบถึงซอฟต์แวร์ที่ทำงานได้ดีสำหรับคุณซึ่งผู้คนสามารถพิจารณาและใช้งานได้หรือไม่ใช้ตามที่พวกเขาต้องการ ไม่ขอบคุณสำหรับอีกสองคนที่ให้ความช่วยเหลือไม่มีอะไรใหม่
Florian Heigl

3

ดูที่Zumastor Linux Storage Projectซึ่งใช้การสำรองข้อมูล "snapshot" โดยใช้ไบนารี "rsync" ผ่านddsnapเครื่องมือ

จากหน้าคน:

ddsnap จัดเตรียมการจำลองแบบอุปกรณ์บล็อกเนื่องจากเครื่องมืออำนวยความสะดวกสแนปชอตระดับบล็อกสามารถเก็บสแน็ปช็อตหลาย ๆ ตัวพร้อมกันได้อย่างมีประสิทธิภาพ ddsnap สามารถสร้างรายการของสแน็ปช็อตชิ้นที่แตกต่างระหว่างสองสแนปชอตจากนั้นส่งความแตกต่างนั้นผ่านสาย บนเซิร์ฟเวอร์ดาวน์สตรีมเขียนข้อมูลที่อัพเดตไปยังอุปกรณ์บล็อกสแน็ปช็อต


2

lvmsyncทำสิ่งนี้

นี่คือหลักฐานการใช้งาน มันสร้างสแน็ปช็อต LVM บนซอร์สโอนโลจิคัลพาร์ติชัน คุณสามารถโอนอัปเดตที่เพิ่มขึ้นของการเปลี่ยนแปลงนับตั้งแต่การสร้างสแน็ปช็อตบ่อยเท่าที่คุณต้องการ


ฉันได้ลองแล้ว แต่มันใช้งานไม่ได้และผู้เขียนไม่เต็มใจที่จะสนับสนุน
user1007727

1
@ user1007727 ไม่เต็มใจที่จะสนับสนุนหรือไม่เต็มใจที่จะสนับสนุนได้ฟรีหรือไม่
fadedbee

ฉันเคยใช้ lvmsync ในอดีตมันใช้งานได้ แต่ไม่ใช่ซอฟต์แวร์ imo เกรด "prod" :-)
Florian Heigl

1

การจำลองระบบไฟล์ทั้งหมดเป็นวิธีแก้ปัญหาหรือไม่ DRBD? http://www.drbd.org/


ฉันไม่คิดว่า drbd เป็นวิธีแก้ปัญหาที่ดีที่นี่ แต่แนวคิดของ rsyncing - แทนที่ fs ทั้งหมดแทนที่จะเป็นไฟล์ดิสก์อิมเมจ - ไฟล์น่าสนใจ ผมไม่แน่ใจว่าจะช่วยให้ rsync นี้ - ฉันจะให้มันลองและรายงานกลับ ...
fadedbee

1

อาจจะแปลกสักหน่อยที่นี่ แต่ฉันพบเมื่อเร็ว ๆ นี้ว่า NFS จัดการเรื่องนี้ได้ดี

ดังนั้นคุณส่งออกไดเรกทอรีบนเครื่องเดียวแล้วติดมันที่อื่น ๆ และคุณเพียงแค่คัดลอกไฟล์ที่มี utils cpพื้นฐานเช่น (ยูทิลิตี้เก่า / โบราณบางอย่างอาจมีปัญหากับไฟล์ที่กระจัดกระจาย)

ฉันพบว่าrsyncไม่มีประสิทธิภาพโดยเฉพาะในการถ่ายโอนไฟล์กระจัดกระจาย


1

ในการซิงค์ไฟล์ขนาดใหญ่หรืออุปกรณ์บล็อกที่มีความแตกต่างต่ำถึงปานกลางคุณสามารถทำสำเนาธรรมดาหรือใช้bdsyncได้ rsync ไม่เหมาะสำหรับกรณีนี้ *

bdsyncทำงานให้ฉันดูเหมือนเป็นผู้ใหญ่มากพอมันมีประวัติของข้อผิดพลาดเป็นกำลังใจ (ปัญหาเล็ก ๆ น้อย ๆ การแก้ไขที่รวดเร็ว) ในการทดสอบของฉันความเร็วนั้นใกล้เคียงกับค่าสูงสุดทางทฤษฎีที่คุณจะได้รับ ** (นั่นคือคุณสามารถซิงค์ในเวลาที่คุณต้องอ่านไฟล์) ในที่สุดมันก็โอเพนซอร์สและไม่มีค่าใช้จ่าย

bdsyncอ่านไฟล์จากทั้งโฮสต์และแลกเปลี่ยนผลรวมตรวจสอบเพื่อเปรียบเทียบและตรวจสอบความแตกต่าง ทั้งหมดเหล่านี้ได้ในเวลาเดียวกัน ในที่สุดมันก็จะสร้างไฟล์แพ็ตช์ที่ถูกบีบอัดบนโฮสต์ต้นทาง จากนั้นคุณย้ายไฟล์นั้นไปยังโฮสต์ปลายทางและรัน bdsync เป็นครั้งที่สองเพื่อแก้ไขไฟล์ปลายทาง

เมื่อใช้งานผ่านลิงก์ที่ค่อนข้างเร็ว (เช่น 100Mbit ethernet) และสำหรับไฟล์ที่มีความแตกต่างเล็ก ๆ (เช่นในกรณีของดิสก์ VM) จะช่วยลดเวลาในการซิงค์กับเวลาที่คุณต้องอ่านไฟล์ ผ่านลิงค์ช้าคุณต้องใช้เวลาอีกเล็กน้อยเพราะคุณต้องคัดลอกการเปลี่ยนแปลงที่ถูกบีบอัดจากโฮสต์หนึ่งไปยังอีกโฮสต์หนึ่ง (ดูเหมือนว่าคุณสามารถประหยัดเวลาได้โดยใช้กลอุบายที่ดีแต่ยังไม่ได้ทดสอบ)


*: rsync ไม่มีประสิทธิภาพอย่างมากกับไฟล์ขนาดใหญ่ แม้จะมี - แทนที่มันจะอ่านไฟล์ทั้งหมดในโฮสต์ปลายทางก่อนหลังจากเริ่มอ่านไฟล์บนโฮสต์ต้นทางและในที่สุดก็ถ่ายโอนความแตกต่าง (เพียงแค่เรียกใช้ dstat หรือคล้ายกันในขณะที่ใช้ rsync และสังเกต) ผลลัพธ์คือแม้สำหรับไฟล์ที่มีความแตกต่างเล็ก ๆ ก็ต้องใช้เวลาสองเท่าในการอ่านไฟล์เพื่อซิงค์

**: ภายใต้สมมติฐานว่าคุณไม่มีวิธีอื่นในการบอกว่าส่วนใดของไฟล์ที่มีการเปลี่ยนแปลง LVM snapshots ใช้บิตแมปเพื่อบันทึกบล็อกที่มีการเปลี่ยนแปลงเพื่อให้สามารถทำงานได้เร็วขึ้นมาก (readme ของlvmsyncมีข้อมูลเพิ่มเติม)


0

ฉันไม่ได้ตระหนักถึงยูทิลิตี้ดังกล่าวเพียงแค่การเรียกของระบบที่สามารถจัดการได้ดังนั้นหากคุณเขียนโปรแกรมอรรถประโยชน์ดังกล่าวมันอาจจะมีประโยชน์มากกว่า

สิ่งที่คุณทำได้จริง ๆ คือใช้ qemu-img แปลงเพื่อคัดลอกไฟล์ แต่มันจะใช้ได้เฉพาะถ้า FS ปลายทางสนับสนุนไฟล์ที่กระจัดกระจาย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.