怎樣搭建DB2 DPF for Linux/Unix?
DPF 是 Database Partition Feature的簡(jiǎn)稱。也就是DB2的多分區(qū)數(shù)據(jù)庫。
1. 概念介紹
Instance級(jí)別的multi-partition DB2環(huán)境分為3種: DB2 SMP, DB2 MPP 和 DB2 SMP Cluster
DB2 SMP指的是在一臺(tái)有多個(gè)CPU的機(jī)器上(雙核在Linux上被識(shí)別為2個(gè)CPU),建立的一個(gè)有多個(gè)partition(不超過CPU的數(shù)量)的DB2 Instance.
DB2 MPP指的是在多臺(tái)單個(gè)CPU的機(jī)器上,建立的一個(gè)有多個(gè)partition的DB2 Instance,在其中的每臺(tái)機(jī)器上建立1個(gè)Partition.
DB2 SMP Cluster指的是在多臺(tái)有多個(gè)CPU的機(jī)器上,建立的一個(gè)有多個(gè)partition的DB2 Instance,在其中的每臺(tái)機(jī)器上建立多個(gè)Partition.
3種partition環(huán)境的搭建不完全相同,現(xiàn)在分別敘述.
這種環(huán)境對(duì)機(jī)器的要求很高,一般來說至少4個(gè)CPU(或2個(gè)雙核CPU),4G以上內(nèi)存以及至少有6塊獨(dú)立硬盤或盤陣,才能體現(xiàn)出DB2 SMP環(huán)境的效率優(yōu)勢(shì)來.
好處是:對(duì)網(wǎng)絡(luò)的要求比較低,只要滿足客戶端到server的連接就可以了.配置相對(duì)簡(jiǎn)單,穩(wěn)定性比較高.便于集中管理.
缺點(diǎn)是:服務(wù)器配置要求高,增加節(jié)點(diǎn)非常麻煩(至少需要增加CPU),受限于磁盤IO通道的速度
DB2在運(yùn)行的時(shí)候需要大量的共享內(nèi)存(shm),信號(hào)量(sem)和消息隊(duì)列(msg). 一般來說Linux默認(rèn)的參數(shù)都偏小,需要修改.
使用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
注* 配置的值僅供參考,請(qǐng)參閱Linux系統(tǒng)配置和系統(tǒng)的實(shí)際情況進(jìn)行配置.
只要是包含DB2 DPF(DB partition feature)功能的DB2版本都可以,我使用的是DB2 ese. 安裝過程略過,請(qǐng)參考DB2安裝文檔.
注意:安裝DB2時(shí),建議使用db2_install安裝。
推薦創(chuàng)建新的DB2 instance用戶和組,而不要使用安裝DB2時(shí)默認(rèn)創(chuàng)建的用戶和組. 用戶至少需要?jiǎng)?chuàng)建2個(gè)用戶和2個(gè)組.
使用root用戶
/usr/sbin/groupadd <instance group> #instance所在的group,加入這個(gè)group的所有用戶都具有DBA權(quán)限
/usr/sbin/groupadd db2fgrp #fenced用戶所在的group
/usr/sbin/useradd -g db2igrp -d /home/db2inst db2inst
#instance用戶,因?yàn)樵撚脩舻膆ome目錄是默認(rèn)的數(shù)據(jù)文件目錄和log目錄,
#強(qiáng)烈建議將這個(gè)目錄建立在單獨(dú)的卷上,防止因該目錄寫入過多數(shù)據(jù)導(dǎo)致
#整個(gè)根文件系統(tǒng)崩潰
/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"建立一個(gè)ese的instance,"-u db2fenc"是fenced用戶,"db2inst"是db2 instance用戶,同時(shí)也是這個(gè)instance的名字
已知問題和解決方案*
(1)在某些情況下,在刪除了原先的instance以后,不能創(chuàng)建同名的instance.錯(cuò)誤是sqllib目錄已經(jīng)存在,即使刪除也不管用.可以把instance用戶的home目錄設(shè)成不可讀不可寫,然后再創(chuàng)建instance有時(shí)可以成功.
rsh是遠(yuǎn)程運(yùn)行shell的服務(wù).db2使用rsh服務(wù)運(yùn)行啟動(dòng)和停止數(shù)據(jù)庫服務(wù)器的命令,以及大部分管理命令.linux上現(xiàn)在常用的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服務(wù)的配置:
-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.
重啟服務(wù):
service xinetd restart
修改認(rèn)證文件
/etc/hosts.equiv
文件的格式是
<hostname> <instance user name>
<hostname> <instance user name>
...
instance的用戶home目錄下的
.rhosts
如果配置了/etc/hosts.equiv
那么在.rhosts里面弄一個(gè)'+'就行
也可以用和/etc/hosts.equiv同樣的文件格式配置
檢測(cè)rsh服務(wù)
使用instance用戶運(yùn)行
rsh <hostname> date #hostname是機(jī)器的名字
正常返回是機(jī)器的時(shí)間
db2nodes.cfg是配置多partition的關(guān)鍵配置文件.位置一般在instance用戶的$HOME/sqllib/.文件格式是:
<logic port> <hostname> <logic port>
<logic port> <hostname> <logic port>
<logic port> <hostname> <logic port>
...
建立幾個(gè)partition的SMP環(huán)境,就在里面配幾行.
示例:
0 volvo 0
1 volvo 1
2 volvo 2
假使一個(gè)4個(gè)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>
定義到數(shù)據(jù)庫的dbm的參數(shù)中.
而DB2_<instance name>到DB2_<instance name>_END,是用來給每個(gè)partition用的.后一個(gè)必須是前一個(gè)加1.
使用db2 instance用戶:
db2set DB2COMM=TCPIP
配置完以上的選項(xiàng),數(shù)據(jù)庫至少應(yīng)該可以正常啟動(dòng).
[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.
這樣就可以繼續(xù)使用了.
DB2 MPP和SMP Cluster的Partition是建立在不同的機(jī)器上的,因此配置比較相似.相對(duì)于SMP環(huán)境來說,配置MPP環(huán)境復(fù)雜的多.
MPP環(huán)境和SMP Cluster對(duì)單臺(tái)機(jī)器配置要求并不高.但是,對(duì)每臺(tái)機(jī)器的穩(wěn)定性和機(jī)器之間網(wǎng)絡(luò)的速度以及穩(wěn)定性要求比較高.
好處是:對(duì)單臺(tái)機(jī)器配置要求并不高.便于拓展,增加節(jié)點(diǎn)比較方便.
缺點(diǎn)是:對(duì)每臺(tái)機(jī)器的穩(wěn)定性和機(jī)器之間網(wǎng)絡(luò)的速度以及穩(wěn)定性要求比較高.配置相對(duì)復(fù)雜.
每臺(tái)機(jī)器的操作系統(tǒng)必須完全相同,包括位數(shù),小版本號(hào)和補(bǔ)丁.如果有任何一臺(tái)機(jī)器的操作系統(tǒng)的版本不同,即使是細(xì)微的不同,都有可能造成許多奇怪錯(cuò)誤.
操作系統(tǒng)內(nèi)核參數(shù)的配置與SMP操作系統(tǒng)的準(zhǔn)備相同.
在每臺(tái)機(jī)器上都需要安裝完全相同的DB2版本.如果有任何一臺(tái)機(jī)器的DB2版本不同,即使是細(xì)微的不同,都有可能造成許多奇怪錯(cuò)誤.
只要是包含DB2 DPF(DB partition feature)功能的DB2版本都可以,我使用的是DB2 ese. 安裝過程略過,請(qǐng)參考DB2安裝文檔.
MPP環(huán)境的instance home目錄是建立在一個(gè)NFS系統(tǒng)之上的.而且所有機(jī)器上的partition都共享這一個(gè)instance home目錄.了解這一點(diǎn)是配置整個(gè)MPP環(huán)境的關(guān)鍵.因?yàn)?幾乎所有的配置都是圍繞這一點(diǎn)展開的.
注意:安裝DB2時(shí),建議使用db2_install安裝。
配置NFS系統(tǒng)請(qǐng)參見相關(guān)文檔.
NFS盤需要mount到所有的機(jī)器上.
MPP環(huán)境創(chuàng)建用戶有兩點(diǎn)需要注意:
1.用戶和組的id在每臺(tái)機(jī)器上都必須相同,而且不能和其他用戶的id沖突.
2.instance用戶和fenced用戶的home目錄必須建立在NFS盤上.而且必須是NFS盤上的同一個(gè)目錄.
推薦創(chuàng)建新的DB2 instance用戶和組,而不要使用安裝DB2時(shí)默認(rèn)創(chuàng)建的用戶和組. 用戶至少需要?jiǎng)?chuàng)建2個(gè)用戶和2個(gè)組.
使用root用戶
/usr/sbin/groupadd -g <gid> <instance group> #instance所在的group,加入這個(gè)group的所有用戶都具有DBA權(quán)限
#gid是這個(gè)組的id,必須是正整數(shù),在所有機(jī)器上都必須相同.
/usr/sbin/groupadd -g <gid> <fenced group> #fenced用戶所在的group
#gid是這個(gè)組的id,必須是正整數(shù),在所有機(jī)器上都必須相同.
/usr/sbin/useradd -u <uid> -g <instance group> -d <instance home> <instance user>
#instance用戶,因?yàn)樵撚脩舻膆ome目錄是默認(rèn)的數(shù)據(jù)文件目錄和log目錄,
#這個(gè)目錄必須建立在NFS目錄上,而且所有機(jī)器上的instance home目錄必
#須是NFS上的同一個(gè)目錄
#uid是這個(gè)用戶的id,必須是正整數(shù),在所有機(jī)器上都必須相同.
/usr/sbin/useradd -u <uid> -g <fenced group> -d <instance home> <fenced user>
#fenced用戶,因?yàn)樵撚脩舻膆ome目錄是默認(rèn)的數(shù)據(jù)文件目錄和log目錄,
#這個(gè)目錄必須建立在NFS目錄上,而且所有機(jī)器上的fenced home目錄必
#須是NFS上的同一個(gè)目錄
#uid是這個(gè)用戶的id,必須是正整數(shù),在所有機(jī)器上都必須相同.
在所有的機(jī)器上,使用root用戶,建立db2 admin用戶:
/usr/sbin/groupadd <db2 admin group>
/usr/sbin/useradd -g <db2 admin group> -d <db2 admin home> <db2 admin user>
注:每臺(tái)機(jī)器上的用戶和組的id沒有必要相同
在所有的機(jī)器上,使用root用戶,建立db2 admin server:
/opt/ibm/db2/V9.1/instance/dascrt -u <db2 admin user>
在所有的機(jī)器上,使用db2 admin user,啟動(dòng)db2 admin server:
db2admin start
在 node 0 所在的機(jī)器上,使用root用戶
/opt/ibm/db2/V9.1/instance/db2icrt -s ese -u <fenced user> <instance user>
其中"-s ese"建立一個(gè)ese的instance,"-u <fenced user>"是fenced用戶,"<instance user>"是db2 instance用戶,同時(shí)也是這個(gè)instance的名字
已知問題和解決方案*
(1)在某些情況下,在刪除了原先的instance以后,不能創(chuàng)建同名的instance.錯(cuò)誤是sqllib目錄已經(jīng)存在,即使刪除也不管用.可以把instance用戶的home目錄設(shè)成不可讀不可寫,然后再創(chuàng)建instance有時(shí)可以成功.
rsh必須在每臺(tái)機(jī)器的instance用戶下都要配置.這樣要保證從環(huán)境中的任何一臺(tái)機(jī)器的instance用戶都可以通過rsh訪問其他任何一臺(tái)機(jī)器的instance用戶的命令.
rsh的配置參見SMP中配置rsh
db2nodes.cfg是配置多partition的關(guān)鍵配置文件.位置一般在instance用戶的$HOME/sqllib/.文件格式是:
<logic port> <hostname> <logic port>
<logic port> <hostname> <logic port>
<logic port> <hostname> <logic port>
...
建立幾個(gè)partition的MPP或SMP Cluster環(huán)境,就在里面配幾行.
示例:
0 volvo 0
1 volvo 1
2 toyota 0
3 acadia 0
4 acadia 1
5 acadia 2
這是一個(gè)DB2 SMP Cluster的db2nodes.cfg,其中volvo,toyota,acadia都是環(huán)境中的機(jī)器名.這個(gè)文件在volvo上2個(gè)partition,在toyota上1個(gè)partition,在acadia上3個(gè)partition.第一列的數(shù)字是整個(gè)環(huán)境的logic port不能重復(fù).第三列的數(shù)字是在那臺(tái)機(jī)器的instance上的logic port可以重復(fù).
每臺(tái)機(jī)器上的配置都必須相同.
假使一個(gè)4個(gè)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>
定義到數(shù)據(jù)庫的dbm的參數(shù)中.
而DB2_<instance name>到DB2_<instance name>_END,是用來給每個(gè)partition用的.后一個(gè)必須是前一個(gè)加1.
每臺(tái)機(jī)器上都要配置
使用db2 instance用戶:
db2set DB2COMM=TCPIP
配置完以上的選項(xiàng),數(shù)據(jù)庫至少應(yīng)該可以正常啟動(dòng).
[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.
這樣就可以繼續(xù)使用了.