Oracle 10gR2 RAC+ RHEL4 + VMWare GSX 簡明安裝步驟

火星人 @ 2014-03-04 , reply:0


Oracle 10gR2 RAC+ RHEL4 + VMWare GSX 簡明安裝步驟

前幾天做了這個測試,看到我們這個板裡面有很多同學對學習RAC感興趣,但是又苦於沒有條件.

我的風格大家也熟悉了,我也不多廢話,也不願意寫什麼手冊,我認為搞稍微複雜一點技術的工程技術人員的最基本的能力就是去做調研和信息搜集,什麼事情光靠別人很詳細的餵給你,你是永遠無法成為高手的,過程本身很麻煩,有時候甚至很讓人痛苦和氣惱,但是這才是真正能夠把你推動到一個"高手"的位置的真正動力. 動手越少,水平越糟。

下面是我前幾天做的一個簡明步驟,不想寫複雜的.我覺得已經足夠幫有動手能力的同學過關了.


********************************************
Oracle 10gR2 RAC + RHEL AS4U2 +VMWare GSX 3.2.0   
Deployment brifing guide 0.9
Author: nntp                                          20060119
轉載不得修改,請註明作者時間和出處
********************************************



1. 環境

自用的測試工作站一台,如果你的配置環境和我差很遠,你就不要玩樂,你會很痛苦的.


------------硬體環境--------------------------------------------------------
CPU: AMD Althon64 3200+ x1
Mem: 2G DDR400
Storage: 1x10GB ATA for Host OS,  2x80G SATA for application

------------Host 的環境----------------------------------------------------------------------
SuSE Enterprise Linux Server 9 SP3 with latest errata Kernel from Novell YOU
(AMD64/EM64T version)

10GB上安裝的是我的上面的這個OS,用來做Host OS, 並且已經調優過. (不會這種環境下linux調優的同學,你做出來的性能會和我有不少差距)

2個80GB硬碟,我用linux MD 做軟RAID, RAID level 是0, 並且作了調優(不會這種環境下linux陣列配置和優化的同學,你做出來的性能會和我有不少差距)

VMWare gsx3.2.0 安裝在 10GB硬碟上,也作了一些小的優化工作(你在VTN上查得到怎麼做優化).

80GB做RAID0就變成一個160GB的LUN. 我划樂40GB出來, mount 到  /vmegg上

我用的這個文件系統是ReiserFS, 並作了文件系統級的性能優化.

vmegg的結構如下

/vmegg
....../rac
........./rhel4
............/n1
............/n2
............/share


各位同學自己建好上面這些目錄.


-------------------安裝的大概步驟------------------------

步驟一: 安裝前準備及Guest OS安裝配置
步驟二: 安裝Oracle 10gR2 clusterware
步驟三: 安裝Oracle 10gR2 database
步驟四: 配置netca
步驟五: 配置dbca創建資料庫
步驟六: 校驗RAC
------------------------------------------------------------

============ 步驟一 安裝前準備及Guest OS安裝配置=======================
Host OS 準備

1. 從Oracle OTN下載 oracle 10gR2 for x86 linux,下2個zip, 一個是clusterware zip,一個是database zip, comp CD你可以下,我是懶的弄
2. 準備的RHEL AS4U2(x86), 你也可以用CentOS 4.2(x86)
3. 搞清楚你的linux的kernel version
4. 從Oracle OTN下載 ocfs2 , ocfs tools, ocfs console,  ASMLib, ASMLib support & utility,記住這些都是針對你的kernel的,不要下錯
5. VMWare gsx 3.2.0 for linux
6. 我的工作站是沒有顯示器的,我的工作都是在筆記本上作的, 大家都知道Oracle的安裝是需要X的,所以你可以VNC過去,也可以在本地用Xserver.
    我用的是ReflectionX,因為還可用來連其他的Unix(HP-UX, AIX等). 這個完全是個人喜好,你搞得定什麼用什麼.
7. 在筆記本上配置好RelfectionX,做好連接host上的vmware console


Guest OS安裝

1. 泡杯茶,會耗不少時間, 我一邊安裝一邊看DVD的,當中會有很多等待時間. 雖然我後來用了幾個自動化的方式 .

