고가용성 환경을 위한 MFS 아키텍처 개요
MooseFS(MFS)는 분산형 파일 시스템으로, 대규모 데이터 저장과 고가용성을 목표로 설계되었습니다. 이 시스템은 여러 구성 요소로 이루어져 있으며, 각각의 역할은 다음과 같습니다.
주요 컴포넌트 설명
- 관리 서버 (Master Server): 전체 파일 시스템의 메타데이터를 관리하며, 파일 위치, 크기, 속성 정보를 유지합니다. 단일 활성 인스턴스만 존재해야 하며, 장애 시 복구에 핵심적인 역할을 합니다.
- 메타데이터 백업 서버 (MetaLogger Server): 주 서버의 메타데이터 변경 로그를 실시간으로 수신하여, 장애 발생 시 빠른 복구를 가능하게 합니다. 마치 데이터베이스의 슬레이브와 유사하지만, 실제 데이터를 저장하지는 않습니다.
- 데이터 서버 그룹 (Chunk Servers): 실제 파일 데이터를 저장하는 노드들입니다. 복제 수를 설정하면, 한 번의 쓰기 작업 후 다른 서버에도 동기화됩니다. 클라이언트의 요청을 처리하는 기본 저장소입니다.
- 클라이언트 (Client): MFS 파일 시스템을 마운트하여 읽기/쓰기 작업을 수행하는 시스템입니다. FUSE(Filesystem in Userspace) 기반으로 구현되어, 지원되는 운영체제에서는 쉽게 사용 가능합니다.
장점 및 단점
장점:
- 설치 및 구성이 간단하고 유지보수가 용이함
- 활발한 커뮤니티와 풍부한 문서 제공
- 온라인 확장이 가능하며, 서비스 중단 없이 확장 가능
- 클라이언트에서 이미지나 일반 파일처럼 보여져 백업 및 관리가 쉬움
- 디스크 사용률이 높음
- 삭제된 파일을 일정 시간 동안 보관할 수 있는 회수장(Recycle Bin) 기능 제공
- 읽기/쓰기 부하가 모든 서버에 균등하게 분산됨
- 공식 권장 사항: 최소 3개 이상의 데이터 복제본 설정
단점:
- 관리 서버는 단일 장애 지점(SPOF)이므로 고가용성 구성 필요
- 메모리 요구량이 다소 높음
- 메타데이터 복제 간격이 상대적으로 길어질 수 있음
기본 환경 준비 및 네트워크 구성
OS: CentOS 6.6 x86_64
| 역할 | IP 주소 | 호스트명 | 비고 |
|---|---|---|---|
| master 서버 | 10.1.1.243 | mfsmaster | 두 개의 디스크 |
| 가상 IP(VIP) | 10.1.1.111 | mfs-master | 이더넷 카드 0 |
| 심플러 싱크라니케이션용 네트워크 | 192.168.1.8 | eth1 | 직접 연결 |
| backup 서버 | 10.1.1.244 | mfsbackup | 두 개의 디스크 |
| 심플러 싱크라니케이션용 네트워크 | 192.168.1.7 | eth1 | 직접 연결 |
| 데이터 서버 1 | 10.1.1.245 | mfsdata01 | 두 개의 디스크 |
| 데이터 서버 2 | 10.1.1.246 | mfsdata02 | 두 개의 디스크 |
| 데이터 서버 3 | 10.1.1.247 | mfsdata03 | 두 개의 디스크 |
| 클라이언트 | 10.1.1.248 | mfsclient | 복제서버와 동일 호스트 |
hosts 파일 설정 예시:
10.1.1.243 mfsmaster
10.1.1.111 mfs-master
10.1.1.244 mfsbackup
10.1.1.245 mfs-data01
10.1.1.246 mfs-data02
10.1.1.247 mfs-data03
10.1.1.248 mfs-client01
기초 준비사항:
- 호스트명을 정확히 설정하고,
uname -n결과와 일치하도록 함 - SELinux 및 iptables 비활성화
- YUM 및 EPEL 소스 설정 완료
- 시간 동기화 설정 (NTP 또는 cron 기반)
- 네임 리졸루션을 위한 /etc/hosts 파일 정확히 구성
Heartbeat 설치 및 구성
각 노드에서 동일한 절차를 수행합니다.
- 심플러 네트워크 경로 설정:
# master /sbin/route add -host 192.168.1.7 dev eth1 echo "/sbin/route add -host 192.168.1.7 dev eth1" >> /etc/rc.local # slave /sbin/route add -host 192.168.1.8 dev eth1 echo "/sbin/route add -host 192.168.1.8 dev eth1" >> /etc/rc.local - Heartbeat 설치 및 기본 구성:
yum install heartbeat -y cd /usr/share/doc/heartbeat-3.0.4/ cp ha.cf haresources authkeys /etc/ha.d/ chmod 600 /etc/ha.d/authkeys # ha.cf 수정 debugfile /var/log/ha-debug logfile /var/log/ha-log logfacility local1 keepalive 2 deadtime 30 warntime 10 initdead 60 mcast eth1 225.0.0.181 694 1 0 auto_failback on node mfsmaster node mfsbackup # haresources 설정 mfsmaster IPaddr::10.1.1.111/24/eth0 # authkeys 설정 auth 1 1 sha1 dc8d9af580c6847d54ef276c8bc25471 - 서비스 시작 및 상태 확인:
chkconfig heartbeat off /etc/init.d/heartbeat start ip a | grep eth0
DRBD 설치 및 데이터 복제 구성
- 디스크 추가 및 파티셔닝:
fdisk /dev/sdb partprobe mkfs.ext4 /dev/sdb1 tune2fs -c -1 /dev/sdb1※ 메타데이터 파티션(/dev/sdb2)은 파일 시스템 생성하지 않음
- DRBD 컴파일 설치:
wget http://www.linbit.com/downloads/drbd/8.4/archive/drbd-8.4.4.tar.gz tar xf drbd-8.4.4.tar.gz cd drbd-8.4.4 ./configure --prefix=/usr/local/drbd-8.4 --with-km --with-heartbeat --sysconfdir=/etc/ make KDIR=/usr/src/kernels/$(uname -r) make install modprobe drbd echo "/sbin/modprobe drbd" >> /etc/rc.local - DRBD 리소스 구성 (/etc/drbd.conf):
global { usage-count no; } common { syncer { rate 100M; verify-alg crc32c; } } resource data { protocol C; disk { on-io-error detach; } on mfsmaster { device /dev/drbd0; disk /dev/sdb1; address 10.1.1.243:7788; meta-disk /dev/sdb2[0]; } on mfsbackup { device /dev/drbd0; disk /dev/sdb1; address 10.1.1.244:7788; meta-disk /dev/sdb2[0]; } } - 서비스 실행 및 동기화:
mkdir -p /usr/local/drbd-8.4/var/run/drbd drbdadm create-md data drbdadm up data cat /proc/drbd - 마스터에서 우선권 설정:
drbdadm -- --overwrite-data-of-peer primary data cat /proc/drbd # 동기화 진행 상태 확인
Heartbeat + DRBD 연동 구성
마스터 및 슬레이브 노드 모두 동일한 설정을 적용합니다.
chkconfig drbd off
/etc/init.d/heartbeat stop
# /etc/ha.d/haresources 수정
mfsmaster IPaddr::10.1.1.111/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/usr/local/mfs::ext4 mfsmaster
/etc/init.d/heartbeat start
실행 후 상태 확인:
- 마스터: 가상 IP와 /usr/local/mfs 마운트 확인
- 슬레이브: 전환 후 가상 IP, DRBD 역할, 마운트 포인트 확인
MFS 마스터 서버 설치 및 구성
- 사용자 및 그룹 생성:
groupadd -g 1000 mfs useradd -g mfs -u 1000 mfs -s /sbin/nologin - 필요 패키지 설치 및 컴파일:
yum install fuser* zlib* -y tar xf mfs-1.6.27-5.tar.gz cd mfs-1.6.27 ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs make && make install chown -R mfs.mfs /usr/local/mfs - 기본 설정 파일 복사 및 수정:
cd /usr/local/mfs/etc/mfs/ cp mfsmaster.cfg.dist mfsmaster.cfg cp mfsexports.cfg.dist mfsexports.cfg # mfsexports.cfg 수정 10.1.1.0/24 / rw,alldirs,maproot=mfs:mfs,password=111111 * . rw - 메타데이터 초기화 및 서비스 시작:
cd /usr/local/mfs/var/mfs/ cp metadata.mfs.empty metadata.mfs /usr/local/mfs/sbin/mfsmaster start # 자동 시작 설정 echo "/usr/local/mfs/sbin/mfsmaster start" >> /etc/rc.local
메타로그 서버 및 클라이언트 구성
클라이언트 및 메타로그 서버는 마스터와 동일한 패키지를 설치하고, 다음 설정을 수행합니다.
# 메타로그 서버 구성
cd /usr/local/mfs/etc/mfs/
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
MASTER_HOST = mfs-master # VIP 또는 도메인 이름
/usr/local/mfs/sbin/mfsmetalogger start
echo "/usr/local/mfs/sbin/mfsmetalogger start" >> /etc/rc.local
클라이언트 구성:
yum install fuse* -y
modprobe fuse
echo "modprobe fuse" >> /etc/rc.local
mkdir /mnt/mfs
mfsmount /mnt/mfs -H mfs-master -o mfspassword=111111
df -h
데이터 서버(Chunk Server) 설치
- 디스크 파티셔닝 및 마운트:
mkfs.ext4 /dev/sdb1 tune2fs -c -1 /dev/sdb1 mkdir /data/mfsdata mount /dev/sdb1 /data/mfsdata chown -R mfs.mfs /data/mfsdata echo "/dev/sdb1 /data/mfsdata ext4 defaults 0 0" >> /etc/fstab - 설정 파일 수정:
cd /usr/local/mfs/etc/mfs/ cp mfschunkserver.cfg.dist mfschunkserver.cfg cp mfshdd.cfg.dist mfshdd.cfg # mfschunkserver.cfg MASTER_HOST = mfsmaster # mfshdd.cfg /data/mfsdata - 서비스 시작:
/usr/local/mfs/sbin/mfschunkserver start echo "/usr/local/mfs/sbin/mfschunkserver start" >> /etc/rc.local
장애 테스트 및 고가용성 검증
- 마스터에서
/etc/init.d/heartbeat stop실행 - 슬레이브에서 가상 IP, DRBD 역할, 마운트 포인트가 정상 작동하는지 확인
- 재시작 후 마스터가 다시 주 권한을 획득하는지 확인
기능 테스트 및 관리 명령어
mfsfileinfo my.txt– 파일 복제 수 확인mfssetgoal -r 3 /mnt/mfs/– 복제 수 강제 설정mfsgettrashtime filename– 삭제 후 보존 시간 조회mfssettrashtime -r 1200 /mnt/mfs/– 보존 시간 설정mfsmount -H mfsmaster -m /mnt/mfs-trash/– 삭제된 파일 복원
복원 방법: /mnt/mfs-trash/trash/undel 디렉터리로 이동하여 복원