จะใช้ S3 เพื่อสำรองไฟล์อย่างมีประสิทธิภาพได้อย่างไร


42

ฉันเข้าใจว่า rsync ทำงานอย่างไรในระดับสูง แต่มี 2 ด้าน ด้วย S3 ไม่มีดีมอนที่จะพูดถึง - มี แต่โดยทั่วไปแล้วก็เป็นเพียง HTTP

มีวิธีการเล็กน้อย

s3rsync (แต่สิ่งนี้จะทำให้ rsync เป็น s3) ซื่อตรง ไม่แน่ใจว่าฉันต้องการพึ่งพาอะไรบางอย่างจากบุคคลที่สาม ฉันหวังว่า s3 เพิ่งรองรับ rsync

นอกจากนี้ยังมี 'โคลนนิ่ง' rsync บางส่วนที่เหมือนกันซึ่งซ้ำซ้อนที่อ้างว่าสนับสนุน s3 โดยไม่ต้องโบลต์ แต่จะทำเช่นนี้ได้อย่างไร พวกเขาเก็บไฟล์ดัชนีไว้ในเครื่องหรือไม่? ฉันไม่แน่ใจว่าจะมีประสิทธิภาพได้อย่างไร

เห็นได้ชัดว่าฉันต้องการใช้ s3 เพราะมันราคาถูกและเชื่อถือได้ แต่มีหลายสิ่งที่ rsync เป็นเครื่องมือสำหรับเช่นสำรองข้อมูลไดเรกทอรีภาพขนาดใหญ่

ตัวเลือกที่นี่มีอะไรบ้าง ฉันจะเสียอะไรโดยใช้ความซ้ำซ้อน + s3 แทน rsync + s3rsync + s3


4
S3 ราคาถูก? นั่นเป็นข่าวสำหรับฉัน ที่เชื่อถือได้? แน่นอน แต่ไม่ถูก
— EEAA

5
ทีนี้ s3 คือ $ 0.13 / gb หรือน้อยกว่าเมื่อคุณเก็บมากกว่าหรือต้องการความซ้ำซ้อนน้อยลง การค้นหาอย่างรวดเร็วเปิดเผยevbackup.comสำหรับพื้นที่เก็บข้อมูล rsync แพงกว่ามาก มีอะไรที่ถูกกว่าและมีความซ้ำซ้อนบางระดับ
— Jaimie Sirovich

