System Compleat.

'Nexenta Appliance'에 해당되는 글 1건

  1. Solve your IO problems with Nexenta

Solve your IO problems with Nexenta

Techs
( younjin.jeong@gmail.com )

굉장히 오랜만의 포스팅이다.  이직도 있었고, 이직 이후 워낙 정신 사납게 달리다 보니 포스팅은 커녕 내가 내 블로그 들어오는 일도 주말의 행사가 되어버렸다.  대신, 클라우드의 구성에 대한 큰 그림과 어지간한 구조는 잡았지만. 훗;

어쨋든 오늘 소개하고자 하는, ( 이미 여러차례 소개는 했었지만 ) 이 Nexenta 라는 운영체제는 이미 알려진 바와 같이 오픈 솔라리스 기반이며, 역시 알려진 바와 같이 솔라리스 기반의 가장 큰 축복인 ZFS 를 메인으로 사용하는 스토리지로서의 사용에 그 주요 목적이 있는 운영 체제라 할 수 있다.  물론 우분투와 같은 apt 기반의 패키지 관리 시스템을 통해 얼마든지 원하는 형태로 확장이 가능 하지만,  어쨌든 난 얘는 무조건 스토리지로 쓰는게 좋다고 생각 한다.

본 운영체제에 대한 자세한 스펙은 http://www.nexenta.com 또는 http://www.nexenta.org 에서 참조 할 수 있다.
물론 서비스 셋업을 위한 몇가지 튜토리얼 및 매뉴얼 등은 매우 잘 정리 되어 있으나, 아직은 트러블 슈팅에 대한 사례가 많지 않아 국가별로 구글검색을 쌔워도 정수리가 바짝 서는 시원한 답변은 잘 나오지 않으므로 다소간의 삽질은 각오 해야 한다.

서론이 매우 무지 끔찍하게도 길었지만,  어쨌든 오늘은 다음의 사용 목적을 가지고 간단히 Nexenta 를 구성해 보고자 한다.

1. NFS / CIFS 로서의 사용.
2. iSCSI
3. 디스크 / 볼륨의 zfs 를 통한 관리.

