FastDFS 분산 파일 시스템 고가용성 클러스터 구축 안내

FastDFS 분산 파일 시스템 고가용성 클러스터 구축 안내

단일 서버 기반 파일 저장 방식은 여러 가지 한계를 가집니다. 특정 서버의 장애 발생 시 전체 서비스 중단, 한정적인 저장 공간으로 인한 확장성 문제, 그리고 높은 트래픽 발생 시 I/O 성능 저하 등이 대표적입니다.

이 가이드는 분산 파일 시스템인 FastDFS를 활용하여 고가용성 및 확장성을 갖춘 소규모 클러스터를 구축하는 방법을 상세히 설명합니다. 이 과정을 통해 여러분은 다음과 같은 시스템을 확보할 수 있습니다.

  • 테라바이트(TB) 이상의 대용량 파일 저장 및 관리가 가능한 분산 시스템
  • 자동 장애 복구를 지원하는 고가용성 아키텍처
  • 로드 밸런싱을 통한 효율적인 파일 접근 및 성능 최적화
  • 비즈니스 성장에 유연하게 대응할 수 있는 수평적 확장성

1. FastDFS 클러스터 아키텍처 이해

1.1. 주요 구성 요소

FastDFS 클러스터는 두 가지 핵심 서비스로 구성됩니다.

구성 요소 역할 기본 포트 배포 권장 사항
Tracker Server (트래커 서버) 스토리지 노드 관리, 로드 밸런싱, 장애 감지 22122 단일 장애점 방지를 위해 최소 2대 이상 배포
Storage Server (스토리지 서버) 실제 파일 저장 및 읽기/쓰기 서비스 제공 23000 데이터 백업 및 이중화를 위해 각 그룹당 최소 2대 이상 배포

1.2. 클러스터 토폴로지

FastDFS는 여러 개의 스토리지 그룹으로 구성될 수 있으며, 각 그룹 내에는 여러 스토리지 서버가 존재합니다. 트래커 서버는 이러한 그룹 및 서버의 메타데이터를 관리하며, 클라이언트의 파일 요청을 적절한 스토리지 서버로 라우팅합니다.

1.3. 데이터 동기화 메커니즘

동일한 스토리지 그룹 내의 스토리지 서버들은 파일 업로드 시 자동으로 서로 데이터를 동기화합니다. 이를 통해 한 서버에 장애가 발생하더라도 다른 서버를 통해 파일에 접근할 수 있어 데이터 무결성과 고가용성을 보장합니다.

2. 환경 준비 및 서버 구성 계획

2.1. 권장 하드웨어 사양

서버 유형 CPU 메모리 저장 공간 네트워크 운영 체제
트래커 서버 2코어 4GB 100GB SSD 기가비트 이더넷 CentOS 7/8
스토리지 서버 4코어 8GB 1TB+ HDD/SSD 기가비트 이더넷 CentOS 7/8

2.2. 서버 네트워크 구성

이 가이드에서는 총 6대의 서버를 사용하여 클러스터를 구축합니다 (실제 환경에 따라 축소 가능).

서버 역할 IP 주소 호스트명 기본 저장 경로 설명
트래커 1 192.168.209.121 tracker01 /var/fdfs_data/tracker 메인 트래커 서버
트래커 2 192.168.209.122 tracker02 /var/fdfs_data/tracker 보조 트래커 서버
스토리지 그룹1-1 192.168.209.131 storage01 /var/fdfs_data/storage, /mnt/fdfs/store0 스토리지 그룹 1의 주 노드
스토리지 그룹1-2 192.168.209.132 storage02 /var/fdfs_data/storage, /mnt/fdfs/store0 스토리지 그룹 1의 보조 노드
스토리지 그룹2-1 192.168.209.141 storage03 /var/fdfs_data/storage, /mnt/fdfs/store0 스토리지 그룹 2의 주 노드
스토리지 그룹2-2 192.168.209.142 storage04 /var/fdfs_data/storage, /mnt/fdfs/store0 스토리지 그룹 2의 보조 노드

