IT_Server/UNIX · Solaris

[Solaris] 솔라리스10 컨테이너에 IBM DB2 UDB v8.2.x 배치하기

JJun ™ 2007. 7. 20. 08:59
LONG
 
특별히 고려해야할 사항들

DB2 UDB 를 솔라리스 컨테이너 기술을 사용해서 운영할때 특별히 고려해야할 사항들에 대해 알아 봅니다.

 

파일 시스템

각 존은 고유의 파일 시스템 구조를 가지고 있습니다. 존의 프로세스들은 오직 해당 존의 루트 하위에 존재하는 파일들에만 접근할 수 있습니다. 오직 글로벌 존 관리자만이 새로운 디바이스를 생성할수 있는 권한을 가지고 있고 이러한 디바이스들을 로컬 존에 익스포트 합니다. 존 관리자는 글로벌 존에서 익스포트 된 디바이스에만 새로운 파일 시스템을 생성하거나 로컬 존에 마운트 할 수 있습니다.

다음의 과정들은 글로벌 존에서 로컬 존으로 파일 시스템을 마운트 하는 4가지 서로 다른 방법을 보여 줍니다:

1. 글로벌 존의 파일 시스템을 생성하고 이 시스템을 로컬 존에 루프백 파일 시스템(lofs) 형태로 마운트 시킴.

a. 글로벌 존에서 파일 시스템을 생성하고 마운트함.

global# newfs /dev/rdsk/c1t4d0s0
global# mount /dev/dsk/c1t4d0s0 /myfs

b. 존 설정을 수정해서 파일 시스템을 로컬 존에서 익스포트 하도록 함.

global# zonecfg -z db2-zone1
zonecfg:db2-zone1>add fs
zonecfg:db2-zone1:fs>set dir=/usr/myfs
zonecfg:db2-zone1:fs>set special=/myfs
zonecfg:db2-zone1:fs>set type=lofs
zonecfg:db2-zone1:fs>end

2. 파일 시스템을 글로벌 존에서 생성하고 UFS 형태로 로컬 존에 마운트 시킴.

a. 글로벌 존에서 파일 시스템 생성.

global# newfs /dev/rdsk/c1t4d0s0

b. 로컬 존에 UFS 타입의 파일 시스템으로 추가.

global# zonecfg -z db2-zone1
zonecfg:db2-zone1>add fs
zonecfg:db2-zone1:fs>set dir=/usr/myfs
zonecfg:db2-zone1:fs>set special=/dev/dsk/c1t4d0s0
zonecfg:db2-zone1:fs>set raw=/dev/rdsk/c1t4d0s0
zonecfg:db2-zone1:fs>set type=ufs
zonecfg:db2-zone1>end 

3. 글로벌 존에서 로컬 존으로 디바이스를 익스포트 하고 마운트.

global# zonecfg -z db2-zone1
zonecfg:db2-zone1>add device
zonecfg:db2-zone1:device>set match=/dev/rdsk/c1t4d0s0
zonecfg:db2-zone1:device>end 
zonecfg:db2-zone1>set match=/dev/rdsk/c1t4d0s0
zonecfg:db2-zone1>end 

add 서브 커맨드를 반복해서 여러개의 디바이스를 추가시킴.

로컬 존의 관리자로 로그인 하고 파일 시스템을 로컬 존에 생성한 다음 마운트 함.

db2-zone1# newfs /dev/rdsk/c1t4d0s0
db2-zone1# mount /dev/dsk/c1t4d0s0 /usr/myfs

4. 디바이스는 이미 로컬 존에서 사용이 가능하도록 만들어 짐. UFS 파일을 직접 로컬 존의 디렉토리 구조에 마운트 시킴.

db2-zone1# mount /dev/dsk/c1t4d0s0 /usr/myfs

 
Raw 디바이스

보안과 고립성이 보장되기 위해서는 솔라리스 컨테이너 상에서 디바이스가 존재하는 것에 대한 제약이 필요 합니다. dtrace, kmem, 와 ksysm 같은 것에 의해 보여지는 시스템 데이타에서 노출되는 디바이스들은 컨테이너에서 사용이 불가능합니다. 기본적으로 물리 디바이스들은 솔라리스 컨테이너에 의해서 접근이 불가능합니다.

