Giới thiệu
Trong các bài trước (blog) MogileFS và (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ó
- Một (meta)
master - Một hoặc nhiều
logger - Một hoặc nhiều
chunk - 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. Mastersẽ 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.
Định nghĩa DFS:
DFS (Distributed File System) là hệ thống tổ chức sắp xếp các thư mục, tập tin dùng chung trên mạng mà Server quản lý, ở đó bạn có thể tập hợp các thư mục dùng chung nằm trên nhiều Server khác nhau trên mạng với một tên chia sẻ duy nhất. Nhờ hệ thống này mà người dùng dễ dàng tìm kiếm một tài nguyên dùng chung nào đó trên mạng… DFS có hai loại root:
- Domain root là hệ thống root gắn kết vào Active Directory được chứa trên tất cả Domain Controller
- Stand-alone root chỉ chứa thông tin ngay tại máy được cấu hình. Chú ý DFS không phải là một File Server mà nó là chỉ là một “bảng mục lục” chỉ đến các thư mục đã được tạo và chia sẻ sẵn trên các Server. Để triển khai một hệ thống DFS trước tiên bạn phải hiểu các khái niệm sau:
- Gốc DFS (DFS root) là một thư mục chia sẻ đại diện cho chung cho các thư mục chia sẻ khác trên các Server.
- Liên kết DFS (DFS link) là một thư mục nằm trong DFS root, nó ánh xạ đến một tài nguyên chia sẻ các Server khác.
Sưu tầm http://dragula.org/blogs/611
