고가용성(HA) 컨테이너를 ZFS 상에 설치하는 것은 꽤 어려운 작업입니다. 썬에서 제공하는 문서는 이 주제를 다루는데에 있어서 약간 부족하지만 대부분의 경우 적절한 방향을 제시해 주고 있습니다.

이 글은 다음과 같은 주제를 다룹니다:

  • 소프트웨어와 하드웨어 환경
  • 운영체제 설치 및 ZFS 풀 생성하기
  • SCSI 케이블을 연결하고 SCSI 리셋 해결하기
  • 솔라리스 클러스터 3.2 소프트웨어 설치하기
  • 존을 위한 스토리지 풀 생성하기
  • 클러스터 설치하기
  • 리소스 설정하기
  • HA 스토리지 설정하기
  • 존 생성하기
  • 두번째 노드 설정하기
  • 저자에 관하여


소프트웨어와 하드웨어 환경


필자가 사용하고 있는 소프트웨어 및 하드웨어 환경은 다음과 같습니다:

  • 두개의 썬 파이어 280R 서버에 2Gbyte 램과 하나의 1.2Ghz 프로세서. 두서버 모두 각각 두개의 68Gbyte 하드 드라이브를 가지고 있고 다음과 같이 파티션이 구성되어 있음:
    • c1t0d0s0: 솔라리스 볼륨 메니저를 이용해 c1t1d0s0 과 미러링 된14-Gbyte /
    • c1t0d0s1: 2 Gbytes 의 스왑 공간
    • c1t0d0s3: 솔라리스 볼륨 메니저를 이용해 c1t1d0s3 과 미러링 된 8-Gbyte /var
    • c1t0d0s4c1t0d0s5 는 메타데이타베이스를 위해 각각 10 Mbytes 씩 할당됨, 그리고 메타데이타베이스는 c1t0d0s4c1t0d0s5 에 존재함.
    • c1t0d0s6: 클러스터링을 위한 512-Mbyte /globaldevices
    • c1t0d0s7: /export/home 에 마운트된 store/home 이라는 다른 ZFS 파일 시스템을 저장하기 위한 43Gbyte 의 c1t1d0s7
  • 하나의 StorEdge 3310 SCSI 어레이 ("just a bunch of disks" [JBOD])와 8개의 68Gbyte 하드드라이브 ZFS 파일시스템이 tank 라고 불리는 RAIDZ2 스토리지 풀로 지정됨, 그리고 하나의 두개의 슬라이스를 18Gbyte 하드 드라이브; s0 은 2Gbyte quorum 디바이스이고 s1 은 16 Gbytes 의 공유 스토리지임.
  • SPRAC 플랫폼을 위한 솔라리스10 5/08 (HW508)
  • 솔라리스 클러스터 (이전에는 썬 클러스터로 불렸음) 3.2 2/08 소프트웨어


운영체제 설치 및 ZFS 풀 생성하기


일단 제일 첫번째로 운영체제를 설치 합니다. 필자는
소프트웨어와 하드웨어 환경 에서 설명한 대로 설정하였습니다. 왜냐하면 아직까지 SPARC 에서 ZFS 를 이용해서 부팅시키는 방법을 모르기 때문입니다. 방법을 알게 되면 바로 적용할 것입니다. 그때까지는 솔라리스 볼륨 메니저를 이용해서 메타디바이스들을 설정하고 이를 이용해서 루트 와 /var 파일 시스템을 미러링하기 위해 솔라리스 볼륨 메니저를 사용할 것입니다.

각각의 노드가 모두 동일한 구성을 가지고 동일한 루트 패스워드와 유저 ID 를 가지고 있도록 하시기 바랍니다. 이 방법을 통해서,클러스터를 설정할때 모든 것이 완벽하고 부드럽게 동작할 것입니다.

이제 필자가 마운트한 기타 모든 것들을 저장하기 위한 ZFS 스토리지 풀인 store 를 생성했습니다.

zpool create -f store c0t0d0s7 c1t0d0s7 zfs create store/home zfs set mountpoint=/export/home store/home zfs set sharenfs=rw store/home zfs set quota=10g store/home



SCSI 케이블을 연결하고 SCSI 리셋 해결하기


