Làm thế nào để chia sẻ tài sản giữa nhiều máy chủ web?


16

Tôi có nhiều máy chủ web Linux được gắn vào bộ cân bằng tải và tôi muốn chia sẻ tài sản (như hình ảnh, video và các nội dung khác) giữa các máy chủ này. Cách tốt nhất để làm việc này là gì?

Hiện tại, tôi đã gắn kết trên một máy chủ tệp cho tất cả các máy chủ web, nhưng tôi lo lắng về việc nó sẽ bị giảm lưu lượng. Làm thế nào tôi có thể tránh điều này xảy ra?

Cảm ơn trước.


Đây là nơi những thứ như Cassandra (cơ sở dữ liệu NoQuery) hữu ích.
Alexis Wilke

Được coi là sử dụng Varnish để cải thiện hiệu suất khi lưu lượng truy cập lớn? vi.wikipedia.org/wiki/Varnish_%28software%29
Thorbjørn Ravn Andersen

Câu trả lời:


12

Có nhiều cách để làm điều này dựa trên nhu cầu của bạn.

  • Sử dụng máy chủ tệp trung tâm được gắn với fx NFS trên máy chủ web
  • Tương tự như trên, nhưng dư thừa, vì vậy nếu cái này đi xuống cái kia sẽ chiếm
  • Sử dụng một số loại công cụ đồng bộ hóa (ví dụ rsync) và lưu trữ các tệp cục bộ trên máy chủ web. Sau đó thiết lập một cronjob để đồng bộ hóa các tệp giữa các máy chủ theo một khoảng thời gian cụ thể.
  • Sử dụng CDN như Amazon S3, Akamai, v.v.

Hai cái đầu tiên là tốt nhất nếu bạn có nhiều tệp mới sắp tới. Thứ ba sẽ là giải pháp lý tưởng nếu bạn không thêm hoặc thay đổi các tệp thường xuyên vì người dùng sẽ nhận được 404 trên nội dung tĩnh chưa được đồng bộ hóa ..

Tùy chọn cuối cùng có thể lý tưởng theo nhiều cách, nhưng cũng có thể là đắt nhất trong số 4. Bạn cũng cần phải viết lại trang web của mình để hỗ trợ điều này.


Vấn đề lớn với rsync là bạn có khả năng nhận được 404 nếu bạn tải lên dữ liệu mới và rsync không xảy ra rất nhanh ... Ngoài ra, một hệ thống như Cassandra (điểm 4) là miễn phí, mặc dù tất nhiên có 10 máy chủ thì không miễn phí ... vì vậy, có lẽ tôi nên nói không tính thêm phí (mặc dù nó cần một số chương trình để làm cho tất cả hoạt động.)
Alexis Wilke

@AlexisWilke - Bạn nói đúng về rsync, và tôi cũng đã đề cập đến nó trong câu trả lời. Tôi đã làm rõ nó trong câu trả lời bây giờ.
Frederik Nielsen

Re: # 3, 'thời gian chết' giữa tài sản mới được triển khai và tài sản mới đồng bộ có thể được giảm thiểu nếu bạn sử dụng một watcher hệ thống tập tin (ví dụ như Facebook gác ) và một công cụ đồng bộ hóa nhanh (như csync2 ). Không, độ trễ sẽ không bao giờ giảm xuống 0, nhưng nó rất nhỏ và có thể dễ triển khai hơn các lựa chọn thay thế khác.
pepoluan

2

Một cách tuyệt vời khác để giảm tải trên máy chủ web và thực hiện cân bằng tải là với mực (cụ thể là mực 3) Thiết lập nó như một proxy ngược với bộ nhớ đệm. Nó sẽ lưu trữ nội dung tĩnh như hình ảnh, v.v. vào ổ cứng (mặc định) hoặc RAM (nhanh hơn và tốt nhất) nếu bạn đặt theo cách đó. Nó cũng có khả năng quay vòng đến các máy chủ mực khác nếu bất kỳ một nút cụ thể nào bị quá tải.


1
Tôi nghĩ rằng loại bộ nhớ đệm thất bại nếu bạn muốn một trang web rất năng động. Bởi vì với tính năng động cao, bạn vẫn cần phải truy cập vào một máy chủ phụ trợ chính để lấy nhiều dữ liệu. Tôi nghĩ rằng người dùng đang tìm cách chia nhỏ công việc phụ trợ thay thế.
Alexis Wilke

1
Câu trả lời của bạn là chính xác về khả năng giảm tải, nhưng không trả lời câu hỏi về việc chia sẻ tệp tài sản giữa nhiều máy chủ.