시스템 관리자는 물리 디바이스가 로컬 존에서 사용 가능하도록 설정할 수 있습니다. 이러한 작업에 의해 보안성이 훼손되지 않는지에 대한 책임은 다음과 같은 이유에 의해서 전적으로 시스템 관리자에게 있습니다. :

  • 물리 디바이스를 하나 이상의 존에 위치시키는 것은 존 사이에 비밀 통로를 만들 수 있고 존의 독립성을 훼손 시킬 수 있음.
  • 이러한 디바이스를 사용하는 글로벌 존 어플리케이션이 로컬 존에 의해 데이타가 훼손 되었을 경우 같은 위험성에 직면할 수 있음.

시스템 관리자는 zonecfgadd device 서브커맨드를 통해서 로컬 존에 디바이스를 익스포트 할 수 있습니다.

global# zonecfg -z db2-zone1
zonecfg:db2-zone1>add device
zonecfg:db2-zone1:device>set match=/dev/rdsk/c1t4d0*
zonecfg:db2-zone1:device>end 
zonecfg:db2-zone1>set match=/dev/rdsk/c1t4d0*
zonecfg:db2-zone1>end 

/dev/dsk/c1t40d0 의 모든 슬라이스들이 로컬 존에 추가 되었습니다.


 
볼륨 관리

볼륨 메니저는 솔라리스 컨테이너에 설치되거나 관리될 수 없습니다. 현재 권장되고 있는 접근 방법은 볼륨 메니저 제품을 글로벌 존에 설치하고 관리하는 것입니다. 시스템 관리자는 디바이스, 파일 시스템 그리고 볼륨을 생성할 책임이 있습니다. 이러한 것들이 글로벌 존에서 생성이 되면 zonecfg 서브 커맨드에 의해서 다른 존들에서 사용 가능하도록 설정할 수 있습니다.

VERITAS 의 경우 VERITAS 볼륨 메니저는 로컬 존을 지원하지 않습니다. 로컬 존에서 VERITAS 파일 시스템(VxFS) 는 지원되고 루프백 파일 시스템으로써 마운트 될 수 있습니다.

솔라리스 볼륨 매니저는 반드시 글로벌존에 설치되고 관리되어야 합니다. 스토리지가 글로벌 존에서 원하는 방식으로 설정이 되었다면 메타 디바이스들은 로컬 존에서 사용 가능합니다.



 
자원 풀

적절한 CPU 자원 바운더리를 설정해서 리소스를 파티셔닝 하길 원할 것입니다. 솔라리스10은 동적으로 어플리케이션의 로드 변화에 따라 동적으로 리소스 할당을 조정함으로써 관리자에 의해 설정된 퍼포먼스 목표를 만족시킬 수 있도록 설정이 가능합니다.

최소, 최대 CPU 기능은 동적 리소스 풀 과 Fair Share 스케줄러에 의해서 보증될 수 있습니다. 리소스 풀은 CPU 의 상한 하한 바운드를 CPU 사용량 단위로 지정할 수 있는 기능을 제공합니다. Fair Share 스케줄러는 컨테이너 내에서 CPU 자원이 배분량에 의해 분배 되도록 하는데 사용될 수 있습니다.

2006년 4월 26일, IBM 은 x86 서버 상의 DB2 및 IBM 소프트웨어에 대한 라이센스 세부 정책을 발표 했습니다. 솔라리스10 컨테이너는 라이센싱이 가능한 항목이며 이것은 DB2 고객이 DB2 를 솔라리스 에서 운영할때 라이센스를 컨테이너에 지정된 CPU 당 혹은 코어 당으로 살 수 있다는 것을 의미합니다.


 
DB2 배치 시나리오

DB2 UDB v8.2.x 은 솔라리스10 에서 다음과 같은 접근 방법에 따라 설치될 수 있습니다:

  • DB2 UDB v8.2.x 를 글로벌 존에 설치하기; 후에 어떠한 로컬 존도 생성되지 않을 것임.
  • 로컬 존을 생성하고 DB2 UDB v8.2.x 를 직접 로컬 존에 설치.