2. 在vmware console 創建你的 vmware guest OS, 取名 node1, node2, 選擇custome create-> Redhat Enterprise Linux ,其它都是默認. 內存選擇1G(>800MB你就看不到warning樂), 硬碟選擇 LSI bus controller, 大小選擇10GB, 建立方式選擇 pre-allocated ,也就是馬上就創建這個vmdk, 我不喜歡split to 2GB,就把默認的打勾給去掉了.因為我的Host OS以及mount filesystem已經做過優化,我喜歡一個獨立的大文件,你們按照自立的路子來做,不要盲目跟我.

3. 創建好后vmware guest OS之後, 給每一個guest 加上一塊NIC

4. 關掉vmware console, 這個時候你的兩個vmware guest OS都創建好了,分別在n1 n2目錄下面,而且每個都加了1個NIC,硬碟都是LSI, 並且大小10GB,而且都預創建好了,並且沒有分割成2GB一塊

6.  看到很多cluster in vmware的介紹在創建share disk的時候,都是什麼用一個vmware guest OS添加vmdk然後修改vmx,然後把另外一個vmware guest的vmx再添加進去,我很不喜歡這種套路。我很少用vmware workstation,所以不知道最新版本是否有vdiskmanager.反正我在gsx裡面一直用vdiskmanager.

ssh到你的 Host OS裡面(現在是我的SLES9SP3).  到 /vmware/rac/rhel4/share下面,運行 vmware-vdiskmanager 創建幾個vmdk.  這裡就有點講究了


如果你在看我的這個文章之前,還沒有搞清楚ORACLE RAC的基本結構, raw, ASM, ocfs2的概念,你就不要看下去了,浪費時間.

Oracle RAC 本質上是借鑒了很多Alpha TruCluster的技術,但是也有了很多折衷的設計。 它需要存放OCR, CRS voting 信息的共享空間, 還需要空間給ASM for oracle data, 所以
在存儲的布局上,有兩種方式,要麼是 raw for OCR, CRS voting , ASM for data, 要麼是 ocfs2 for OCR, CRS voting, ASM for data.
至於以前那種 raw for OCR, CRS voting, CRS for data的做法,我是不考慮了,做做學慣用途還可以,用在production環境是給自己吃藥.

所以,如果你選擇第一種,你的vmdk這樣建,

vmware-vdiskmanager 創建 pre-allocated並且是lsi contoller的硬碟 200MB 一個 for raw for OCR
vmware-vdiskmanager 創建 pre-allocated並且是lsi contoller的硬碟 200MB 一個 for raw for CRS voting
vmware-vdiskmanager 創建 pre-allocated並且是lsi contoller的硬碟 1GB 四個,  2個for ASM Oracle data, 2個for flash recovery area, 你不玩flash recovery也可以省略掉

如果你選擇第二種,你的vmdk這樣建,

vmware-vdiskmanager 創建 pre-allocated並且是lsi contoller的硬碟 1GB一個 for ocfs2 for OCR + CRS voting
vmware-vdiskmanager 創建 pre-allocated並且是lsi contoller的硬碟 1GB 四個for ASM for Oracle data & flash recovery area (同上)



raw沒有什麼有意思的,我因為還要在這個環境作其他的test,所以就選擇第二種.

這樣做好后,你的 /vmware/rac/rhel4/share目錄就會產生你剛才創建的這些vmdk了.

7. 分別到 n1和n2的目錄,打開node1.vmx 和node2.vmx, 在最後空白處添加這幾段內容

scsi1.present = "TRUE"
scsi1.virtualDev = "lsilogic"
scsi1.sharedBus = "virtual"

這段是打開 scsi1上的使用,並且設置成virtual, controller設置成lsilogic

然後依次添加

scsi1:1.present = "TRUE"
scsi1:1.mode = "independent-persistent"
scsi1:1.filename = "/vmegg/rac/rhel4/share/ocfs.vmdk"
scsi1:1.deviceType = "plainDisk"

scsi1:2.present = "TRUE"
scsi1:2.mode = "independent-persistent"
scsi1:2.filename = "/vmegg/rac/rhel4/share/asm1.vmdk"
scsi1:2.deviceType = "plainDisk"

scsi1:3.present = "TRUE"
scsi1:3.mode = "independent-persistent"
scsi1:3.filename = "/vmegg/rac/rhel4/share/asm2.vmdk"
scsi1:3.deviceType = "plainDisk"

