db2nodes.cfg 파일은 DB2® 인스턴스에 참여하는 데이터베이스 파티션을 정의하는 데 사용됩니다. 데이터베이스 파티션 서버 통신에 고속 상호 연결을 사용하고자 하는 경우, db2nodes.cfg 파일은 고속 상호 연결의 호스트 이름 또는 IP 주소를 지정하는 데에도 사용됩니다.
Linux® 및 UNIX® 운영 체제에서의 db2nodes.cfg 파일의 형식은 다음과같습니다.
dbpartitionnum hostname logicalport netname resourcesetnamedbpartitionnum
, hostname, logicalport, netname 및 resourcesetname은 다음 섹션에 정의되어 있습니다.
Windows® 운영 체제에서의 db2nodes.cfg 파일의 형식은 다음과같습니다.
dbpartitionnum hostname computername logicalport netname resourcesetnameWindows
운영 체제에서 db2nodes.cfg에 대한 이러한 엔트리는 db2ncrt 또는 START DBM ADD DBPARTITIONNUM 명령에 의해 추가됩니다. 또한, 엔트리는 db2nchg 명령에 의해 수정됩니다. 이러한 행을 직접 추가하거나 이 파일을 편집하면 안됩니다.
파티션된 데이터베이스 시스템의 크기를 조정하려면 각 데이터베이스 파티션 서버에 대한 항목을 db2nodes.cfg 파일에 추가하십시오. 추가적인 데이터베이스 파티션 서버에 대해 선택한 dbpartitionnum 값은 오름차순이어야 하지만 이 시퀀스에 갭이 존재해야 합니다. 논리적 파티션을 추가하고 노드를 이 파일에서 논리적으로 그룹화하려면 dbpartitionnum 값 사이에 갭을 넣도록 선택할 수 있습니다.
이 항목은 필수 항목입니다.
db2nodes.cfg 파일에 IP 주소 대신 호스트 이름이 제공된 경우, 데이터베이스 관리 프로그램은 동적으로 호스트 이름을 해결하려고 시도합니다. 머신의 OS 설정에 따라 로컬 또는 등록된 DNS(Domain Name Server)를 찾아보는 것을 통해 해결이 수행됩니다.
DB2 버전 9.1부터는 TCP/IPv4 및 TCP/IPv6 프로토콜이 둘 다 지원됩니다. 호스트 이름 해결 방법이 변경되었습니다.
버전 9.1 이전 릴리스에서 사용된 방법이 db2nodes.cfg 파일에 정의된 문자열을 해결했던 반면, 버전 9.1 이상의 방법에서는 db2nodes.cfg 파일에 단축 이름이 정의된 경우 FQDN(Fully Qualified Domain Name)을 해결하려고 시도합니다. 완전한 호스트 이름에 대해 구성된 단축 이름을 지정하면 호스트 이름을 해결하는 프로세스에 불필요한 지연을 가져옵니다.
호스트 이름 해결이 필요한 DB2 명령에서 지연을 피하기 위해 다음과 같은 일시적인 해결책을 사용하십시오.
db2 catalog tcpip4 node db2tcp2 remote 192.0.32.67 server db2inst1 with "Look up IPv4 address from 192.0.32.67"
db2 catalog tcpip6 node db2tcp3 1080:0:0:0:8:800:200C:417A server 50000 with "Look up IPv6 address from 1080:0:0:0:8:800:200C:417A"
설치 시 파티션 간 통신을 위해 DB2는 포트 범위(예: 60000 - 60003)를 /etc/services 파일에 예약합니다. db2nodes.cfg의 이 logicalport 필드는 해당 범위 중 어떤 포트를 특정 논리적 파티션 서버에 지정할 것인지를 지정합니다.
이 필드에 대한 항목이 없을 경우 디폴트값은 0입니다. 그러나 netname 필드에 대한 항목을 추가할 경우에는 logicalport 필드에 숫자를 입력해야 합니다.
논리적 데이터베이스 파티션을 사용할 경우, 지정된 logicalport 값은 0에서 시작하고 오름차순으로 계속되어야 합니다(예: 0,1,2).
또한, 하나의 데이터베이스 파티션 서버에 대해 logicalport 항목을 지정할 경우, db2nodes.cfg 파일에 나열된 각 데이터베이스 파티션 서버에 대해서도 logicalport를 지정해야 합니다.
이 필드는 논리 데이터베이스 파티션이나 고속 상호 연결을 사용하지 않은 경우에만 선택적입니다.
이 필드에 대한 항목이 지정되면 데이터베이스 파티션 서버 간의 모든 통신(db2start, db2stop 및 db2_all 명령으로 인한 통신은 제외)이 고속 상호 연결을 통해 처리됩니다.
이 매개변수는 데이터베이스 파티션 통신에 고속 상호 연결을 사용할 경우에만 필요합니다.
이 매개변수는 AIX®, HP-UX 및 Solaris 운영 체제에서만 지원됩니다.
AIX에서는 이러한 개념을 "자원 세트"라고 하고 Solaris 운영 체제에서는 "프로젝트"라고 합니다. 자원 관리에 대한 자세한 정보는 운영 체제 문서를 참조하십시오.
HP-UX에서 resourcesetname 매개변수는 PRM 그룹의 이름입니다. 자세한 정보는 HP에서 제공하는 "HP-UX 프로세스 자원 관리자 사용자 안내서 (B8733-90007)" 문서를 참조하십시오.
Windows 운영 체제에서 논리 노드에 대한 프로세스 친화도는 DB2PROCESSORS 레지스트리 변수를 통해 정의될 수 있습니다.
Linux 운영 체제에서 resourcesetname 컬럼은 시스템의 NUMA(Non-Uniform Memory Access) 노드에 해당하는 번호를 정의합니다. 시스템 유틸리티 numactl은 2.6 커널뿐 아니라 NUMA 규정 지원에서도 사용 가능해야 합니다.
resourcesetname 매개변수를 사용하는 경우 netname 매개변수를 지정해야 합니다.
다음 구성 예를 사용하여 사용자 환경에 해당하는 구성을 판별하십시오.
0 ServerA 0 1 ServerA 1 2 ServerA 2 3 ServerA 3
0 ServerA 0 1 ServerB 0
4 ServerA 0 6 ServerA 1 8 ServerA 2 9 ServerB 0
0 ServerA 0 switch1 1 ServerB 0 switch2 2 ServerB 1 switch2
이러한 제한사항은 다음의 예에 적용됩니다.
다음 예에 AIX 운영 체제용 자원 세트를 설정하는 방법이 나와 있습니다.
이 예에는 32개의 프로세서와 8개의 논리적 데이터베이스 파티션(MLN)이 있는 한 개의 물리적 노드가 있습니다. 이 예는 각 MLN에 프로세스 유사성을 제공하는 방법을 설명합니다.
DB2/MLN1: owner = db2inst1 group = system perm = rwr-r- resources = sys/cpu.00000,sys/cpu.00001,sys/cpu.00002,sys/cpu.00003 DB2/MLN2: owner = db2inst1 group = system perm = rwr-r- resources = sys/cpu.00004,sys/cpu.00005,sys/cpu.00006,sys/cpu.00007 DB2/MLN3: owner = db2inst1 group = system perm = rwr-r- resources = sys/cpu.00008,sys/cpu.00009,sys/cpu.00010,sys/cpu.00011 DB2/MLN4: owner = db2inst1 group = system perm = rwr-r- resources = sys/cpu.00012,sys/cpu.00013,sys/cpu.00014,sys/cpu.00015 DB2/MLN5: owner = db2inst1 group = system perm = rwr-r- resources = sys/cpu.00016,sys/cpu.00017,sys/cpu.00018,sys/cpu.00019 DB2/MLN6: owner = db2inst1 group = system perm = rwr-r- resources = sys/cpu.00020,sys/cpu.00021,sys/cpu.00022,sys/cpu.00023 DB2/MLN7: owner = db2inst1 group = system perm = rwr-r- resources = sys/cpu.00024,sys/cpu.00025,sys/cpu.00026,sys/cpu.00027 DB2/MLN8: owner = db2inst1 group = system perm = rwr-r- resources = sys/cpu.00028,sys/cpu.00029,sys/cpu.00030,sys/cpu.00031
vmo -p -o memory_affinity=1
chuser capabilities= CAP_BYPASS_RAC_VMM,CAP_PROPAGATE,CAP_NUMA_ATTACH db2inst1
1 regatta 0 regatta DB2/MLN1 2 regatta 1 regatta DB2/MLN2 3 regatta 2 regatta DB2/MLN3 4 regatta 3 regatta DB2/MLN4 5 regatta 4 regatta DB2/MLN5 6 regatta 5 regatta DB2/MLN6 7 regatta 6 regatta DB2/MLN7 8 regatta 7 regatta DB2/MLN8
이 예에서는 4개의 CPU 및 4개의 MLN이 있는 머신에서 CPU 공유를 위해 PRM 그룹을 사용하는 방법을 표시하며, MLN당 24%의 CPU 공유를 설정하고 4%는 다른 응용프로그램에 사용하기 위해 남겨둡니다. DB2 인스턴스 이름은 db2inst1입니다.
OTHERS:1:4:: db2prm1:50:24:: db2prm2:51:24:: db2prm3:52:24:: db2prm4:53:24::
db2inst1::::OTHERS,db2prm1,db2prm2,db2prm3,db2prm4
prmconfig -i prmconfig -e CPU
1 voyager 0 voyager db2prm1 2 voyager 1 voyager db2prm2 3 voyager 2 voyager db2prm3 4 voyager 3 voyager db2prm4
대화식 GUI 도구인 xprm을 사용하여 PRM 구성(단계 1-3)을 완료할 수 있습니다.
Linux 운영 체제에서 resourcesetname 컬럼은 시스템의 NUMA(Non-Uniform Memory Access) 노드에 해당하는 번호를 정의합니다. NUMA 정책을 지원하는 2.6 커널에 추가하여 numactl 시스템 유틸리티를 사용할 수 있습니다. Linux 운영 체제에서 NUMA 지원에 관한 자세한 정보는 numact1의 man 페이지를 참조하십시오.
이 예에서는 NUMA 노드와 연관된 각 논리 노드가 있는 네 개의 NUMA 노드 컴퓨터를 설정하는 방법이 나와 있습니다.
$ numactl --hardware다음과 유사한 출력이 표시됩니다.
available: 4 nodes (0-3) node 0 size: 1901MB node 0 free: 1457MB node 1 size: 1910MB node 1 free: 1841MB node 2 size: 1910MB node 2 free: 1851MB node 3 size: 1905MB node 3 free: 1796MB
0 hostname 0 hostname 0 1 hostname 1 hostname 1 2 hostname 2 hostname 2 3 hostname 3 hostname 3
다음은 Solaris 버전 9에 대한 프로젝트를 설정하는 방법의 예입니다.
이 예에는 8개의 프로세서가 있는 하나의 실제 노드가 있습니다. 디폴트 프로젝트에 하나의 CPU가 사용되고 응용프로그램 서버에 세 개의 CPU가 사용되며 DB2에 네 개의 CPU가 사용됩니다. 인스턴스 이름은 db2inst1입니다.
create system hostname create pset pset_default (uint pset.min = 1) create pset db0_pset (uint pset.min = 1; uint pset.max = 1) create pset db1_pset (uint pset.min = 1; uint pset.max = 1) create pset db2_pset (uint pset.min = 1; uint pset.max = 1) create pset db3_pset (uint pset.min = 1; uint pset.max = 1) create pset appsrv_pset (uint pset.min = 3; uint pset.max = 3) create pool pool_default (string pool.scheduler="TS"; boolean pool.default = true) create pool db0_pool (string pool.scheduler="TS") create pool db1_pool (string pool.scheduler="TS") create pool db2_pool (string pool.scheduler="TS") create pool db3_pool (string pool.scheduler="TS") create pool appsrv_pool (string pool.scheduler="TS") associate pool pool_default (pset pset_default) associate pool db0_pool (pset db0_pset) associate pool db1_pool (pset db1_pset) associate pool db2_pool (pset db2_pset) associate pool db3_pool (pset db3_pset) associate pool appsrv_pool (pset appsrv_pset)
system:0:::: user.root:1:::: noproject:2:::: default:3:::: group.staff:10:::: appsrv:4000:App Serv project:root::project.pool=appsrv_pool db2proj0:5000:DB2 Node 0 project:db2inst1,root::project.pool=db0_pool db2proj1:5001:DB2 Node 1 project:db2inst1,root::project.pool=db1_pool db2proj2:5002:DB2 Node 2 project:db2inst1,root::project.pool=db2_pool db2proj3:5003:DB2 Node 3 project:db2inst1,root::project.pool=db3_pool
0 hostname 0 hostname db2proj0 1 hostname 1 hostname db2proj1 2 hostname 2 hostname db2proj2 3 hostname 3 hostname db2proj3