솔라리스10 시스템이 글로벌 존에 DB2 UDB v8.2.x 가 설치되어 있다고 가정할때: 만약 새로운 로컬 존이 존 설치에 과정으로써 생성되었을때 DB2 UDB 설치전 실행 스크립트는 글로벌 존의 /opt/IBM/db2/V8.1 를 삭제하려고 할 것이고 이것은 즉 글로벌 존의 DB2 UDB v8.2.x 가 사용이 불가능하게 됨을 의미 합니다.

로컬 존이 배치된 솔라리스10 시스템에서 만약 DB2 UDB v8.2.x 를 글로벌 존에 설치하려 하면 인스톨시 다음과 같은 에러를 보게 될 것입니다:

"pkgadd: ERROR: unable to get inherited directories: zonecfg_setipdent:
Bad handle"

권장되는 접근법은 DB2 UDB 를 로컬 존에 직접 설치 하는 것입니다. 솔라리스 컨테이너 내에서 유일하게 실행되지 않는 DB2 유틸리티는 db2osconf 입니다. 왜냐하면 db2osconf/dev/kmem 에 접근이 필요한데 컨테이너에서는 접근이 불가능하기 때문입니다. workaround 로는 db2osconf 를 글로벌 존에서 실행해서 컨테이너의 리소스 제어를 통해서 커널 파라미터를 설정 하는 것입니다.


 
요약

솔라리스 컨테이너 기술은 하나의 시스템을 여러개의 독립적인 실행 환경으로 파티셔닝이 가능하도록 함으로써 어플리케이션 레벨의 서비스 관리를 향상시킬 수 있는 설비를 제공합니다. 솔라리스 컨테이너는 안전하고, 유연하고, 가볍고, 구현이 쉽습니다. 또한 DB2 UDB 와 다른 웹 기반의 어플리케이션들을 통합할 수 있는 최적의 환경을 제공합니다.


 
추가 참고자료

썬 메뉴얼

System Administration Guide: Solaris Containers-Resource Management and Solaris Zones

Solaris Tunable Parameters Reference Manual

썬 BluePrint 문서들

Solaris Containers -- What They Are and How to Use Them (pdf)

Slicing and Dicing Servers: A Guide to Virtualization and Containment Technologies (pdf)

Restricting Service Administration in the Solaris 10 Operating System (pdf)

썬 화이트 페이퍼

Solaris Containers: Server Virtualization and Manageability (pdf)

 

 

IBM 문서들

Considerations for Installing DB2 UDB Version 8 Products on Solaris Operating Environment 10 Systems

Common Criteria Certification: Installing DB2 Universal Database Enterprise Server Edition and DB2 Universal Database Workgroup Server Edition (pdf - 312 pages)

IBM DB2 Universal Database: Installation and Configuration Supplement (pdf)

Sub-capacity Licensing for Select IBM Passport Advantage Eligible Programs Running on x86 Servers Helps Improve Flexibility and Price/Performance (pdf)


 
저자에 관하여 the Author

Cherry Shu 는 썬의 마케팅 개발 엔지니어링팀의 멤버로써 소프트웨어 벤더들이 솔라리스 플랫폼 기술을 수용하도록 도와주는 역활을 하고 있습니다.



이 아티클의 영문 원본 : 
htttp://www.sun.com/bigadmin/features/articles/db2_containers.html

ARTICLE

이 글은 IBM DB2 UDB v8.2.x 버전을 솔라리스10의 논-글로벌 존에서 실행시키기 위한 가이드라인을

제시 합니다.

 

순서:

  • 솔라리스 컨테이너
  • 솔라리스 컨테이너에 DB2 UDB 설치하기
    • DB2 UDB 의 존 설정 결정하기
    • 존 설치하기
    • 존 부팅시키기
    • DB2 설치하기
    • DB2 를 위한 IPS 값들을 리소스 제어를 통해 설정하기
  • 특별히 고려해야할 사항들
    • 파일 시스템
    • Raw 디바이스
    • 볼륨 메니지먼트
    • 리소스 풀
    • DB2 배치 시나리오
  • 요약
  • 추가 참고자료