scsi1:4.present = "TRUE"
scsi1:4.mode = "independent-persistent"
scsi1:4.filename = "/vmegg/rac/rhel4/share/asm3.vmdk"
scsi1:4.deviceType = "plainDisk"

scsi1:5.present = "TRUE"
scsi1:5.mode = "independent-persistent"
scsi1:5.filename = "/vmegg/rac/rhel4/share/asm4.vmdk"
scsi1:5.deviceType = "plainDisk"


這樣就把剛才創建的那幾個vmdk添加好了

最後添加這個

disk.locking = "false"
diskLib.dataCacheMaxSize = "0"
diskLib.dataCacheMaxReadAheadSize = "0"
diskLib.DataCacheMinReadAheadSize = "0"
diskLib.dataCachePageSize = "4096"
diskLib.maxUnsyncedWrites = "0"


這段是對vmware使用共享硬碟的方式進行定義,我經常看到很多同學在裝RHCS in vmware的時候說這個不正常,那個不正常,你們也可以借鑒一下這個配置
大多數人都知道設置 disk.locking ="false" 卻漏掉dataCache

保存退出之後,重新打開你的vmware-console,你就可以看到2個vmware guest OS的配置中,都有這些硬碟出現了.  

其實到現在為止還是一個超級簡單的工作.

在你的vmware-console裡面edit config 點進看看,但是不要修改和save. !切記,而且之前修改vmx的時候,關掉你的vmware-console

8. 然後就安裝你的vmware guest OS,  安裝的時候,包選擇default,然後點custom進去加幾個必需的,  Development Tools, Legacy Software Development Libraries, Kernel Development, Editor, System tools

9. 配置你的2個網卡的固定IP,hostname, DNS, gateway, time server (NTP)

node1:

hostname node1pub
eth0 192.168.0.11
eth1 10.1.1.1.1


node2

hostanme node2pub

eth0 192.168.0.22
eth1 10.1.1.1.2

gateway, DNS就按照自己的需要配

NTP我強烈建議你們配一個,不知道NTP的,後面有古怪事情不要問我.

10. 安裝結束后,進入guest OS

修改 /etc/hosts

如下

127.0.0.1   localhost   (必須要這樣)

192.168.0.11   node1pub
192.168.0.22   node2pub

10.1.1.1 node1prv
10.1.1.2 node2prv

192.168.0.111 node1vip
192.168.0.222 node2vip

兩個node都要一樣.


修改後要確認這個hosts 都正確 (ping)

11.  ssh-keygen for root,    dsa/rsa 1024bit  我選擇空的 passphase,你可以加你的passphase,但是後面你要ssh-agent $SHELL建立等效,我怕麻煩就省略掉了.

     cd ~/.ssh
     cat  *rsa.pub >> authorized_keys
     cat *dsa.pub >> authorized_keys2
     
    copy .ssh/下面這些到  node2 的 ~/.ssh下面

這些都是基本功,我就不廢話了,不熟悉這個的就不要往下看了.

12. 分別在每個node 上做這些事情

   ssh localhost
   ssh node1pub
   ssh node2pub
   ssh node1prv
   ssh node2prv


13. 這個步驟和RAC沒有關係,但是也是好習慣之一,檢查你的service 狀況,disable掉所有不需要用的service ,騰出resource給你的RAC, 什麼cups之類亂七八糟的.


14. group add dba oinstall 組在兩個node上, 創建oracle 用戶, 主組oinstall, 附加組是dba和disk

然後和前面執行root ssh的操作完全一樣,執行一次,這步非常重要,漏掉了肯定過不下去.

15. mkdir /u01/app/oracle 在2個node上
  chown  -R oracle.oinstall
  chmod  -R 775

這個目錄給oracle和clusterware系統的
   

mkdir /u02/oradata/orcl

chown -R oracle.dba

這個目錄給 ocfs2用來裝OCR, CRS voting 的

16. 修改你的 /etc/sysctl.conf ,添加這些kernel 參數,這些都是老一套了,大家應該都很熟悉了

net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=262144
net.core.wmem_max=262144

kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000


17. 修改 ulimits 如果你想要修改的話

vi /etc/sysconfig/limits.conf

oracle          soft    nproc   2047
oracle          hard    nproc   16384
oracle          soft    nofile  1024
oracle          hard    nofile  65536


18. 修改 pam.d login

vi /etc/pam.d/login

最後添加  session required /lib/security/pam_limits.so


19. 增加 hancheck-timer 模塊在2個node上

先看一下有沒有  find /lib/modules -name "hangcheck-timer.ko"

然後加上去  echo "options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180" >> /etc/modprobe.conf

然後把這個模塊調起來 modprobe hangcheck-timer
然後檢查是否工作正常了 grep Hangcheck /var/log/messages | tail -2
看到類似這個的信息就表明工作正常了 Jan 18 01:08:19 n1pub kernel: Hangcheck: starting hangcheck timer 0.5.0 (tick is 30 seconds, margin is 180 seconds).

20. 安裝ocfs2 , ocfs2的console的rpm

21. 在每個node 上這樣操作

進入X, 然後運行 ocfs2console, 把你的2個node都添加進去

然後編輯 /etc/init.d/o2cb, 刪除掉 靠近配置開頭的那些帶 #的配置行

然後 /etc/init.d/o2cb offline ocfs2
/etc/init.d/o2cb unload ocfs2
/etc/init.d/o2cb configure ocfs2  回答y 就可以了

22. 在一個 node上 mkfs.ocfs2 -b 4k -C 32k -L oradatafiles /dev/sdb1   (就是前面創建的第一個vmdk)

23. 在每個node上

mount -t ocfs2 -o datavolume /dev/sdb1 /u02/oradata/orcl  
修改你的 /etc/fstab , 添加 類似這樣的行
/dev/sdb1               /u02/oradata/orcl       ocfs2   _netdev,datavolume      0 0
到這裡,我們的ocfs2 for OCR, CRS voting 就OK了

24. 修改 /etc/sysconfig/o2cb

把threshhold 的 值設置成 601

25. 在每個node上

安裝你的 ASMLibs, tools, support 三個rpm文件

然後運行 /etc/init.d/oracleasm configure

回答 oracle , dba, y, y 就可以了

26.  創建ASM

在一個node上:

/etc/init.d/oracleasm  createdisk  VOL1 /dev/sdc1
/etc/init.d/oracleasm  createdisk  VOL2 /dev/sdd1
/etc/init.d/oracleasm  createdisk  VOL3 /dev/sde1
/etc/init.d/oracleasm  createdisk  VOL4 /dev/sdf1

記住,ASM在linux下面處理的對象是 partition,不是disk, 所以你那些vmdk要linux 下面partition好才能用,fdisk 就用type 83就可以了

創建好后,  在這個node 上運行  /etc/init.d/oracleasm listdisks  查看


27, 在另外一個node 上

/etc/init.d/oracleasm scandisks
/etc/init.d/oracleasm listdisks  查看

28. 在每個node上

修改 oracle用戶家目錄下的 .bash_profile

修改成大概這個樣子

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORA_CRS_HOME=$ORACLE_BASE/product/crs
export ORACLE_SID=orcl1

export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH=${PATH}:$ORACLE_BASE/common/oracle/bin
export ORACLE_TERM=xterm
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS10=$ORACLE_HOME/nls/data
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=$ORACLE_HOME/JRE
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export THREADS_FLAG=native
export TEMP=/tmp
export TMPDIR=/tmp


第二個節點的 ORACLE_SID=orcl2  其他都一樣



=============步驟二: 安裝Oracle 10gR2 clusterware===============================

1.  unset 一些環境變數

$ unset ORA_CRS_HOME
$ unset ORACLE_HOME
$ unset ORA_NLS10
$ unset TNS_ADMIN

檢查你的變數
$ env | grep ORA
ORACLE_SID=orcl2
ORACLE_BASE=/u01/app/oracle
ORACLE_TERM=xterm

2. 用oracle 用戶login , 然後運行你的unzip 之後的那個clusterware目錄下的runInsaller 進入圖形安裝

3. 確認你的安裝目錄是/u01/app/oracle/product/crs

4. 修改 你的clustername 從crs到一個隨便你想要的名字

然後增加  
node1pub  node1prv node1vip
node2pub  node2prv node2vip

5. 然後指定 eth0 的類型時public

6. 然後制定你的OCR 和mirror

/u02/oradata/orcl/OCRFile
/u02/oradata/orcl/OCRFile_mirror

7. 然後指定你的voting

/u02/oradata/orcl/VotingFile
/u02/oradata/orcl/VotingFile_mirror1
/u02/oradata/orcl/VotingFile_mirror2

8. 然後就開始安裝了,當眾會讓你用完全的root身份在每個節點上運行orainstRoot.sh,你就一個節點一個節點運行,不要搶時間,一個個來

9. 然後要求你在每個節點上用完全的root許可權執行 root.sh,你也一樣,一個個來,一定要等一個做好了,然後做另外一個

10. 做第二個時候,如果告訴你你的eth0不是public,你就在第二個節點,用oracle用戶在 X裡面運行vipca, 然後配置好你的vip 信息(虛擬IP的信息,很容易配的)


11. clusterware 就安裝好了.

確認一下.

$ /u01/app/oracle/product/crs/bin/olsnodes -n
node1pub  1
node2pub  2


$ ls -l /etc/init.d/init.*
-r-xr-xr-x  1 root root  1951 Oct  4 14:21 /etc/init.d/init.crs*
-r-xr-xr-x  1 root root  4714 Oct  4 14:21 /etc/init.d/init.crsd*
-r-xr-xr-x  1 root root 35394 Oct  4 14:21 /etc/init.d/init.cssd*
-r-xr-xr-x  1 root root  3190 Oct  4 14:21 /etc/init.d/init.evmd*

===============步驟三: 安裝Oracle 10gR2 database========================

1.1.  unset 一些環境變數

$ unset ORA_CRS_HOME
$ unset ORACLE_HOME
$ unset ORA_NLS10
$ unset TNS_ADMIN

檢查你的變數
$ env | grep ORA
ORACLE_SID=orcl2
ORACLE_BASE=/u01/app/oracle
ORACLE_TERM=xterm

2. 用oracle用戶,運行你unzip之後的那個database目錄下的runInstaller

3. ORACLE安裝目錄指定到 /u01/app/oracle/product/10.2.0/db_1

4. 把2個node選擇上

5. 選擇 Install database Software only

6. 會要求你用完全的root許可權運行 root.sh ,分別在2個node上一一運行,不要搶時間

7. 安裝完畢


==================步驟四: 配置netca==========================

1. oracle 用戶在一個node上運行 netca

2. 選擇所有node

3. 選擇  Listener configuration

4.添加一個LISTEN, 1521 port

5. 回到開始界面,選擇Naming Methods configuration

6. 把Local Naming和Easy Naming 添加進去.然後結束配置

7. 確認一下

$ ps -ef | grep lsnr | grep -v 'grep' | grep -v 'ocfs' | awk '{print $9}'
LISTENER_NODE1PUB




==============步驟五: 配置dbca創建資料庫=========================

1. 用oracle用戶運行 dbca

2. 選擇custom database

3. 輸入資料庫的全局名,比如orcl

4. 給你的系統的不同角色建立密碼,我都選擇same as ....

5. 選擇用ASM管理資料庫

6. 輸入你前面設定的管理員密碼,並把SPFILE 設定成/u02/oradata/orcl/dbs/spfile+ASM.ora

7.進入ASM配置界面, create NEW, 名字叫做DATA
然後下面你會看到你前面創建的4個ASM VOL1-4, 你選擇  1 和2, "Redundancy" 選擇 Normal.
這樣 DATA diskgroup就創建好了

8. 回到ASM界面后. 仍舊選擇create new, 然後名字叫做FLASH_RECOVERY_AREA, 選擇第3和4兩個卷,然後"Redundancy" 選擇External

9. 然後OK結束ASM配置

10.Database File Locations 選擇DATA

11. Recovery Configuration 選擇剛才創建的 FLASH_RECOVERY_AREA diskgroup

12. 接下來默認的就可以了

13. Database Services 這裡,你選擇Add你一個新的service, 隨便叫名字,比如ractest

然後選擇 TAF Policy,是Basic

14. 開始創建資料庫


===================步驟六: 校驗RAC============================

1.用oracle用戶login, 運行

$ srvctl status database -d orcl
Instance orcl1 is running on node node1pub
Instance orcl2 is running on node node2pub

2.
$ srvctl status service -d orcl -s ractest
Service orcltest is running on instance(s) orcl2, orcl1


3.
    $ srvctl status nodeapps -n node1pub
    VIP is running on node:  node1pub
    GSD is running on node: node1pub
    Listener is running on node: node1pub
    ONS daemon is running on node: node1pub


