2008/03/10

linux db2 - linux - shijiang1130

linux db2 - linux - shijiang1130: "linux db2
單個機器上的單個分區
单个机器上的单个分区

接下來的兩個圖展示了 DPF 真正起作用的情況。圖 2 說明了 DPF 被用於三台機器上的情況,其中每台機器上有一個分區。


圖 2. 每台機器上一個分區,使用高速通信
每台机器上一个分区,使用高速通信

注意這裡使用的高速通信互連,這可以是各機器之間使用的一個 TCPIP 網絡。接下來的 圖 3 展示了同一台機器上的三個分區。這裡,分區間的通信是在內存中實現的,而不是通過一個網絡(在所有 Linux 平台上,默認情況下 DB2 _FORCE_FCM_BP 是啟用的)。


圖 3. 同一台機器上的三個分區,通過內存進行通信
同一台机器上的三个分区,通过内存进行通信

特別要注意,在前面幾個圖中,對稱多處理器(SMP)也可以換成單處理器。但是,在 DPF 環境中 SMP 服務器更為常見。

分區鍵 由表中的一列或多列組成,用於使用戶可以選擇如何對他們的數據進行分區。用戶可以通過使用數據庫分區組和表空間,來確定將表數據分佈到哪些數據庫分區上。

用戶交互通過一個數據庫分區,即用於該用戶的協調分區(coordinator partition)來進行。協調分區與應用程序運行在同一個數據庫分區上,或者,對於遠程應用程序,協調分區運行在應用程序所連接的那個數據庫分區上。 任何數據庫分區都可以成為協調分區。

理解 DB2 Data Partitioning Feature (DPF)

要對一個數據庫進行分區,需要 DB2 的 Database Partitioning Feature (DPF) 功能。這種可選的 Database Partition Feature 許可只對 DB2 Enterprise Server Edition (ESE) 可用,其費用按照分區數據庫中所使用的 CPU 的數量來計算。

何時分區,為何分區小蟲網絡技術http://www.chinaccna.com

具有 DPF 功能的 DB2 UDB ESE 是管理 OLAP、數據倉庫和數據挖掘工作負載的理想選擇。對於大型 OLTP 工作負載,它也是很好的選擇。最常見的分區環境由每個物理系統上的一個數據庫分區組成,這些物理系統組成數據庫分區集群。每個數據庫分區上的數據庫管理器 使用每個系統上的處理器來管理數據庫中屬於該分區的那部分數據。

由於數據被劃分在多個數據庫分區上,因而可以使用多台計算機上的多個處理器的處理能力來滿足對信息的請求。數據檢索和更新請求被自動分解成一些子請求,然 後這些子請求在相應的數據庫分區中並行地執行。每多一個服務器,就意味著將有更多的 CPU、內存和更多的磁盤用於分區數據庫。

性能的提升源於這樣的事實:大量的數據被劃分成更小的、更易管理的塊,每個分區/系統可以同時運行。如果要處理提取、轉換和載入操作(ETL),而批處理 窗口又比較小,那麼可以考慮使用 DPF。例如,DB2 LOAD 可以在每個分區上同時運行,負載操作可以並行地分攤到多個服務器上。創建索引的性能也將顯著提升。而且,通過使用 DPF,可以顯著縮短備份和恢復時間,因為每台參與分區的機器需要處理的數據量更小了。

在 SUSE Linux Enterprise Server V9 上安裝 DB2 V8.2

下面我們來介紹在 SUSE Server(或多服務器)環境中安裝和運行 DB2 DPF 所需的步驟。

步驟 1. 檢驗其他軟件包

DB2 要求在 Linux 系統上安裝以下包:

Public domain korn shell (pdksh)
Remote shell (rsh) 或 open source secure shell (OpenSSH)
IBM Java™ 2 Java Run Time
Network File Server (nfs)
使用 rpm 命令來檢驗這些包是否已安裝:

rpm -qa | grep pdksh
rpm -qa | grep rsh 或 rpm -qa | grep openssh
rpm -qa | grep IBMjava
rpm -qa | grep nfs
步驟 2. 檢驗內核參數