ถ้าฉันจะออกแบบ rsync มันจะสนับสนุนปลั๊กอินเพื่อให้สามารถเพิ่มโปรโตคอลใหม่ (เช่น s3: //) อย่างไรก็ตามในปัจจุบัน rsync ไม่รองรับสิ่งนี้ดังนั้นฉันไม่เชื่อว่า rsync สามารถนำไปใช้โดยตรงในการสำรองข้อมูล S3
— Edward Falk

ปัญหาต่อไปคือฉันไม่คิดว่า S3 เก็บข้อมูลเมตาเช่นความเป็นเจ้าของหรือสิทธิ์ดังนั้นการใช้เช่น "aws s3 sync" เพื่อทำการสำรองข้อมูลจะทำงานได้ แต่อาจไม่เหมาะสำหรับการสำรองข้อมูลเต็มรูปแบบของระบบไฟล์ Unix เนื่องจาก ข้อมูลมากเกินไปจะหายไปเมื่อคืนค่า ฉันยังคิดว่า symlink, hardlinks และไฟล์พิเศษอื่น ๆ จะหายไป
— Edward Falk

คำตอบ:


39

เนื่องจากคำถามนี้ได้รับการตอบที่ผ่านมามีเป็นเครื่องมือบรรทัด AWS awsคำสั่งใหม่

มันสามารถซิงค์ , เหมือน rsync, ระหว่างที่จัดเก็บในตัวเครื่องและ s3 ตัวอย่างการใช้งาน:

aws s3 sync s3://mybucket /some/local/dir/

หากตั้งค่าสภาพแวดล้อมแบบหลามของระบบของคุณอย่างถูกต้องคุณสามารถติดตั้งไคลเอ็นต์ AWS โดยใช้pip:

pip install awscli

1
จากประสบการณ์ของฉันการอัปโหลดทุกอย่างไม่ใช่แค่การเปลี่ยนแปลงเพียงเล็กน้อย ตัวอย่างเช่นฉันผลักไซต์คงที่ไปยังเซิร์ฟเวอร์ dev ด้วยrsyncและใช้เวลาเฉลี่ย 1 วินาทีโดยมีเพียงการเปลี่ยนแปลงที่เกิดขึ้นผ่านการเชื่อมต่อที่ช้าของฉัน aws s3 syncในทางกลับกันใช้เวลาประมาณ 5 นาทีโอนไฟล์แต่ละไฟล์ซ้ำ
— ryebread

2
ฉันเชื่อว่าคุณใช้งานไม่ได้ แต่เอกสารบอกว่า "ไฟล์ในเครื่องจะต้องมีการอัปโหลดหากขนาดของไฟล์ภายในเครื่องแตกต่างจากขนาดของวัตถุ s3 เวลาที่แก้ไขล่าสุดของไฟล์ในเครื่องนั้นใหม่กว่า เวลาแก้ไขล่าสุดของวัตถุ s3 หรือไฟล์โลคัลไม่มีอยู่ภายใต้ที่ฝากข้อมูลและคำนำหน้าที่ระบุ " ตรวจสอบให้แน่ใจว่าคุณมี aws-cli เวอร์ชันล่าสุดหากคุณสามารถทำซ้ำได้ พวกเขาตอบสนองเมื่อฉันยื่นข้อผิดพลาดในขณะที่ผ่านมา
— Dan Pritts

คำสั่งควรเป็น: aws s3 sync / some / local / dir / s3: // mybucket
— Carlo S

1
คาร์ลอสฉันไม่แน่ใจว่าประเด็นของคุณคืออะไร หากคุณต้องการแนะนำว่าคำสั่งตัวอย่างของฉันผิดเราก็ถูกต้อง การซิงค์ s3 สามารถทำงานในทิศทางใดทิศทางหนึ่ง
— Dan Pritts

มาปาร์ตี้ช้า แต่นี่คือสิ่งที่เกิดขึ้น: เมื่ออัปโหลดไปยัง S3 กฎการตรวจสอบด่วนจะมีผล (อัปโหลดหากขนาดหรือวันที่มีการเปลี่ยนแปลง) เมื่อทำการดาวน์โหลดไม่มีกฎการตรวจสอบอย่างรวดเร็วและทุกสิ่งจะถูกดาวน์โหลดอย่างไม่มีเงื่อนไข
— Edward Falk

16

เครื่องมือ s3cmdมีดีsyncตัวเลือก ฉันใช้เพื่อซิงค์ข้อมูลสำรองในเครื่องโดยใช้สิ่งที่ชอบ:

s3cmd sync --skip-existing $BACKUPDIR/weekly/ s3://MYBACKUP/backup/mysql/

--skip-existingหมายความว่าจะไม่พยายามที่จะการตรวจสอบเปรียบเทียบไฟล์ที่มีอยู่ หากมีไฟล์ที่มีชื่อนั้นอยู่แล้วไฟล์จะข้ามไปอย่างรวดเร็ว นอกจากนี้ยังมี--delete-removedตัวเลือกที่จะลบไฟล์ที่ไม่มีอยู่ในเครื่อง แต่ฉันต้องการเก็บไว้ใน S3 แม้แต่ไฟล์ที่ฉันล้างข้อมูลในเครื่องดังนั้นฉันจึงไม่ใช้สิ่งนี้


5

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

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

ฉันมี cron ที่ทำงานเต็มทุก ๆ x เดือนมิฉะนั้นส่วนเพิ่มและลบที่เก่ากว่า x เดือนเพื่อเก็บ s3 ทั้งหมดลงในที่สุดสถานะการรวบรวมจึงได้รับสถานะทางไปรษณีย์ทุกเช้า คุณต้องจับตาดูมันเป็นประจำเพื่อให้คุณสังเกตเห็นเมื่อการสำรองข้อมูลของคุณไม่ทำงาน

มันต้องการพื้นที่ชั่วคราวในพื้นที่ที่สำคัญในการรักษาลายเซ็นของท้องถิ่นเพื่อให้การตั้งค่า temp dir อย่างระมัดระวัง การสำรองข้อมูลนี้ / mnt ไม่รวม dirs ต่างๆภายใน / mnt สิ่งนี้เป็นสิ่งที่ดีสำหรับการสำรองข้อมูลสำหรับพาร์ติชันระบบใช้เครื่องมือสร้างภาพ amazon หรือสแน็ปช็อต

สคริปต์ PHP:

# Duplicity Backups

$exclude  = "--exclude /mnt/ephemeral ".
            "--exclude /mnt/logs ".
            "--exclude /mnt/service ".
            "--exclude /mnt/mail ".
            "--exclude /mnt/mysql ";

$key = "PASSPHRASE=securegpgpassphrase";

$tmp = "/mnt/mytempdir";

system("mkdir -p $tmp");

# Amazon

$aws = "AWS_ACCESS_KEY_ID=xxxxxx ".
       "AWS_SECRET_ACCESS_KEY=xxxxxx ";

$ops = "-v5 --tempdir=$tmp --archive-dir=$tmp --allow-source-mismatch --s3-european-buckets --s3-use-new-style --s3-use-rrs";
$target = " s3://s3-eu-west-1.amazonaws.com/mybucket";

# Clean + Backup

system("$key $aws /usr/bin/duplicity $ops --full-if-older-than 2M $exclude /mnt $target");
system("$key $aws /usr/bin/duplicity $ops remove-older-than 6M --force $target");
system("$key $aws /usr/bin/duplicity $ops cleanup --force --extra-clean $target");
system("$key $aws /usr/bin/duplicity $ops collection-status $target")

1
เปิดการกำหนดเวอร์ชันสำหรับที่เก็บข้อมูล s3 จากนั้นจะเก็บสำเนาเก่าไว้
— mcmillab

3

S3 เป็นระบบจัดเก็บวัตถุวัตถุประสงค์ทั่วไปที่ให้ความยืดหยุ่นเพียงพอสำหรับคุณในการออกแบบวิธีการใช้งาน

ฉันไม่แน่ใจว่าคำถามของคุณเกี่ยวกับ rsync (นอกเหนือจากการจัดทำดัชนี) หรือปัญหาเกี่ยวกับเครื่องมือ 'บุคคลที่สาม' ที่คุณพบ

หากคุณมีไฟล์จำนวนมากที่มีโครงสร้างที่ดีคุณสามารถเรียกใช้การซิงค์ s3 หลายรายการในโฟลเดอร์ย่อยของคุณ

กลุ่มคนที่น่ารักที่ Amazon ยังอนุญาตให้คุณนำเข้า / ส่งออกจากฮาร์ดไดรฟ์แบบพกพาสำหรับการถ่ายโอนไฟล์ขนาดใหญ่ไปยัง S3 หรือ EBS - http://aws.amazon.com/importexport/ซึ่งคุณสามารถใช้สำหรับการอัพโหลดครั้งแรก

ดูแนวทางปฏิบัติที่ดีที่สุดของ Amazon s3 ได้ที่นี่ - http://aws.amazon.com/articles/1904

เท่าที่เครื่องมือที่แตกต่างลองพวกเขาและดูสิ่งที่ดีที่สุดสำหรับคุณ เกี่ยวกับการกำหนดราคามีการลดราคาซ้ำซ้อนหากเหมาะสมกับความต้องการของคุณ - http://aws.amazon.com/s3/pricing/

คำแนะนำทั่วไป - มี CPU แบบมัลติคอร์ที่รวดเร็วและเครือข่ายที่ดี

ปรับปรุง: พูดถึงเกี่ยวกับการตรวจสอบใน S3

เกี่ยวกับ S3 เก็บข้อมูลในคู่ค่าคีย์และไม่มีแนวคิดของไดเรกทอรี S3sync ตรวจสอบการตรวจสอบ (S3 มีกลไกในการส่งการตรวจสอบเป็นส่วนหัวสำหรับการตรวจสอบ - ส่วนหัวเนื้อหา -MD5) แนวปฏิบัติที่ดีที่สุดเชื่อมโยง Data Integrity ส่วนหนึ่งของมันมีรายละเอียด S3 ช่วยให้คุณสามารถส่ง / ตรวจสอบและดึง checksums มีผู้คนจำนวนมากที่ทำการสำรองข้อมูลเพิ่มเติมด้วยความซ้ำซ้อน แม้ว่าจะไม่มี rsync ที่ทำงานบน S3 คุณสามารถทำ checksums เหมือนที่ฉันพูดถึงที่นี่

rsync เป็นเครื่องมือที่ได้รับการพิสูจน์แล้วและเครื่องมือทันสมัยส่วนใหญ่ใช้อัลกอริทึมเดียวกันหรือไลบรารี rsync หรือการโทร rsync จากภายนอก


1
ฉันไม่เห็นว่าสิ่งนี้ตอบคำถามได้อย่างไร ฉันถามว่าการจัดการความซ้ำซ้อนจะทำในสิ่งที่ rsync ทำโดยไม่มี daemon ในอีกด้านหนึ่ง มันไม่มีความสามารถในการรับเช็คซัมหรืออาจเป็นไปได้ แต่จากนั้นจะอัพเดตไฟล์อย่างไร?
— Jaimie Sirovich

ตกลง. ดังนั้นคุณกำลังบอกว่า Duplicity ใช้แฮชนี้จาก S3 แต่ก็อ้างว่าใช้งานกับ FTP ได้ FTP ไม่มีกลไกการแฮช ฉันมักจะทำผิดในด้านความปลอดภัยและใช้เครื่องมือ 'พิสูจน์แล้ว' Rsync ได้รับการพิสูจน์แล้วว่าใช่ แต่จะไม่ทำการสำรองข้อมูล s3 หากไม่มีบริการเสริม s3 s3rsync ฉันกลัวความซ้ำซ้อนเล็กน้อย แต่มันก็มีโพรโทคอลที่น่าสนใจมากกว่าถ้าฉันสามารถรับฟังก์ชั่นคล้าย rsync ในระดับเดียวกับ s3 โดยไม่ต้องใช้บริการเสริมดังกล่าว ฉันไม่เข้าใจว่ามันทำงานได้ดีเพียงใด(และอาจแตกต่างกับโปรโตคอลต่าง ๆ ) heck ใช้การซิงค์ FTP อย่างไร :)
— Jaimie Sirovich

