DB2 V9.7FP7 DPF实战 总结

最近在公司用三台SLES服务器安装测试了一个DPFDB2版本是V9.7FP7 ESE, SLESenterprise 10 sp2

每个服务器是12个核,磁盘总共使用了12个,3个服务器,6个节点。

1. 存储规划

为每个服务器规划了4个磁盘,每个磁盘20G,每个卷组初步规划一个磁盘,实例属主5个磁盘

每个服务器 4个卷组,db2data卷组,db2backup卷组,db2logarch卷组,db2plog卷组,实例属主服务器还有db2home卷组

其中db2data卷组包含db2fs逻辑卷,db2mlog逻辑卷,db2path逻辑卷

其中对于db2plog卷组使用RAID10创建的LUNdb2data卷组使用RAID5创建的LUN,其他都是使用普通的配置

db2fs逻辑卷保存表空间数据,db2mlog做为分区的镜像日志路径,db2path做为数据库元数据路径

db2backup, db2logarchdb2plog分别是独立的卷组,用于保存数据库备份,日志归档以及主日志(数据和日志分开,抗毁,防止磁头争用)

卷组的命名为vg+xxx+p0, xxxdb2data, db2backup,db2logarch等,p0指示是0号服务器的卷组,因为都在一个磁阵中,每次卷扫描都会看到,区分的清楚有利于后续管理。逻辑卷也是lv+xxx+p0,道理同上。

db2home只在实例属主节点部署,一个磁盘,用于保存实例目录

分别在三个服务器根目录下创建db2fsdb2mlogdb2pathdb2backupdb2logarchdb2plogdb2home目录

因为是SLES,使用EXT4文件格式

建立存储的过程为:

lvmdiskscan, pvcreate, vgcreate, lvcreate, mkfs.ext4, 修改/etc/fstab,将各个逻辑卷绑定到上面创建的目录中,对于非实例属主节点,db2homeNFS共享而来,所以在非实例属主服务器配置hostname:/db2home /db2home nfs rw,hard 0 0

在实例属主服务器上,配置/etc/exports文件

/db2home 10.132.24.0/24(rw,sync,no_root_squash)

注意对于IP网段不能用xx.*的配置,只能用/24的方法

然后rootexportfs -a

接着showmount -e就可以看到共享出去的目录

SLES上,/etc/rc.d/nfsserver启动nfs服务器服务,nfs启动客户端服务,我曾经悲催的碰到一台服务器,nfs怎么都搞不定

对于其他逻辑卷,配置/dev/vgdb2datap0/lvdb2fsp0 /db2fs ext4 defaults 0 0

mount -a将所有逻辑卷都挂在目录下,可以通过df -h观察根目录下多出来的目录和容量。

总体来说,其实mlog是不太必要的,只是对于OLTP较常用,但是加上双保险而已。

2. 创建DPF实例用户

数据库分区中在实例属主节点创建一个实例,然后通过前面的/db2homeNFS共享发布出去,其他节点可以共享这个实例目录,好处是不用考虑手动复制保证实例目录的高度一致,减少管理的复杂度。

DPF实例的用户和组的ID和名称在各个节点都要完全一样

在各个服务器上先用grep xxx /etc/group, grep xxx /etc/passwd扫描id的使用情况

然后再实例属主节点上

groupadd -g 1000 db2iadm

groupadd -g 1001 db2fadm

useradd -u 1000 -g db2iadm -m -d /db2home/db2inst

useradd -u 1001 -g db2fadm -m -d /db2home/db2fenc

在其他节点上也一样,只是不用-m属性,重用实例属主节点发布的目录

DAS已经被淘汰,就不创建DAS用户

su,支护chown db2inst /db2xxx,将相关目录的属主都修改为db2inst

db2instssh-keygen -t rsa创建.ssh目录,同时将id_rsa.pub修改为authorized_keys,并将.ssh chmod 700 .ssh修改为只有db2inst才能操作,ssh用于分区命令在各节点上传递的通道。这个在pureScale中是要在不同的节点和用户中分别交换的。

3. 创建数据库分区实例和修改相关配置文件

DB2软件在各分区上的路径必须完全一样
比如我们都是在/opt/ibm/db2/V9.7fp7下面

另外各分区上的DB2软件都必须要有DPFlicense,通过dblicm -a xxx.lic完成,如果分区没有license,则对应节点无法启动

在实例属主服务器上 su

/opt/ibm/db2/V9.7FP7/instance/db2icrt -s ese -p 50000 -u db2fenc db2inst

修改db2nodes.cfg,只需要在实例属主服务器ServerA进行

0 ServerA 0

1 ServerA 1

2 ServerB 0

3 ServerB 1

目前只加入四个分区的数据,第三个服务器ServerC的两个分区数据通过增加分区的操作实践加入。

在三个服务器上都修改/etc/hosts

ServerA, ServerB, ServerCIP地址和hostname分别加入

