2010-07-08 32 views
9

Tôi đang cố tìm cách thích hợp để xử lý dữ liệu cũ trên máy khách NFS. Xem xét sau đây kịch bản:Đảm bảo trạng thái tệp trên máy khách được đồng bộ với máy chủ NFS

  • Hai máy chủ gắn kết cùng NFS chia sẻ lưu trữ với số lượng file
  • ứng dụng Client trên 1 máy chủ sẽ xóa một số file
  • ứng dụng Client trên 2 máy chủ cố gắng truy cập các file đã xóa và không thành công với: thiu NFS tập tin xử lý (không có gì lạ, lỗi dự kiến)

(cũng có thể hữu ích khi biết rằng các tùy chọn bộ nhớ cache là khá cao trên cả hai máy chủ vì lý do hiệu suất).

Những gì tôi đang cố gắng để hiểu là:

  • Có phương pháp đáng tin cậy để kiểm tra, tập tin đó là hiện nay? Trong kịch bản được đưa ra ở trên lstat trên tập tin trả về thành công và ứng dụng không chỉ sau khi cố gắng di chuyển tập tin.
  • Làm cách nào để đồng bộ hóa thủ công nội dung thư mục trên máy khách với máy chủ?
  • Một số lời khuyên chung về cách viết mã quản lý tệp tin cậy trong trường hợp NFS?

Cảm ơn.

Trả lời

11
  • Có phương pháp đáng tin cậy để kiểm tra, tệp đó có mặt không? Trong kịch bản được đưa ra ở trên lstat trên tập tin trả về thành công và ứng dụng không chỉ sau khi cố gắng di chuyển tập tin.

Đó là hành vi NFS bình thường.

  • Tôi có thể đồng bộ hóa thủ công nội dung thư mục trên máy khách với máy chủ bằng cách nào?

Không thể thực hiện thủ công vì NFS giả vờ là hệ thống tệp tuân thủ POSIX bình thường.

Tôi đã thử một lần để mã close()/open() trong một nỗ lực để giảm thiểu tác động của bộ nhớ cache phía máy khách NFS. Trong trường hợp của tôi, tôi cần đọc thông tin được ghi vào tệp trên máy chủ khác. Nhưng ngay cả thủ thuật mở lại đã gần như không có hiệu lực. Và tôi không thể thêm fdatasync() vào mặt văn bản, vì nó làm chậm toàn bộ ứng dụng.

Trải nghiệm của tôi với NFS cho đến nay là bạn không thể làm gì. Trong các đường dẫn mã quan trọng, tôi chỉ đơn giản là mã hóa để thử lại các hoạt động tệp trả về ESTALE.

  • Một số lời khuyên chung về cách viết mã quản lý tệp tin cậy trong trường hợp NFS?

Chỉnh sửa tất cả những gì bạn muốn, nhưng nếu khách hàng của bạn muốn độ tin cậy thì họ không nên sử dụng NFS.

Công ty của tôi ví dụ quảng cáo sử dụng hệ thống tệp được phân phối thích hợp (Tôi cố ý bỏ qua thương hiệu) nếu khách hàng muốn có độ tin cậy. Phần mềm cốt lõi của chúng tôi không được bảo đảm để chạy trên NFS và chúng tôi không hỗ trợ các cấu hình như vậy. Nhưng trong trường hợp của chúng tôi, chúng tôi thực sự cần đảm bảo rằng ngay khi dữ liệu được ghi vào FS, chúng có thể truy cập được trên tất cả các nút khác.

Tính nhất quán trong NFS có thể đạt được, nhưng với chi phí hiệu suất, làm cho NFS hầu như không thể sử dụng được. (Kiểm tra các tùy chọn gắn kết của nó.) NFS là bộ nhớ đệm như điên để che giấu thực tế rằng nó là một hệ thống tập tin máy chủ. Để làm cho tất cả các hoạt động chặt chẽ, NFS client sẽ phải đi đến máy chủ NFS đồng bộ cho mọi hoạt động nhỏ, bỏ qua bộ đệm cục bộ. Và điều đó sẽ không bao giờ nhanh chóng.

Nhưng vì chúng ta đang nói Linux ở đây, người ta có thể tư vấn cho khách hàng về phần mềm để đánh giá các hệ thống tệp cụm có sẵn. Ví dụ. RedHat giờ đã chính thức hỗ trợ GFS. Tôi đã nghe nói về những người sử dụng CodaFS, nhưng không có thông tin khó về nó.

+0

Cảm ơn. Bạn đã xác nhận hầu hết các kết quả nghiên cứu NFS của riêng tôi. Đoán tôi sẽ mã một loạt các kiểm tra ESTALE, vì chúng tôi không có kế hoạch để di chuyển đến một số lưu trữ khác.Tôi sẽ không chấp nhận câu trả lời này ngay bây giờ, hy vọng ai đó sẽ đưa ra thêm thông tin về chủ đề. – begray

4

Bạn có thể thử các '' Noac '' gắn kết tùy chọn

từ nfs người đàn ông:

Ngoài việc ngăn chặn khách hàng từ bộ nhớ đệm thuộc tính tập tin, ứng dụng Noac lựa chọn lực lượng ghi vào trở nên đồng bộ sao cho các thay đổi địa phương vào một tệp sẽ hiển thị trên máy chủ ngay lập tức trên máy chủ . Bằng cách đó, các khách hàng khác có thể nhanh chóng phát hiện viết gần đây khi họ kiểm tra các thuộc tính của tệp .

Sử dụng tùy chọn Noac cung cấp gắn kết bộ nhớ cache lớn hơn trong NFS khách hàng truy cập vào các tập tin tương tự, nhưng nó trích ra một đáng kể hiệu suất phạt. Do đó, khuyến khích sử dụng tính năng khóa tập tin được khuyến khích thay thế.

Bạn có thể có hai gắn kết, một cho dữ liệu thay đổi nhanh quan trọng mà bạn cần đồng bộ hóa và một giá trị khác cho dữ liệu khác.

Ngoài ra, hãy xem xét NFS locking and its limitations.

Đối với lời khuyên chung:

Một cách để cắt một file được đồng thời đọc từ nhiều host là viết nội dung vào một tập tin tạm thời và sau đó rename rằng tập tin đến vị trí chính thức.

Trên cùng hệ thống tệp, thao tác này phải là nguyên tử.

+0

Vâng, điều đó sẽ đưa ra một ý tưởng hay: đăng câu hỏi lên serverfault. Các nhà phát triển không có cách nào để ảnh hưởng đến NFS theo cách lập trình (cách giải quyết tốt nhất), trong khi quản trị viên phải đối phó với NFS và các ứng dụng chạy trên nó thường xuyên hơn. Do đó, sau này có nhiều kinh nghiệm hơn và có thể đưa ra nhiều đề xuất hơn. – Dummy00001

+0

Bài viết khóa NFS được liên kết hiện đã biến mất, bạn có xảy ra sự thay thế không? –

1

tôi đã thành công khi thực hiện ls -l trên thư mục chứa tệp.

Các vấn đề liên quan