본문 바로가기

리눅스

[draft] 우분투에서 로컬 파일 시스템을 백엔드로 사용하는 JuiceFS를 구성하는 방법

728x90

우분투에서 로컬 파일 시스템을 백엔드로 사용하는 JuiceFS를 구성하는 방법

JuiceFS는 클라우드 네이티브 분산 파일 시스템으로 객체 스토리지를 기본으로 사용하고 메타데이터를 Redis, MySQL, PostgreSQL과 같은 데이터베이스에 저장합니다.

 

로컬 파일 시스템을 백엔드 스토리지로 설정하고 Redis를 메타데이터 저장소로 사용합니다.

Architecture

https://juicefs.com/docs/assets/images/juicefs-arch-52477e7677b23c870b72f08bb28c7ceb.svg

테스트 환경

구분 호스트 이름 아이피 주소 비고
서버 jnode1 192.168.0.122  
클라이언트 jnode2 192.168.0.112  

서버(jnode1) 설정

필수 패키지 설치

sudo apt update
sudo apt install curl

FUSE 패키지 설치

sudo apt install fuse

Redis 설치

sudo apt install redis-server

Bind 포트 변경

sed -i 's/^bind 127.0.0.1 ::1/bind 0.0.0.0/' /etc/redis/redis.conf

AOF 활성화

sed -i 's/^appendonly no/appendonly yes/' /etc/redis/redis.conf

Redis 서버 시작

sudo systemctl start redis
sudo systemctl enable redis

Redis 서비스 상태 확인

systemctl status redis

Redis 핑 테스트

redis-cli -h 192.168.0.122 ping
$ redis-cli -h 192.168.0.122 ping
PONG

JuiceFS 설치