금일 사용할 Nexenta 의 버전은 3.0.3 이 되시겠다.  ( http://www.nexenta.com/corp/free-trial-download )
먼저 주의 할 것은, 본 운영 체제가 언젠가 부터 유료화 되었기 때문에 최초 설치 이후 제품 키를 넣으라는 화면을 보고 당황 하지 않으려면 미리 위의 링크 사이트에 가입을 완료 해 두어야 한다.  메일 주소를 통해 해당 계정의 Activation 을 수행하므로, 구라로 메일주소 넣으면 안되시겠다.

다운 받아 씨디로 꿉고 ( 아 물론 VM 으로 하셔도 완죵 무방 ) 그동안 보아 왔던 수많은 리눅스 설치 화면과 비슷한 환경들이 지나가고 나면, 시스템이 재부팅 된다.
재부팅이 되고 나면 생성된 키를 하나 보여주며 제품 키를 넣으란다.  그러면 요기 http://www.nexenta.com/corp/free-trial-registration 로 가서 이전에 생성해둔 계정을 통해 로그인 하고 정보를 넣으면 메일로 상큼하게 키가 날아온다.

입력하고 나면, 콘솔 로그인 창이 떨렁 뜨는데, 물론 엑스퍼트라면 로그인 이후 진행 해도 되지만, 아니라면 다음과 같이 웹 브라우저를 통해 접근한다.

http://host_fqdn_or_ip_address:2000

자! 상큼한 웹 인터페이스가 나타나질 않는가!  여기서는 다음의 정보를 입력하도록 한다.
물론, 기억에 의존한 포스팅이기 때문에 스텝은 살짝 꼬였을 수 있으나 의미하는 바는 같;;;;

1. 기본 네트워크 정보
   - 호스트명
   - 네트워크 인터페이스
   - 네임 서버 및 ntp 서버 등의 정보
2. 볼륨 생성
   - 볼륨 생성할 디스크 및 redundant type  ( RAIDZ1 , RAIDZ2, RAIDZ3 ... cache disk , log disk , spare disk , etc )
   - 볼륨의 이름
   - 옵션  ( deduplication 및 기타 등등 )
3. 시스템 패스워드
4. 기타 폴더 ( 기존의 디렉토리나 윈도우의 폴더와는 개념이 살짝 다르다 ) 등등의 추가 설정.
5. 웹 인터페이스의 접근 포트 및 http / https 사용 여부.

대략 이러한 초기 설정 프로세스를 마치고 나면 다음과 같이 아름다운 페이지를 확인 할 수 있다.

Nexenta Web Mgmt login page



Dash board



이미 화면을 보면서 느꼈겠지만, 그렇다!  대부분의 기능을 웹 인터페이스로 제어가 가능한 것이다!
물론 웹 인터페이 말고 디테일하거나 즉각적인 반응 또는 빠른 작업을 위해 CLI 의 사용이 가능하다.  본 3.0.3 버전의 경우 원격지에서 ssh 를 사용해 로그인 하게 되면 nmc 라고 하는 콘솔이 나타난다. ( 아마도 Nexenta Management Console 일게다 ) 
본 콘솔의 경우, 네트워크 장비 특히 Cisco 나 Foundry 에 익숙하다면 아주 손쉽게 적응이 가능한 잇점이 있다.

show volume test-pool 
NAME                   SIZE    USED    AVAIL   CAP  DEDUP   HEALTH
test-pool              40.8T   395G    23.7T     0%   1.00x     ONLINE

show volume test-pool status

또한, 스위치나 리눅스 bash 에서와 같이  TAB-TAB 키 또는 ? 의 사용을 통해 사용 가능한 커맨드 리스트를 볼 수도 있다.  이는 매우 편리한 관리를 제공하지만, 거센 서비스 환경의 IO 로드가 걸린 상황에서는 충분히 답답함을 느낄 수도 있겠다.

만약, 이런 어플라이언스도 스위치 같지도 않은 툴들을 버려둔 채로 난 pure zfs 만 사용할꺼야 하시는 분들은 다음의 커맨드로 쉘 환경에 대한 진입이 가능하다.  단, 일부 커맨드를 통한 시스템 변경의 경우 관리 콘솔을 죽여 버릴 수 도 있음을 양지하고 마루타 해야 할 것이다.

option expert_mode=1
!bash

자 이제 그럼 소기의 목적인 볼륨을 생성 해 보도록 하자.

create volume
Volume                :
  -----------------------------------------------------------------------------------------------------
  Volume name must begin with a letter, and can only contain alphanumeric characters as well as
  underscore ('_'), dash ('-'), and period ('.'). The names 'mirror', 'raidz', 'log', and 'spare' are
  reserved, as are names beginning with the pattern 'c[0-9]'. Finally, don't use forward slash ('/') -
  volumes cannot be nested. Press Ctrl-C to exit.

볼륨 이름을 입력하고 넘어 간다.

Volume                :jbod-test
Group of devices      : (Use SPACEBAR for multiple selection)
 c0t5000C5002694D5C7d0  c0t5000C500269ABC4Cd0  c0t5000C50026AAE413d0  c0t5000C50026AEC48Fd0
 c0t5000C50026AF2AB1d0  c0t5000C50026AF4629d0  c0t5000C50026AF51FEd0  c0t5000C50026AF5295d0
 c0t5000C50026AF7335d0  c0t5000C50026AF83C8d0  c0t5000C50026AF868Bd0  c0t5000C50026AF8AC8d0
 c0t5000C50026AFAA3Ad0  c0t5000C50026AFABBCd0  c0t5000C50026AFB3DEd0  c0t5000C50026AFC653d0
 c0t5000C50026AFEC73d0  c0t5000C50026B05CF8d0  c0t5000C50026B13B01d0  c0t5000C50026B14848d0
 c0t5000C50026B1527Dd0  c0t5000C50026B15B4Dd0  c0t5000C50026B16446d0  c0t5000C50026B168EDd0
 c0t5000C50026B1912Cd0  c0t5000C50026B1A467d0  c0t5000C50026B39DBFd0  c0t5000C50026B3AA65d0
 c0t5000C50026B3AD21d0  c0t5000C50026B3F766d0  c0t5000C50026B40761d0  c0t5000C50026B43707d0
 c0t5000C50026B5BAB1d0  c0t5000C50026B7963Bd0  c0t5000C50026B95E99d0  c0t5000C50026BDBF9Cd0
 c0t5000C50026BDC9D3d0  c0t5000C50026BDCA9Fd0  c0t5000C50026BE37A7d0  c0t5000C50026BE37ECd0
 c0t5000C50026BE39ABd0  c0t50014EE00255D55Ad0  c0t50014EE0ACFBC293d0  c0t50014EE0ACFC807Ad0
  -----------------------------------------------------------------------------------------------------
  Select one or more LUNs to form a new group of devices in the volume 'jbod-test'. Navigate with arrow
  keys (or hjkl), or Ctrl-C to exit.
  lun id: c0t5000C5002694D5C7d0, size: 2TB, parent: mpxio

위와 같이 화살표로 선택/이동이 가능한 디스크의 목록이 나온다. 필요한 디스크들을 선택하여 볼륨을 구성한다.
친절하게 여려개를 고르려면 스페이스바를 누르란다.
선택 하고 넘어 가면,

Volume                :jbod-test
Group of devices      : c0t5000C5002694D5C7d0, c0t5000C500269ABC4Cd0, c0t5000C50026AAE413d0, ...
Group redundancy type :
 mirror  raidz1  raidz2  raidz3  pool
  -----------------------------------------------------------------------------------------------------
  Use either mirror or raidz configuration for data redundancy, and hot spares to automatically handle
  device failure. Note that while ZFS supports non-redundant configuration (option 'pool' in the set of
  choices), a single case of bit corruption can render your data unavailable. Navigate with arrow keys
  (or hjkl), or Ctrl-C to exit.
  In a mirror configuration data is replicated across all devices of the mirror

redundancy type 을 선택하란다.  다들 종류는 알고 있을테니 스킵.

Group of devices      : c0t5000C5002694D5C7d0, c0t5000C500269ABC4Cd0, c0t5000C50026AAE413d0, ...
Group redundancy type : raidz2
Continue adding devices to the volume 'jbod-test'?  Yes
Group of devices      : c0t5000C50026AF2AB1d0, c0t5000C50026AF4629d0, c0t5000C50026AF51FEd0, ...
Group redundancy type : raidz2
Continue adding devices to the volume 'jbod-test'?  (y/n)

불륨에 디스크 추가를 계속 할건지 물어온다.  추가할 생각이 없다면 n 을 상콤하게 눌러준다.

Create volume 'jbod-test'?  (y/n)

볼륨을 진짜 만들건지 물어본다.  y
누르고 나면, 볼륨이 생성되며 다음과 같이 summary 가 나타나며, auto-snap 서비스를 설정 할 것인지 묻는다.

volume: jbod-test
 state: ONLINE
 scan: none requested
config:

        NAME                       STATE     READ WRITE CKSUM
        jbod-test                  ONLINE       0     0     0
          raidz2-0                 ONLINE       0     0     0
            c0t5000C5002694D5C7d0  ONLINE       0     0     0
            c0t5000C500269ABC4Cd0  ONLINE       0     0     0
            c0t5000C50026AAE413d0  ONLINE       0     0     0
            c0t5000C50026AEC48Fd0  ONLINE       0     0     0
          raidz2-1                 ONLINE       0     0     0
            c0t5000C50026AF2AB1d0  ONLINE       0     0     0
            c0t5000C50026AF4629d0  ONLINE       0     0     0
            c0t5000C50026AF51FEd0  ONLINE       0     0     0
            c0t5000C50026AF5295d0  ONLINE       0     0     0

errors: No known data errors
NAME        SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
jbod-test  14.5T   418K  14.5T     0%  1.00x  ONLINE  -

Volume 'jbod-test' created successfully. Please take a moment to consider using default snapshot
policy for this volume. The defaults are as follows: keep 30 daily snapshots and 12 monthly
snapshots; take snapshots at 12am. Say No if you do not need to periodically snapshot the new
volume and all its folders, and/or if the defaults are not satisfactory. Note that you can
always decide later - see 'create auto-snap -h' for details.
Create default auto-snap services for 'jbod-test'?  (y/n)

나는 수동 설정할 것이므로 n , 궁금한 분들은 y 눌러서 진행 하면 되겠다.

PROPERTY              VALUE                                                
service             : auto-snap
instance            : jbod--test-000
frequency           : daily at 00:00
status              : offline* since 03:38:00
enabled             : true
state               : idle
comment             : default-service
exclude             :
keep_days           : 30
last_replic_time    : 0
latest-suffix       :
period              : 1
snap-recursive      : 1
time_started        : N/A
trace_level         : 1
log                 : /var/svc/log/system-filesystem-zfs-auto-snap:jbod--test-000.log
PROPERTY              VALUE                                                
service             : auto-snap
instance            : jbod--test-001
frequency           : monthly on 1st day of the month at 00:00
status              : offline* since 03:38:04
enabled             : true
state               : idle
comment             : default-service
exclude             :
keep_days           : 12
last_replic_time    : 0
latest-suffix       :
period              : 1
snap-recursive      : 1
time_started        : N/A
trace_level         : 1
log                 : /var/svc/log/system-filesystem-zfs-auto-snap:jbod--test-001.log

실수로 y 를 눌러버렸다. 젠장.  뭐 어쨌든 연습용이므로 패스~

이제 볼륨이 만들어 졌다.  이 볼륨에 zvol 을 생성하고 iSCSI 타겟을 설정하여 iSCSI 로도 사용이 가능하고, 또는 folder 를 생성하여 NFS/CIFS 의 파일 기반 서비스를 사용 할 수도 있다.

모두 비슷한 인터페이스이기 때문에 다음과 같이 zvol 도 생성이 가능하다.
nmc@xxxnodexx:/$ create zvol
zvol name    : jbod-test/test
  -----------------------------------------------------------------------------------------------------
  zvol pathname must start with a name of the volume, and can only contain alphanumeric characters as
  well as underscore ('_'), dash ('-'), period ('.') and forward slashes ('/'). The available volumes
  are: jbod-test, qpod1-pool1, nfs-pool, qpod1-pool2. Use forward slash '/' to separate existing volume
  or folder name from the (new) block device name, for instance: jbod-test/new_zvol. Press Ctrl-C to
  exit.


이후의 설정도 그대로 따라하면 되겠다.


물론 CLI 인터페이스로 소개하였지만, 웹 인터페이스에서도 모두 기능을 제공한다.
상단 메뉴의 Data Management -> Data Sets  에서 볼륨 및 폴더의 생성/삭제가 가능하며,  Data Management -> SCSI Target  의 탭에서 LUN / zvol 의 생성 및 삭제가 가능하다.


이러한 기본적인 기능 이외에 플러그인을 사용하면 서버 자체적으로 bonnie 또는 iometer 등을 사용하여 볼륨에 대한 벤치마킹이 가능하기도 하며,  여러대의 Nexenta 를 사용중이라면 zfs send/receive 의 기능을 확대한 auto-sync , auto-tier 등의 파일 시스템 복제 및 autocdp 를 통한 블럭레벨의 복제까지 가능하다.

한가지 더 알아 두어야 할 것은, Nexenta 에서의 폴더의 개념이 약간 특수한데, 이는 단순 mkdir 로 생성되는 것이 아닌 NFS/CIFS/RSYNC/FTP 등의 서비스를 손쉽게 설정이 가능하도록 하는 또 하나의 단위라고 생각 하면 된다.
단순히 NFS 서비스만 제공하고자 한다면 서버를 설치하고 볼륨 생성 -> 폴더 생성 -> NFS 탭에 체크 -> 간단한 권한 설정 을 통해 바로 NFS 서비스에 투입이 가능하다.


스크린샷을 많이 찍고 싶었으나 여건이 허락하지 않아 대충 넘어 가지만, 거의 대부분의 기능들을 커맨드 라인 인터페이스로 설정하는것이 더 재미있다.  초기 설정에 필요한 아주 간단한 것들만 적어 보자면,

# 인터페이스 설정 확인
$ show network interface igb0
# 인터페이스 설정
$ setup network interface igb0
# 인터페이스 링크 확인
$ show network devices
# 기본 게이트웨이 확인
$ show network gateway

CLI 체계는 간단해서, show 를 setup 으로 바꾸면 보기/설정 으로 변경 된다고 생각하면 매우 쉽다.



서비스를 구성하면서 언제 힘든것이 IO 이다.  아무리 고민해도 나쁘지 않은 부분이며, 통상 병목이 매우 일찍 오는 구간이므로 NetApp 또는 EMC 등의 벤더와 또 리눅스 상에서의 각종 파일 시스템, 그리고 이런 오픈 솔라리스 기반의 여러 장치를 테스트 해 보는 것은 매우 의미 있는 일이라 하겠다.

모두 재미난 테스트 하시길!


( younjin.jeong@gmail.com , 정윤진 )