最近在公司用三台SLES服务器安装测试了一个DPF,DB2版本是V9.7FP7 ESE, SLES是enterprise 10 sp2
每个服务器是12个核,磁盘总共使用了12个,3个服务器,6个节点。
1. 存储规划
为每个服务器规划了4个磁盘,每个磁盘20个G,每个卷组初步规划一个磁盘,实例属主5个磁盘
每个服务器 4个卷组,db2data卷组,db2backup卷组,db2logarch卷组,db2plog卷组,实例属主服务器还有db2home卷组
其中db2data卷组包含db2fs逻辑卷,db2mlog逻辑卷,db2path逻辑卷
其中对于db2plog卷组使用RAID10创建的LUN,db2data卷组使用RAID5创建的LUN,其他都是使用普通的配置
db2fs逻辑卷保存表空间数据,db2mlog做为分区的镜像日志路径,db2path做为数据库元数据路径
db2backup, db2logarch和db2plog分别是独立的卷组,用于保存数据库备份,日志归档以及主日志(数据和日志分开,抗毁,防止磁头争用)
卷组的命名为vg+xxx+p0, xxx是db2data, db2backup,db2logarch等,p0指示是0号服务器的卷组,因为都在一个磁阵中,每次卷扫描都会看到,区分的清楚有利于后续管理。逻辑卷也是lv+xxx+p0,道理同上。
db2home只在实例属主节点部署,一个磁盘,用于保存实例目录
分别在三个服务器根目录下创建db2fs、db2mlog、db2path、db2backup、db2logarch、db2plog、db2home目录
因为是SLES,使用EXT4文件格式
建立存储的过程为:
lvmdiskscan, pvcreate, vgcreate, lvcreate, mkfs.ext4, 修改/etc/fstab,将各个逻辑卷绑定到上面创建的目录中,对于非实例属主节点,db2home是NFS共享而来,所以在非实例属主服务器配置hostname:/db2home /db2home nfs rw,hard 0 0
在实例属主服务器上,配置/etc/exports文件
/db2home 10.132.24.0/24(rw,sync,no_root_squash)
注意对于IP网段不能用xx.*的配置,只能用/24的方法
然后root下exportfs -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实例用户
数据库分区中在实例属主节点创建一个实例,然后通过前面的/db2home的NFS共享发布出去,其他节点可以共享这个实例目录,好处是不用考虑手动复制保证实例目录的高度一致,减少管理的复杂度。
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
在db2inst下ssh-keygen -t rsa创建.ssh目录,同时将id_rsa.pub修改为authorized_keys,并将.ssh chmod 700 .ssh修改为只有db2inst才能操作,ssh用于分区命令在各节点上传递的通道。这个在pureScale中是要在不同的节点和用户中分别交换的。
3. 创建数据库分区实例和修改相关配置文件
DB2软件在各分区上的路径必须完全一样 比如我们都是在/opt/ibm/db2/V9.7fp7下面
另外各分区上的DB2软件都必须要有DPF的license,通过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, ServerC的IP地址和hostname分别加入
在三个服务器上都修改/etc/services
db2c_db2inst 50000/tcp
DB2_db2inst 60000/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更好一些。
添加新评论31 条评论
2014-03-25 17:07
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL1524N The request cannot occur until all applications in the instance are
aware of the new database partition server. SQLSTATE=55077
请问其他人有遇到这个问题吗?
2014-03-13 10:24
执行成功了,想请楼主确认一下
2014-03-13 10:23
执行报错:
SQL1024N A database connection does not exist. SQLSTATE=08003
lab_dpf01: db2 update db cfg ... completed rc=4
2014-03-10 23:02
2014-03-03 16:27
2013-12-28 22:17
2013-12-28 21:30
2013-11-03 20:56
2013-06-07 23:49
2013-05-03 12:45
2013-05-02 20:41
2013-05-02 11:44
2013-04-28 17:18
http://www.ibm.com/developerworks/cn/data/library/techarticle/dm-1207maoq/
我之前搞过,但是在虚拟机安装purescale的时候回滚了,后来忙,一直没研究。回
2013-04-28 17:16
http://www.ibm.com/developerworks/cn/data/library/techarticle/dm-1207maoq/
我之前搞过,但是在虚拟机安装purescale的时候回滚了,后来忙,一直没研究。回头把这个x86 purescale落实了,不信搞不定!
2013-04-28 17:11
2013-02-14 14:49
2013-02-14 02:08
2013-01-21 10:36
2013-01-16 12:31
2013-01-08 14:50
2013-01-08 14:12
2012-12-27 09:40
2012-12-21 02:42
2012-12-20 08:23
2012-12-20 00:12
2012-12-19 20:15
2012-12-19 08:37
2012-12-19 08:36
2012-12-19 01:20
2012-12-18 19:44
2012-12-18 18:14