초기 ZFS 풀을 설정한 다음 필자의 JBOD 를 서버에 연결할때 몇가지 이슈들에 봉착했습니다. 한가지 이슈는 필자가 충분한 SCI 케이블을 가지고 있지 못했다는 것입니다. 그러므로 디바이스및 다른 NIC 를 연결시키기 위하여 케이블을 주문해야 했습니다.

모든 설정이 끝난다음의 과정은 매우 간단했습니다. SCSI 케이블을 받은 다음에 그림 1번처럼 JBOD 를 연결하였습니다.

Fig. 1

그림 1: JBOD 와 SCSI 케이블

필자는 버스에서 SCSI 리셋이 일어나고 있음을 발견했습니다. 이것은 scsi-initiator-id 가 각각의 서버에서 7로 설정되어 있었기 때문입니다. OpenBoot 프롬프트로 들어가서 서버중에 하나로 들어가서 다음의 명령을 실행하였습니다:

setenv scsi-initiator-id 5


그다음 두 서버를 모두 재부팅해서 모든 디스크를 찾아보려 했습니다. 모든 디스크들이 한쪽 서버에서만 보이고 다른 쪽 서버에서는 보이지 않았습니다.

이때 devfsadm 을 실행하였고 마술처럼 JBOD 의 하드 드라이브들이 보이게 되었습니다. 이제 필자는 JBOD 의 모든 디스크들을 양쪽 서버에서 볼 수 있게 되었습니다.


솔라리스 클러스터 3.2 소프트웨어 설치하기


필자는 솔라리스 클러스터 3.2 소프트웨어를 설치 하였습니다.
핵심 및 다음 패키지들이 설치 되었는지 확인하였습니다:

  • SUNW.HAStoragePlus (HA 스토리지)
  • SUNWsczone (HA 컨테이너)
  • SUNW.nfs (HA NFS 로 ZFS 파일 시스템을 NFS 를 이용해 공유하고자 할 때에 필요함)
  • SUNW.gds (HA 범용 데이타 서비스)
  • SUNW.LogicalHostname (클러스터 전체에 통용되는 호스트 이름을 사용하기 위한 패키지)

여러분이 필요한 어떠한 패키지도 설치할 수 있습니다. 단지 여러분들의 존과 ZFS 파일시스템에 HA 를 이용하기 위해서는 위의 패키지들이 반드시 필요합니다. 필자는 모든 것을 설치하기를 권장합니다; 앞으로 어떠한 패키지가 클러스터에서 사용되게 될지 아무도 모르기 때문입니다.

솔라리스 클러스터 소프트웨어를 설치한 다음 썬에서 모든 패치와 보안 업데이트를 설치하시기 바랍니다. 패치 설치 후에 시스템을 재부팅 합니다.


존을 위한 스토리지 풀 생성하기


이제 여러분은 존을 위한 스토리지 풀을 생성할 수 있습니다.
필자는 아래의 커맨드를 이용해서 raidz2 라고 하는 하나의 큰 풀을 생성하였습니다:

zpool create -f tank raidz2 c2t8d0 c2t9d0 c2t10d0 \ c2t11d0 c3t8d0 c3t9d0 c3t10d0 c3t11d0 zfs set mountpoint=/share tank mkdir /share/HA

주의: 필자는 이후 단계를 위해서 /share/HA 디렉토리를 만들었습니다. 이것은 필자의 HA NFS 설정이 들어갈 곳입니다. 나중에 좀 더 명확하게 이유를 알게 될 것입니다.

클러스터 설치하기


이제 클러스터를 설치할 시간입니다:

usr/cluster/bin/scinstall


여러분의 클러스터를 설정하기 위한 단계를 글로써 설명 합니다. 여러분은 노드의 갯수, 그들의 이름 그리고 서로간의 통신 방법에 관하여 지정해야 합니다. 필자는 interconnect 을 위해 스위치를 사용하지 않고 크로스오버 케이블을 사용했습니다. 그리고 /globaldevices 의 기본값을 사용하였습니다.

두 노드들이 설정되고 재부팅 된 다음 시스템은 클러스터 모드로 동작하고, 모든 디바이스를 찾고, quorum 디바이스를 설정합니다. 설치 "마법사" 단계에서 quorum 디바이스를 정의하였고 이 디바이스는 JBOD 에 2-Gybte 슬라리스를 가진 18-Gbyte 하드 디스크 드라이브 입니다.

재부팅 후에 다시 scinstall 을 실행하면 quorum 디바이스 설정으로 바로 데려가 줍니다. 불행하게도 클러스터가 모든 디스크들에 연결되었을때 디바이스가 무엇이었는지 기억하지 못했습니다. 그래서 다른 노드로 건너가서 scdidadm -L. 을 실행해야 했습니다.

이 커맨드는 여러분들이 각각의 노드에 연결된 모든 디스크들을 볼 수 있도록 합니다. 필자는 quorum 디바이스가 c2t12d0s0 이고 DID 11 이 주어졌음을 확인하였습니다. 이제 d11 을 입력해서 s0 을 찾았고 이것이 저의 quorum 디바이스입니다.

필자의 시스템은 이제 아직까지는 아무것도 공유되고 모니터되지 않는 완벽하게 동작하는 클러스터가 되었습니다.

리소스 설정하기


이제 우리는 재미있는 부분을 수행하게 되는데 이것은 바로 실제로 리소스를 설정하는 것입니다. 이 부분이 가장 어렵습니다, 그러나 썬은 작업을 직관적으로 할 수 있도록 만들어 놓았습니다.

여러분에게 필요한 첫번째 작업은 여러분의 클러스터가 필요로하게될 모든 리소스들을 가진 리소스 그룹을 만드는 것입니다. 반드시 root 혹은 시스템 관리자 권한으로 로그인하시기 바랍니다.

첫번째로 서비스들을 등록합니다:

clresourcetype register SUNW.HAStoragePlus SUNW.nfs \ SUNW.gds


이제 리소스 그룹을 생성하는데, HA FNS 를 위해서 PathPrefix/share/HA 로 지정합니다. 디렉토리는 이 커맨드를 실행하기 전에 반드시 존재해야 합니다. 그렇지 않으면 이 path prefix 를 사용할 수 없습니다. 이 위치는 dfstab 이 HA 에 존재하는 저의 모든 NFS share 들을 찾기 위한 장소 입니다.

clresourcegroup create -p PathPrefix=/share/HA tank_rg


이 전 커맨드에 대해 간단히 설명하자면: 여러분은 클러스터 소프트웨어에게 리소스 그룹 tank_rg 를 만들도록 하였습니다.

필자는 다음과 같은 명명 규칙을 사용하였는데 먼저 리소스 그룹의 이름은 풀이름_rg , 서비스 리소스는 서비스이름_rs , 그리고 논리적 호스트 리소스를 위한 호스트 이름은 호스트이름_lh_rs 으로 지정하였습니다. 이러한 명명 표준을 사용하게 되면 syslog 에 에러를 찾기가 훨씬 쉬워집니다.

이제 서버의 논리적인 호스트 이름을 설정합니다.

주의: 이 이름은 반드시 두 노드의 호스트 파일에 존재해야 하고 IP 주소와 연결되어 있어야 합니다.

첫째로 vi 를 이용해서 /etc/hosts 에 호스트 이름을 지정하였습니다.
192.168.101.5 logicalname

그다음에 파일을 :wq 를 이용해서 저장하였고 리소스를 생성하였습니다:
Clreslogicalhostname create -g tank_rg -h logicalname \ logicalname_lh_rs



HA 스토리지 설정하기


이제 HA 스토리지를 설정합니다:

clresource create -g tank_rg -t SUNW.HAStoragePlus -p \ Zpools=tank tank_hastorageplus_rs


여러분의 스토리지 풀이 솔라리스 클러스터 소프트웨어 상에서 실행됩니다. 여러분의 스토리지 풀을 다시 보기 위해서는 클러스터 리소스 그룹을 시작시켜야 합니다.
clresourcegroup online -M tank_rg

df -k 를 실행하면 여러분은 스토리지 풀을 볼 수 있을 것입니다. 그러나 여러분이 지정한 마운트 포인트에 마운트 되었음을 볼 수 있습니다, 예를 들어:
tank 420037632 7730096 403406064 2% /share

이제, NFS 가 동작하기 전에 여러분은 몇가지 디렉토리와 파일들을 설정해야 합니다.

