db2nodes.cfg 文件用来定义参与 DB2® 实例的数据库分区服务器。如果想要将高速互连用于数据库分区服务器通信,那么还可以使用 db2nodes.cfg 文件来指定高速互连的 IP 地址或主机名。
Linux® 和 UNIX® 操作系统上的 db2nodes.cfg 文件的格式如下:
dbpartitionnum hostname logicalport netname resourcesetname
在下一节中定义了 dbpartitionnum、hostname、logicalport、netname 和 resourcesetname。
Windows® 操作系统上的 db2nodes.cfg 文件的格式如下:
dbpartitionnum hostname computername logicalport netname resourcesetname
在 Windows 操作系统上,db2ncrt 或 START DBM ADD DBPARTITIONNUM 命令会将这些条目添加至 db2nodes.cfg。还可以通过 db2nchg 命令来修改这些条目。您不应该直接添加这些行或编辑此文件。
要扩充分区数据库系统,对每个数据库分区服务器,向 db2nodes.cfg 文件添加一个条目。为其他数据库分区服务器选择的 dbpartitionnum 值必须按升序排序,但是此序列中的值之间可以存在间隔。如果您打算添加逻辑分区服务器,并且希望使节点在此文件中保持按逻辑分组,那么可以选择使 dbpartitionnum 值之间保持一定间隔。
此条目是必需的。
如果 db2nodes.cfg 文件提供的是主机名而不是 IP 地址,那么数据库管理器将以动态方式尝试解析主机名。解析可能是本地解析或通过在已注册域名服务器(DNS)上查询来进行解析,这由机器上的操作系统设置确定。
从 DB2 版本 9.1 开始支持 TCP/IPv4 和 TCP/IPv6 协议。用于解析主机名的方法已更改。
如果在 db2nodes.cfg 文件中定义了短名称,那么版本 9.1 之前的发行版将按 db2nodes.cfg 文件中的定义解析字符串,而版本 9.1 或更高版本将尝试解析标准域名(FQDN)。如果指定对标准主机名称配置的短名称,那么可能导致解析主机名的进程中出现不必要的延迟。
为避免需要解析主机名的 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 将在 /etc/services 文件中保留一定范围内的端口(例如,60000 到 60003 之间)用于分区间通信。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 Process Resource Manager User Guide(B8733-90007)"文档以获取更多信息。
在 Windows 操作系统上,可以通过 DB2PROCESSORS 注册表变量来定义逻辑节点的进程相似性。
在 Linux 操作系统上,resourcesetname 列定义与系统上"非一致性内存访问"(NUMA)节点相对应的一个数字。除了具有 NUMA 策略支持的 2.6 内核之外,系统实用程序 numactl 必须可用。
如果使用 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
此示例说明如何使用 PRM 组在使用 4 个 CPU 和 4 个 MLN 的机器上分享 CPU 资源,为每个 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)节点相对应的一个数字。作为对支持 NUMA 策略的 2.6 内核的补充,还必须具有 numactl 系统实用程序。有关 Linux 操作系统上的 NUMA 支持的更多信息,请参阅关于 numact1 的联机帮助页。
本示例说明如何设置一个具有四个 NUMA 节点的计算机,并使每个逻辑节点都与一个 NUMA 节点相关联。
$ numactl --hardware将显示与以下内容相似的输出:
available: 4 nodes (0-3) node 0 size: 1901 MB node 0 free: 1457 MB node 1 size: 1910 MB node 1 free: 1841 MB node 2 size: 1910 MB node 2 free: 1851 MB node 3 size: 1905 MB node 3 free: 1796 MB
0 hostname 0 hostname 0 1 hostname 1 hostname 1 2 hostname 2 hostname 2 3 hostname 3 hostname 3
此处是如何为 Solaris V9 设置项目的示例。
在此示例中,有一个带有 8 个处理器的物理节点:其中 1 个 CPU 将用于缺省项目,3 个 CPU 由应用程序服务器使用,4 个 CPU 用于 DB2。实例名为 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