Heartbeat+DRBD+MFS를 활용한 고가용성 파일 시스템 구성

고가용성 환경을 위한 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.243mfsmaster두 개의 디스크
가상 IP(VIP)10.1.1.111mfs-master이더넷 카드 0
심플러 싱크라니케이션용 네트워크192.168.1.8eth1직접 연결
backup 서버10.1.1.244mfsbackup두 개의 디스크
심플러 싱크라니케이션용 네트워크192.168.1.7eth1직접 연결
데이터 서버 110.1.1.245mfsdata01두 개의 디스크
데이터 서버 210.1.1.246mfsdata02두 개의 디스크
데이터 서버 310.1.1.247mfsdata03두 개의 디스크
클라이언트10.1.1.248mfsclient복제서버와 동일 호스트

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 설치 및 구성

각 노드에서 동일한 절차를 수행합니다.

  1. 심플러 네트워크 경로 설정:
    # 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
  2. 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
  3. 서비스 시작 및 상태 확인:
    chkconfig heartbeat off
    /etc/init.d/heartbeat start
    ip a | grep eth0

DRBD 설치 및 데이터 복제 구성

  1. 디스크 추가 및 파티셔닝:
    fdisk /dev/sdb
    partprobe
    mkfs.ext4 /dev/sdb1
    tune2fs -c -1 /dev/sdb1

    ※ 메타데이터 파티션(/dev/sdb2)은 파일 시스템 생성하지 않음

  2. 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
  3. 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];
        }
    }
  4. 서비스 실행 및 동기화:
    mkdir -p /usr/local/drbd-8.4/var/run/drbd
    drbdadm create-md data
    drbdadm up data
    cat /proc/drbd
  5. 마스터에서 우선권 설정:
    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 마스터 서버 설치 및 구성

  1. 사용자 및 그룹 생성:
    groupadd -g 1000 mfs
    useradd -g mfs -u 1000 mfs -s /sbin/nologin
  2. 필요 패키지 설치 및 컴파일:
    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
  3. 기본 설정 파일 복사 및 수정:
    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
  4. 메타데이터 초기화 및 서비스 시작:
    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) 설치

  1. 디스크 파티셔닝 및 마운트:
    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
  2. 설정 파일 수정:
    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
  3. 서비스 시작:
    /usr/local/mfs/sbin/mfschunkserver start
    echo "/usr/local/mfs/sbin/mfschunkserver start" >> /etc/rc.local

장애 테스트 및 고가용성 검증

  1. 마스터에서 /etc/init.d/heartbeat stop 실행
  2. 슬레이브에서 가상 IP, DRBD 역할, 마운트 포인트가 정상 작동하는지 확인
  3. 재시작 후 마스터가 다시 주 권한을 획득하는지 확인

기능 테스트 및 관리 명령어

  • 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 디렉터리로 이동하여 복원

태그: Heartbeat DRBD MooseFS high availability distributed file system

5월 31일 11:28에 게시됨