2.3. 공통 환경 설정

모든 FastDFS 서버에서 다음 명령을 실행하여 필요한 의존성을 설치하고 디렉터리를 생성합니다.

# 시스템 필수 패키지 설치
sudo yum install -y gcc gcc-c++ make libevent libevent-devel perl unzip

# FastDFS 데이터 및 로그 저장 디렉터리 생성
sudo mkdir -p /var/fdfs_data/tracker /var/fdfs_data/storage /mnt/fdfs/store0 /var/log/fdfs

# 디렉터리 권한 설정
sudo chmod -R 755 /var/fdfs_data /mnt/fdfs /var/log/fdfs

3. 트래커 서버 설정

3.1. 트래커 서비스 설치

트래커 서버(192.168.209.121, 192.168.209.122)에 다음 단계를 진행합니다.

# FastDFS 소스 코드 클론
git clone https://gitcode.com/gh_mirrors/fa/fastdfs.git
cd fastdfs

# 컴파일 및 설치
./make.sh
sudo ./make.sh install

# 설정 파일 디렉터리 생성 및 기본 설정 파일 복사
sudo mkdir -p /etc/fdfs
sudo cp conf/tracker.conf /etc/fdfs/
sudo cp conf/client.conf /etc/fdfs/ # 클라이언트 테스트를 위해 복사

3.2. 트래커 설정 파일 (/etc/fdfs/tracker.conf) 상세 설명

/etc/fdfs/tracker.conf 파일을 편집하여 클러스터 환경에 맞게 조정합니다.

# 서비스 활성화 여부
disabled = false

# 트래커 서비스 포트
port = 22122

# 트래커 데이터 및 로그 저장 기본 경로
base_path = /var/fdfs_data/tracker

# 스토리지 선택 정책
# 0: 라운드 로빈, 1: 지정된 그룹, 2: 로드 밸런싱 (권장)
store_lookup = 2

# 스토리지 서버 선택 정책
# 0: 라운드 로빈, 1: 첫 번째 서버, 2: 우선순위 기준
store_server = 0

# 스토리지 경로 선택 정책
# 0: 라운드 로빈, 2: 로드 밸런싱 (남은 공간 기준)
store_path = 0

# 다운로드 서버 선택 정책
# 0: 라운드 로빈, 1: 원본 서버 다운로드
download_server = 0

# 최대 연결 수
max_connections = 1024

# 작업 스레드 수
work_threads = 4

# 스토리지에 예약할 공간 비율 (예: 20%는 사용 불가)
reserved_storage_space = 20%

# 스토리지 노드 활성 상태 확인 간격 (초)
check_active_interval = 120

# 클러스터 내 다른 트래커 서버 주소 (모든 트래커가 서로를 등록해야 함)
tracker_server = 192.168.209.121:22122
tracker_server = 192.168.209.122:22122

# 커넥션 풀 사용 여부
use_connection_pool = true

# 커넥션 풀 최대 유휴 시간 (초)
connection_pool_max_idle_time = 3600

3.3. 트래커 서비스 시작 및 설정

# 트래커 서비스 시작
sudo /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start

# 시스템 재부팅 시 자동 시작 설정 (rc.local 사용)
# 파일이 없다면 생성: sudo touch /etc/rc.local
# 권한 부여: sudo chmod +x /etc/rc.local
echo "/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start" | sudo tee -a /etc/rc.local

# 서비스 상태 확인
netstat -unltp | grep fdfs_trackerd
ps -ef | grep fdfs_trackerd

3.4. 방화벽 설정

트래커 서버의 22122 포트를 개방합니다.

# 22122/tcp 포트 허용
sudo firewall-cmd --zone=public --add-port=22122/tcp --permanent
sudo firewall-cmd --reload

# 개방된 포트 확인
sudo firewall-cmd --zone=public --list-ports

4. 스토리지 서버 설정

4.1. 스토리지 서비스 설치

모든 스토리지 서버(192.168.209.131, .132, .141, .142)에 다음 단계를 진행합니다.