@JaimieSirovich ทดสอบและดู หากคุณมีคุณจะได้รู้จัก Duplicity สร้างไฟล์ "รายการ" ในเวลาที่น้อยกว่าที่คุณจะพิมพ์ความคิดเห็นเหล่านี้เกี่ยวกับสิ่งที่อาจทำ
— ceejayoz

3

หรือคุณสามารถใช้ minio client aka mcการใช้คำสั่ง 'mc mirror' จะทำงานได้

$ mc mirror share/sharegain/ s3/MyS3Bucket/share/sharegain 
  • mc: ไคลเอ็นต์ขนาดเล็ก
  • share / sharegain: โลคอลไดเร็กทอรี
  • s3: นามแฝงสำหรับhttps://s3.amazonaws.com
  • MyS3Bucket: ที่เก็บข้อมูลระยะไกล S3 ของฉัน
  • share / sharegain: My object บน s3

คุณสามารถเขียนสคริปต์ง่ายๆเป็น cronjob ซึ่งจะทำให้การซิงค์ในช่วงเวลาเป็นระยะ

หวังว่าจะช่วย


นอกจากนี้ยังมีการ-wตั้งค่าสถานะซึ่งจะใช้fsnotifyเพื่อดูการเปลี่ยนแปลง สามารถตั้งค่าได้อย่างง่ายดายเช่นบริการระบบหรือคล้ายกัน
— อัลคาร์