在三个服务器上都修改/etc/services

db2c_db2inst 50000/tcp

DB2_db2inst 60000/tcp

DB2_db2inst _1 60001tcp

DB2_db2inst_2 60002/tcp

DB2_db2inst_3 60003/tcp

DB2_db2inst_4 60004/tcp

DB2_db2inst_END 60005/tcp

默认的情况下,只生成四个端口号,我们有几个分区,就修改为几个端口号,本例为6个,则预留6个端口号

/etc/hosts, /etc/services文件很重要,如果修改不正确会遇到很多细小的反反复复的问题,DPF将启动不成功

修改svcename

db2 update dbm cfg using svcename db2c-db2inst

修改注册变量

db2set DB2COMM=TCPIP

db2set DB2RSHCMD=/usr/bin/ssh

db2set DB2_ANTIJOIN=Y

db2set DB2_EXTENDED_OPTIMIZATION=ON

db2set DB2_PARALLEL_IO=*:3 (根据容器磁盘数而定,本例中表空间所在卷组是RAID5,三个磁盘组成,所以设并行度3)

db2set DB2_COMPATIBILITY_VECTOR=ORA(必须事先配置,这样后续创建数据库才可兼容)

修改实例变量

db2 update dbm cfg using sheapthres 2500000 (数据仓库排序较多)

db2 update dbm cfg using FCM_NUM_BUFFERS automatic

db2stop

db2start

4. 创建分区数据库和修改数据库配置参数

db2 create db dwdb on /db2fs dbpath on /db2path

修改日志路径

db2 connect to dwdb

db2_all “db2 update db cfg using newlogpath /db2plog/db2inst”

db2_all “db2 update db cfg using mirrorlogpath /db2mlog/db2inst”

db2_all “db2 update db cfg using logarchmeth1 /db2logarch/db2inst”

db2_all “db2 update db cfg using logfilesiz 25600”

db2_all “db2 update db cfg using logprimary 70” (因为数据库启动要初始化这个,所以要确保db2plog容量够大,保持监控)

db2_all “db2 update db cfg using logsecond 20”

5.创建表和加载数据和数据库分区的加入和删除

create table cusomer (id int, name varchar(10),sex char(1), salary decimal (7,2), hiredate date)

然后通过存储过程cusomerpipe生成一百万行数据输入表格

通过 db2″select dbpartitionnum(id),count(*) from cusomer group by dbpartitionnum(id) order by dbpartitionnum(id)”了解数据在各分区的分布

cat db2nodes.cfg db2 list nodes都可以看到当前数据库中的分区号

查看数据库分区组

db2 list database partition group show detail

加入新的节点

db2start dbpartitionnum 4 add dbpartitionnum hostname ServerC port 0

cat db2nodes.cfg可以看到新的节点,但是db2 list nodes还没看到,因为还不在ibmdefaultgroup

增加分区到分区组

db2 “alter database partition group ibmdefaultgroup add dbpartitionnum (4) without tablespaces”

db2 list nodes已经可以看到,通过db2 list db partition group show detail也可以看到

数据重分布

db2 “redistribute database partition group ibmdefaultgroup uniform”

再查询数据分布,数据已经分布到了节点4

删除节点

export DB2NODE=3

db2 terminate (这个很重要,如果不做,就会让db2node无法生效)

db2 drop dbpartitionnum verify确认该分区上所包含的数据库,

然后接入不同的数据库

db2 “redistribute database partition group ibmdefaultgroup uniform drop dbpartitionnum (3)”

注意,在这里这个命令一定要在该数据库所在的catalog节点发出,要再次通过export db2node=0来确认在catalog节点上,可以通过list db directory show detail看到编目节点

db2 list node就可以看到某节点已经被删除

我反反复复在数据节点添加和删除上实验了十多遍,速度十分的快。

6.数据库分区的备份

db2 backup db dwdb online on all dbpartition num to /db2backup

因为两个节点公用一个服务器,目录也共享,所在三个服务器下面的db2backup会有两个节点数据的备份,用NODE000X区分

也可以备份某节点

db2_all “<<+0<backup db dwdb online to xxxx”

db2_all “<<-0<backup db dwdb online to xxxx”除了某节点

db2 reover db dwdb

rollforward也只需要在后面加上on all dbpartitionnums的后缀即可

7.后记

参考了王飞鹏的运筹帷幄DB2以及温涛的高级DBA

很多东西不实践真是印象不深。

DPF充分调动了各节点的CPU和内存的能力,还有多硬盘的并行。

随着表分区的流行,单个表空间多硬盘的并行方面,DPF优势并不大,但是对于海量数据,由于多个服务器,可以提供更高的IO并行度。表分区单节点的CPU也受限,DPF更好一些。

     

如果这文章对你有帮助,请扫左上角微信支付-支付宝,给于打赏,以助博客运营

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注