# FastDFS 소스 코드 클론 (이미 트래커 서버에서 다운로드했다면 복사 가능)
git clone https://gitcode.com/gh_mirrors/fa/fastdfs.git
cd fastdfs

# 컴파일 및 설치
./make.sh
sudo ./make.sh install

# 설정 파일 디렉터리 생성 및 기본 설정 파일 복사
sudo mkdir -p /etc/fdfs
sudo cp conf/storage.conf /etc/fdfs/
sudo cp conf/client.conf /etc/fdfs/ # 클라이언트 테스트를 위해 복사

4.2. 스토리지 설정 파일 (/etc/fdfs/storage.conf) 상세 설명

/etc/fdfs/storage.conf 파일을 편집하여 각 스토리지 서버의 역할에 맞게 조정합니다.

# 서비스 활성화 여부
disabled = false

# 스토리지 그룹 이름 (각 그룹은 고유해야 하며, 동일 그룹 내 서버들은 이름이 같아야 함)
group_name = group1

# 스토리지 서비스 포트
port = 23000

# 스토리지 데이터 및 로그 저장 기본 경로
base_path = /var/fdfs_data/storage

# 실제 파일을 저장할 경로의 개수
store_path_count = 1

# 실제 파일을 저장할 첫 번째 경로
store_path0 = /mnt/fdfs/store0

# 바인딩할 IP 주소 (비워두면 모든 네트워크 인터페이스에 바인딩)
bind_addr =

# 클라이언트 바인딩 활성화 여부
client_bind = true

# 트래커 서버 주소 (모든 트래커 서버를 여기에 나열)
tracker_server = 192.168.209.121:22122
tracker_server = 192.168.209.122:22122

# 각 저장 경로 내의 서브 디렉터리 수
subdir_count_per_path = 256

# 파일 분산 모드: 0-라운드 로빈, 1-랜덤
file_distribute_path_mode = 0

# 최대 연결 수
max_connections = 1024

# 작업 스레드 수
work_threads = 4

# 디스크 읽기/쓰기 분리 여부
disk_rw_separated = true

# 디스크 읽기 스레드 수
disk_reader_threads = 1

# 디스크 쓰기 스레드 수
disk_writer_threads = 1

# 트래커에 보내는 하트비트 간격 (초)
heart_beat_interval = 30

# 상태 보고 간격 (초)
stat_report_interval = 60

# 동기화 시작/종료 시간
sync_start_time = 00:00
sync_end_time = 23:59

# 동기화 대기 시간 (밀리초)
sync_wait_msec = 50

# 동기화 간격 (초, 0은 즉시 동기화)
sync_interval = 0

4.3. 스토리지 서버별 설정 차이

각 스토리지 서버는 group_namestore_path0 설정을 해당 서버의 역할에 맞게 변경해야 합니다.

그룹 1 주 노드 (192.168.209.131) 및 보조 노드 (192.168.209.132):

group_name = group1
store_path0 = /mnt/fdfs/store0

그룹 2 주 노드 (192.168.209.141) 및 보조 노드 (192.168.209.142):

group_name = group2
store_path0 = /mnt/fdfs/store0

4.4. 스토리지 서비스 시작 및 설정

모든 스토리지 서버에서 다음 명령을 실행합니다.

# 스토리지 서비스 시작
sudo /usr/bin/fdfs_storaged /etc/fdfs/storage.conf start

# 시스템 재부팅 시 자동 시작 설정 (rc.local 사용)
echo "/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start" | sudo tee -a /etc/rc.local

# 서비스 상태 확인
netstat -unltp | grep fdfs_storaged
ps -ef | grep fdfs_storaged

4.5. 방화벽 설정

스토리지 서버의 23000 포트를 개방합니다.

# 23000/tcp 포트 허용
sudo firewall-cmd --zone=public --add-port=23000/tcp --permanent
sudo firewall-cmd --reload

5. 클러스터 상태 모니터링 및 검증

5.1. fdfs_monitor를 이용한 클러스터 상태 확인

