DB2 DPF Install on RHEL Linux

fjzcau發表於2015-03-28

概述

為了使單個資料庫能擴充套件到多個伺服器,需要使用 IBM 的 DB2 UDB V8.1 Enterprise Server Edition (DB2 ESE V8.1) 的資料庫分割槽功能(DPF)。此外,為了能夠使用 DB2 UDB ESE 中的 DPF,需要一個有效的 DPF 許可。DPF 提供了必要的可伸縮性,以便將大型資料庫分佈到無共享(shared-nothing)架構下的多個(邏輯和物理)分割槽。DPF 對於獨立的 SMP 伺服器和由多個伺服器組成的環境都是有利的。透過 DPF “分治(divide and conquer)” 處理,可以增強單個伺服器(向上擴充套件)和伺服器叢集(向外擴充套件)的可伸縮性。

本文的目標是提供簡單直觀的逐步說明,向您展示如何使用 db2_install 指令碼方法(而不是透過 GUI Setup 嚮導)在 Red Hat Linux Advanced Server (AS) 2.1 上安裝和配置具有 DPF 的 DB2 ESE V8.1。本文適合初學者使用者,但是對於已經熟悉這種架構的 IT 架構師和專家也有一定的用處。db2_install 實用程式可以安裝 DB2 檔案集,但是不建立例項和使用者,也不會執行任何其他由 DB2 Setup 嚮導執行的配置任務。當在有特殊需求的大型、複雜的資料庫系統上安裝 DB2 時,或者在使用 telnet 會話將 DB2 安裝到 DB2 伺服器上時,有些人喜歡使用 db2_install。

按照下面的步驟,便可以設計和設定多達 1000 個分割槽,但在我們的設定過程當中,我們使用兩個基於 Intel 的 IBM Blade Server 機器來設定兩個物理分割槽(每個物理伺服器上還有兩個邏輯分割槽)。

注意: 按照技術轉移條款,以下簡單易用的逐步說明已經在一個合作伙伴的站點上經過了測試。

作業系統

Red Hat Advanced Server 2.1 (RHAS)

硬體

基於 Intel 的雙路 IBM Blade Servers:

  • HS20 Blade Server
  • 2 GB RAM
  • 2 x 2.4 GHz
  • 一臺作為 NFS 伺服器 (ServerA)
  • 另一臺作為 NFS 客戶機 (ServerB)

IBM 中介軟體

  • IBM DB2 UDB Enterprise Server Edition V8.1 (+DPF Feature) Linux for Intel 32-bit —— 從 C48THML.tar 安裝
  • Fixpak 5a —— 從 PSoft_10533_v81_fp5a_linuxintel_32.tar (FixPak link - ) 安裝

檔案系統配置

為 DB2 V8.1 分割槽環境而配置的兩個基於 Intel 的雙路 IBM Blade 伺服器:

  • 對於分割槽環境,建議在叢集中的一臺機器上建立一個單獨的 DB2 主檔案系統,用作例項主目錄。這個檔案系統將透過 NFS —— 從 NFS 伺服器(在這裡是 ServerA)匯出的 NFS 和裝配在其他計算機(在這裡是 ServerB)上的 NFS —— 在叢集中所有的計算機之間共享。在這裡的配置中,我們建立了檔案系統 /db2home,裝配點為 ServerA 上的 /db2home,這是 DB2 Instance 屬主的主目錄。
  • 對於分割槽資料庫系統,在每臺參與分割槽資料庫的計算機上都應該有一個單獨的資料庫檔案系統。在這裡的配置中,我們建立了一個名為 /data1 的檔案系統,裝配點為 ServerA 和 ServerB 上的 /data1。
  • DB2 install 和 fixpak 映象必須能夠被所有參與分割槽的計算機訪問。我們簡單地在 ServerA 上的 /db2home 檔案系統中建立了一個名為 images 的目錄。這個目錄將包含 DB2 install 映象和 fixpak,並且將透過 NFS 向所有參與分割槽的計算機開放。

回頁首

安裝和配置說明

