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更好一些。

以下文章點擊率最高

Loading…

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營

發表評論

您的電子郵箱地址不會被公開。 必填項已用*標註