2015년 10월 27일 화요일

메모리 종류에 대하여


  • 서버의 보드 종류에 따라 사용가능한 메모리가 있다는 사실을 알게됨
    • 메모리의 종류
      • Unbuffered Non-ECC - 일반적으로 많이 사용되는 PC용 메모리
        표기시 : PC3-10600 혹은 10600등으로 표시됨
      • Unbuffered ECC - 메모리 에러 검출 기능이 포함된 메모리. 어지간한 보드는 지원한다.
        표기시 : PC3-10600E 혹은 ECC 등으로 표시됨
      • REG - Registered 메모리. 메모리에 메모리 컨트롤러가 들어 있는 메모리이다.
        표기시 : PC3-10600R 혹은 REG 등으로 표시됨
        메모리 컨트롤러가 다르기 때문에 지원하지 않는 보드에서는 사용이 불가능하다.
    • 리눅스에서 보드 정보 확인 후 보드 메뉴얼과 비교
[root@gate2 ~]# dmidecode -t 16
# dmidecode 2.12
SMBIOS 2.7 present.
Handle 0x002D, DMI type 16, 23 bytes
Physical Memory Array
     Location: System Board Or Motherboard
     Use: System Memory
     Error Correction Type: Multi-bit ECC     Maximum Capacity: 96 GB     Error Information Handle: Not Provided
     Number Of Devices: 8