下面是這裡的配置中使用的兩臺計算機:

  • ServerA: 例項所在的計算機(最多隻能有一臺駐留例項的計算機),其中 ServerA 是這臺計算機的真實主機名。
  • ServerB (以及叢集中其他的每一臺計算機):參與分割槽的計算機,其中 ServerB 是計算機的真實主機名。

下面是在 DPF 環境中安裝和執行 DB2 的步驟。

步驟 1 - 檢驗檔案系統的裝配情況

以 root 身份,檢驗所需的檔案系統是否裝配好。我們假設之前已建立了檔案系統(請參閱前面的“檔案系統配置”)。

ServerA:

  • 檢驗之前建立的檔案系統 /db2home 是否真的裝配好了。發出以下命令,看 /db2home 是否出現在輸出的“Mounted on”列中:
    • df

ServerA 和 ServerB (以及叢集中其他的每一臺計算機):

  • 檢驗之前建立的檔案系統 /data1 是否真的裝配好了。發出以下命令,看 /data1 是否出現在輸出的“Mounted on”列中:
    • df

步驟 2 - 必需的檔案和包

以 root 身份,使適當的 DB2 映象可用,然後檢驗 Red Hat 上是否安裝了所有必需的包。

ServerA:

  1. 將 Intel 32 位 Linux 上的 DB2 UDB Enterprise Server Edition V8.1 的 Install Image C48THML.tar 檔案複製到 /db2home/images 目錄。
  2. 將用於 FixPak 5a 的 PSoft_10533_v81_fp5a_linuxintel_32.tar 檔案複製到 /db2home/images 目錄。

ServerA 和 ServerB (以及叢集中其他每一臺計算機)

  1. 檢驗是否安裝了所需的 Red Hat 包,方法是發出以下命令:
    • rpm -qa | grep pdksh
    • rpm -qa | grep rsh
    • rpm -qa | grep nfs

如果上面所說的包沒有安裝,那麼應該可以從  下載缺失的包。然後使用類似於 rpm -ivh pdkshxxxxxx.rpm 的命令安裝下載的包,其中 pdkshxxxxxx.rpm 是包的名稱。否則,與 Linux 系統管理員聯絡。

步驟 3 - 修改核心引數

以 root 身份,修改 ServerA 和 ServerB (以及叢集中所有其他的每一臺計算機)上的核心引數,即新增以下條目到預設的系統控制配置檔案/etc/sysctl.conf:

  • kernel.msgmni = 1024
  • kernel.sem = 250 256000 32 1024

其中 max semaphores system wide = max number of arrays x max semaphores/array。

現在需要從預設檔案 /etc/sysctl.conf 中載入剛剛更新的 sysctl 設定。為此,發出以下命令:

  • sysctl -p

步驟 4 - 啟動 NFS

以 root 身份,檢驗 NFS 是否同時在 ServerA 和 ServerB (以及叢集中所有其他的每一臺計算機)上執行。發出以下命令:

  • showmount -e hostname

其中 hostname 是計算機的真實主機名。在這裡的配置中,兩個主機名分別是 ServerA 和 ServerB。

在不帶 hostname 引數的情況下輸入 showmount 命令可以檢查本地系統。如果 NFS 沒有啟用,那麼將收到如下所示的訊息:

  • showmount: hostname: RPC: Program not registered

這條 showmount 命令應該列出檔案系統。如果該命令失敗,那麼 NFS 伺服器可能還沒有啟動。以 root 身份執行以下命令來手動啟動伺服器:

  • /etc/rc.d/init.d/nfs restart

步驟 5 - 啟用 rsh 和 配置SSH等效性

以 root 身份,啟用 ServerA 和 ServerB (以及叢集中所有其他的每一臺計算機)上的 rsh。

  1. 編輯 /etc/xinetd.d/rsh 檔案並將 disable 標誌改為 no。
  2. 輸入以下命令,重新啟動 xinetd 伺服器:
    • /etc/init.d/xinetd restart

--配置節點以便可以使用SSH進行遠端訪問
在主節點 db2inst1 使用者的主目錄下建立.ssh 目錄
mkdir ~/.ssh
chmod 700 ~/.ssh                                  