리소스 그룹에 path prefix 를 /share/HA 로 지정한것을 기억하십니까? NFS 는 이 path 를 설정파일과 lock 파일들을 저장하는 장소로 사용할 것입니다. 그러므로 여러분의 NFS share 는 사실상 고가용성을 가지게 됩니다. 우리는 디렉토리를 하나 추가해서 dfstab 의 복사본을 리소스 이름들이 추가된 상태로 가지고 있어야 합니다. 그러므로써 HA NFS 리로스에 대한 접속이 이 디렉토리와 파일들을 보게 될 것입니다.

mkdir /share/HA/SUNW.nfs
cp /etc/dfs/dfstab /share/HA/SUNW.nfs/dfstab.tank_nfs_rs


파일을 복사한 다음에 디렉토리로 가서 dfstab 을 vi 를 이용해서 수정합니다:
vi dfstab.tank_nfs_rs share -F nfs -o rw -d "HA NFS File Share" /share/nfs :wq mkdir /share/nfs; chmod 777 /share/nfs

그 다음으로 NFS 를 위한 리소스를 생성합니다:
clresource create -g tank_rg -t SUNW.nfs -p \ Resource_dependencies=tank_hastorageplus_rs \ tank_nfs_rs 

이제 NFS 를 HA 환경으로, ZFS 스토리지를 HA 환경으로 가지게 되었고 논리적 호스트 이름을 사용할 준비가 되었습니다.


존 생성하기


그 다음으로 우리는 존을 생성할 것입니다. 중요한 점으로 여러분이 존을 생성할때 여러분이 기본 디렉토리들을 공유 한다면 (/usr, /platform, /sbin, 그리고 /lib),이 디렉토리는 양쪽 모두에서 오나벽하게 동일해야 합니다. 이 문제를 해결할 수 있는 가장 쉬운 방법은 여러분의 존에 고유의 ZFS 마운트 포인트를 지정하고 zonecfg 에서 create -b 옵션을 이용하고 여러분의 ZFS 풀을 새롭게 생성된 HA 스토리지 상에 생성하는 것입니다.

zfs create tank/zones zfs create tank/zones/testzone zfs set quota=5g tank/zones/testzone 

위의 작업을 통해 존이 사용할 ZFS 풀을 설정 합니다. 필자는 오직 5Gbyte 만 사용했는데 왜냐하면 이 테스존을 사용하는 이유는 단지 다른 조직에 UNIX 서버의 오류를 체크해서 결과를 필자에게 메일로 보내주는 역활만을 하기 때문입니다. 전체 솔라리스10 존 설치는 3Gbyte 의 공간을 사용하는데, 5Gbyte 를 사용함으로써 향후에 사용하게 될 소프트웨어 혹은 패치를 위해 2Gbyte 의 여유 공간을 얻을 수 있습니다.

이제 존을 설정합니다:

zonecfg -z testzone create -b set autoboot=false set zonepath=/share/testzone add net set address=192.168.101.6 set physical=eri0 end verify commit exit

autoboot 가 반드시 false 로 설정되도록 합니다. 우리의 존은 솔라리스 클러스터 존 패키지내의 HA 스크립트에 의해 시작되고 정지될 것입니다. 여러분이 autoboot 를 활성화 한다면 여러분은 존을 HA 환경으로 설치할 수 없습니다.

이제 새로운 존을 설치, 부팅 및 설정할 것입니다:
zoneadm -z testzone install zoneadm -z testzone boot zlogin -C testzone

설정이 완료된 다음에는 ~. 을 눌러서 여러분의 존에 콘솔 세션을 종료 합니다. 그 다음에 다음의 커맨드를 입력합니다:
zoneadm -z testzone halt

여러분은 반드시 존을 halt 시켜야 합니다. 그러므로써 HA 환경에서 존을 설치하는 스크립트를 실행할 수 있습니다.

이제 여러분은 존의 리소스를 생성하기 위한 몇몇 파일들을 수정해야 합니다.

여러분이 HA 컨테이너를 설치할때 소프트웨어는 /opt/SUNWsczone 에 설치 됩니다. 이 과정을 수행할때 가장 우려가 되는 디렉토리는 바로 /opt/SUNWsczone/sczbt/util 로 존들의 부트 스크립트가 존재 하는 곳입니다.

/sczsh 는 존이 부팅되고 실행되는 동안에 사용되는 시작 스크립트로 존이 실행된 다음에 프로그램을 실행할때에 유용합니다.</