JFS_LATEST_TAG=$(curl -s https://api.github.com/repos/juicedata/juicefs/releases/latest | grep 'tag_name' | cut -d '"' -f 4 | tr -d 'v')
$ echo $JFS_LATEST_TAG
1.2.1
wget https://d.juicefs.com/juicefs/releases/download/v${JFS_LATEST_TAG}/juicefs-${JFS_LATEST_TAG}-linux-amd64.tar.gz
tar -zxf juicefs-${JFS_LATEST_TAG}-linux-amd64.tar.gz
sudo install juicefs /usr/local/bin
$ juicefs --version
juicefs version 1.2.1+2024-08-30.cd871d1

로컬 파일 시스템 디렉토리 생성

JuiceFS가 데이터를 저장할 디렉토리를 생성합니다.

sudo mkdir -p /mnt/local_storage

JuiceFS 파일 시스템 초기화

이 명령에서 --storage file을 사용하여 로컬 파일 시스템을 백엔드로 설정하고 Redis를 메타데이터 저장소로 설정합니다.

  • --storage file : 로컬 파일 시스템을 스토리지로 사용한다는 의미
  • --bucket /mnt/local_storage : 로컬 파일이 저장될 디렉토리
  • redis://localhost:6379/1 : Redis 서버에서 1번 데이터베이스를 메타데이터 저장소로 사용
  • my-local-fs : 파일 시스템 이름
juicefs format \
    --storage file \
    --bucket /mnt/local_storage \
    redis://localhost:6379/1 \
    my-local-fs
$ juicefs format \
>     --storage file \
>     --bucket /mnt/local_storage \
>     redis://localhost:6379/1 \
>     my-local-fs
2024/09/26 13:17:40.517065 juicefs[14493] <INFO>: Meta address: redis://localhost:6379/1 [interface.go:504]
2024/09/26 13:17:40.518858 juicefs[14493] <INFO>: Ping redis latency: 17.481µs [redis.go:3515]
2024/09/26 13:17:40.519099 juicefs[14493] <INFO>: Data use file:///mnt/local_storage/my-local-fs/ [format.go:484]
2024/09/26 13:17:40.520138 juicefs[14493] <INFO>: Volume is formatted as {
  "Name": "my-local-fs",
  "UUID": "99547fa4-db9c-4c36-9281-436d41199d1f",
  "Storage": "file",
  "Bucket": "/mnt/local_storage/",
  "BlockSize": 4096,
  "Compression": "none",
  "EncryptAlgo": "aes256gcm-rsa",
  "TrashDays": 1,
  "MetaVersion": 1,
  "MinClientVersion": "1.1.0-A",
  "DirStats": true,
  "EnableACL": false
} [format.go:521]
$ ls -l /mnt/local_storage/my-local-fs/juicefs_uuid 
-rw-r--r-- 1 root root 36 Sep 26 13:17 /mnt/local_storage/my-local-fs/juicefs_uuid
728x90

클라이언트(jnode2) 설정

필수 패키지 설치

sudo apt update
sudo apt install curl

FUSE 패키지 설치

sudo apt install fuse

Redis 클라이언트 설치

  • Redis에 직접 연결할 수 있어야 하므로 Redis 클라이언트를 설치할 수 있습니다.
sudo apt install redis-tools

Redis 핑 테스트

redis-cli -h 192.168.0.122 ping
$ redis-cli -h 192.168.0.122 ping
PONG

JuiceFS 설치

curl -sSL https://d.juicefs.com/install | sh -
$ curl -sSL https://d.juicefs.com/install | sh -
Downloading juicefs-1.2.1-linux-amd64.tar.gz
/tmp/juicefs-install.lhAetU/juicefs 100%[=======================>]  26.71M  11.1MB/s    in 2.4s    
Downloading juicefs-1.2.1-linux-amd64.tar.gz
/tmp/juicefs-install.lhAetU/checksu 100%[=======================>]     499  --.-KB/s    in 0s      
Checking packages integrity ...
juicefs-1.2.1-linux-amd64.tar.gz: OK
Install juicefs to /usr/local/bin/juicefs successfully!
$ juicefs --version
juicefs version 1.2.1+2024-08-30.cd871d1

클라이언트에서 JuiceFS 마운트

마운트할 디렉토리 생성

sudo mkdir -p /mnt/my_juicefs

JuiceFS 파일 시스템 마운트

서버의 Redis 메타데이터 저장소에 접근하여 JuiceFS 파일 시스템을 /mnt/my_juicefs에 마운트합니다.

  • 포그라운드
juicefs mount redis://192.168.0.122:6379/1 /mnt/my_juicefs

juicefs_mount

  • 백그라운드
mkdir /var/log/juicefs
nohup juicefs mount redis://192.168.0.122:6379/1 /mnt/my_juicefs > /var/log/juicefs/juicefs.log 2>&1 &
$ nohup juicefs mount redis://192.168.0.122:6379/1 /mnt/my_juicefs > /var/log/juicefs/juicefs.log 2>&1 &
[1] 12617

마운트 확인

$ df -h | egrep -v tmpfs
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv--0   79G  8.4G   71G  11% /
/dev/sda2             1014M  294M  721M  29% /boot
JuiceFS:my-local-fs    1.0P     0  1.0P   0% /mnt/my_juicefs

JuiceFS 사용

클라이언트에서 JuiceFS가 마운트된 디렉토리에서 파일을 생성하고 작업할 수 있습니다.

  • 디렉토리 확인
ls /mnt/my_juicefs
  • 파일 생성
echo "Hello, JuiceFS!" > /mnt/my_juicefs/hello.txt
  • 파일 확인
cat /mnt/my_juicefs/hello.txt

자동 마운트 설정

서버가 재부팅될 때마다 JuiceFS 파일 시스템을 자동으로 마운트하려면 /etc/fstab 파일에 항목을 추가해야 합니다.

  • redis://192.168.0.122:6379/1 : Redis 서버의 주소와 데이터베이스 경로입니다. 여기서는 192.168.0.122 IP의 Redis 서버 포트 6379의 데이터베이스 1을 사용하여 JuiceFS 메타데이터를 저장합니다.
  • /mnt/my_juicefs : JuiceFS 파일 시스템을 마운트할 경로입니다. 이 경로에 JuiceFS 파일 시스템이 연결됩니다. juicefs: 파일 시스템 타입입니다. 여기서 juicefs를 사용해 FUSE 방식으로 마운트를 지정합니다.
  • _netdev,max-uploads=50,writeback,cache-size=204800 : 마운트 옵션들입니다. 각각의 옵션은 다음과 같습니다:
    • _netdev : 네트워크 파일 시스템임을 나타내며, 네트워크가 활성화된 후에만 마운트가 시도됩니다. Redis 서버가 네트워크를 통해 연결되므로 필요합니다.
    • max-uploads=50 : 동시에 업로드할 수 있는 파일의 최대 개수를 50으로 설정합니다.
    • writeback : 쓰기 작업을 캐시한 후, 나중에 실제로 백엔드 스토리지에 기록하는 비동기 쓰기 모드를 사용합니다. 성능 향상에 도움이 될 수 있습니다.
    • cache-size=204800 : 디스크 캐시 크기를 204800 MiB(약 200 GiB)로 설정합니다. 이 캐시는 클라이언트에서 자주 사용하는 데이터를 저장하여 성능을 높이는 데 사용됩니다.
  • 0 0 :
    • 첫 번째 숫자 0 : 파일 시스템 덤프를 할 필요가 없음을 나타냅니다.
    • 두 번째 숫자 0 : 파일 시스템 체크 순서를 나타냅니다. 0은 체크하지 않음을 의미합니다.
echo "redis://192.168.0.122:6379/1 /mnt/my_juicefs juicefs _netdev,max-uploads=50,writeback,cache-size=204800 0 0" | sudo tee -a /etc/fstab

마운트 확인

mount -av

juicefs_mount

성능 최적화

로컬 디스크를 백엔드로 사용하는 경우 성능을 높이기 위해 캐시 크기 등을 조정할 수 있습니다.

 

캐시 크기 설정

  • 캐시를 사용하여 성능을 향상시킬 수 있습니다. JuiceFS는 캐시 크기를 조정하여 파일 시스템 성능을 최적화할 수 있습니다.
  • --cache-size 2048: 캐시 크기를 2048MB로 설정
juicefs mount --cache-size 2048 redis://localhost:6379/1 /mnt/my_juicefs

 

참고URL

- JuiceFS : Download(Install with one line command)

- JuiceFS Docs : Installation

- JuiceFS Docs : Mount JuiceFS at Boot Time

 

728x90