จะใช้ 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.