This page is READ-ONLY. It is generated from the old site.
All timestamps are relative to 2013 (when this page is generated).
If you are looking for TeX support, please go to VietTUG.org

moosefs: a distributed file system (bài 1)

moosefs is fun
Added by over 2 years ago  »  Votes: 2/2

thanks to ‘low’ on #moosefs

Keywords: distributed file system, DFS, KFS, MFS, MogileFS, LustreFS, MooseFS

Giới thiệu

Trong các bài trước (blog) MogileFS(blog) CloudStore (former Kosmos), ta có dịp làm quen với hai hệ thống tập tin phân tán không tương thích với chuẩn POSIX; chúng không được sử dụng trực tiếp như các ổ đĩa thông thường, mà phải thông qua các thư viện và giao diện lập trình. Như thế, hai hệ thống KFS và MogileFS đều khó có thể dùng để giải quyết bài toán chia sẻ dữ liệu giữa các máy Linux.

Để chia sẻ, bạn có thể nghĩ ngay tới NFS. Tuy nhiên, NFS không có tính phân tán, chỉ thích hợp với quy mô dữ liệu nhỏ. Tại sao như vậy? Có trường hợp là nhiều máy cùng chia sẻ một thư mục ABC, nếu máy phục vụ của dịch vụ NFS có vấn đề (bị tắt, hoặc hệ thống tập tin trên máy phục vụ bị hỏng), thì có thể dẫn tới toàn bộ hệ thống dữ liệu dùng chung bị mất. Để khắc phục, có thể đầu tư hệ thống ổ cứng tốt (các dãy RAID chẳng hạn) để dùng với NFS. Tuy nhiên, chi phí hiển nhiên là quá lớn. Và việc trông chờ tất cả vào một chỗ lưu trữ thường ẩn chứa nhiều nguy cơ: đây cũng là đặc điểm chung của các hệ không phân tán.

Như đã, nói KFS và MogileFS không thích hợp để thay thế cho NFS, vì chúng không theo chuẩn POSIX. Có hệ DFS nào khác không? Có ít nhất ba câu trả lời: MooseFS (được đội phát triển của họ ghi tắt là MFS), GlusterFS và LustreFS. LustreFS thì quá siêu rồi, nó được thiết kết để dùng trong các siêu máy tính: 15 trong số 30 siêu máy tính trên thế giới sử dụng LustreFS. Việc thử nghiệm LustreFS cũng đòi hỏi rất nhiều cố gắng để vá nhân Linux. Cho nên, các bài tới đây ta chỉ đề đề cập tới hai chàng DFS bình dân: MFS và GlusterFS. Ta sẽ mô tả kiến trúc, cách cài đặt và sau đó sẽ nêu một số nhận xét có ích.

Kiến trúc

Về kiến trúc thì KFS và MFS có nhiều điềm giống nhau. Hệ thống MFS gồm có

  1. Một (meta)master
  2. Một hoặc nhiều logger
  3. Một hoặc nhiều chunk
  4. Các client (kết nối với master nhờ fuse module)

Master đóng vai trò nhạc trưởng, là trái tim của hệ thống MFS. Nó được triển khai trên một máy chạy thật bền (ổ cứng RAID, uptime 100%), nhưng cấu hình không cần quá mạnh; điều đặc biệt là cấu hình của nó không phụ thuộc vào dung lượng lưu trữ, mà phụ thuộc vào số lượng tập tin có trong toàn bộ hệ thống. Càng nhiều tập tin, càng nhiều RAM và CPU để làm việc cho nhanh. Master sẽ không lưu trữ các tập tin, mà nó có nhiệm vụ băm, phân mảnh,... và ghi thông tin của các tập tin cùng với thông tin về các chunk (nói sau). Ví dụ, khi client gửi yêu cầu ghi một tập tin A, master sẽ nhận chỉ thị này, sau đó nó tìm kiếm xem còn chunk nào thích hợp, và chuyển vị ghi nội dung tập tin lên chunk đó.

