分享

怎样搭建DB2 DPF(多分区) for Linux/Unix?

 lylf615 2012-06-07

怎样搭建DB2 DPF(多分区) for Linux/Unix?

分类: DB2管理 400人阅读 评论(0) 收藏 举报

怎样搭建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 <instance group>              #instance所在的group,加入这个group的所有用户都具有DBA权限
/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
文件的格式是
<hostname> <instance user name>
<hostname> <instance user name>
...

instance的用户home目录下的
.rhosts
如果配置了/etc/hosts.equiv
那么在.rhosts里面弄一个'+'就行

也可以用和/etc/hosts.equiv同样的文件格式配置

检测rsh服务

使用instance用户运行
rsh <hostname> date             #hostname是机器的名字
正常返回是机器的时间

 


db2nodes.cfg是配置多partition的关键配置文件.位置一般在instance用户的$HOME/sqllib/.文件格式是:
<logic port> <hostname> <logic port>
<logic port> <hostname> <logic port>
<logic port> <hostname> <logic port>
...

建立几个partition的SMP环境,就在里面配几行.

示例:
0 volvo 0
1 volvo 1
2 volvo 2

 

假使一个4个partition的instance.至少需要使用root用户在/etc/services中配置以下端口:

DB2c_<instance name>     61000/tcp
DB2_<instance name>      61001/tcp
DB2_<instance name>_1    61002/tcp
DB2_<instance name>_2    61003/tcp
DB2_<instance name>_3    61004/tcp
DB2_<instance name>_4    61005/tcp
DB2_<instance name>_END  61008/tcp

其中,DB2c_<instance name>是定义给db manager用的.还需要使用:
db2 update dbm cfg using SVCENAME DB2c_<instance name>
定义到数据库的dbm的参数中.

而DB2_<instance name>到DB2_<instance name>_END,是用来给每个partition用的.后一个必须是前一个加1.

 

使用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> <instance group>           #instance所在的group,加入这个group的所有用户都具有DBA权限
                                                       #gid是这个组的id,必须是正整数,在所有机器上都必须相同.
/usr/sbin/groupadd -g <gid> <fenced group>             #fenced用户所在的group
                                                       #gid是这个组的id,必须是正整数,在所有机器上都必须相同.
/usr/sbin/useradd -u <uid> -g <instance group> -d <instance home> <instance user>   
                                                       #instance用户,因为该用户的home目录是默认的数据文件目录和log目录,
                                                       #这个目录必须建立在NFS目录上,而且所有机器上的instance home目录必
                                                       #须是NFS上的同一个目录
                                                       #uid是这个用户的id,必须是正整数,在所有机器上都必须相同.
/usr/sbin/useradd -u <uid> -g <fenced group> -d <instance home> <fenced user>
                                                       #fenced用户,因为该用户的home目录是默认的数据文件目录和log目录,
                                                       #这个目录必须建立在NFS目录上,而且所有机器上的fenced home目录必
                                                       #须是NFS上的同一个目录
                                                       #uid是这个用户的id,必须是正整数,在所有机器上都必须相同.

 


在所有的机器上,使用root用户,建立db2 admin用户:
/usr/sbin/groupadd <db2 admin group>

/usr/sbin/useradd -g <db2 admin group> -d <db2 admin home> <db2 admin user>

注:每台机器上的用户和组的id没有必要相同

在所有的机器上,使用root用户,建立db2 admin server:
/opt/ibm/db2/V9.1/instance/dascrt -u <db2 admin user>

在所有的机器上,使用db2 admin user,启动db2 admin server:
db2admin start

 


在 node 0 所在的机器上,使用root用户
/opt/ibm/db2/V9.1/instance/db2icrt -s ese -u <fenced user> <instance user>

其中"-s ese"建立一个ese的instance,"-u <fenced user>"是fenced用户,"<instance user>"是db2 instance用户,同时也是这个instance的名字

已知问题和解决方案*
(1)在某些情况下,在删除了原先的instance以后,不能创建同名的instance.错误是sqllib目录已经存在,即使删除也不管用.可以把instance用户的home目录设成不可读不可写,然后再创建instance有时可以成功.

 

rsh必须在每台机器的instance用户下都要配置.这样要保证从环境中的任何一台机器的instance用户都可以通过rsh访问其他任何一台机器的instance用户的命令.

rsh的配置参见SMP中配置rsh

 


db2nodes.cfg是配置多partition的关键配置文件.位置一般在instance用户的$HOME/sqllib/.文件格式是:
<logic port> <hostname> <logic port>
<logic port> <hostname> <logic port>
<logic port> <hostname> <logic port>
...

建立几个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_<instance name>     61000/tcp
DB2_<instance name>      61001/tcp
DB2_<instance name>_1    61002/tcp
DB2_<instance name>_2    61003/tcp
DB2_<instance name>_3    61004/tcp
DB2_<instance name>_4    61005/tcp
DB2_<instance name>_END  61008/tcp

其中,DB2c_<instance name>是定义给db manager用的.还需要使用:
db2 update dbm cfg using SVCENAME DB2c_<instance name>
定义到数据库的dbm的参数中.

而DB2_<instance name>到DB2_<instance name>_END,是用来给每个partition用的.后一个必须是前一个加1.

 

每台机器上都要配置
使用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.

这样就可以继续使用了.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多