아무 트래커 또는 스토리지 서버에서 다음 명령을 실행하여 클러스터 상태를 확인합니다.

# 클러스터 상태 모니터링 (클라이언트 설정 파일을 사용)
fdfs_monitor /etc/fdfs/client.conf

정상적인 출력에는 모든 트래커 및 스토리지 서버가 "ACTIVE" 상태로 표시되고, 스토리지 그룹 정보, 디스크 사용량 등이 포함되어야 합니다.

5.2. 클라이언트 기능 테스트

클라이언트 설정 파일(/etc/fdfs/client.conf)을 수정하여 트래커 서버 정보를 지정합니다.

# /etc/fdfs/client.conf 내용 수정
tracker_server = 192.168.209.121:22122
tracker_server = 192.168.209.122:22122
base_path = /tmp

이제 파일을 업로드, 다운로드, 삭제하여 클러스터 기능을 테스트합니다.

# 테스트 파일 생성
echo "FastDFS 클러스터 테스트" > sample_test.txt

# 파일 업로드
fdfs_upload_file /etc/fdfs/client.conf sample_test.txt
# 예시 출력: group1/M00/00/00/wKgBbF9xxxxxxxxx.txt

# 업로드된 파일 경로를 사용하여 다운로드
fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKgBbF9xxxxxxxxx.txt downloaded_sample.txt

# 다운로드된 파일 내용 확인
cat downloaded_sample.txt

# 파일 삭제
fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKgBbF9xxxxxxxxx.txt

5.3. 장애 복구 테스트

클러스터의 고가용성을 검증하기 위해 다음과 같은 장애 테스트를 수행합니다.

  1. 트래커 서버 장애 테스트:

    # 한 대의 트래커 서버 정지
    sudo /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop
    
    # 파일 업로드/다운로드를 시도하여 서비스가 여전히 작동하는지 확인
    fdfs_upload_file /etc/fdfs/client.conf another_test.txt
    fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/새로운_파일_ID.txt # 새로 업로드된 파일 ID 사용
    
  2. 스토리지 서버 장애 테스트:

    # 한 대의 스토리지 서버 정지 (예: group1-1)
    sudo /usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop
    
    # 기존 파일 다운로드를 시도하여 다른 스토리지 서버를 통해 접근 가능한지 확인
    fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKgBbF9xxxxxxxxx.txt downloaded_from_other_storage.txt
    

    두 테스트 모두에서 파일 작업이 정상적으로 이루어진다면 클러스터의 고가용성이 성공적으로 작동함을 의미합니다.

6. 고급 설정 및 성능 최적화

6.1. 스토리지 경로 확장

단일 스토리지 경로의 공간이 부족해질 경우, storage.conf 파일에 새로운 저장 경로를 추가하여 확장할 수 있습니다.

# storage.conf 파일에 추가
store_path_count = 2          # 저장 경로 개수 증가
store_path0 = /mnt/fdfs/store0 # 기존 경로
store_path1 = /mnt/fdfs/store1 # 새로운 경로

# 새로운 저장 경로 디렉터리 생성 및 권한 설정
sudo mkdir -p /mnt/fdfs/store1
sudo chmod 755 /mnt/fdfs/store1

# 스토리지 서비스 재시작
sudo /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

6.2. 연결 풀 최적화

트래커 및 스토리지 서버의 .conf 파일에서 연결 풀 설정을 조정하여 성능을 향상시킬 수 있습니다.

# 트래커 및 스토리지 설정 파일 공통 적용
use_connection_pool = true
connection_pool_max_idle_time = 3600 # 연결 최대 유휴 시간 (초)
max_connections = 2048              # 최대 연결 수 증가
work_threads = 8                    # 작업 스레드 수 증가

6.3. 로그 순환 설정

로그 파일이 과도하게 커지는 것을 방지하기 위해 로그 순환 설정을 활성화합니다.

# tracker.conf 및 storage.conf 파일에 설정
rotate_error_log = true       # 에러 로그 순환 활성화
rotate_access_log = true      # 접근 로그 순환 활성화
log_file_keep_days = 7        # 로그 파일 보관 일수
compress_old_log = true       # 오래된 로그 파일 압축

