Làm thế nào một cách hiệu quả có thể sử dụng S3 để sao lưu các tập tin tăng dần?


42

Tôi hiểu cách rsync hoạt động ở cấp độ cao, nhưng có 2 mặt. Với S3 không có daemon để nói - cũng có, nhưng về cơ bản nó chỉ là HTTP.

Có vẻ là một vài cách tiếp cận.

s3rsync (nhưng điều này chỉ bắt vít trên rsync thành s3). Nói thẳng ra. Không chắc chắn tôi muốn phụ thuộc vào một cái gì đó bên thứ 3. Tôi muốn s3 chỉ hỗ trợ rsync.

Ngoài ra còn có một số bản sao giống như rsync 'nhái' yêu cầu hỗ trợ s3 mà không cần nói về bu-lông. Nhưng làm thế nào nó có thể làm điều này? Họ đang giữ một tệp chỉ mục cục bộ? Tôi không chắc làm thế nào mà có thể hiệu quả như vậy.

Tôi rõ ràng muốn sử dụng s3 vì nó rẻ và đáng tin cậy, nhưng có những thứ mà rsync là công cụ để làm, như sao lưu một thư mục hình ảnh khổng lồ.

Các tùy chọn ở đây là gì? Tôi mất gì khi sử dụng trùng lặp + s3 thay vì rsync + s3rsync + s3?


4
S3 có rẻ không? Đó là tin tức với tôi. Đáng tin cậy? Để chắc chắn, nhưng không rẻ.
EEAA

5
Chà, s3 là $ 0,13 / gb hoặc ít hơn khi bạn lưu trữ nhiều hơn hoặc muốn dự phòng ít hơn. Một tìm kiếm nhanh cho thấy evbackup.com để lưu trữ rsync. Đắt hơn nhiều. Cái gì rẻ hơn và có một số mức độ dư thừa?
Jaimie Sirovich