--為 SSH 協議生成 DSA 金鑰對(公共金鑰和私有金鑰)出現提示時,接受預設的金鑰檔案位置和無口令短語設定(按 [Enter]):
[db2inst1@dpf01 .ssh]$ /usr/bin/ssh-keygen -t dsa

此命令將 DSA 公共金鑰寫入 ~/.ssh/id_dsa.pub 檔案,將私有金鑰寫入 ~/.ssh/id_dsa 檔案。

--將金鑰新增到一個公共 authorized_keys 檔案
touch ~/.ssh/authorized_keys
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys 

--節點上啟用 SSH 使用者等效性                           
如果 SSH 配置正確,您將能夠從終端對話使用 ssh 和 scp 命令,而無需提供口令或口令短語。
[db2inst1@dpf01 .ssh]$ ssh dpf02 "date;hostname"
2015年 01月 02日 星期五 16:51:28 CST
dpf02
[db2inst1@dpf01 .ssh]$ ssh dpf01 "date;hostname"
2015年 01月 02日 星期五 16:51:36 CST
dpf01

步驟 6 - 配置 NFS 伺服器

在 ServerA 上以 root 身份執行以下操作:

  1. 發出以下命令,確信裝配了 /db2home 目錄:
    • mount /db2home
  2. 確保新的檔案系統將會在啟動時被裝配,這可以透過檢查 /etc/fstab 是否包含相關條目來做到。如果沒有關於 /db2home 的條目,那麼應該新增這樣的條目。在這裡的配置中,我們使用:
    • /dev/hda7 /db2home ext3 defaults 1 2
  3. 新增一個條目到 /etc/exports 檔案,以便在啟動時自動地匯出 NFS 檔案系統。在這裡的配置中,這個條目是:
    • /db2home ServerA (rw,sync,no_root_squash) ServerB (rw,sync,no_root_squash)
    如果有更多的計算機,那麼這個條目看上去更像是這樣的:
    • /db2home ServerA (permissions) ServerB (permissions) ServerC (permissions)...
    預設情況下,permissions 被設為 rw 和 root_squash。設為 root_squash 意味著在訪問 NFS 伺服器上的檔案時,客戶機上的 root 使用者不會被當作 root 使用者來對待。雖然這種模式的操作在生產環境中通常是可取的,但是為了在叢集中其他每一臺計算機上建立使用者,應該把它關閉。為此,可以將 permissions 部分設為 no_root_squash。
  4. 執行以下命令,匯出 NFS 目錄:
    • /usr/sbin/exportfs -a

步驟 7 - 配置 NFS 客戶機

在 ServerB (以及叢集中所有其他的每一臺計算機)上以 root 身份執行以下操作:

  1. 發出以下命令,建立將對映到 NFS 共享目錄 /db2home 的新目錄:
    • mkdir /db2home
  2. 新增一個條目到 /etc/fstab 檔案,以便在啟動時自動裝配 NFS 檔案系統。
    • ServerA:/db2home /db2home nfs rw,timeo=300,retrans=5,hard,intr,bg,suid
    其中,
    • ServerA - NFS 伺服器的計算機名
    • rw - 讀和寫訪問
    • timeo=300 - 如果 nfs 伺服器在規定時間內沒有響應(以十分之一秒為單位),則允許核心超時
    • retrans=5 - 設定在返回錯誤之前重複的請求數
    • hard - 當伺服器掛起時,客戶機將被阻塞,直到伺服器重新處於活動狀態
    • intr - 客戶機(使用者)可以中斷會導致錯誤的被阻塞的操作
    • bg - 如果裝配失敗,系統繼續在後臺重試,然後繼續
    • suid - 允許 set-user-identifier 或 set-group-identifier 生效
  3. NFS 裝配匯出的檔案系統
    • mount SereverA:/db2home /db2home
    如果 NFS 不處於活動狀態,那麼將收到類似於下面的訊息:
    • showmount: ServerA: RPC: Program not registered

    上面的 showmount 命令應該會列出檔案系統。如果該命令失敗,那麼可能是因為 NFS 伺服器還沒有啟動。以 root 身份在 NFS 伺服器上執行以下命令手動啟動該伺服器:

    • /etc/rc.d/init.d/nfs restart

步驟 8 - 建立所需的組和使用者