4.
$ srvctl status asm -n node1pub
ASM instance +ASM1 is running on node node1pub.

5.
$ srvctl config nodeapps -n node1pub -a -g -s -l
VIP exists.: /node1vip/192.168.1.111/255.255.255.0/eth0:eth1
GSD exists.
ONS daemon exists.
Listener exists.

6. 運行 sqlplus  /nolog

SQL> connect /as sysdba
SQL>

    SELECT
        inst_id
      , instance_number inst_no
      , instance_name inst_name
      , parallel
      , status
      , database_status db_status
      , active_state state
      , host_name host
    FROM gv$instance
    ORDER BY inst_id;

     INST_ID  INST_NO INST_NAME  PAR STATUS  DB_STATUS    STATE     HOST
    -------- -------- ---------- --- ------- ------------ --------- -------
           1        1 orcl1      YES OPEN    ACTIVE       NORMAL    node1pub
           2        2 orcl2      YES OPEN    ACTIVE       NORMAL    node2pub




7.其他的測試,測試方法n多,你用sqlplus, asmcmd, 或者通過Web進 enterprise manager都可以.

隨便你了.


就這些了,不要問我在這個doc裡面的問題.

[ 本帖最後由 nntp 於 2006-1-20 21:09 編輯 ]
《解決方案》

很詳細 不過能不能改一下禁止使用表情!
《解決方案》

版主就是版主,我試過好多次了,不是這個問題,就是那個問題,這次我要按版主的步驟再去試驗一吧。

謝謝
《解決方案》

Oracle RAC 本質上是借鑒了很多Alpha TruCluster的技術,但是也有了很多折衷的設計。
---------------------------------------
nntp,能不能對照TRUCLUSTER把和AC把兩者的相同之處講講,我想知道到底那些東西借鑒了truconster
《解決方案》

原帖由 fengwy 於 2006-1-20 23:09 發表
Oracle RAC 本質上是借鑒了很多Alpha TruCluster的技術,但是也有了很多折衷的設計。
---------------------------------------
nntp,能不能對照TRUCLUSTER把和AC把兩 ...


Ok, 我雖然比較熟悉TruCluster和Tru64,但是系統內部的信息和知識是很龐大的,我也所知不多,就說一些我比較清楚地和大家分享

1. cache fusion

Oracle RAC從 版本9開始推出來,最吸引人的(也是大吹特吹的)就是 cache fusion了

因為實現了cache fusion,所以Oracle的不同節點才可以幾乎實時的cache 同步, TruCluster在很早之前就實現了SSI(Single System Image), 在Alpha系統上通過插MCA(Memory Channel Adapter) 實現多個node之間集群系統的cache 一致性操作.

現在RAC的 cache fusion還是通過private network 交換的(GbE network),但是RAC已經可以用Infiniband來搭了,我會以後有空給大家介紹這種做法的.本質上Infiniband network 做hb, cache fusion 基本上就是TruCluster MCA的地位和作用.


這個是他們的相同點,不同點是 oracle RAC的cache fusion 是DB 對DB的操作,不是OS裡面的,TruCluster則是在OS上的操作,技術實現上更勝一籌.不過有意思的是 Oracle 10g從Release 2開始的clusterware,也可以做一些有限的保護第三方的應用的集群了.  呵呵. DEC的偉大和技術先進性,可見一斑. 早在n年前就實現的技術.


2. CDSL

CDSL = Context Dependent Symbolic Links 就是上下文關聯的符號連接.

DEC Tru64 Unix很早就可以實現Clusterwide filesystem, (請注意是clusterwide,不是clusteraware,我在這個板的的另外一個帖子也有說明).

也就是說,可以在TrueCluster的不同node 之間,建立一個集群文件系統,放在共享存儲上,使得多個節點可以隨意訪問共享存儲,修改操作數據和程序等等.

而且TrueCluster還可以把自己,也就是節點操作系統自己,完全的放到這個集群文件系統上,實現ClusterRoot Filesystem  這個是很牛B的.因為所有node除了裸機,連OS都只有五物理的一份,而且是shared,並且支持併發使用的.

Oracle最近推出的是OCFS2,  當初OCFS是ASM還沒有出來之前搞出來的,因為你要做RAC,多個節點肯定要操作一個共享存儲,但是同時操作的時候,每個節點的文件系統都是由自己的OS控制和感覺的,不會互相說話溝通,所以必然造成共享數據的dirty read/dirty write出現問題,甚至很容易破壞數據和應用程序. 為了建立一個在整個集群所有成員節點都能夠協調和感覺的文件系統,所以就搞了ocfs, ocfs 當時主要用來放voting(quorum)和membership service的.