Nếu tôi thiết kế rsync, nó sẽ hỗ trợ các plugin để các giao thức mới (ví dụ s3: //) có thể được thêm vào. Tuy nhiên, hiện tại, rsync không hỗ trợ điều này, vì vậy tôi không tin rsync có thể được sử dụng trực tiếp để sao lưu lên S3.
Edward Falk

Vấn đề tiếp theo là tôi không nghĩ S3 lưu trữ siêu dữ liệu như quyền sở hữu hoặc quyền, do đó, sử dụng ví dụ "aws s3 sync" để thực hiện sao lưu sẽ hoạt động nhưng có lẽ không phù hợp để sao lưu toàn bộ hệ thống tệp Unix, vì quá nhiều dữ liệu sẽ bị mất khi khôi phục. Tôi cũng nghĩ rằng các liên kết tượng trưng, ​​liên kết cứng và các tệp đặc biệt khác sẽ bị mất.
Edward Falk

Câu trả lời:


39

Vì câu hỏi này đã được trả lời lần cuối, nên có một công cụ dòng lệnh AWS mới , aws.

Nó có thể đồng bộ hóa , giống như rsync, giữa bộ nhớ cục bộ và s3. Ví dụ sử dụng:

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

Nếu môi trường python của hệ thống của bạn được thiết lập đúng, bạn có thể cài đặt ứng dụng khách AWS bằng cách sử dụng pip:

pip install awscli

1
Theo kinh nghiệm của tôi, điều này tải lên tất cả mọi thứ, không chỉ là một sự thay đổi. Ví dụ, tôi đã đẩy một trang web tĩnh đến một máy chủ dev rsyncvà nó mất trung bình 1 giây, chỉ với những thay đổi xảy ra trong kết nối chậm của tôi. aws s3 syncmặt khác, mất khoảng 5 phút, truyền lại từng tệp.
ryebread

2
Tôi tin rằng bạn không hoạt động, nhưng các tài liệu nói rằng "Một tệp cục bộ sẽ yêu cầu tải lên nếu kích thước của tệp cục bộ khác với kích thước của đối tượng s3, thời gian sửa đổi cuối cùng của tệp cục bộ mới hơn so với tệp cục bộ thời gian sửa đổi lần cuối của đối tượng s3 hoặc tệp cục bộ không tồn tại dưới nhóm và tiền tố được chỉ định. " Hãy chắc chắn rằng bạn có phiên bản mới nhất của aws-cli - nếu bạn có thể sao chép điều này, hãy gửi một lỗi với chúng trên github. Họ đã phản hồi khi tôi nộp một lỗi trước đây.
Dan Pritts

Lệnh nên là: aws s3 sync / some / local / dir / s3: // mybucket
Carlo S

1
Carlos, tôi không chắc quan điểm của bạn là gì. Nếu bạn muốn gợi ý rằng lệnh ví dụ của tôi sai, cả hai chúng ta đều đúng. Đồng bộ hóa s3 có thể hoạt động theo một trong hai hướng.
Dan Pritts

Đến bữa tiệc muộn, nhưng đây là những gì đang xảy ra: Khi tải lên S3, quy tắc kiểm tra nhanh sẽ được áp dụng (tải lên nếu kích thước hoặc ngày thay đổi). Khi tải xuống , không có quy tắc kiểm tra nhanh và mọi thứ được tải xuống vô điều kiện.
Edward Falk

16

Công cụ s3cmd có một synctùy chọn tuyệt vời . Tôi sử dụng nó để đồng bộ hóa các bản sao lưu cục bộ, sử dụng một cái gì đó như:

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

--skip-existingnghĩa là nó không cố kiểm tra so sánh các tệp hiện có. Nếu đã có một tập tin với tên đó, nó sẽ nhanh chóng bỏ qua và tiếp tục. Ngoài ra còn có --delete-removedtùy chọn sẽ xóa các tệp không tồn tại cục bộ, nhưng tôi muốn tiếp tục sử dụng S3 ngay cả những tệp mà tôi đã dọn sạch cục bộ vì vậy tôi không sử dụng tệp này.


5

Không muốn nói cho ai biết phải làm gì nhưng tôi có thể vẫy cờ cho trùng lặp không? hoặc giải pháp sao lưu gia tăng khác. Đồng bộ hóa tất cả đều rất tốt, nhưng nếu bạn sao lưu hàng đêm, điều gì xảy ra nếu bạn không nhận thấy vấn đề trong hai ngày? Trả lời: Đã quá muộn, các tệp cục bộ và bản sao lưu của bạn là một tấm gương phản chiếu lẫn nhau và không có dữ liệu bạn cần. Bạn thực sự nên xem xét các bản sao lưu gia tăng hoặc ảnh chụp nhanh để bạn có thể khôi phục đến một thời điểm cụ thể và để thực hiện điều này một cách hiệu quả, bạn cần sao lưu gia tăng. Và nếu mất dữ liệu của bạn là kết thúc của kịch bản thế giới thì hãy giữ các bản sao tại các nhà cung cấp khác nhau mà bạn không bao giờ biết, sau đó có thể bị mất, bị hack ai biết được.

Tôi sử dụng trùng lặp và s3, nó tốt nhưng là cpu chuyên sâu. Nhưng nó không sao lưu dự phòng. Trong trường hợp khẩn cấp khi bạn muốn khôi phục một thư mục hoặc tệp cụ thể, như vào thứ tư tuần trước hoặc tháng 1 năm ngoái, mà không khôi phục các tệp khác trên cùng một phân vùng, bạn cần sao lưu gia tăng và một công cụ mà bạn có thể yêu cầu chỉ các tệp bạn cần.

Tôi có một cron, nó đầy đủ mỗi x tháng, nếu không thì tăng dần và xóa cũ hơn x tháng để giữ tổng dung lượng lưu trữ s3, cuối cùng là trạng thái thu thập để tôi nhận được thư mỗi sáng với trạng thái. Bạn cần để mắt đến nó thường xuyên để bạn chú ý khi bản sao lưu của bạn không hoạt động.

Nó đòi hỏi không gian tạm thời đáng kể để giữ chữ ký cục bộ để thiết lập thư mục tạm thời một cách cẩn thận. Sao lưu / mnt này, không bao gồm các thư mục khác nhau bên trong / mnt. Điều này tốt cho việc sao lưu dữ liệu, cho các phân vùng hệ thống sử dụng các công cụ chụp ảnh hoặc chụp nhanh trên amazon.

Tập lệnh 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
bật phiên bản cho thùng s3, sau đó nó sẽ giữ các bản sao cũ
mcmillab

3

S3 là một hệ thống lưu trữ đối tượng cho mục đích chung, cung cấp đủ sự linh hoạt để bạn thiết kế cách bạn muốn sử dụng nó.

Tôi không chắc chắn từ câu hỏi của bạn về các vấn đề với rsync (ngoài lập chỉ mục) hoặc các vấn đề với công cụ 'bên thứ 3' mà bạn gặp phải.

Nếu bạn có tập hợp lớn các tệp có cấu trúc tốt, bạn có thể chạy nhiều đồng bộ s3 trên các thư mục con của mình.

Những người tốt bụng tại Amazon cũng cho phép bạn thực hiện nhập / xuất từ ​​ổ cứng di động để chuyển tệp lớn sang S3 hoặc EBS - http://aws.amazon.com/importexport/ mà bạn có thể sử dụng cho lần tải lên đầu tiên.

Xem các thực hành tốt nhất của Amazon s3 tại đây - http://aws.amazon.com/articles/1904

Theo như các công cụ khác nhau, hãy thử chúng và xem những gì phù hợp nhất với bạn. Về giá cả, có giảm giá dự phòng nếu phù hợp với nhu cầu của bạn - http://aws.amazon.com/s3/pricing/

Khuyến nghị chung - có CPU đa lõi nhanh và đường ống mạng tốt.

CẬP NHẬT: Đề cập đến kiểm tra trên S3

Về S3 lưu trữ dữ liệu trong các cặp giá trị chính và không có khái niệm về thư mục. S3sync xác minh tổng kiểm tra (S3 có cơ chế gửi tổng kiểm tra làm tiêu đề để xác minh - Tiêu đề Content-MD5). Các thực tiễn tốt nhất liên kết một phần dữ liệu toàn vẹn của nó có chi tiết. S3 cho phép bạn gửi / xác minh và truy xuất tổng kiểm tra. Có rất nhiều người thực hiện sao lưu gia tăng với sự trùng lặp. Mặc dù không có rsync chạy trên S3, bạn có thể thực hiện kiểm tra như tôi đã đề cập ở đây.

rsync là một công cụ đã được chứng minh và hầu hết các công cụ hiện đại sử dụng cùng một thuật toán hoặc thư viện rsync hoặc gọi rsync bên ngoài.


1
Tôi không thấy cách này trả lời câu hỏi. Tôi đã hỏi làm thế nào trùng lặp quản lý để làm những gì rsync làm mà không có daemon ở phía bên kia. Nó thậm chí không có khả năng để có được một tổng kiểm tra, hoặc có thể nó có, nhưng sau đó làm thế nào để tăng dần các tập tin?
Jaimie Sirovich

ĐỒNG Ý. Vì vậy, bạn đang nói rằng Sao chép sử dụng hàm băm này từ S3, nhưng nó cũng tuyên bố sẽ hoạt động trên FTP. FTP không có cơ chế băm. Tôi có xu hướng sai lầm về mặt an toàn và sử dụng các công cụ 'đã được chứng minh'. Rsync được chứng minh là có, nhưng nó sẽ không thực hiện sao lưu s3 nếu không có dịch vụ bổ sung s3 s3rsync. Tôi hơi sợ sự trùng lặp, nhưng nó có sức hấp dẫn giao thức rộng hơn nếu tôi có thể nhận được một số mức độ chức năng giống như rsync với s3 mà không cần dịch vụ phụ kiện nói. Tôi chỉ không hiểu nó hoạt động tốt như thế nào (và có thể khác với các giao thức khác nhau). Làm thế quái nào nó làm đồng bộ hóa FTP? :)
Jaimie Sirovich

