Thiết lập hệ thống quản lý tệp tin phân tán FastDFS

FastDFS là một hệ thống tệp tin phân tán mã nguồn mở được phát triển bằng ngôn ngữ C. Được thiết kế đặc biệt cho các ứng dụng internet, FastDFS nổi bật với khả năng hỗ trợ dự phòng dữ liệu, cân bằng tải, mở rộng tuyến tính cùng với hiệu suất cao và độ sẵn sàng tối ưu. Việc triển khai FastDFS giúp xây dựng một cụm máy chủ tệp tin mạnh mẽ, cung cấp các dịch vụ tải lên và tải xuống tệp hiệu quả.

Cấu trúc Định danh Tệp tin FastDFS

Khi một tệp được tải lên thành công, máy chủ Storage sẽ trả về một mã định danh tệp (File ID) cho máy khách. Mã này được dùng làm chỉ mục để truy cập tệp về sau. Mã định danh tệp bao gồm các thành phần sau:

  • Tên nhóm (Group Name): Tên của nhóm Storage mà tệp được tải lên. Thông tin này được máy chủ Storage cung cấp và ứng dụng khách cần lưu trữ nó.
  • Đường dẫn đĩa ảo (Virtual Disk Path): Một đường dẫn ảo được cấu hình trên máy chủ Storage, tương ứng với các tùy chọn store_path*. Ví dụ, store_path0 sẽ tương ứng với M00, store_path1 với M01, v.v.
  • Cấu trúc thư mục hai cấp (Two-Level Directory): Dưới mỗi đường dẫn đĩa ảo, máy chủ Storage sẽ tạo ra cấu trúc thư mục hai cấp để tổ chức và lưu trữ các tệp dữ liệu.
  • Tên tệp (Generated File Name): Khác với tên tệp gốc khi tải lên, tên tệp này được máy chủ Storage tự động tạo ra dựa trên các thông tin như địa chỉ IP của máy chủ Storage gốc, dấu thời gian tạo tệp, kích thước tệp, một số ngẫu nhiên và phần mở rộng tệp.

Hướng dẫn thiết lập hệ thống FastDFS

Để minh họa quy trình cài đặt, chúng ta có thể sử dụng một máy ảo duy nhất để chạy một dịch vụ Tracker, một dịch vụ Storage và tích hợp Nginx để phục vụ tệp tin qua HTTP. Các bước chi tiết như sau:

1. Chuẩn bị môi trường Linux

  • Chuyển các gói cài đặt FastDFS (như libfastcommon, FastDFS, fastdfs-nginx-module) lên hệ thống Linux của bạn.
  • Cài đặt gói libevent là một phụ thuộc cần thiết:
    sudo yum -y install libevent

2. Cài đặt thư viện libfastcommon

libfastcommon là thư viện hỗ trợ cho FastDFS. Thực hiện các bước sau:

  • Giải nén gói libfastcommon (ví dụ: libfastcommonV1.0.7.tar.gz).
  • Chuyển vào thư mục đã giải nén và biên dịch, cài đặt:
    cd libfastcommonV1.0.7
    ./make.sh
    sudo ./make.sh install
  • Sao chép thư viện dùng chung vào đường dẫn tiêu chuẩn để đảm bảo khả năng truy cập:
    sudo cp /usr/lib64/libfastcommon.so /usr/lib/

3. Cài đặt và cấu hình Dịch vụ Tracker

  • Giải nén gói FastDFS (ví dụ: FastDFS_v5.08.tar.gz).
  • Chuyển vào thư mục đã giải nén và biên dịch, cài đặt:
    cd FastDFS
    ./make.sh
    sudo ./make.sh install

    Sau khi cài đặt, các tệp thực thi sẽ nằm trong /usr/bin/ (bắt đầu bằng fdfs), và các tệp cấu hình mẫu sẽ được sao chép vào /etc/fdfs/.

  • Sao chép các tệp cấu hình mẫu từ thư mục gốc của FastDFS vào /etc/fdfs/:
    sudo cp /root/FastDFS/conf/* /etc/fdfs/
  • Chỉnh sửa tệp cấu hình tracker.conf:

    Mở /etc/fdfs/tracker.conf và cập nhật đường dẫn lưu trữ dữ liệu chính (base_path) cho Tracker. Ví dụ:

    # Thay đổi đường dẫn base_path phù hợp với hệ thống của bạn
    base_path=/home/FastDFS/fdfs_tracker
  • Khởi động dịch vụ Tracker:
    sudo fdfs_trackerd /etc/fdfs/tracker.conf start

    Để khởi động lại dịch vụ:

    sudo fdfs_trackerd /etc/fdfs/tracker.conf restart

4. Cài đặt và cấu hình Dịch vụ Storage

Nếu bạn cài đặt Storage trên một máy chủ khác, hãy lặp lại các bước cài đặt libfastcommon và FastDFS core như trên máy chủ Tracker.

  • Chỉnh sửa tệp cấu hình storage.conf:

    Mở /etc/fdfs/storage.conf và cấu hình các thông số quan trọng:

    # Đường dẫn cơ sở để lưu trữ dữ liệu
    base_path=/home/FastDFS/fdfs_storage
    # Đường dẫn nơi các tệp sẽ được lưu trữ
    store_path0=/home/FastDFS/fdfs_storage/data
    # Địa chỉ IP và cổng của máy chủ Tracker
    tracker_server=YOUR_TRACKER_IP:22122

    Thay thế YOUR_TRACKER_IP bằng địa chỉ IP thực của máy chủ Tracker của bạn.

  • Khởi động dịch vụ Storage:
    sudo fdfs_storaged /etc/fdfs/storage.conf start

    Để khởi động lại dịch vụ:

    sudo fdfs_storaged /etc/fdfs/storage.conf restart

5. Kiểm tra dịch vụ FastDFS

Để đảm bảo FastDFS hoạt động đúng cách, chúng ta sẽ sử dụng công cụ kiểm tra của FastDFS để tải lên một tệp.

  • Chỉnh sửa tệp cấu hình client.conf:

    Mở /etc/fdfs/client.conf và cập nhật thông tin máy chủ Tracker:

    # Địa chỉ IP và cổng của máy chủ Tracker
    tracker_server=YOUR_TRACKER_IP:22122
  • Thực hiện lệnh tải lên tệp để kiểm tra:
    sudo fdfs_test /etc/fdfs/client.conf upload /path/to/your/test_image.jpg

    Lệnh này sẽ trả về File ID nếu tệp được tải lên thành công, ví dụ: group1/M00/00/00/wKhQCVkG9tOAO-qAAAGU5d_8X_A710.jpg.

6. Thiết lập Nginx để phục vụ HTTP

Để có thể truy cập các tệp tin đã tải lên qua giao thức HTTP, chúng ta cần tích hợp Nginx với module FastDFS Nginx.

  • Giải nén gói fastdfs-nginx-module (ví dụ: fastdfs-nginx-module_v1.16.tar.gz).
  • Chỉnh sửa tệp cấu hình của module:

    Mở /root/fastdfs-nginx-module/src/config và loại bỏ từ khóa local (nếu có) để đảm bảo biên dịch Nginx đúng cách với module này.

  • Biên dịch lại Nginx với module FastDFS:

    Chuyển đến thư mục mã nguồn Nginx (hoặc thư mục Nginx đã giải nén nếu bạn chưa cài đặt). Sau đó, thực hiện các lệnh sau:

    ./configure \
        --prefix=/usr/local/nginx \
        --pid-path=/var/run/nginx/nginx.pid \
        --lock-path=/var/lock/nginx.lock \
        --error-log-path=/var/log/nginx/error.log \
        --http-log-path=/var/log/nginx/access.log \
        --with-http_gzip_static_module \
        --http-client-body-temp-path=/var/temp/nginx/client \
        --http-proxy-temp-path=/var/temp/nginx/proxy \
        --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
        --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
        --http-scgi-temp-path=/var/temp/nginx/scgi \
        --add-module=/root/fastdfs-nginx-module/src
    sudo make
    sudo make install
  • Sao chép tệp cấu hình mod_fastdfs.conf và chỉnh sửa:
    sudo cp /root/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/

    Mở /etc/fdfs/mod_fastdfs.conf và cấu hình các thông số sau:

    # Địa chỉ IP và cổng của máy chủ Tracker
    tracker_server=YOUR_TRACKER_IP:22122
    # Đường dẫn nơi các tệp được lưu trữ trên Storage
    store_path0=/home/FastDFS/fdfs_storage/data
    # Đặt thành true nếu URL bao gồm tên nhóm (vd: /group1/M00/...)
    url_have_group_name=true
  • Cấu hình Nginx server block:

    Chỉnh sửa tệp cấu hình Nginx chính (thường là /usr/local/nginx/conf/nginx.conf hoặc trong thư mục conf.d) và thêm một khối server mới để xử lý các yêu cầu tệp tin của FastDFS:

    server {
        listen       80;
        server_name  YOUR_SERVER_IP; # Nên sử dụng địa chỉ IP thực của máy chủ Nginx
    
        location ~ /group([0-9])/M00/(.*) {
            # Đường dẫn gốc nơi FastDFS lưu trữ dữ liệu. Phải khớp với store_path0 của Storage.
            root /home/FastDFS/fdfs_storage/data;
            ngx_fastdfs_module;
        }
    }

    Thay thế YOUR_SERVER_IP bằng địa chỉ IP của máy chủ Nginx. Việc sử dụng địa chỉ IP cụ thể thay vì localhost thường được khuyến nghị để tránh các vấn đề truy cập.

  • Sao chép thư viện libfdfsclient.so:
    sudo cp /usr/lib64/libfdfsclient.so /usr/lib/
  • Khởi động Nginx:
    sudo /usr/local/nginx/sbin/nginx

    Nếu Nginx đã chạy, bạn có thể tải lại cấu hình bằng lệnh:

    sudo /usr/local/nginx/sbin/nginx -s reload

Lưu ý khi xử lý sự cố

Trong một số trường hợp, bạn có thể tải tệp thành công nhưng không thể xem được qua trình duyệt (thường gặp lỗi 404 Not Found). Dưới đây là các nguyên nhân và giải pháp thường gặp:

  1. Quyền truy cập thư mục: Đảm bảo thư mục lưu trữ dữ liệu của FastDFS có đủ quyền đọc/ghi cho người dùng Nginx. Bạn có thể cần điều chỉnh quyền bằng lệnh chmod:
    sudo chmod -R 755 /home/FastDFS/fdfs_storage/data

    (Trong môi trường thử nghiệm, bạn có thể sử dụng 777 nếu cần, nhưng 755 an toàn hơn cho sản xuất).

  2. Người dùng Nginx: Đảm bảo Nginx chạy với người dùng có quyền truy cập vào các thư mục FastDFS. Bạn có thể cấu hình chỉ thị user ở đầu tệp nginx.conf:
    user  nginx; # hoặc user  root; nếu gặp vấn đề về quyền (không khuyến khích cho môi trường sản xuất)
  3. Cấu hình Nginx server: Luôn ưu tiên sử dụng địa chỉ IP cụ thể của máy chủ thay vì localhost trong chỉ thị server_name. Đồng thời, kiểm tra kỹ để đảm bảo đường dẫn root trong khối location của Nginx trỏ đúng đến thư mục lưu trữ của FastDFS (ví dụ: root /home/FastDFS/fdfs_storage/data;).

Thẻ: fastdfs DistributedFileSystem linux nginx Storage

Đăng vào ngày 21 tháng 7 lúc 13:52