怎样搭建DB2 DPF for Linux/Unix? DPF 是 Database Partition Feature的简称。也就是DB2的多分区数据库。 1. 概念介绍 Instance级别的multi-partition DB2环境分为3种: DB2 SMP, DB2 MPP 和 DB2 SMP Cluster DB2 SMP指的是在一台有多个CPU的机器上(双核在Linux上被识别为2个CPU),建立的一个有多个partition(不超过CPU的数量)的DB2 Instance. DB2 MPP指的是在多台单个CPU的机器上,建立的一个有多个partition的DB2 Instance,在其中的每台机器上建立1个Partition. DB2 SMP Cluster指的是在多台有多个CPU的机器上,建立的一个有多个partition的DB2 Instance,在其中的每台机器上建立多个Partition. 3种partition环境的搭建不完全相同,现在分别叙述. 这种环境对机器的要求很高,一般来说至少4个CPU(或2个双核CPU),4G以上内存以及至少有6块独立硬盘或盘阵,才能体现出DB2 SMP环境的效率优势来. 好处是:对网络的要求比较低,只要满足客户端到server的连接就可以了.配置相对简单,稳定性比较高.便于集中管理. 缺点是:服务器配置要求高,增加节点非常麻烦(至少需要增加CPU),受限于磁盘IO通道的速度 DB2在运行的时候需要大量的共享内存(shm),信号量(sem)和消息队列(msg). 一般来说Linux默认的参数都偏小,需要修改. 使用root用户 /sbin/sysctl -w kernel.sem="250 32000 32 1024" /sbin/sysctl -w kernel.msgmnb=16384 /sbin/sysctl -w kernel.msgmni=1024 /sbin/sysctl -w kernel.msgmax=8192 /sbin/sysctl -w kernel.shmmni=4096 /sbin/sysctl -w kernel.shmall=2097152 /sbin/sysctl -w kernel.shmmax=1073741824 注* 配置的值仅供参考,请参阅Linux系统配置和系统的实际情况进行配置. 只要是包含DB2 DPF(DB partition feature)功能的DB2版本都可以,我使用的是DB2 ese. 安装过程略过,请参考DB2安装文档. 注意:安装DB2时,建议使用db2_install安装。 推荐创建新的DB2 instance用户和组,而不要使用安装DB2时默认创建的用户和组. 用户至少需要创建2个用户和2个组. 使用root用户 /usr/sbin/groupadd /usr/sbin/groupadd db2fgrp #fenced用户所在的group /usr/sbin/useradd -g db2igrp -d /home/db2inst db2inst #instance用户,因为该用户的home目录是默认的数据文件目录和log目录, #强烈建议将这个目录建立在单独的卷上,防止因该目录写入过多数据导致 #整个根文件系统崩溃 /usr/sbin/useradd -g db2fgrp -d /home/db2fenc db2fenc #fenced用户 使用root用户 /opt/ibm/db2/V9.1/instance/db2icrt -s ese -u db2fenc db2inst 其中"-s ese"建立一个ese的instance,"-u db2fenc"是fenced用户,"db2inst"是db2 instance用户,同时也是这个instance的名字 已知问题和解决方案* (1)在某些情况下,在删除了原先的instance以后,不能创建同名的instance.错误是sqllib目录已经存在,即使删除也不管用.可以把instance用户的home目录设成不可读不可写,然后再创建instance有时可以成功. rsh是远程运行shell的服务.db2使用rsh服务运行启动和停止数据库服务器的命令,以及大部分管理命令.linux上现在常用的rsh有'k5 rsh','krb4 rsh'和'普通rsh' 3种.这里只介绍普通rsh的配置. 首先检查rsh的包是否安装: -bash-3.00$ rpm -qa |grep rsh rsh-server-0.17-25.3 #rsh server的安装包 rsh-0.17-25.3 #rsh的client程序 再检查rsh服务的配置: -bash-3.00$ vi /etc/xinetd.d/rsh service shell { socket_type = stream wait = no user = root log_on_success += USERID log_on_failure += USERID server = /usr/sbin/in.rshd disable = no } disable改成no. 重启服务: service xinetd restart 修改认证文件 /etc/hosts.equiv 文件的格式是 ... instance的用户home目录下的 .rhosts 如果配置了/etc/hosts.equiv 那么在.rhosts里面弄一个'+'就行 也可以用和/etc/hosts.equiv同样的文件格式配置 检测rsh服务 使用instance用户运行 rsh 正常返回是机器的时间 db2nodes.cfg是配置多partition的关键配置文件.位置一般在instance用户的$HOME/sqllib/.文件格式是: ... 建立几个partition的SMP环境,就在里面配几行. 示例: 0 volvo 0 1 volvo 1 2 volvo 2 假使一个4个partition的instance.至少需要使用root用户在/etc/services中配置以下端口: DB2c_ DB2_ DB2_ DB2_ DB2_ DB2_ DB2_ 其中,DB2c_ db2 update dbm cfg using SVCENAME DB2c_ 定义到数据库的dbm的参数中. 而DB2_ 使用db2 instance用户: db2set DB2COMM=TCPIP 配置完以上的选项,数据库至少应该可以正常启动. [instpt@acadia script]$ db2start 06/28/2007 22:32:57 1 0 SQL1063N DB2START processing was successful. 06/28/2007 22:32:58 3 0 SQL1063N DB2START processing was successful. 06/28/2007 22:32:58 0 0 SQL1063N DB2START processing was successful. 06/28/2007 22:32:58 2 0 SQL1063N DB2START processing was successful. SQL1063N DB2START processing was successful. 这样就可以继续使用了. DB2 MPP和SMP Cluster的Partition是建立在不同的机器上的,因此配置比较相似.相对于SMP环境来说,配置MPP环境复杂的多. MPP环境和SMP Cluster对单台机器配置要求并不高.但是,对每台机器的稳定性和机器之间网络的速度以及稳定性要求比较高. 好处是:对单台机器配置要求并不高.便于拓展,增加节点比较方便. 缺点是:对每台机器的稳定性和机器之间网络的速度以及稳定性要求比较高.配置相对复杂. 每台机器的操作系统必须完全相同,包括位数,小版本号和补丁.如果有任何一台机器的操作系统的版本不同,即使是细微的不同,都有可能造成许多奇怪错误. 操作系统内核参数的配置与SMP操作系统的准备相同. 在每台机器上都需要安装完全相同的DB2版本.如果有任何一台机器的DB2版本不同,即使是细微的不同,都有可能造成许多奇怪错误. 只要是包含DB2 DPF(DB partition feature)功能的DB2版本都可以,我使用的是DB2 ese. 安装过程略过,请参考DB2安装文档. MPP环境的instance home目录是建立在一个NFS系统之上的.而且所有机器上的partition都共享这一个instance home目录.了解这一点是配置整个MPP环境的关键.因为,几乎所有的配置都是围绕这一点展开的. 注意:安装DB2时,建议使用db2_install安装。 配置NFS系统请参见相关文档. NFS盘需要mount到所有的机器上. MPP环境创建用户有两点需要注意: 1.用户和组的id在每台机器上都必须相同,而且不能和其他用户的id冲突. 2.instance用户和fenced用户的home目录必须建立在NFS盘上.而且必须是NFS盘上的同一个目录. 推荐创建新的DB2 instance用户和组,而不要使用安装DB2时默认创建的用户和组. 用户至少需要创建2个用户和2个组. 使用root用户 /usr/sbin/groupadd -g #gid是这个组的id,必须是正整数,在所有机器上都必须相同. /usr/sbin/groupadd -g #gid是这个组的id,必须是正整数,在所有机器上都必须相同. /usr/sbin/useradd -u #instance用户,因为该用户的home目录是默认的数据文件目录和log目录, #这个目录必须建立在NFS目录上,而且所有机器上的instance home目录必 #须是NFS上的同一个目录 #uid是这个用户的id,必须是正整数,在所有机器上都必须相同. /usr/sbin/useradd -u #fenced用户,因为该用户的home目录是默认的数据文件目录和log目录, #这个目录必须建立在NFS目录上,而且所有机器上的fenced home目录必 #须是NFS上的同一个目录 #uid是这个用户的id,必须是正整数,在所有机器上都必须相同. 在所有的机器上,使用root用户,建立db2 admin用户: /usr/sbin/groupadd /usr/sbin/useradd -g 注:每台机器上的用户和组的id没有必要相同 在所有的机器上,使用root用户,建立db2 admin server: /opt/ibm/db2/V9.1/instance/dascrt -u 在所有的机器上,使用db2 admin user,启动db2 admin server: db2admin start 在 node 0 所在的机器上,使用root用户 /opt/ibm/db2/V9.1/instance/db2icrt -s ese -u 其中"-s ese"建立一个ese的instance,"-u 已知问题和解决方案* (1)在某些情况下,在删除了原先的instance以后,不能创建同名的instance.错误是sqllib目录已经存在,即使删除也不管用.可以把instance用户的home目录设成不可读不可写,然后再创建instance有时可以成功. rsh必须在每台机器的instance用户下都要配置.这样要保证从环境中的任何一台机器的instance用户都可以通过rsh访问其他任何一台机器的instance用户的命令. rsh的配置参见SMP中配置rsh db2nodes.cfg是配置多partition的关键配置文件.位置一般在instance用户的$HOME/sqllib/.文件格式是: ... 建立几个partition的MPP或SMP Cluster环境,就在里面配几行. 示例: 0 volvo 0 1 volvo 1 2 toyota 0 3 acadia 0 4 acadia 1 5 acadia 2 这是一个DB2 SMP Cluster的db2nodes.cfg,其中volvo,toyota,acadia都是环境中的机器名.这个文件在volvo上2个 partition,在toyota上1个partition,在acadia上3个partition.第一列的数字是整个环境的logic port不能重复.第三列的数字是在那台机器的instance上的logic port可以重复. 每台机器上的配置都必须相同. 假使一个4个partition的instance.至少需要使用root用户在/etc/services中配置以下端口: DB2c_ DB2_ DB2_ DB2_ DB2_ DB2_ DB2_ 其中,DB2c_ db2 update dbm cfg using SVCENAME DB2c_ 定义到数据库的dbm的参数中. 而DB2_ 每台机器上都要配置 使用db2 instance用户: db2set DB2COMM=TCPIP 配置完以上的选项,数据库至少应该可以正常启动. [instpt@acadia script]$ db2start 06/28/2007 22:32:57 1 0 SQL1063N DB2START processing was successful. 06/28/2007 22:32:58 3 0 SQL1063N DB2START processing was successful. 06/28/2007 22:32:58 0 0 SQL1063N DB2START processing was successful. 06/28/2007 22:32:58 2 0 SQL1063N DB2START processing was successful. SQL1063N DB2START processing was successful. 配置DPF考虑若干场景: 1 一台物理机单个分区 最简单的单机单数据库环境。 2 一台物理机两个分区 3 两台物理机四个分区 配置同2。 4 三台物理机六个分区 配置同2。 所以介绍配置场景2和3的方法。 =============================== 准备工作: 1、检查系统配置 补丁升级、系统时间设置。 每台机器的操作系统必须完全相同,包括位数、小版本号和补丁,如果有任何一台机的操作系统版本不同,即使是细微不同,都有可能造成许多奇怪的错误。 每台机器都必须安装完全相同的DB2版本。 2、启用远程shell程序 对于数据库分区环境,DB2需要一个远程shell程序来在远程分区上执行命令。在DB28.2之前,rsh被默认为远程shell机制,用于分区间的通信。OPENSSH用于替代rsh,以便在不安全的通道上提供有安全保障的通信。为支持一个受安全保障的环境,在数据库分区环境中,应该使用openSSH,而不是rsh。 检测rsh服务:使用实例用户运行 rsh 3、设置NFS 对于一个数据分区配置,必须有一个可供所有参与分区数据库系统的机器使用的文件系统。这个文件系统将用于DB2实例的home目录。容纳DB2实例的机器被称为instance-owning机器。为了共享该文件系统,必须配置NFS。NFS盘需要mouont到所有机器上。 4、创建新用户和组 4.1 instance用户和fenced用户的home目录必须建立在NFS盘上,而且必须是NFS盘上的同一个目录。 推荐创建新的DB2 instance用户和组,而不用安装DB2时默认创建的用户 组,至少创建2个用户和2个组。 4.2 在所有机器上,建立db2 admin server : dascrt -u 启动 db2 admin server:db2admin start 4.3 在node0所在机器上,创建fenced user和instance user:db2icrt -u 可能的问题和解决方法: (1)在某些情况下,删除了原先的instance以后,不能创建同名的instance,错误时sqllib目录已经存在。几时删除也不管用。可以把instance用户的home目录设成不可读不可写,然后再创建instance有时可以成功。 (2)rhs必须在每台机的instance用户下都要配置,保证从环境中的任何一台机器的instance用户都可以通过rsh访问其他任何一台机器的instance用户的命令。 ================================================================ 场景2的配置(一台物理机两个分区)--- 1、查看系统配置 prtconf|more 如:power6, 4processors, 内核64bit,内存15G,主机名***,vg有rootvg/datavg/dbvg。 oslevel -s 如:6100-04-01-0944 2、查看NFS是否运行(对于一台机的环境其实不需要) lssrc -g nfs rpc.statd active rpc.lockd active 3、查看已有用户 cat /etc/passwd db2fenc1,db2inst1,db2inst2,db2inst3 4、查看DB2版本 su - db2inst1 db2level DB2 v9.5.0.5 5、用smit去掉用户db2inst2,用rm -r删除目录/db2home/db2inst2 6、用smit重建实例用户db2inst2 userID:212 primary group:db2udb group set:db2udb,staff,dasadm1 home directory:/db2home/db2inst2(创建实例时自动认为该目录为实例目录) 记得设置密码!(passwd db2inst2) 7、用root用户新建实例 #/opt/IBM/db2/V9.5/db2icrt -u db2fenc1 db2inst2 8、验证可用端口 cat /etc/services DB2_db2inst2 60008/tcp DB2_db2inst2_1 60009/tcp DB2_db2inst2_2 60010/tcp DB2_db2inst2_END 60011/tcp 9、配置远程rsh,哪个用户需要远程执行rsh命令就在自己的home目录下建立.rhosts文件。 例如对db2inst2用户,用db2inst2创建:vi /db2home/db2inst2/.rhosts 添加:hostname instance_owner_user_name 但用rsh hostname date检验说permission denied。改为+。但在生产环境中不得用这个。 10、配置节点,用db2inst2更改/db2home/db2inst2/sqllib/db2nodes.cfg为: 0 hostname 0 1 hostname 1 11、设置tcp/ip通信 root用户修改/etc/services: db2_conn 50000/tcp db2set DB2COMM=tcpip db2 terminate db2 update dbm cfg using svcename db2_conn 12、启动实例,创建分区的数据库 db2start db2 "create db reportdb on /db2data(数据库目录) using codeset gbk territory cn pagesize 16 k" 则在/db2data下创建db2inst2目录,里面有两个节点NODE0000、NODE0001,每个节点里有一个数据库的分区REPORTDB,里面有三个系统自建的表空间。 |