우분투에서 로컬 파일 시스템을 백엔드로 사용하는 JuiceFS를 구성하는 방법
JuiceFS는 클라우드 네이티브 분산 파일 시스템으로 객체 스토리지를 기본으로 사용하고 메타데이터를 Redis, MySQL, PostgreSQL과 같은 데이터베이스에 저장합니다.
로컬 파일 시스템을 백엔드 스토리지로 설정하고 Redis를 메타데이터 저장소로 사용합니다.
Architecture
테스트 환경
구분 | 호스트 이름 | 아이피 주소 | 비고 |
서버 | 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
클라이언트(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
- 백그라운드
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는 캐시 크기를 조정하여 파일 시스템 성능을 최적화할 수 있습니다.
- --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
'리눅스' 카테고리의 다른 글
[draft] CentOS 7의 EOL 문제로 인해 발생하는 패키지 설치 오류를 해결하는 방법 (0) | 2024.10.05 |
---|---|
[draft] 우분투에서 NGINX와 PHP-FPM을 설치하고 연동하는 방법 (0) | 2024.09.27 |
[draft] fuser 명령어 (0) | 2024.09.20 |
[draft] 우분투에서 Office 365를 통한 Postfix 릴레이를 설정하는 방법 (0) | 2024.09.20 |
[draft] 우분투에서 Gmail을 통한 Postfix 릴레이를 설정하는 방법 (0) | 2024.09.20 |