Handle 0x003F, DMI type 16, 23 bytes
Physical Memory Array
     Location: System Board Or Motherboard
     Use: System Memory
     Error Correction Type: Multi-bit ECC     Maximum Capacity: 96 GB     Error Information Handle: Not Provided
     Number Of Devices: 8
          • 위 보드의 경우 뱅크가 2개로 총 192기가를 사용가능하고, 한 슬롯에는 96기가까지 연결할 수 있고, REG/ECC/Non-ECC를 사용할 수 있다. 사용 가능성은 보드 메뉴얼을 참조해야 햐며, 위 보드의 경우 REG<->ECC<->non-ECC의 혼용 불가 보드.
    [root@t2cpu0033 ~]# dmidecode -t 16
    # dmidecode 2.12
    SMBIOS 2.7 present.
    Handle 0x0041, DMI type 16, 23 bytes
    Physical Memory Array
         Location: System Board Or Motherboard
         Use: System Memory
         Error Correction Type: Single-bit ECC     Maximum Capacity: 32 GB
         Error Information Handle: Not Provided
         Number Of Devices: 4
        • 위 보드의 경우에는 ECC, Non-ECC 두가지 사용 가능. 단, 2개의 혼용은 불가.
    [root@ce02 ~]# dmidecode -t 16
    # dmidecode 2.12
    SMBIOS 2.7 present.
    Handle 0x003F, DMI type 16, 23 bytes
    Physical Memory Array
         Location: System Board Or Motherboard
         Use: System Memory
         Error Correction Type: None     Maximum Capacity: 32 GB
         Error Information Handle: Not Provided
         Number Of Devices: 4
        • 위 보드의 경우에는 무조건 Non-ECC만 사용가능.
      • 100% 맞다고 확신할 수는 없기 때문에 보드 메뉴얼을 꼭 확인해야하지만, 대체로
        • Multi-bit ECC는 REG까지,
        • Single-bit ECC는 unbuffered ECC까지,
        • None은 Non-ECC까지 지원하는 것으로 확인(이것은 확실할 듯)
      • 서로간의 혼용은 금지되는 듯 하다.

    2015년 10월 20일 화요일

    실험실에서 사용하는 Intel RAID 카드에 대해서


    Intel Raid카드를 쓰게되는 이유?

    서론



    • 데이터의 저장이 매우 중요한 입자물리 실험 연구실은 다른 타 연구실보다 디스크 저장용량에 대한 관심이 크기 마련이다. 우리 실험의 경우에도 2015년 10월 20일 현재 250TB의 용량을 지원하기 위해 스토리지 서버만 9대를 운영하고 있다.
      (물론, 우리 연구실이 CMS Tier3 센터긴 하지만..)
    • 파일시스템은 Lustre를 쓰고 있고 이에 대한 글은 이미 썼으니, 이번에는 RAID카드에 대한 이야기를 하는게 좋을 거 같다.
      • 아무래도, 우리 연구실은 Intel 친화적이다보니 모든 장비들이 어느새인가 인텔 장비임을 발견할 수 있다. 

    인텔 Raid카드의 종류

    • 16채널 장비(SE07, SE08, SE09) 의 RMS25CB040


      • 16채널 장비를 지원하기 위한 레이드 카드
        • RAID6를 이용 중!
    • 기타 장비는 추후 업데이트할 수도 있음
      • 어차피 설정은 똑같으니 뭐..

    어떤 RAID 옵션을 선택하여야 하는가?


    • RAID0 
      • Stripe라고 하며 하드디스크 여러 개를 하나의 디스크인 것처럼 사용하게 해주며, 속도 향상에 엄청난 도움을 주기 때문에 오버클러커나 하드코어 유저에게는 친숙한 RAID라고 한다.
      • 물론, 우리랑은 별로 안 친하다.
    • RAID1
      • Mirroring이라고 한다. 흔히 이야기 하는 미러 사이트 처럼 디스크 2개를 똑같이 쓰고 똑같이 읽어낸다. 즉, 2개로 구성된 RAID1은 쓰기속도는 1개랑 같고 읽기 속도는 2배가 된다.
      • 디스크 물량이 충분할 경우, 주요 서버의 root파티션이나 /boot 파티션을 보호하기 위하여 Software Raid1으로 구성하는 경우가 종종 있다.
        • 구성만 된다면 하나의 디스크가 파손되더라도 OS를 재설치하는 불우한 경우를 면할 수 있게 된다.
          • 물론, 투자할 시간이 많다면 아무래도 상관 없지만,
    • RAID5
      • RAID5부터 진정한 레이드라고 볼 수 있는데 어쩌면 RAID5나 6 때문에 위의 레이드 카드를 구매한다고 생각하면 된다.
        • 소프트웨어나 내장 레이드에 비해 퍼포먼스가 확실히 상승.
      • RAID5는 3개의 디스크 기준으로 패리티 정보를 각각 저장하므로써 3개 중 하나의 디스크가 파손되더라도 이를 복구해낼 수 있는 장점이 있다.
        • 디스크 3개가 필요하다는 단점이 있지만 RAID1보다 낭비되는 용량이 확연히 줄게 된다.
      • 예전에 한번 구성했다가 몇번 날려먹은 뒤로는 잘 안 쓰는 레이드 모드이다.
    • RAID6
      • RAID5에다가 디스크가 하나 더 포함되었다고 생각하면 된다.
      • 2+2의 구성이 가장 작은 규모의 구성이며, 디스크가 2개가 망가졌을 때에도 이를 복구해낼 수가 있다.
        • 의외로 리빌딩 작업 중 추가 하드디스크의 손상은 자주 있는 일이라고 한다.

    연구실에서는 RAID6가 기본이라고 생각하자.


    • 기본적으로 저장서버의 경우 RAID6를 추천하고 있다. 
      • (Lustre 메뉴얼 및 발표자료에 보면 수많은 추천사항을 볼 수 있음)

    RAID 중 디스크 fail시

    1. Intel Raid 카드의 경우

      • 디스크 손상시 다음과 같은 상태가 된다.
        • 왼쪽 2번째 위에서 3번째 칸 하드디스크를 살펴보면 붉은색 경고창을 볼 수 있다.
        • 물론, 서버에서 알람 소리가 나기 때문에 소리로 먼저 알게된다.
      • 핫스왑베이 이기 때문에 그냥 꺼내다가 하드를 교체 후 다시 삽입하면 된다.
        • 이럴 경우, 기본적으로라면 자동으로 리빌딩 작업이 진행된다.
          • 붉은색과 녹색 불로 왔다갔다하면서 작업 진행
            • 리빌딩은 시간이 매우 오래 걸리니깐 걸어놓고 잊어먹자
        • 자동으로 리빌딩이 안된다면,
          • RAID Web Controller for Linux x64 version 설치
          • 압축을 풀고 disk/RunRPM.sh 파일을 실행하면 설치 진행
            • 설치시 SNMP 프로토콜 충돌이 안 나도록 잘 할 것!
            • 서버에 문제가 있다면 popup 창에 경고가 나오니 살펴보도록! ( dismiss 이외의 기능은 없다.)
          • 실행
            • /usr/local/RAID\ Web\ Console\ 2/startupui.sh 
              • Login시 root 계정의 암호 필요
              • 현재 디스크 고장으로 Rebuild 중. More details 를 보면 리빌드까지 얼마나 남았는지 확인 가능하다.

    2. Software Raid의 경우
      • 추후 기재


    2015년 10월 16일 금요일

    중기청 국산서버/스토리지 공공우대 검토에 대하여

    관련 내용

    • 일단, 해당 기사를 먼저 보는게 편리할 것 같다.
    • 내용을 요약하자면, 중기청에서 최근 1~2년동안 논란이 큰 사안임에도 불구하고 매년 연말마다 국산 서버와 스토리지 장비의 공공우대 영역 지정에 대한 논의를 진행하고 있다는 내용이다.
      • 아마 추측하건대, 국산서버의 공공우대가 지정된다면 공공기관에 납품되는 서버의 1차 입찰에 국산서버만 신청할 수 있게 되는 정도라고 생각된다. 국산서버의 기능이나 성능이 부족하게 되면 당연히 외산장비를 사용해야 하기 때문에 국산서버만 납품되거나 하는 일은 없을 것으로 생각된다.

    장점

    • 국산서버를 키우면 확실히 부품레벨에서부터 보다 근본적인 기술을 쌓아 올릴 가능성이 열리게 된다. 예를 들면, 메인보드의 펌웨어에 따른 성능 차이라든지 어떤 조합의 경우 성능이 최적화가 된다는 식의 정보.
      대기업이나 정부기관 같이 큰 업무를 담당해야 하는 쪽에서는 당연히 쓰잘데기가 없는 지식인데(외산장비는 그런 모든 연구개발이 이미 이루어진 후 설계가 되기 때문), 돈이 없어서 저가 제품을 써야 하는 연구실 단위의 작은 조직에서는 의외로 큰 도움이 되는 지식이긴 하다.

    단점

    • 물론, 반대측 의견에서 맞는 이야기도 많다. 특히, "외산부품을 가져와서 조립만 한 것이 국산 서버냐"라는 질문은 피해갈 수 없으리라 생각한다. 서버용 CPU 제조는 물론이거니와 심지어 보드를 설계/생산하는 업체도 아마 한 곳도 없는 것으로 알고 있다.
    • 벤더사의 제품을 가지고 컨설팅 영업을 하는 곳이 아마 많을텐데 그런 쪽은 확실히 피해가 클수도 있을 것 같다. (물론, 서버 벤더만 국산 서버업체로 바꾸면 가능할지도.)
    • 확실히, 국내 서버만 가지고 서비스를 진행하면 외산서버 보다 장애가 생기거나 특정 서비스를 지원하는 것이 오래 걸릴 가능성이 있다.
      • 미션 크리티컬할 서버의 경우는 피하는 것이 좋을 것이라 생각된다.
        • 물론, 공공기관에서는 모든 서버가 미션 크리티컬하다고 주장하면서 외산장비를 구매할 가능성이 크다. 단지, 웹사이트 띄우는데 쓰려고 말이다.
          (DB는 서버로 하더라도 웹서버는 PC로 돌리는게 낫지 않을까?)
      • 문제는 벤더사 종속 소프트웨어가 무척 편리하기 때문에 모든 개발이 그 소프트웨어 기반으로 구성되어 있다는 점일 것이다.
        • 마치, ActiveX 처럼.. 물론 안정성이나 보안이 좋기 때문에 ActiveX와 비슷한 문제라고 보긴 어렵다. 벤더 종속이라는게 수익사업을 위해서는 피할 수 없는 부분이기도 하고.

    개인적인 의견

    • 개인적으로는 전문 슈퍼컴퓨팅기관인 KISTI 같은 곳은 국산서버용 클러스터를 일부 도입하는게 좋다고 생각된다. 실제로 KISTI 같은 곳에서 제품의 테스트가 진행되는 경우가 많이 있는데 그런 도움을 국산서버를 사용하고 있는 연구실이나 작은 소규모 단체에서는 혜택을 받을 수가 없기 때문이다. 물론, 국산서버를 이용하기 때문에 손이 더 많이 가고 문제가 생길 가능성이 커지는건 피할 수가 없겠지만 말이다. 하지만, 공공기관의 장점으로 해결하고 노하우를 뿌려준다면 전체적인 퍼포먼스는 좋아지지 않을까 한다.
    • 우리 같은 연구실에서 필요한 기능만 포함된 장비를 구매하기 위해서는 국산서버 업체가 좀 잘되었으면 하는 마음이 있다.

    결론

    • 뭐가 되었든 연구실에서 연구를 할 때 장애가 발생하는 경우가 적어지고 보다 저렴하게 장비를 구매할 수 있는 환경이 만들어지면 좋을 거 같다.

    추신

    • 예전에 CERN연구소에서 단기 체제를 할 때 연구소 내 한국CMS 사무실에다가 연구자들이 사용하기 좋도록 워크스테이션 급 장비를 구매하려고 한 적이 있다. 정말 여러가지 다방면으로 조사를 했는데, 국내에서 구매가능한 장비 수준의 워크스테이션을 구매하기가 불가능했다. HP 같은 경우에 들어가보면 특정 모델은 애초에 신청이 불가능할 정도.(한국은 구매 가능 / 프랑스,스위스는 구매 불가.)
      • 솔직히 지금도 의아했다. 워크스테이션이라면서 코어가 6-8개인걸 어떻게 받아들여야 하는건지.
    • 가장 훌륭한 대안이 Mac Pro였다는 것만 밝혀둔다. 한국은 앞으로 그런 상황은 오지 않도록 국산 서버 업체가 없어지는 것만큼은 막아주었으면 한다.

    연구실 후배들을 위한 Lustre 설치 메뉴얼

    Introduction

    Lustre 패키지의 종류

    • Lustre는 Lustre-Server와 Lustre-Client 2가지 종류의 패키지가 있다
      • Server용은 MGS, MDS, OSS 같은 lustre의 자원을 제공하는 서버들에 설치해야하며, 전용 커널을 사용하기 때문에 다른 용도로 사용하는 것이 불가능하다.
      • Client는 kernel의 모듈(윈도우의 드라이버)로 탑재되기 때문에 일반적인 용도의 서버( UI, WN 등)에 사용된다.

    Required packages for lustre

    • Lustre를 설치하기 위하여 파일시스템 관련한 패키지를 설치해야 한다.
      • e2fsprogs
      • 설치시 libcom_err 패키지의 충돌이 발생할 수 있다. libcom_err은 SLC6의 중요한 역할을 하는 패키지이기 때문에 삭제할 수 없으므로 지워서는 안된다.
        • rpm의 강제명령을 통하여 (--nodeps --force) 임시로 설치하면 된다.
        yum localinstall *.rpm
    • ZFS on Linux ( Lustre DKMS 설치용 ) 패키지.
      • Lustre Client를 설치시, 커널이 업그레이드가 되면 설치된 클라이언트 모듈 버전이 맞지 않기 때문에 Lustre가 잡히지 않는 황당한 사태가 발생한다.
      • ZFS on Linux repo는 lustre-DKMS 패키지를 설치할 때 필요한 RPM파일들을 제공한다.
      • DKMS패키지를 사용하면 부팅시 엄청난 시간이 소요되긴 하지만 이러한 문제를 미연해 방지할 수 있다.
        • 부팅할 때마다 Lustre를 새로 컴파일하여 모듈을 만들어낸다. 즉, kernel-header 와 lustre-source가 필수.
        yum localinstall --nogpgcheck http://archive.zfsonlinux.org/epel/zfs-release.el6.noarch.rpm

    Lustre package installation

    • SLC6(CentOS)를 위한 lustre RPM 패키지 파일을 제공하고 있다. 아래 사이트에서 몽땅 다운로드 받도록 하자.
    • Client는 위 과정으로 모든 설치과정이 끝! 마운트 과정만 진행하면 된다.

    Information of Lustre Server

    • Lustre Server는 다음과 같은 종류가 있다.
      • MDS : 메타 데이터 파일을 저장하는 서버
        • MDT : 메타 데이터 타켓.
      • MGS : Management Server. Lustre 마운트 포인터 제공
      • OSS : 실제 파일이 저장될 대형 저장장치를 가지고 있는 서버
        • OST : 저장장치 타켓. 대개 파티션(?) 혹은 장치(?) 정도로 생각하면 될듯.
    • 대개 소규모 및 데이터 무결성( 혹은 안정성)이 심각하게 요구되지 않는다면
      • MDS+MGS 서버 1대, OSS 서버들로 구성할 수 있으며,
    • 대형규모 및 데이터 크리티컬한 환경이라면
      • MDS-MDS(2대 failover), MGS 서버 1대, OSS 서버(각각 2대씩 failover)들로 구성할 수 있다.
    • 이 메뉴얼은 소규모 기준.

    사전 체크사항

    • MDS+MGS, OSS는 반드시 내부네트워크 혹은 외부에서 접근 불가능하도록 방화벽을 구축해야 한다.
    • 하지만, 내부 안에서는 모든 방화벽과 seLinux를 꺼두어야 작동함.
      • 다 설치가 되었는데 방화벽(iptables)과 seLinux로 통신이 안되어 마운트가 안되는 경우가 종종 있음.(증상: 마운트 했는데 가만히 있음.)

    MDS+MGS 서버 설치

    • Lustre 패키지까지 설치 후 Lustre Kernel로 부팅된 머신에서 시작
    1. LNET 네트워크 설정이 필요한 경우가 있으나, Ethernet만 쓸 경우에는 필요 없음. 물론, IP로 대상을 확실히 알 경우.
      1. 같은 네트워크단에 연결된 NIC가 2개 이상이고 그 중 하나만 사용한다거나,
      2. Infiniband로 연결을 하는 등의 추가적인 기술이 필요할 경우 세팅!
      3. 하지만, 대개
        options lnet networks=tcp0(eth0)
        로 끝날 확률이 큼.
    2. 하드디스크가 RAID6로 묶여 있는 장치가 sdb라고 할 때, 먼저 sdb장치를 포맷을 해야한다.
      1. 추천) 러스터돌이씨의 의견에 의하면, partition을 나눠서 sdb1으로 한 후 포맷하기보다, sdb 통짜로 포맷하는 것이 속도가 더 빠르다고 한다.
        mkfs.lustre --fsname=<fsname>  --mgs --mdt --index=0 /dev/<device>
        egs) mkfs.lustre --fsname=lustre --mgs --mdt --index=0 /dev/sdb
      2. : 클라이언트에서 마운트를 할 때 사용될 "디렉토리(?)" 이름으로 사용됩니다. 실제로는 파일시스템 이름.
      3. --index=0 : 최신 2.x 버전부터 MDT(target, server 아님)의 추가 순서에 따라 index 숫자를 증가시키며 넣어야 합니다. (대개 1개여서 0이겠지만,) OST도 마찬가지.
    3. 포맷이 끝나면 아무 디렉토리나 만들고 마운트를 한다.
    4. mount -t lustre /dev/sdb /mnt/mdt

    OSS 서버 설치

    • 역시 마찬가지로, Lustre kernel로 부팅된 머신에서 시작
    1. LNET 설정은 Lustre Manual 참조할 것. 특히, IB랑 이더넷 섞어 쓴다면 더더욱 잘 봐야 함.
    2. 하드디스크 포맷
      1. mkfs.lustre --fsname=<fsname> --mgsnode=<MGS_NID> --ost --index=<OST_index> /dev/<device>
        egs) mkfs.lustre --fsname=lustre --mgsnode=192.168.10.50@tcp0 --ost --index=0 /dev/sdb
      : 위와 동일
      : 관리서버의 NID인데, 여기서는 MGS와 MDS를 같은 서버에 설치하였기 때문에 그 서버의 IP를 적어주면 됨. tcp0는 LNET에서 세팅한 값을 표시.
      : OST마다 index 번호를 부여. 번호가 중복되게 사용할 수는 없기 때문에 주의해서 포맷을 할 것. 잘못했으면 포맷을 다시 해야 함.
    3. 포맷이 끝나면 아무 디렉토리나 만들고 마운트를 한다.
      mount -t lustre /dev/sdb /mnt/ost

    Client에서 마운트 하기

    1. Client모듈이 올라간 상태에서, 
      mount -t lustre <MGS_NID>:/<fsname> /<mount point>
      egs) mount -t lustre 192.168.10.50@tcp:/lustre /pnfs

    공통사항

    1. /etc/fstab에 자동 마운트 설정
      1. 여기서는 autofs는 고려하지 않고 설명.
    2. 마운트한 lustre장치의 uuid 확인
    3. /etc/fstab파일에 다음 항목 추가ㅣ
    ls -ll /dev/disk/by-uuid lrwxrwxrwx 1 root root 10 8월 9 21:19 493b2511-cfdc-41db-b1b7-12a731eeac1d -> ../../sdb1 <== 이거로 가정 lrwxrwxrwx 1 root root 10 8월 9 21:19 7ecaf474-ebab-4c50-bbbe-33f46a7302eb -> ../../sda1
    # /etc/fstab 
    UUID=493b2511-cfdc-41db-b1b7-12a731eeac1d       /mnt/ost                lustre  defaults        0 0

    Troubleshooting

    • Client의 버전이 너무 낮아서 rpm 설치가 안될 때.
      • 해당 커널에 비해 Client의 커널모듈 버전이 낮으면 설치를 거부하는 황당한 사태가 발생 가능
      • 해결방법 : rpm을 해당 커널에 맞쳐 리빌드 할 수 있음 ( Client만 해당 )
      • 물론, 설치만 되었다면 dkms 기능으로 인해 앞으로는 걱정할 필요가 없음
    • 부팅이 너무 느리다고 생각될 때.
      • dkms 모듈을 빼면 가능. 물론, kernel 업그레이드 후에 새로 설치 과정이 필요하다.
        • 그리드컴퓨팅 처럼 Client서버의 커널 버전이 중요한 감시 대상일 경우에는 dkms 이외의 옵션이 없다.