7. 클러스터 운영 및 일상 관리

7.1. 일상적인 관리 명령어

# 트래커 서비스 관리
sudo /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf {start|stop|restart|status}

# 스토리지 서비스 관리
sudo /usr/bin/fdfs_storaged /etc/fdfs/storage.conf {start|stop|restart|status}

# 클러스터 전반적인 상태 확인
fdfs_monitor /etc/fdfs/client.conf

# 스토리지 서버 동기화 상태 확인
fdfs_monitor /etc/fdfs/client.conf | grep "Sync"

# 스토리지 디렉터리별 사용량 확인
fdfs_df /etc/fdfs/client.conf

7.2. 클러스터 확장 절차

새로운 스토리지 그룹 추가:

  1. 새로운 스토리지 서버 준비
  2. 새 서버에 FastDFS 설치 및 고유한 group_name 설정
  3. 새 스토리지 서버 시작
  4. fdfs_monitor를 통해 새 그룹이 클러스터에 성공적으로 추가되었는지 확인

기존 그룹에 새로운 스토리지 노드 추가:

  1. 새로운 스토리지 서버 준비
  2. 새 서버에 FastDFS 설치 및 기존 그룹과 동일한 group_name 설정
  3. 새 스토리지 서버 시작 (자동으로 기존 데이터 동기화 시작)
  4. fdfs_monitor를 통해 새 노드의 상태 확인

7.3. 일반적인 문제 해결

문제 현상 가능한 원인 해결 방안
스토리지 서버 상태 "DOWN" 서비스가 실행 중이지 않음 sudo /usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
트래커 연결 불가 방화벽에서 포트가 차단됨 트래커 서버의 22122 포트 방화벽 규칙 확인 및 추가
데이터 동기화 실패 네트워크 문제 또는 디스크 공간 부족 네트워크 연결 상태 및 디스크 여유 공간 확인
파일 업로드 실패 스토리지 그룹에 남은 공간 부족 스토리지 그룹 확장 또는 불필요한 파일 정리
트래커 서버 응답 없음 트래커 서비스 비정상 종료 트래커 서비스 재시작: sudo /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

8. 결론 및 최적화 전략

8.1. 클러스터 배포 권장 사항

  • 단일 장애점을 피하기 위해 최소 2대 이상의 트래커 서버를 배포하십시오.
  • 데이터 이중화를 위해 각 스토리지 그룹에 최소 2대 이상의 스토리지 서버를 배치하십시오.
  • 모든 서버의 시간을 동기화하여 동기화 관련 문제를 방지하십시오.
  • 모니터링 도구를 사용하여 클러스터 상태를 주기적으로 확인하십시오.
  • 디스크 공간 고갈을 방지하기 위해 적절한 보존 공간(reserved_storage_space)을 설정하십시오.
  • 설정 파일을 정기적으로 백업하십시오.
  • 문제 발생 시 즉시 감지할 수 있도록 모니터링 경보 시스템을 구축하십시오.

8.2. 성능 최적화 핵심 사항

  1. 하드웨어 최적화: SSD 사용, 메모리 증설, 여러 디스크를 통한 I/O 분산
  2. 설정 최적화: 적절한 작업 스레드 수 설정, 연결 풀 사용, 서브 디렉터리 구조 최적화
  3. 네트워크 최적화: 고대역폭 네트워크 사용, 동일 그룹 서버를 같은 네트워크 세그먼트에 배치, 동일 스토리지 그룹의 광역 분산 회피

이 가이드를 통해 FastDFS 기반의 고가용성 및 확장 가능한 분산 파일 저장 시스템을 성공적으로 구축했을 것입니다. 비즈니스 요구사항에 따라 스토리지 그룹 및 노드를 유연하게 확장하여 끊임없이 증가하는 저장 공간 요구를 충족할 수 있습니다.

태그: FastDFS 분산파일시스템 고가용성 클러스터링 스토리지서버

7월 18일 18:42에 게시됨