以 root 身份在 ServerA 和 ServerB (以及叢集中所有其他的每一臺計算機)上執行以下命令,為 DB2 建立適當的 OS 使用者和組(注意: 每臺計算機上的使用者和組必須相同):

  1. groupadd -g 999 db2iadm1
  2. groupadd -g 998 db2fadm1
  3. groupadd -g 997 dasadm1
  4. useradd -u 1004 -g db2iadm1 -m -d /db2home/db2inst1 db2inst1 -p password1
  5. useradd -u 1003 -g db2fadm1 -m -d /db2home/db2fenc1 db2fenc1 -p password2
  6. useradd -u 1002 -g dasadm1 -m -d /home/dasusr1 dasusr1 -p password3
  7. passwd db2inst1
  8. passwd db2fenc1
  9. passwd dasusr1

步驟 9 - 在例項所在的計算機上安裝 DB2 UDB V8.1 ESE 和 FixPak

以 root 身份在 ServerA 上執行以下命令,安裝 IBM DB2 UDB Enterprise Server Edition V8.1 和 FixPak:

  1. cd /db2home/images/
  2. tar xvf C48THML.tar
  3. tar xvf PSoft_10533_v81_fp5a_linuxintel_32.tar
  4. 安裝 DB2:
    • cd /db2home/images/009_ESE_LNX_32_NLV
    • ./db2_install
  5. 當 db2_install 提示輸入產品密碼時,輸入:
    • DB2.ESE
  6. 安裝 FixPak:
    • cd /db2home/images/FP5a
    • ./installFixPak

在 Linux 上 DB2 的安裝目錄是 /opt/IBM/db2/V8.1。

步驟 10 - 例項所在計算機上安裝後的任務

以 root 身份在 ServerA 上執行以下操作:

  1. 建立 DB2 例項:
    • cd /opt/IBM/db2/V8.1/instance
    • ./db2icrt -u db2fenc1 db2inst1
  2. 為 DB2 例項配置 TCP/IP,即更新 /etc/services 檔案,在其中指定 DB2 伺服器用於偵聽客戶機請求的服務名和埠號。之後這個檔案看上去應該是這樣的:
    • db2c_db2inst1 50000/tcp # DB2 connections service port
    • DB2_db2inst1 60000/tcp
    • DB2_db2inst1_1 60001/tcp
    • DB2_db2inst1_2 60002/tcp
    • DB2_db2inst1_END 60003/tcp
  3. 更新伺服器上的資料庫管理器配置檔案和 .profile 檔案:
    1. su - db2inst1
    2. 透過執行 db2profile 指令碼設定例項環境
      • ./db2home/db2inst1/sqllib/db2profile

      為了在每次使用者登入到 Linux 系統上的時候設定使用者環境,新增以下命令到 .profile 中:

      • vi /db2home/db2inst1/.profile file
      • ./db2home/db2inst1/sqllib/db2profile
    3. 更新 DBM 配置檔案中的 SVCENAME 引數:
      • db2 update dbm cfg using SVCENAME db2c_db2inst1
    4. 將 DB2COMM 登錄檔變數設定為 tcpip:
      • db2set DB2COMM=tcpip
    5. 停止並重新啟動例項,以便使得這些更改生效
      • db2stop
      • db2start
  4. 以 root 身份,建立 DB2 Administration Server (DAS)
    • su -
    • cd /opt/IBM/db2/V8.1/instance
    • ./dascrt -u dasusr1

注意: 如果您計劃使用 DB2 GUI 工具,例如 Control Center 和 Task Center,那麼必須要有 DAS。

步驟 11 - 在參與分割槽的計算機上安裝 DB2 UDB V8.1 ESE 和 FixPak

以 root 身份在 ServerB (以及叢集中所有其他的每一臺計算機)上執行以下操作,以便安裝 IBM DB2 UDB Enterprise Server Edition V8.1 和 FixPak:

  1. 安裝 DB2:
    • cd /db2home/images/009_ESE_LNX_32_NLV
    • ./db2_install
  2. 當 db2_install 提示輸入產品密碼時,輸入:
    • DB2.ESE
  3. 現在安裝 FixPak:
    • cd /db2home/images/FP5a
    • ./installFixPak