client gửi yêu cầu đến master: tôi cần ghi nội dung A. Hãy giúp!
master gửi yêu cầu đến các chunk: anh còn sống chứ?
  master thu thập các trả lời từ các chunk
    chunk X: vâng, tôi còn sống
    chunk Y: vâng, tôi còn sống
    chunk Z: ồ, tôi còn sống nhưng bị ốm, xin đừng ghi vào tôi
master trả lời client: ok, anh hãy bắt đầu ghi vào chunk X, chunk Y
client liên lạc với các chunk X, Y để lưu nội dung
các chunk X,Y liên lạc với master để báo cáo việc lưu nội dung
master ghi lưu trữ thông tin về tập tin A
client cảm ơn và tạm biệt master và các chunk

Logger làm một kẻ làm việc thầm lặng :) Nó cũng cần cấu hình mạnh và bền bỉ như master, nhưng công việc của nó phần lớn là nhẹ nhàng: đều đặn kết nối với master và tạo một bản sao lưu thông tin về hệ thống tập tin. Khi có sự cố trên master, logger có thể dùng để đóng thế. Thời gian hệ thống bị ngưng là cần thiết, cho việc phục hồi dữ liệu từ các thông tin mà logger đang có. Vì vai trò của mình, logger không bao giờ được thiết lập ở chung một máy với master.

Chunk là nơi mà dữ liệu thật sự lưu trữ. Trên chunk, tập tin không được lưu thành cách thông thường, mà được băm ra từng khối 64KiB để lưu trên các tập tin chunk có kích thước cố định 64MiB. Các con số này là cố định, không thể thay đổi được trừ khi bạn viết lại mã nguồn của MooseFS:

  tập tin A mà bạn biết
        ======...
           |
    ______/|\______
   /       |       \ 
   |       |       |
   V       V       v
chunkA  chunkB   chunkC
======  ======   ======

Như vậy, việc lưu một tập tin trên các chunk giống như việc đổ một thùng bia 10 lít vào từng lon bia nửa lít: kết cục ta sẽ có 20 lon bia đóng thành một két, dễ dàng cho việc vận chuyển và... thưởng thức ;)

Cuối cùng, các client sẽ thông qua mô-đun fuse của nhân Linux để kết nối hệ thống tập tin, thành một ổ cứng trên hệ thống như bao ổ cứng khác, với đầy đủ các phân quyền đọc ghi theo người dùng, nhóm (chuẩn POSIX). Như đã nói ở trên, client có kết nối tới cả master và các chunk. Điều này cần chú ý khi thiết lập tường lửa cho hệ thống.


Comments

Added by bronzeboyvn over 2 years ago

filesystem cho hệ thống Unix mà không tương thích POSIX thì đáng ăn điểm trừ cho 2 ku KFS và MogileFS. Chắc chỉ lưu dữ liệu trên đó thôi chứ không triển khai được gì.

Added by over 2 years ago

Thì người ta lưu lên rồi truy cập qua API. Ví dụ truy cập thông qua HTTP chẳng hạn. Cũng được mà :)

Về POSIX thì thật ra MFS cũng không hỗ trợ ngon lắm đâu. Một phần cũng do FUSE (http://fuse.sf.net/)

Added by whatvn [G] over 2 years ago

Khi ghi thì nếu chunkC chết, ghi vào chunkA + chunkB.
Vậy khi chunkA hoặc chunkB chết, thì đọc như thế nào anh? Rõ ràng dữ liệu không được đồng bộ giữa các chunk, vì khả năng lưu trữ có hạn?
Câu hỏi hơi khù khờ, nhưng cứ hỏi :-D.

Added by over 2 years ago

Ở trên, chunkA, chunkB, chunkC là ba tập tin nằm trên cùng một chunk server. Mình hiểu ý của hungnv là: Nếu có ba chunk server: A, B, C, thì sẽ xảy ra chuyện gì nếu hai server A, B chết. Trả lời: một tập tin sẽ có hai nhân bản, một trên A và một trên B. Khi server A chết, thì còn nhân bản trên B, việc đọc diễn ra bình thường. Nếu B cũng chết luôn, thì xong phim rồi. Hồi đó là syadmin xách dép lên DC chẳng hạn :))

Added by whatvn [G] over 2 years ago

À à, em hiểu sai cái từ phân tán một chút. Giờ thì hiểu rồi. Cám ơn anh!