在安裝 Linux 之前,請確認目前所推薦的、適合 DB2 的 Linux 版本。鏈接 「http://www.ibm.com/software/data/db2/linux/validate/」 顯示了受支持的 Linux 發行版。確保安裝受推薦、受支持版本的 Linux。

在安裝 DB2 時,需要注意一些內核參數:


表 1. 對 DB2 有影響的內核參數
內核參數 描述
kernel.shmmax 定義系統範圍內允許的最大共享內存段大小,單位為字節
kernel.msgmni 定義在任何時刻系統上允許的最多消息隊列標識符個數
fs.file-max 定義 Linux 內核最多分配的文件句柄個數
kernel.sem 定義信號量限制:
每個數組的最多信號量個數(semmsl)
系統範圍內最多允許的信號量個數(semmns)
每次 semop 調用的最大操作數(semopm)
最多允許的數組個數(semmni)
** 信號量提供了進程間的低級同步,使得只有一個進程可以訪問共享段,從而確保共享段的完整性。

在 Kernel 2.4.18 及以後版本中,file-max 參數的默認值是 8192,因此可能不需要修改它。可以使用以下命令來檢查 file-max 值:

cat /proc/sys/fs/file-max

使用 lpcs 命令顯示當前的 Linux 內核設置:

lpcs -l

從 DB2 UDB Version 8.2 以後,DB2 在啟動時將檢查 semmni、msgmni 和 shmmax 參數的值,如果當前值不是最佳的,則更新之。DB2 自動將內核參數設置如下:

semmni 被改為 1024。
msgmni 被改為 1024。
shmmax 被改為 268435456 (32-位) 或 1073741824 (64-位)。
注意,系統範圍內最多信號量個數(semmns)等於:

數組的最多個數 (semmni) * 每個數組的最多信號量個數 (semmsl)
在安裝 DB2 後,還可以通過 db2pd 命令檢驗 semni、msgmni、shmmax 參數:

db2pd -osinfo

在性能調優時,可能還需要調整其他內核參數。手冊上的規程如下:

以具有 root 權限的用戶登錄。
創建一個 /etc/sysctl.conf 文件,如果還沒有該文件的話。
在 /etc/sysctl.conf 文件中添加內核條目。
運行 sysctl -p 從默認文件 /etc/sysctl.conf 裝載 sysctl 設置。
添加 sysctl -p 到一個系統初始化文件中,以便在每次重新啟動時設置內核參數。
步驟 3. 檢驗網絡

文件 /etc/hosts 包含指定給主機名的地址(包括一個 IP 地址、全限定主機名和主機名)。為了得到最佳性能,應確保所有參與的服務器在 /etc/hosts 文件中都有定義。

步驟 4. 啟用遠程 shell 實用程序

對於數據分區環境,DB2 需要一個遠程 shell 實用程序來在遠程分區上執行命令。在 DB2 UDB V8.2.2 之前,rsh 實用程序被默認用作遠程 shell 機制,用於分區之間的通信。為了強認證和安全網絡通信的需要,DB2 UDB V8.2.2 現在允許在一個名為 DB2RSHCMD 的註冊表 profile 變量中指定遠程 shell 實用程序的完整路徑,從而增加了對備用遠程 shell 實用程序的支持。

OpenSSH (Open Source Secure Shell) 用於代替 rsh 實用程序,以便在不安全的通道上提供有安全保障的通信。OpenSSH 支持兩種類型的加密,即基於主機的認證和公鑰認證。關於在 DB2 中使用 OpenSSH 的詳細信息,請參考標題為 「配置 DB2 Universal Database for UNIX 以使用 OpenSSH」 的技術文章,這篇文章解釋了如何在 DB2 中啟用 OpenSSH。

為支持一個受安全保障的環境,在數據庫分區環境中,應該使用 OpenSSH,而不是 rsh。如果選擇啟用 rsh 服務,那麼只需去掉 /etc/inetd.conf 文件中與 in.rshd 服務對應的 "#" 字符。為了重新啟動 inetd 服務器,可以輸入:

/etc/init.d/inetd restart

步驟 5. 設置 Network File System (NFS)

對於一個數據分區配置,必須有一個可供所有參與分區數據庫系統的機器使用的文件系統。這個文件系統將用於 DB2 實例的 home 目錄。容納 DB2 實例的機器稱作 instance-owning 機器。為了共享該文件系統,必須配置 Network File System。對於 Linux,可以通過發出以下命令來檢驗 NFS 服務器是否正在運行:

showmount -e hostname

該命令顯示在一個 NFS 服務器中定義的文件系統的一個列表。如果 NFS 不在運行,那麼將收到以下消息:

showmount: hostname: RPC: Program not registered

可以通過選擇 Misc 和 Installation Server 來使用 YaST 配置 NFS。注意,應該以 root ID 登錄。


圖 4. YaST Installation Server:選擇服務器類型

在 instance-owning 機器上設置 NFS 服務器

您需要導出 instance-owner 目錄,該目錄將被其他數據庫分區服務器共享。

創建 instance-owner 目錄,確保該目錄被掛載。使用如下命令:
mkdir /db2home
mount /db2home
修改 /etc/fstab 中的文件系統表(fstab),使之包括新的文件系統,以便在啟動時掛載新的文件系統。條目格式如下:

您的條目看上去可能類似於:


清單 1. 示例 instance-owning /etc/fstab 清單

/dev/had7 /db2home ext3 defaults 1 2


該條目使用一個 ext3 文件系統,這種文件系統在 2.4.16 版或更高版本的 Linux 內核中均受支持,文件系統檢查(fsck)程序的順序被設為 2。

設置好 instance-owning 文件系統後,通過在 /etc/exports 文件中添加以下條目,可以在啟動時通過一個 NFS 服務導出這個文件系統:


清單 2. 示例 /etc/exports 清單
db2home InstanceOwnerServer (rw,sync,no_root_squash) db1(rw,sync,no_root_squash)


其中 InstanceOwnerServer 是 instance-owner 服務器的名稱,db1 是另一個數據庫服務器的名稱。

表 2 中列出了導出文件選項:

表 2. 導出文件選項 選項 描述
rw 使用讀寫權限來導出文件系統
sync 服務器必須等文件被寫入到磁盤後才能開始下一次讀操作
no_root_squash 使 root 權限有效


執行 exportfs 命令,使將掛載的 NFS 客戶機能使用 instance-owner 目錄
/usr/sbin/exportfs -a

其中選項 a 用於導出 /etc/exports 文件中列出的所有目錄。
設置參與機器上的 NFS 客戶機

instance-owner 目錄可用之後,便可以將該目錄導入其他數據庫分區服務器。

用以下命令在其他服務器中創建共享目錄:
mkdir /db2home

添加一個條目到 /etc/fstab 文件,使 NFS 在啟動時自動掛載文件系統:


清單 3. 參與機器的 /etc/fstab 示例

server1:/db2home /db2home nfs rw,timeo=300,retrans=5,hard,intr,bg,suid


其中 server1 是 instance-owner 服務器名稱,下表列出了其他一些選項:

表 3. NFS 掛載選項 選項 描述
rw 使用讀寫權限來導出文件系統。
timeo 這個值的單位是十分之一秒,表示 RPC 超時後進行第一次重傳之前所需等待的時間。默認值是7/10。
retrans 在重大操作被中止或者控制台上顯示 「server not responding」 消息之前必須重傳的次數。
hard 如果NFS文件操作超時較多,則在控制台上報告「server not responding」,並一直重新嘗試。這是默認情況
intr 如果 NFS 文件操作超時較多,並且是硬(hard)掛載,那麼允許由信號中斷文件操作,使操作中斷。
bg 如果第一次 NFS 掛載嘗試超時,則在後台重試掛載。
suid 這個值允許 set-user-identifier 位 (SUID) 或 set group-identifier 位 (SGID) 生效。