@JaimieSirovich Kiểm tra nó và xem. Nếu bạn đã có, bạn sẽ biết các bản sao "tệp kê khai" sao chép trong thời gian ngắn hơn bạn phải nhập tất cả các nhận xét này về những gì nó thể đang làm.
ceejayoz

3

Bạn cũng có thể sử dụng minio client aka mc Sử dụng lệnh 'mc mirror' sẽ thực hiện công việc.

$ mc mirror share/sharegain/ s3/MyS3Bucket/share/sharegain 
  • mc: khách hàng của minio
  • chia sẻ / chia sẻ: thư mục địa phương
  • s3: Bí danh cho https://s3.amazonaws.com
  • MyS3Bucket: Xô S3 từ xa của tôi
  • share / sharegain: Đối tượng của tôi trên s3

Bạn có thể viết một tập lệnh đơn giản là cronjob để giữ đồng bộ theo chu kỳ.

Hy vọng nó giúp.


-wBây giờ cũng có một lá cờ, sẽ sử dụng fsnotifyđể theo dõi các thay đổi. Nó có thể dễ dàng được thiết lập như một dịch vụ hệ thống hoặc tương tự.
kiềm

2

Tôi không chắc chắn nếu rsync thực sự phù hợp với Amazon.

Theo tôi hiểu, thuật toán rsync tiêu chuẩn có nghĩa là máy khách tính băm cho từng khối của tệp và máy chủ sẽ tính băm cho bản sao của nó và gửi các giá trị băm đó đến máy khách, điều đó có nghĩa là máy khách có thể xác định khối nào đã thay đổi và cần tải lên.

Điều đó gây ra hai vấn đề cho Amazon khi rất nhiều băm phải được gửi qua internet và cũng cần có sức mạnh xử lý để tính toán tất cả các giá trị băm đó làm tăng chi phí của Amazon - đó có thể là lý do tại sao họ để lại cho các nhà cung cấp bên thứ ba có thể tính thêm phí cho tính năng đó.