DB2 UDB 와 DB2 Connect v8.2.2 그리고 이후의 제품들은 솔라리스10의 컨테이너 기술을 이용한 글로벌 존에서 실행되는 것이 certify 되어 있습니다. 이 문서는 DB2 UDB 와 Db2 Connect 제품을 논-글로벌 존에서 실행하는데에 촛점을 맞추어서 DB2 데이타베이스를 위해 적절한 논-글로벌 인스턴스를 생성하는 과정을 자세히 설명합니다. IBM의 DB2 제품 문서들이 존재 하기 때문에 이 글에서는 오직 솔라리스10 에서 중요한 단계별 가이드라인들만 요약했습니다. 추가적으로 이 글은 DB2 UDB 를 논-글로벌 존에서 실행하는데에 특별히 고려해야할 사항들에서도 설명합니다.


 
 
솔라리스 컨테이너

솔라리스10의 컨테이너는 가상화된 런타임 환경을 제공합니다. 즉 하나 혹은 그 이상의 어플리케이션이 나머지 시스템에 영향을 주거나 상호작용하는 등의 일이 없이 실행됨을 의미 합니다. 솔라리스 컨테이너는 두가지 중요한 기술을 포함하고 있습니다: 솔라리스 존 파티셔닝 기술, 리소스 관리 툴. 솔라리스 존은 솔라리스 컨테이너의 측면에서 어플리케이션 운영 환경 바운더리를 제공하고 리로스 관리 프레임워크는 각 어플리케이션의 리소스 바운더리를 생성합니다. 이러한 리소스 바운더리는 CPU 혹은 메모리 소비, 네트워크 대역폭 혹은 프로세서 셋 등에 제한을 줄 수 있습니다.

솔라리스 존은 소프트 웨어 서비스 부터 플랫폼의 리소스 까지 가상 매핑을 제공할 수 있고 어플리케이션들이 오직 하나의 솔라리스 인스턴스를 공유 하더라도 완전히 고립될 수 하는 기능을 제공합니다. 존의 두가지 타입은 글로벌 과 논-글로벌 존입니다.

글로벌 존은 모든 시스템을 포함 합니다. 글로벌 존의 관리자는 시스템 전체를 조정할 수 있습니다. 글로벌 존은 항상 존재 합니다. 글로벌 존 내부는 논-글로벌 존들입니다. 이러한 존들은 가상 플랫픔 레이어에 의해서 머신의 물리적인 하드웨어와 완전히 고립되어 있습니다. 몇몇 제한 조건들이 컨테이너의 고립화를 위해서 논-글로벌 존에 적용됩니다.

솔라리스 컨테이너가 존 기술을 포함하고 있기 때문에 이 글에서는 "컨테이너" 를 완벽히 가상화된 환경의 이름으로 사용할 것이고 "존" 은 명확한 설명이 필요할때에만 사용할 것입니다.

컨테이너간의 통신은 네트워크 스택이나 공유된 파일 시스템 같이 분리된 시스템들의 통신에서 사용되는 것과 동일한 표준 인터페이스를 사용합니다. 한 컨테이너 내에서 에러가 발생하면 컨테이너는 마치 방어막 처럼 에러의 영향을 오직 그 서비스가 돌아가는 컨테이너 내에서만 영향을 미치도록 합니다. 에러가 너무 심각해서 보통 서버를 재부팅 시켜야 할 정도라도 오직 에러가 발생항 해당 컨테이너만에 영향을 미칩니다. 영향을 받은 컨테이너는 다른 컨테이너나 시스템에 어떠한 영향도 주지 않고 수동 혹은 자동으로 재부팅 시킬 수 있습니다.

존이 완벽히 가상 OS 환경을 제공하므로 솔라리스 컨테이너는 유저에 관점에서 완벽히 서로 분리된 시스템처럼 보이게 됩니다. 유저가 컨테이너에 접근하기 위해서는 다른 분리된 시스템과 마찬가지로 적절한 유저 아이디를 가지고 있어야 합니다. 관리 유저들은 반드시 그들의 컨테이너에 접근하기 위해 권한을 가지고 있어야 하고 접근 권한은 서비스를 제공하는 컨테이너에 의해 제한됩니다. 결과적으로 컨테이너내의 작업들은 일반적인 수작업 오류에서 보호 됩니다. 즉 특정 데이타베이스의 인스턴스를 내리는것 대신 전체 데이타 베이스를 내려 버리는 것 같은 오류들 말입니다. 이러한 분리는 일반적인 운영체제 툴들에게도 적용됩니다. ps 같은 툴들은 일반적으로 시스템 상에 실행되는 모든 프로세스들을 보여주지만 컨테이너 내에서 실행되면 컨테이내에서 실행되는 프로세스들만을 보여 줌으로써 시스템들 간에 기본적으로 요구되는 보안 레벨을 유지해 줍니다.

 

 