步驟 12 - 分割槽配置

在分割槽資料庫系統中,每個資料庫分割槽伺服器必須有許可權來在參與例項的所有其他資料庫分割槽伺服器上執行遠端命令。以 root 身份在 ServerA 上執行以下操作,以使 DB2 例項能在多個分割槽上執行:

  1. 在一個編輯器中開啟 .rhosts 檔案:
    • vi /db2home/db2inst1/.rhosts
  2. 新增以下兩行到 .rhosts 中並儲存:
    • ServerA db2inst1
    • ServerB db2inst1
  3. 為 root(只有 root)授予對 .rhosts 檔案的讀 (r) 和寫 (w) 許可:
    • chmod 600 /db2home/db2inst1/.rhosts
  4. 為了定義哪些主機參與分割槽環境,必須更新 db2nodes.cfg:
    • vi /db2home/db2inst1/sqllib/db2nodes.cfg
  5. 新增以下幾行(表示分割槽號、主機名和邏輯埠)到 db2nodes.cfg 並儲存:
    • 0 ServerA 0
    • 1 ServerA 1
    • 2 ServerB 0
    • 3 ServerB 1
    在這裡,每臺物理伺服器上有兩個邏輯分割槽。

為了允許參與分割槽資料庫系統的資料庫分割槽伺服器之間進行通訊,必須在 /etc/services 檔案中保留 TCPIP 埠。
以 root 身份在 ServerB (以及叢集中所有其他的每一臺計算機)上確保每臺計算機上的 /etc/services 檔案包含一組相同的 DB2 條目。
  • /etc/services 檔案包含以下 DB2 條目:
    • # Local services
    • db2c_db2inst1 50000/tcp
    • DB2_db2inst1 60000/tcp
    • DB2_db2inst1_1 60001/tcp
    • DB2_db2inst1_2 60002/tcp
    • DB2_db2inst1_END 60003/tcp

完成所有更新後,便可以使用 db2_all 命令來檢查設定情況,該命令將查詢所有分割槽(在這裡,兩個物理伺服器上各有兩個邏輯分割槽)上的資料。以 db2inst1 身份在 ServerA 或 ServerB 上輸入:

  • db2_all date
  • rah date     
  • 如報錯Permission denied,設定DB2RSHCMD=/usr/bin/ssh
清單 1. db2_all test
$ db2_all date
Fri Jul 16 18:57:57 EDT 2004
ServerA: date completed ok
Fri Jul 16 18:57:57 EDT 2004
ServerA: date completed ok
Fri Jul 16 18:57:49 EDT 2004
ServerB: date completed ok
Fri Jul 16 18:57:49 EDT 2004
ServerB: date completed ok
$

這樣可以檢驗是否成功地用 db2_install 在 Red Hat Advanced Server 2.1 上安裝和配置了帶有 DPF 的 DB2 UDB ESE V8.1。

步驟 13 - 測試配置

現在可以使用帶有 DPF 環境的 DB2 UDB ESE V8.1 了。嘗試以下命令:

  1. db2stop
  2. db2start
  3. cd /db2home/db2inst1/sqllib/bin
  4. ./db2sampl
  5. db2 connect to sample
  6. db2 "select * from sales"
  7. 要驗證是否已將資料分發至資料庫分割槽伺服器,在 DB2 命令視窗中輸入下列命令:
    db2 "select distinct dbpartitionnum(empno) from employee" 
    輸出將列示 employee 表使用的資料庫分割槽。特定輸出將取決於:
    • 資料庫中資料庫分割槽的數目
    • 建立 employee 表的表空間所使用的資料庫分割槽組中的資料庫分割槽數
#----------------------------------------------------------------------------------#
建立檔案系統
vgcreate -s 16M vg_db2 /dev/sdb

lvcreate -L 5G -n lv_db2data1   vg_db2
lvcreate -L 1G -n lv_db2path    vg_db2
lvcreate -L 1G -n lv_db2plog    vg_db2
lvcreate -L 1G -n lv_db2mlog    vg_db2
lvcreate -L 5G -n lv_db2archive vg_db2