2

ฉันไม่แน่ใจว่า rsync ที่แท้จริงเหมาะสมกับ Amazon หรือไม่

ดังที่ฉันเข้าใจแล้วอัลกอริทึม rsync มาตรฐานหมายถึงไคลเอนต์คำนวณแฮชสำหรับแต่ละบล็อกของไฟล์และเซิร์ฟเวอร์คำนวณแฮชสำหรับการคัดลอกและส่งแฮชเหล่านั้นไปยังไคลเอนต์ซึ่งหมายความว่าไคลเอนต์สามารถกำหนดบล็อกที่มีการเปลี่ยนแปลง

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

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

มีข้อดีและข้อเสียของการทำมันทั้งสองวิธี หากแฮชถูกเก็บไว้ในระยะไกลในแต่ละไฟล์มันอาจมีค่าใช้จ่ายสูงในการเรียกคืนไฟล์เหล่านั้นอย่างต่อเนื่อง หากแฮชถูกเก็บไว้ในฐานข้อมูลจากระยะไกลฐานข้อมูลนี้อาจมีขนาดใหญ่และอาจมีค่าใช้จ่ายสูงในการเรียกใช้และอัปเดตอย่างต่อเนื่อง หากแฮชถูกเก็บไว้ในเครื่องจะช่วยลดค่าใช้จ่าย แต่จะนำเสนอปัญหาและปัญหาอื่น ๆ