如果大家現在再去看OCFS2,就會發現除了我們安裝Oracle RAC的時候可以把CRS, OCR還有ASM SPFile放到ocfs2上去,還可以把整個Oracle_HOME也放上去,所有的node都只有一份ORACLE_HOME.

所以你可以看出就目前ocfs2的技術,和n年前的Trucluster clusterwide filesystem比較,還是有很大的差距. 當然我這個也是廢話,稍微了解點行業背景老手都知道,DEC和Oracle在技術上根本不是一個層面的公司. DEC的技術產品和員工,對現在的Intel, AMD, HP, Compaq, Oracle, Lifekeeper還有很多很多公司產生了巨大的歷史影響.


3. DLM

DLM= Distributed Lock Manager

既然是多個node一起工作,存取集群文件系統上的數據,就需要同步和加鎖.  一個機器上的同步和鎖管理有點操作系統基本知識的人都可以理解,實現起來還是很成熟的,但是現在是多個機器在同時協同工作,要讓他們這些OS的locking 和sync都得互相協調和通信,就需要分散式的Lock Manager.

DEC很早就實現了完整的DLM機制,Trucluster的DLM機制是非常成熟和牛B的. Locking Manager的機制和設計好壞,直接影響到整個機群的運行效率.

Oracle 目前在資料庫的範圍內實現了DLM,相比OS層面的實現,你也可以知道大概了.

RAC目前的擴展比還不是最理想的, 4台伺服器組成的RAC比2台組成的,性能並不是2倍的關係. 這也和DLM實現優劣有一定的關係

4. DRD

DRD= Device Request Dispatcher

DRD就是在其集群中建立對於本地和共享存儲的一個虛擬界面,使得存取本地和遠程的數據都是一樣的操作. Oracle的ASM就需要 DRD實現作為基礎. 配置過ASM的同學應該對ASM的便捷性是有深刻影響的.

我個人覺得ASM是目前Oracle RAC實現中比較成功的一點,ASM的DRD實現做得比較好,而且的確在客觀上,大大降低了DBA team對於DB storage管理的複雜性.

TruCluster的DRD是用來支持他的CFS(clusterwide filesystem)的,可以用來放不僅僅是資料庫的所有其他數據和應用,應用範圍和成熟度要比ASM高的多,ASM目前僅能放Oracle data , tablespace等. 其他文件類型也只能放有限的幾種.


我對Tru64 Unix/Cluster所知有限,當你面對這樣牛B的一個設計的時候,才知道自己所學連芝麻都不如. 只是可惜了一幫不懂技術的混蛋. 把DEC的一大堆好東西,可以真正推動社會發展的技術和思想給糟蹋了.

拋磚以引玉,歡迎大家comment.
《解決方案》

看這篇帖子才是長知識,驚為天人!!!
《解決方案》

斑竹,真的很佩服你。
《解決方案》

DEC的nonstop系統,真是被hp給浪費了.
到目前為止,也只有true unix的nonstop才是唯一真正的群集系統.
原來在sco unixware7系統上實現過,可惜未能推廣開,真是可惜.
《解決方案》

原帖由 unix007 於 2006-1-23 22:43 發表
DEC的nonstop系統,真是被hp給浪費了.
到目前為止,也只有true unix的nonstop才是唯一真正的群集系統.
原來在sco unixware7系統上實現過,可惜未能推廣開,真是可惜.

你錯了.

nonstop配合硬體,實現的並不是集群,是容錯機. 這是2個範疇上的東西

www.compaq.com/productbulletin上你可以看到詳細的nonstop的規格.

東西是在sco unixware上弄得,但是改變比較大的,定位和具體的安裝實施的狀況和HA集群和不一樣.
《解決方案》

這樣的帖子怎麼還不加精,nntp小心激起民憤

[ 本帖最後由 fengwy 於 2006-1-24 21:03 編輯 ]



[火星人 via ] Oracle 10gR2 RAC+ RHEL4 + VMWare GSX 簡明安裝步驟已經有138次圍觀

http://www.coctec.com/docs/service/show-post-7857.html