@AlexisWilke nó sẽ (thất bại) nếu bạn không thiết lập mực chính xác. Điều chỉnh cách nó lưu trữ (hoặc nếu nó lưu trữ) trong cài đặt, nhưng bạn có thể thấy rằng không có trang nào là hoàn toàn động. Luôn luôn có một cái gì đó bạn có thể lưu trữ. Cũng là Andre, nó giúp ích rất nhiều trong việc chia sẻ tài sản như tiêu đề mô tả, nhưng chia sẻ tệp không quá nhiều. Câu hỏi là làm thế nào để giữ cho các trang web không bị tải nặng. Mực là tuyệt vời để làm điều này.
Aihngel Tech 21/2/2015

1

Vì thông thường nhu cầu cần nhiều máy chủ hơn đến từ các tài nguyên cần thiết để chạy các trang web / aps động, hãy xem xét việc lưu trữ tài sản tĩnh tại một tên miền / tên miền khác. (như static.yourdomain.com)

Sau đó, bạn có thể sử dụng máy chủ / máy chủ khác để lưu trữ chúng. Lưu trữ tệp tĩnh không sử dụng nhiều tài nguyên, vì vậy bạn sẽ cần ít máy chủ hơn cho nội dung tĩnh của mình. Bạn cũng sẽ giải phóng một số tài nguyên trên các máy chủ cho nội dung động của bạn.

Tùy thuộc vào bộ cân bằng tải của bạn, bạn cũng có thể thực hiện việc này trên cùng một miền với bộ cân bằng tải quyết định sử dụng máy chủ nào cho yêu cầu nào, nhưng nếu bạn sử dụng một tên miền riêng, bạn có thể đặt tài sản tĩnh của mình lên CDN khá dễ dàng, nếu sự cần thiết phải phát sinh!


1

Một giải pháp cho thách thức này mà tôi đã sử dụng là có bản sao đọc / ghi chính của các tệp trên ổ đĩa NFS được chia sẻ, nhưng cũng giữ bản sao chỉ đọc trên mỗi máy chủ web để máy chủ NFS không truy cập tệp trong chế độ chỉ đọc thay vì mất chúng hoàn toàn.

  • Các tệp trực tiếp trên máy chủ trung tâm, được chia sẻ với máy chủ web thông qua NFS mount
  • rsync chạy 15 phút để giữ bản sao chỉ đọc trên mỗi máy chủ web.
  • Một check_linktập lệnh bash chạy mỗi phút để đảm bảo mount NFS vẫn ở đó và nếu không hoán đổi một liên kết tượng trưng đến bản sao chỉ đọc.

Thông tin chi tiết được tìm thấy trong bài viết này từ khi tôi mới thiết lập hệ thống này.

Ưu điểm:

  • Đọc tệp rất khả dụng
  • Không có điều kiện chạy đua để ghi tập tin
  • Các tập tin mới có sẵn ngay lập tức cho tất cả các máy chủ web.

Nhược điểm:

  • hơi phức tạp.
  • số lượng bản sao chỉ đọc tỷ lệ với số lượng máy chủ web, có thể quá nhiều nếu bạn có nhiều hơn hai.
  • Tập tin ghi không có sẵn cao.
  • Có khả năng tối đa 1 phút thời gian chết trước khi chuyển sang bản sao chỉ đọc.

0

Bạn có thể muốn xem xét một cơ sở dữ liệu NoQuery. Chúng được thiết kế để làm việc trên các cụm, cung cấp sự nhất quán cuối cùng. Nhưng hãy cẩn thận, họ không phải là ACID.

Đây là phần giới thiệu sẽ giúp bạn quyết định loại cơ sở dữ liệu NoQuery nào bạn muốn cho mục đích của mình.

Dưới đây là danh sách các tài nguyên liên quan đến NoQuery có sẵn.


4
Làm thế nào câu trả lời này giúp trong vấn đề đồng bộ hóa tập tin?
Titus

@titus Trong NoQuery, khi có một ghi trên một trong các nút, nó sẽ được sao chép trên các nút khác trong cụm. Cassandra viết mức độ nhất quán có thể giúp làm cho nó rõ ràng
Azzy

Vì vậy, cách để đi là lưu trữ tất cả các tệp trong NoQuery db?
Titus

@titus bạn có thể, nhưng cơ sở dữ liệu NoQuery có thể làm nhiều hơn sau đó lưu trữ tệp, Tất cả phụ thuộc vào nhu cầu của bạn.
Azzy

2
OP đã yêu cầu một giải pháp cho một vấn đề cụ thể " nhiều máy chủ web Linux được gắn vào bộ cân bằng tải ... chia sẻ tài sản (như hình ảnh, video và các thứ khác) giữa các máy chủ này. " Câu trả lời của bạn rất chung chung, bạn có thể đề xuất và giải thích các công cụ cụ thể (và tốt nhất là cấu hình của chúng) để giải quyết vấn đề?
kdbanman

0

Tại sao bạn không thử giải pháp DFS, chúng cung cấp mức độ dự phòng cao và âm lượng có thể được chia sẻ giữa nhiều như bạn muốn. Gluster là ứng dụng yêu thích của tôi và rất dễ cài đặt và định cấu hình trong bất kỳ bản phân phối Linux nổi tiếng nào

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.