솔라리스 컨테이너의 강점

관리 비용 감서: 어플리케이션이 몇개의 서버에 안전하게 통합될 수 있음으로써 OS 인스턴스의 감소로 인한 관리 복잡성 감소 및 비용 감소를 얻을 수 있고 또한 관계된 소프트웨어의 라이센스 비도 줄일 수 있습니다.

적은 비용의 작업으로 자원 활용성 증가: 동적 자원 재할당 기능은 사용되지 않는 자원을 필요로하는 다른 컨테이너에 넘겨 줌으로써 자원의 활용성을 향상 시킵니다. 또한 솔라리스 컨테이너가 제공하는 오류 및 보안 고립성에 의해 예측할 수 없는 워크로드를 수행하는 어플리케이션이 더이상 종속적이고 활용성이 떨어지는 시스템에서 실행되어야 할 필요가 없이 안전하게 다른 어플리케이션들과 통합될 수 있습니다.

서비스 가용성 증가: 오류 고립화와 보안 고립화는 어플리케이션간에 에러 전이와 퍼포먼스혹은 가용성에 영향을 미칠수 있는 전역적 혹은 비 전역적 작업들의 영향에서 보호해 줍니다. 일관적이고 간단한 환경으로 인해서 수작업으로 인해 가용성에 영향을 받을 수 있는 오류를 줄여줄 수 있습니다.

가용성 증가: 솔라리스 컨테이너는 서버 통합에 있어서 어플리케이션이 자원의 제약사항, 오류 혹은 보안상의 이슈들에 영향을 받을지에 대한 걱정을 줄여 주면서 좀 더 안전하게 통합을 진행할 수 있도록 도와 줍니다. 또한 솔라리스 컨테이너는 재설정하기 쉽고 하드웨어간의 마이그레이션 작업이 매우 간단합니다.

 

 


 

솔라리스 컨테이너에 DB2 UDB 설치하기

존 기술로 여러개의 존이 싱글 시스템상에 만들어 질 수 있고 존은 DB2 UDB 의 분리된 인스턴스를 실행하도록 설정도리 수 있습니다. 각 존은 가상화된 OS 환경으로 각각 고유의 이름을 가지고 있고 독립적으로 관리될 수 있습니다. 예를 들어 한 존의 db2inst1 유저는 다른 존의 db2inst1 유저와 완전히 다른 유저 입니다. 각각의 존은 서로 다른 UID, 패스워드, 홈 디렉토리등등을 가지고 있습니다. 각 DB2 인스턴스들을 고유의 존에서 실행함에 따라 각 인스턴스들은 각각의 완전히 서로 독립되게 됩니다. DB2 인스턴스의 관점에서 이것은 여전히 종속된 시스템에 실행되는 것입니다.

각 섹션은 DB2 UDB 를 설치하고 실행하는데에 적절한 솔라리스 컨테이너 명령어들을 설명합니다.

 

 

1.DB2 UDB 의 존 설정 결정하기

솔라리스 존은 대략 100Mbyte 정도의 디스크 공간을 필요로 하고 DB2 UDB v8.2.x ESE 소프트웨어와 DB2 인스턴스는 대략 1Gbyte 정도의 디스크 공간이 필요합니다.

다음의 리소스 타입들이 논-글로벌 존에서 설정될 수 있습니다:

  • inherit-pkg-dir: 존에 루프백 마운트 되는 시스템 디렉토리들
  • fs: 논-글로벌 존에서 마운트될 파일 시스템들
  • net: 존에서 사용할 네트워크 인터페이스
  • device: 존에 노출될 디바이스들
  • rctl: 활성화될 리소스 제어
  • pool: 존이 바운드 되어 있는 리소스 풀의 이름

db2-zone1 이라는 이름의 샘플 존 설정을 보시기 바랍니다. IP 주소 199.0.1.12 를 가지고 글로벌존의 hme0 인터페이스에 설정되어 있는 가상 인테페이스를 살펴보시기 바랍니다.