Đối với các bản sao, họ rõ ràng đang lưu trữ các giá trị băm ở đâu đó và một nơi nào đó có thể thay đổi tùy thuộc vào bản sao. Họ có thể lưu trữ băm dưới dạng một đối tượng riêng biệt cho mỗi tệp trên Amazon hoặc dưới dạng cơ sở dữ liệu được lưu trữ trên Amazon hoặc họ có thể lưu trữ chúng cục bộ và từ xa.

Có những lợi thế và không thuận lợi khi làm một trong hai cách. Nếu các giá trị băm được lưu trữ từ xa trong các tệp riêng lẻ, thì việc lấy liên tục chúng có thể tốn kém. Nếu các giá trị băm được lưu trữ trong cơ sở dữ liệu từ xa, thì cơ sở dữ liệu này có thể trở nên lớn và có thể tốn kém khi liên tục truy xuất và cập nhật chúng. Nếu băm được lưu trữ cục bộ, thì điều này giúp giảm chi phí, nhưng giới thiệu các biến chứng và vấn đề khác.

(Tất nhiên Amazon có các dịch vụ khác, vì vậy có thể giữ cơ sở dữ liệu trong Amazon DB)

Lấy ví dụ, tôi đã thử một bản sao rsync sớm từ nhiều năm trước. Điều này không được viết để tính đến cấu trúc giá của Amazon và đã phát hành rất nhiều http để lấy lại hàm băm của mỗi khối và vì Amazon tính phí cho mỗi lần nhận, điều đó có nghĩa là trong khi phần lưu trữ trong hóa đơn của tôi giảm mạnh, phần chuyển nhượng khinh khí cầu.

Tôi mất gì khi sử dụng trùng lặp + s3 thay vì rsync + s3rsync + s3?

Bạn mất thực tế rằng với rsync bạn biết bạn đang so sánh các tệp nguồn với các tệp sao lưu của mình. Với sự trùng lặp và các bản sao khác, bạn đang so sánh các tệp nguồn của mình với hàm băm được thực hiện khi sao lưu được thực hiện. Ví dụ, có thể truy cập S3 trực tiếp và thay thế một trong các tệp của nó mà không cần tính toán lại hàm băm hoặc cập nhật cơ sở dữ liệu băm.


0

Sau khi so sánh nhiều tùy chọn được đề cập trong chủ đề này, tôi quyết định chọn S3fs. Nó cho phép bạn gắn S3 như một hệ thống tập tin cục bộ. Sau đó, bạn có thể tiến hành và sử dụng rsync theo cách bạn đã biết.

Đây là một hướng dẫn tốt để bắt đầu: Amazon S3 với Rsync

Tác giả trước đây đã sử dụng s3sync đã đề cập, nhưng sau đó chuyển sang tùy chọn với S3Fs. Tôi thích nó vì tôi cũng có các thư mục sao lưu khác được gắn cục bộ thông qua SSHFS.


12
Nguy hiểm, Will Robinson! Điều này thực sự tốn kém vì bạn không nhận được bất kỳ lợi ích nào của giao tiếp băng thông thấp rsync --- s3fs sẽ kết thúc việc đọc (và sau đó viết, nếu nó thay đổi) toàn bộ tệp, có nghĩa là Amazon sẽ lập hóa đơn cho bạn hai lần. Thay vào đó hãy xem xét sử dụng một thể hiện EC2 và sử dụng rsync từ xa thông qua ssh. Chuyển đến S3 từ một phiên bản EC2 là miễn phí, vì vậy tất cả những gì bạn phải trả là giao tiếp băng thông thấp của rsync từ máy cục bộ của bạn đến phiên bản EC2. Chạy một ví dụ vi EC2 theo yêu cầu thực tế không có gì.
David đưa ra

2
Điều này! Có rất nhiều lời khuyên tồi dành cho những người không hiểu rsync và S3 ...
Đánh dấu

Một nhược điểm của điều này là bây giờ bạn có một ví dụ vi mô để quản lý. Nếu bạn biết làm thế nào, nhưng một rào cản gia nhập đối với nhiều người. Về mặt tích cực, bộ lưu trữ EBS đính kèm EC2 có giá chỉ bằng một nửa giá mỗi byte của S3.
Dan Pritts

@DavidGiven Điều gì xảy ra nếu tôi viết trực tiếp lên s3fs được gắn mà không sử dụng rysnc và sau đó quản lý tuổi thọ thông qua vòng đời?
Forethinker
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.