用以下命令在其他數據庫分區服務器上掛載導出的文件系統:
mount server1:/db2home /db2home

檢驗 NFS 鎖監控程序

DB2 需要一個 NFS 鎖監控程序來在集群中所有參與機器之間共享 instance-owner 目錄。可以通過使用 chkconfig 命令來檢驗 NFS 鎖監控程序是否已啟用:

chkconfig nfslock

可以通過以下命令啟用 NFS 鎖監控程序和重新啟動 nfslock:

chkconfig nfslock on
/etc/rc.d/nfslock restart
檢驗 NFS 鎖和 NSM (Network Status Monitor) 服務

NSM 服務 rpc.statd 實現了一個重啟通知服務,NFS 文件鎖服務(rpc.lockd)將用到這個服務。可以使用以下命令檢驗這些服務的狀態:

ps -ef | grep rpc.statd
ps -ef| grep rps.lockd
步驟 6. 創建所需的組和用戶

在數據庫分區環境中,需要為 DB2 創建三個組和用戶 ID,如下表所示:


表 4. 所需的 DB2 組和用戶
用戶 ID 組 ID 描述
db2inst1 db2iadm1 DB2 實例用戶 ID 和組 ID
db2fenc1 db2fadm1 DB2 fenced 用戶 ID 和組 ID
dasusr1 dasadm1 DB2 Administration Server 用戶 ID 和組 ID

在所有參與機器上的 DB2 instance owner ID 和密碼應該是一致的,而且,它的 home 目錄應該在 NFS 共享目錄中。fenced ID 應該配置為與 DB2 instance owner ID 相同。DAS 用戶 ID 和密碼在所有參與機器上可以各不相同;但是,為了簡化配置和維護,可能需要使 DAS 用戶 ID 和密碼一致。

例如,您可以用以下命令在所有機器上創建 DB2 組,創建 DB2 用戶 ID 以及設置初始密碼:

groupadd -g 999 db2iadm1
groupadd -g 998 db2fadm1
groupadd -g 997 dasadm1
useradd -u 1100 -g db2iadm1 -m -d /db2home/db2inst1 db2inst1 -p password1
useradd -u 1101 -g db2fadm1 -m -d /db2home/db22fenc1 db2fenc1 -p password2
useradd -u 1102 -g dasadm1 -m -d /home/dasadm1 dasusr1 -p password3
passwd db2inst1
passwd db2fenc1
passwd dasusr1
步驟 7. 在 instance-owning 機器和所有參與機器上安裝 DB2 UDB

可以使用 db2_install 腳本通過 RPM 安裝實用程序在 Linux 系統上安裝所有的 DB2 ESE 包。您可以使用該腳本首先在 instance-owning 機器上安裝 DB2,然後在參與機器上安裝 DB2。

由於必須在每個參與機器上安裝 DB2,所以最好將安裝代碼放在一個共享的盤(例如在我們這個例子中是 /db2home)上。也可以將您的設置記錄到一個響應文件中,然後使用該文件來配置其他的機器。

首先,為了安裝 DB2,必須以 root 用戶登錄:

輸入 db2_install 命令啟動 db2_install 腳本,該腳本存放在 CD-ROM 的根目錄下。
當 db2_install 提示輸入產品關鍵字時,輸入 DB2.ESE。
步驟 8. instance-owning 機器的配置

這台機器將被視作 instance-owning 機器,因為它存儲和共享 instance owner 的 home 目錄。sqllib 目錄正是位於這個目錄中,此外在此目錄中的還有 Database Manager Configuration 文件 (DBM CFG)、Instance Profile Registry、Node 目錄和 System Database 目錄。由於這些文件是共享的,所以對任何一個文件的更新在所有參與機器上都可以看到。為了配置 instance-owning 機器,需要執行以下步驟:

創建一個 DB2 實例
您應該使用 DB2 instance owner ID 登錄到系統,然後在 /opt/IBM/db2/V8.2/instance 下執行 db2icrt 創建一個供所有機器共享的 DB2 實例:

cd /opt/IBM/db2/V8.1/instance
./db2icrt -u db2fenc1 db2inst1
其中 -u 指定 fenced ID。

需要注意的是,一個 DPF Instance 實際上存在於每個參與機器上,它們都使用相同的實例名、密碼和共享 home 目錄。當使用 DPF 時,被分區的是數據庫,而不是實例。

啟用 FCM
所有參與機器必須通過一個通信設施互連,例如一個高速 TCPIP 網絡。Fast Communications Manager (FCM) 被設計用來處理數據庫分區服務器之間的通信。為了啟用 FCM,在所有參與機器上的 /etc/services 文件中必須預留一個端口範圍。DB2 提供在 /etc/services 文件中已經被預留的一個默認的端口範圍;默認情況下,DB2 會修改 /etc/services 文件,以便將端口 60000-60003 用於分區之間的通信,端口 50000 用於應用程序通信。DB2 在創建實例時會為此預留一些端口。每個邏輯分區需要一個端口,並且每台機器需要預留相同的端口。每個條目包含一個端口名和端口號。

除了基本的配置外,FCM 端口看上去應該如下所示:


清單 4. /etc/services 中的 FCM 端口

DB2c_db2inst1 50000/tcp
#Add FCM port information
#
DB2_db2inst1 60000/tcp
DB2_db2inst1_1 60001/tcp
DB2_db2inst1_2 60002/tcp
DB2_db2inst1_END 60003/tcp


從 清單 4 中可以看出,端口名是由實例名加上前綴 "DB2_" 得到的。最後一個端口名由實例名加上前綴 "DB2_" 和後綴 "_END" 得到。第一個端口名與最後一個端口名之間的端口名以 "_<序列號>" 為後綴。 端口號後面必須跟上 "/tcp"。

更新 DB2 實例參數
使用 instance owner ID 登錄到機器,並指定 DB2 將使用哪些協議。為了初始化協議,需要使用以下命令更新 DB2COMM profile 註冊表變量:

db2set DB2COMM=TCPIP
此外,需要在數據庫管理器(DBM)配置參數中更新服務名,以指示哪些端口名將用於與 DB2 服務器和遠程客戶機的通信。這可以通過使用以下命令來完成:

db2 update dbm cfg using SVCENAME db2c_db2inst1

創建 DB2 Administration Server (DAS)
如果要使用諸如 Configuration Assistant、Control Center、Replication Center 或 Development Centermust 之類的 GUI 工具,則必須讓 DAS 處於運行狀態。您可以作為 DAS 用戶登錄,然後使用以下命令創建一個 DAS 服務器:

cd /opt/IBM/db2/V8.1/instance
./dascrt -u dasusr1
其中選項 -u 指定 DAS 的用戶 ID。

可以用 DAS 管理用戶 ID 登錄,並執行命令 db2admin start 來啟動 DAS 服務器。若要自動啟動 DAS 服務器,則需要使用 DAS 管理用戶 ID 並執行以下命令:

cd /opt/IBM/db2/V8.1/instance
./dasauto -on
為了顯示 autostart 狀態,可以執行:

./dasauto ?

更新 db2nodes.cfg 文件
最後,需要更新 $HOME/sqllib/db2nodes.cfg 文件。db2nodes.cfg 文件包含配置信息,告訴 DB2 哪個服務器上的哪個分區參與了該實例。該文件有四列:

數據庫分區號
服務器主機名
邏輯端口號
用於分區之間通信的網絡接口(可選)
每個條目表示一個特定服務器上的一 個數據庫分區,該分區參與了該實例的數據庫分區。例如,下面的 db2nodes.cfg 文件定義了四個數據分區。數據分區 0 和 1 在 server1 上,數據分區 2 和 3 在 server2 上。每個服務器有兩個邏輯端口(每個邏輯分區對應一個),即端口 0 和 1。


清單 5. 示例 db2nodes.cfg

0 server1 0
1 server1 1
2 server2 0
3 server2 1

沒有留言: