Giới thiệu FastDFS
FastDFS là hệ thống tệp tin phân tán mã nguồn mở viết bằng ngôn ngữ C, được thiết kế tối ưu cho môi trường mạng internet. Hệ thống này hỗ trợ các cơ chế như sao lưu dự phòng, cân bằng tải, mở rộng tuyến tính và tập trung vào các chỉ số hiệu năng cao.
Kiến trúc FastDFS bao gồm hai thành phần chính:
- Tracker Server: Thực hiện vai trò điều phối và cân bằng tải, quyết định Storage Server nào sẽ xử lý yêu cầu upload/download.
- Storage Server: Thực hiện lưu trữ vật lý các tệp tin, sử dụng hệ thống tệp tin của hệ điều hành.
Cài đặt và cấu hình
1. Cài đặt FastDFS
# Giải nén thư viện libfastcommon
unzip libfastcommon-master.zip
cd libfastcommon-master
./make.sh
./make.sh install# Cài đặt FastDFS chính
unzip fastdfs-master.zip
cd fastdfs-master
./make.sh
./make.sh install2. Cấu hình Tracker Server
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
mkdir -p /home/python/fastdfs/tracker
# Sửa file cấu hình
sed -i 's/base_path=\/home\/python\/fastdfs\/tracker/' /etc/fdfs/tracker.conf3. Cấu hình Storage Server
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
mkdir -p /home/python/fastdfs/storage
# Cấu hình đường dẫn và địa chỉ tracker
sed -i 's/base_path=\/home\/python\/fastdfs\/storage/
store_path0=\/home\/python\/fastdfs\/storage/
tracker_server=192.168.1.100:22122/' /etc/fdfs/storage.conf4. Khởi động dịch vụ
# Khởi động tracker và storage
service fdfs_trackerd start
service fdfs_storaged start
# Kiểm tra trạng thái
ps -ef | grep fdfsTích hợp Nginx
1. Cài đặt module FastDFS cho Nginx
tar -zxvf nginx-1.8.1.tar.gz
unzip fastdfs-nginx-module-master.zip
cd nginx-1.8.1
./configure --prefix=/usr/local/nginx/ \
--add-module=../fastdfs-nginx-module-master/src
make & make install2. Cấu hình Nginx
server {
listen 8888;
server_name localhost;
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
}Tự định nghĩa lớp lưu trữ Django
1. Tạo lớp FdfsStorage
from django.core.files.storage import Storage
from fdfs_client.client import Fdfs_client
class FdfsStorage(Storage):
def __init__(self, client_config='utils/fastdfs/client.conf', base_url='http://192.168.1.100:8888/'):
self.client_config = client_config
self.base_url = base_url
self.client = Fdfs_client(self.client_config)
def _save(self, name, content):
result = self.client.upload_by_buffer(content.read())
if result.get('Status') != 'Upload successed.':
raise Exception('Tải lên thất bại')
return result['Remote file_id']
def url(self, name):
return self.base_url + name2. Cấu hình settings.py
DEFAULT_FILE_STORAGE = 'utils.fastdfs.storage.FdfsStorage'
FDFS_CLIENT_CONF = 'utils/fastdfs/client.conf'
NGINX_URL = 'http://192.168.1.100:8888/'Kiểm tra hệ thống
Thực hiện upload tệp tin qua giao diện quản trị Django hoặc sử dụng lệnh:
fdfs_upload_file /etc/fdfs/client.conf test.jpgKết quả trả về dạng: group1/M00/00/00/file.jpg