global # zonecfg -z db2-zone1
db2-zone1: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:db2-zone1> create
zonecfg:db2-zone1> set zonepath=/export/zones/db2-zone1
zonecfg:db2-zone1> set autoboot=true
zonecfg:db2-zone1> add net
zonecfg:db2-zone1:net> set address=199.0.1.12/24
zonecfg:db2-zone1:net> set physical=hme0
zonecfg:db2-zone1:net> end
zonecfg:db2-zone1>verify
zonecfg:db2-zone1>commit
zonecfg:db2-zone1>exit

존 설정이 완료 되었습니다. XML 파일 /etc/zones/db2-zone1.xml 이 생성되었고 여기에 존의 설정 데이타가 저장됩니다.

zonecfg(1M) 의 동적인 설정 모드 외에도 커맨드파일 모드를 제공함으로써 -f 옵션을 이용해 지정된 스크립트 파일로 부터 작업을 할 수 있습니다.

db2-zone1 라는 이름을 가진 존을 설정하는 스크립트를 생성합니다.

global # vi /export/zones/zone1.cfg
#script to create zone to run DB2
create
set zonepath=/export/zones/db2-zone1
set autoboot=true
add net
set address=199.0.1.12/24
set physical=hme0
end 
verify
commit
#end of script

존 설정 데이타를 가지고 있는 스크립트 파일을 zonecfg 를 이용해 실행해서 존을 생성합니다.

global # zonecfg -z db2-zone1 -f /export/zones/zone1.cfg

 

 

2. 존 설치하기

아래는 존을 설치하는 방법입니다:

# zoneadm -z db2-zone1 install
Preparing to install zone <db2-zone1>.
Creating list of files to copy from the global zone.
Copying <12704> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <785> packages on the zone.
Initialized <785> packages on zone.
Zone <db2-zone1> is initialized.
The file </export/zones/db2-zone1/root/var/sadm/system/logs/install_log>
contains a log of the zone installation.

 

 

 

3. 존 부팅시키기

global# zoneadm -z db2-zone1 boot

설치 후에 존의 첫번째 부팅에서 표준 시스템 식별 질문들 즉 이름 스키마, 지역 및 시간 존, 혹은 루트 패스워드 같은 것들을 지정해 주어야 합니다. 이것은 zlogin(1M) 커맨드를 이용해 수행됩니다.

global# zlogin -C db2-zone1

시스템 식별 질문들은 첫번째 부팅 전에 sysidcfg 파일을 미리 생성한 다음 부팅 시키므로써 그냥 넘어갈 수 있습니다. sysidcfg 파일의 글로벌 존상에서의 위치는 /export/zones/db2-zone1/root/etc/sysidcfg 입니다.db2-zone1 의 샘플 sysidcfg 파일은 아래와 같습니다:

global # cat /export/zone/db2-zone1/root/etc/sysidcfg
system_locale=C
timezone=US/East
network_interface=primary {
hostname=db2zone2
terminal=xterm
security_policy=NONE
name_service=NIS {
domain_name=east.sun.com
}
root_password=sS3G0h84sqwJA

시스템 식별자와 루트 패스워드를 설정한 이후에 존은 사용가능한 상태가 됩니다. 이제 존은 telnet(1), rlogin(1), 혹은 ssh(1) 커맨드를 이용해서 다른 솔라리스 운영체제와 같이 네트워크를 이용해서 접근할 수 있습니다. 혹은 글로벌 존에서 zlogin(1M) 커맨드를 이용해서 논-글로벌 존에 로그인 하실 수 있습니다.

global# zlogin -l root db2-zone1

 

 

 

4. DB2 설치하기

다음 단계는 DB2 UDB 를 db2-zone1 에 설치하는 것입니다.

db2-zone1# cd ${DB2_DIST}
db2-zone1# ./db2setup

DB2 설치 마법사를 따라가면서 DB2 를 설치하고 db2inst1 라는 이름의 인스턴스를 생성합니다.

 

 

 

5. DB2 를 위한 IPS 값들을 리소스 제어를 통해 설정하기

이전의 솔라리스버전에서 IPC 설비들은 커널 파라미터에 의해 조정되었었습니다. 여러분들은 반드시 /etc/system 파일을 수정한 다음에 수정사항을 반영하기 시스템을 재부팅해야 했었습니다. 솔라리스10에서 /etc/system 파일은 deprecate 되었습니다. 그리고 오직 구버전과의 호환성을 위해서 남겨 졌습니다. 논-글로벌 존에는 /etc/system 파일이 존재하지 않습니다.

솔라리스10에서 System V IPC 설정 같은 조정가능한 많은 커널 파라미터들이 자동으로 설정되거나 리소스 제어를 통해서 조정될 수 있습니다. 공유 메모리, 메세지 큐 그리고 세마포어 같은 IPC 설비들은 프로젝트(project) 단위 혹은 유저 단위로 글로벌 존, 논-글로벌 존에서 설정될 수 있습니다. 이러한 설정은 시스템이 수행중인 상태에서 prctl(1M) 커맨드로 수행 가능합니다.

DB2 인스턴스 db2inst1db2setup 의 설치 이후에 생성되었습니다. db2inst1 의 리소스 제어를 설정하기 위해 유저 db2inst1 을 위한 커스텀 프로젝트를 생성해야 합니다.

db2-zone1# projadd -c "DB2 instance 1" user.db2inst1 

user.db2inst1 로 명명 된 프로젝트는 사용자 db2inst1 의 기본 프로젝트로써 생성되었습니다. 새로운 프로젝트 항목이 로컬 프로젝트 데이타베이스 /etc/project 에 저장되었습니다. id(1M) 커맨드가 db2inst1 사용자의 기본 프로젝트 아이디를 확인 하기 위해 사용될 수 있습니다.

db2-zone1# su - db2inst1
$ id -p
uid=7001(db2inst1) gid=707(db2iadm1) projid=4567(user.db2inst1) 
$ exit

DB2 는 솔라리스 플랫폼의 IPC 설정 값들을 적정값으로 생성해주는 db2osconf 라는 유틸리티를 제공합니다. db2osconf 는 오직 글로벌 존에서만 실행이 가능합니다.

global# cd /export/zones/db2-zone1/root/opt/IBM/db2/V8.1/bin 
global# ./db2osconf 
set msgsys:msginfo_msgmni = 6144 
set semsys:seminfo_semmni = 7168 
set shmsys:shminfo_shmmax = 9578697523 
set shmsys:shminfo_shmmni = 7168 
Total kernel space for IPC: 
0.98MB (shm) + 1.71MB (sem) + 2.08MB (msg) == 4.77MB (total) 

db2-zone1 에 로그인 한 후 db2osconf 에 의해 생성된 값에 맞게 리소스 제어 값들을 설정 합니다.

db2-zone1# projmod -s -K "project.max-shm-
memory=(privileged,9578697523,deny)" user.db2inst1 
db2-zone1# projmod -s -K "project.max-shm-ids=(privileged,7168,deny)" 
user.db2inst1
db2-zone1# projmod -s -K "project.max-msg-ids=(privileged,6144,deny)" 
user.db2inst1 
db2-zone1# projmod -s -K "project.max-sem-ids=(privileged,7168,deny)" 
user.db2inst1 

새로운 설정들이 프로젝트 user.db2inst1 의 데이타베이스 항목에 추가 되었습니다.

db2-zone1#cat /etc/project
system:0::::
user.root:1::::
noproject:2::::
default:3::::
group.staff:10::::
user.db2inst1:4567::::project.max-
shm-memory=(privileged,9578697523,deny);project.max-shm-
ids=(privileged,7168,deny);project.max-msg-
ids=(privileged,6144,deny);project.max-sem-
ids=(privileged,7168,deny);

이러한 변경은 prctl 커맨드를 이용해서도 할 수 있지만 설정값이 저장되지는 않습니다.

db2-zone1# prctl -n project.max-shm-memory -v 9578697523 -r -i 
project user.db2inst1 db2-zone1# prctl -n project.max-shm-ids -v 7168 -r -i project
user.db2inst1 db2-zone1# prctl -n project.max-msg-ids -v 6144 -r -i project
user.db2inst1
db2-zone1# prctl -n project.max-sem-ids -v 7168 -r -i project
user.db2inst1

리소스 제어값들을 확인하기 위해 idprctl 커맨드를 사용합니다.

db2-zone1# su - db2inst1 
$ prctl -i project user.db2inst1