1. Giới thiệu:
JuiceFS là 1 dạng Filesystem được thiết kế cho môi trường điện toán đám mây, tương thích với các loại hệ thống lưu trữ dạng đối tượng như S3. Giúp kết nối S3 như một local filesystem.
JuiceFS chia thành 3 phần chính
- Client: Juicefs Client sử dụng tất cả I/O operations của file.
- Metadata được lưu giữ trên các hệ thống database như Redis, Mysql, SQLite ...
- Data: khi file được lưu trên JuiceFS, thì sẽ được chia thành nhiều mảnh và lưu trên Object Storage
2. Cài đặt JuiceFS
JuiceFS hỗ trợ nhiều hệ điều hành như MacOS, Linux, Windows, ở bài hướng dẫn này sẽ sử dụng Ubuntu 20.04.
a. Cài đặt với one-click trên Linux và MacOS luôn cài đặt version mới nhất
# default installation path is /usr/local/bin
curl -sSL https://d.juicefs.com/install | sh -
có thể xem thêm các cách cài đặt khác tại link sau https://juicefs.com/docs/community/installation
3. Setup Metadata
Ở bài viết này sẽ sử dụng Redis Server để làm metadata store, Redis là 1 dạng memory database nên về hiệu năng sẽ tốt nhất
a. Cài đặt redis-server
- Cài đặt trên Ubuntu
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install redis
- Cài đặt trên Centos
sudo yum install epel-release
sudo yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm yum --enablerepo=remi install redis sudo systemctl enable --now redis
b. Cấu hình Redis
Sau khi cài đặt service redis-server sẽ tự start, mặc định sẽ có sẵn 16 database 0-15, nếu muốn nhiều hơn thì có thể điều chỉnh trong file redis.conf , edit 2 giá trị sau để sử dung RDB+AOF đảm bảo an toàn dự liệu
appendonly yes appendfsync everysec
c. Format DB để lưu thông tin kết nối
Theo dạng: juicefs format --storage s3 --bucket https://<bucket>.<endpoint> --access-key <key> --secret-key <secret> redis://127.0.0.1:6379/<db-name> <meta-name> VD: juicefs format --storage s3 --bucket https://s3zam1.s3-hcm-r1.longvan.net --access-key 3M2X8P3PMFRxxxxxxx --secret-key CR6NCOWya0qqRKcjvB769xxxxxxxxxxx redis://127.0.0.1:6379/1 juicefs-cmc === Với DB MariaDB/Mysql thì khi thực hiện format hay mount sẽ theo cấu trúc sau "mysql://username:password@(IP:PORT)/<db-name>?tls=true" "mariadb://username:password@(IP:PORT)/<db-name>?tls=true" # sử dụng ?tls=true nếu như DB yêu cầu kết nối TLS Sau khi format filesystem thành công thì S3 user sẽ tạo ra bucket ứng
Lưu ý: KHI FORMAT VÀ MOUNT S3 STORAGE MÀ SỬ DỤNG IP PRIVATE CỦA ENDPOINT S3 THÌ CHỈ SỬ DỤNG HTTP
KHI SỬ DỤNG HTTPS TA CÓ THỂ THÊM OPTIONS --shards=<số lượng bucket> ĐỂ TĂNG HIỆU NĂNG WRITE LÊN S3 STORAGE
juicefs format --storage s3 --bucket https://<endpoint>/<bucket-id-%d> --access-key <key> --secret-key <secret> --shards <number> redis://127.0.0.1:6379/<db-name> <meta-name>
VD: juicefs format --storage s3 --bucket https://s3-hcm5-r1.longvan.net/bucket-%d --access-key <key> --secret-key <secret> --shards 5 redis://127.0.0.1:6379/<db-name> <meta-name> thì trên user S3 sẽ tạo ra 5 bucket lần lượt bucket-0, bucket-1 ... 4
với folder meta là nơi sẽ lưu các bản backup của metadata, folder chunks sẽ là nơi lưu các dữ liệu sau khi được chia nhỏ và mã hóa.
4. Mount JuiceFS as Filesystem
# Redis metadata juicefs mount redis://127.0.0.1:6379/1 --writeback --cache-size <value MB> -d --buffer-size <value MB> --max-uploads <number int> --update-fstab --backup-meta <value> </path/to/mount> # Mysql/MariaDB juicefs mount "mysql://user:pass@(127.0.0.1:3306)/1" </path/to/mount> --writeback --cache-size <value MB> --writeback: dùng chế độ cache write mode xuống folder /var/jfsCache --cache-size: dung lượng folder dùng để cache --d : chạy dưới dạng daemon --buffer-size: dung lượng RAM để làm bộ đệm cho quá trình read/write data --max-uploads: số thread đồng thời upload data default:20, để tối ưu hiệu năng write thì tăng thêm lên 50 --update-fstab: juicefs sẽ tự tạo 1 lệnh mount on boot vào /etc/fstab --backup-meta: khoảng thời gian sẽ backup metadata 1 lần, mặc định là 3600s
5.Backup và Restore metadata
a. Backup
Mặc định Juicefs sẽ auto backup mỗi 1h, có thể giảm thời gian xuống tối thiểu là 5 phút ứng với 300s, hoặc có thể manual backup bằng command sau juicefs dump redis://127.0.0.1:6379 meta-dump.json
b. Restore
Juicefs rất thuận tiện cho việc restore metadata cache không phân biệt service DB trước đó đã sử dụng là gì.
VD: lúc trước sử dụng mysql để làm metadata db, sau khi lấy file backup từ S3 User ta thực hiện command sau để restore lại
juicefs load <meta-url> <path-to-backup-file> VD: juicefs load redis://127.0.0.1:6379 meta-dump.json
Nhưng sau khi restore lại thì Secret key sẽ không còn, ta cần thực hiện add lại
juicefs config redis://127.0.0.1:6379/1 --secret-key <key-string>