(แน่นอนว่า Amazon มีบริการอื่น ๆ ดังนั้นจึงเป็นไปได้ที่จะเก็บฐานข้อมูลใน Amazon DB)

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

ฉันจะเสียอะไรโดยใช้ความซ้ำซ้อน + s3 แทน rsync + s3rsync + s3

คุณสูญเสียความจริงที่ว่าด้วย rsync คุณรู้ว่าคุณกำลังเปรียบเทียบไฟล์ต้นฉบับกับไฟล์สำรองของคุณ ด้วยความซ้ำซ้อนและโคลนอื่น ๆ คุณกำลังเปรียบเทียบไฟล์ต้นฉบับของคุณกับแฮชซึ่งถ่ายเมื่อทำการสำรองข้อมูล ตัวอย่างเช่นอาจเป็นไปได้ที่จะเข้าถึง S3 โดยตรงและแทนที่ไฟล์ใดไฟล์หนึ่งโดยไม่ต้องคำนวณแฮชใหม่หรืออัปเดตฐานข้อมูลแฮช


0

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

นี่เป็นบทแนะนำที่ดีในการเริ่มต้น: Amazon S3 กับ Rsync

ผู้เขียนก่อนหน้านี้ใช้ s3sync ที่กล่าวถึง แต่จากนั้นเปลี่ยนเป็นตัวเลือกด้วย S3F ฉันชอบเพราะฉันยังมีโฟลเดอร์สำรองอื่น ๆ ที่ติดตั้งในเครื่องผ่าน SSHFS


12
อันตราย Will Robinson! นี่แพงมากเพราะคุณไม่ได้รับผลประโยชน์ใด ๆ จากการสื่อสารแบนด์วิดท์ต่ำ rsync --- s3fs จะจบลงด้วยการอ่าน (แล้วเขียนถ้าเปลี่ยน) ไฟล์ทั้งหมดซึ่งหมายความว่า Amazon จะเรียกเก็บเงินคุณสองครั้ง พิจารณาใช้อินสแตนซ์ EC2 แทนและใช้ rsync จากระยะไกลผ่าน ssh การถ่ายโอนไปยัง S3 จากอินสแตนซ์ EC2 นั้นฟรีดังนั้นสิ่งที่คุณจ่ายคือการสื่อสารแบนด์วิธต่ำของ rsync จากเครื่องท้องถิ่นของคุณไปยังอินสแตนซ์ EC2 การใช้งานอินสแตนซ์ขนาดเล็ก EC2 ตามต้องการไม่มีค่าใช้จ่ายเลย
— เดวิดให้

2
นี้! มีคำแนะนำที่ไม่ดีมากมายสำหรับผู้ที่ไม่เข้าใจ rsync และ S3 ...
— Mark

ข้อเสียเดียวของเรื่องนี้ก็คือตอนนี้คุณมีอินสแตนซ์ขนาดเล็กที่จะจัดการ เรื่องไม่สำคัญถ้าคุณรู้ว่า แต่เป็นอุปสรรคต่อการเข้าสู่คนจำนวนมาก ในด้านบวกพื้นที่เก็บข้อมูล EBS ที่แนบมากับ EC2 นั้นมีราคาครึ่งหนึ่งต่อไบต์ S3
— Dan Pritts

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