mkdir /db2data1    
mkdir /db2path   
mkdir /db2plog   
mkdir /db2mlog   
mkdir /db2archive

cat >> /etc/fstab   < /dev/mapper/vg_db2-lv_db2archive /db2archive ext3 defaults 1 2
/dev/mapper/vg_db2-lv_db2data1   /db2data1   ext3 defaults 1 2
/dev/mapper/vg_db2-lv_db2mlog    /db2mlog    ext3 defaults 1 2
/dev/mapper/vg_db2-lv_db2path    /db2path    ext3 defaults 1 2
/dev/mapper/vg_db2-lv_db2plog    /db2plog    ext3 defaults 1 2
EOF

mkfs.ext3 /dev/mapper/vg_db2-lv_db2archive 
mkfs.ext3 /dev/mapper/vg_db2-lv_db2data1 
mkfs.ext3 /dev/mapper/vg_db2-lv_db2mlog  
mkfs.ext3 /dev/mapper/vg_db2-lv_db2path  
mkfs.ext3 /dev/mapper/vg_db2-lv_db2plog  

chown -R db2inst1:db2iadm1 /db2data1    
chown -R db2inst1:db2iadm1 /db2path   
chown -R db2inst1:db2iadm1 /db2plog   
chown -R db2inst1:db2iadm1 /db2mlog   
chown -R db2inst1:db2iadm1 /db2archive  

db2 update dbm cfg using svcename db2c_db2inst1 
db2set DB2COMM=TCPIP 
db2set -all 

--建立資料庫,/db2data1 自動儲存路徑,/db2path  資料庫路徑
db2 "create db dwdb on /db2data1 dbpath on /db2path using codeset GBK TERRITORY CN "

--建立分割槽組,PDPG 資料分割槽組,SDPG 單分割槽組
db2 "create database partition group PDPG on dbpartitionnums (0 to 3)" 
db2 "create database partition group SDPG on dbpartitionnums (0) "

--建立緩衝池,100MB 緩衝池,其中30MB為塊區域 
db2 "create bufferpool BP_16K all dbpartitionnums size 9000 pagesize 16k 
numblockpages 3000 blocksize 16"

--設定主日誌路徑
db2 "update db cfg for dwdb using NEWLOGPATH /db2plog"

--設定映象日誌
db2 "update db cfg for dwdb using MIRRORLOGPATH /db2mlog"

--設定歸檔路徑
db2 "update db cfg for dwdb using LOGARCHMETH1 disk:/db2archive"

--建立表空間,所有分割槽
db2 "create tablespace tbs_big in database partition group PDPG bufferpool bp_16k
overhead 4.0 transferrate 0.04
"
--建立表空間,單分割槽 
db2 "create tablespace tbs_small in database partition group SDPG bufferpool bp_16k
overhead 4.0 transferrate 0.04
"
overhead 預設7.5毫秒,磁碟驅動器從接到指令到找到資料所花費的時間。
transferrate 預設 0.06毫秒,從硬碟讀一頁到記憶體花費的時間。

--db2 activate db dwdb
SQL0863W  A successful connection was made, but only single byte characters
should be used.  SQLSTATE=01539

[db2inst1@dpf02 db2inst1]$ db2 connect to dwdb
SQL0332N  Character conversion from the source code page "1386" to the target
code page "819" is not supported.  SQLSTATE=57017


--線上同時備份所有分割槽節點,每個節點需有目錄/db2archive/backup 
db2_all "|| backup db dwdb to /db2archive/backup" 

|| 表示同時備份所有節點 

db2 "backup db dwdb on all dbpartitionnums online to /db2archive/backup"


---------------------------------------------------------------------------------------
db2_all date

connect to address 192.168.2.71 port 544: Connection refused
trying normal rsh (/usr/bin/rsh)
2015?ê 01?? 20?? ?????? 18:49:56 CST
dpf01: date completed ok

1)首先確保iptables沒有開啟 
2)在/etc/securetty裡面新增 
rexec 
rsh 
rlogin 
3)去除多餘的krb4 
cd /usr/kerberos/bin 
ln -s /usr/bin/rsh rsh

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22661144/viewspace-1477266/,如需轉載,請註明出處,否則將追究法律責任。

相關文章