歡迎您光臨本站 註冊首頁

(續)CLUSTER4.5 + GFS4.5 + Oracle10g HA調試文檔(二)

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

(續)CLUSTER4.5 + GFS4.5 + Oracle10g HA調試文檔(二)

Ⅵ、Oracle10g For Linux安裝

(1)、安裝前準備
A:檢查oracle安裝所需要的包,應該全部通過,沒有通過的,安裝該rpm包,redhat光碟里有.
#rpm -q gcc make glibc binutils openmotif setarch compat-db compat-gcc-32 compat-gcc-32-c++ compat-libstdc++-33 compat-libstdc++-296

B:創建Oracle組和用戶帳戶
創建用於安裝和維護 Oracle 10g 軟體的 Linux 組和用戶帳戶.用戶帳戶將稱為 oracle,而組將稱為 oinstall 和 dba.以 root 用戶身份執行以下命令:
#/usr/sbin/groupadd oinstall
#/usr/sbin/groupadd dba
#/usr/sbin/useradd -m -g oinstall -G dba oracle
查看一下oracle用戶與組的設置情況
#id oracle

設置 oracle 帳戶的口令:
#passwd oracle
Changing password for user oracle.
New password: oracle (不回顯)
Retype new password: oracle(不回顯)
passwd:all authentication tokens updated successfully.

C:創建存儲 Oracle 10g 軟體和資料庫文件的目錄
本項目中:
oracle根目錄:/usr/local/oracle10g
oracl程序安裝目錄:/usr/local/oracle10g/db
oracle建庫目錄是:/usr/local/oracle10g/oracle10g_db
注:此目錄是磁碟陣列庫格式化后mount的目錄,見上一章

建立oracle安裝相關目錄:
#mkdir -p /usr/local/oracle10g
注:此命令可以不打,因上一章mount磁碟陣列庫的mount目錄時,已經遞歸建立該目錄
#mkdir –p /usr/local/oracle10g/db
#mkdir –p /usr/local/oracle10g/oracle10g_db
#mkdir –p /usr/local/oracle10g/source
注:為了將來用oracle用戶安裝oracle方便,將源文件從/root/oracle10g目錄移動到/usr/local/oracle10g/source
#cd /root/oracle10g
#mv 10g_win32_db.zip /usr/local/oracle10g/source
解壓源文件
#cd /usr/local/oracle10g/source
#unzip 10201_database_linux32.zip
給oracle10源程序(安裝文件)可執行許可權
#chmod a+x  -R *
將/usr/local/oracle10g以及以下所有目錄、文件許可權修改為oracle:oinstall
#chown -R oracle:oinstall /usr/local/oracle10g

D:配置 Linux 內核參數
Linux 內核非常出色.與大多數其他 *NIX 系統不同,Linux 允許在系統啟動和運行時修改大多數內核參數.完成內核參數更改后不必重新啟動系統.Oracle 資料庫 10g 需要以下所示的內核參數設置,其中給出的是最小值,因此如果您的系統使用的值較大,則不要更改它.
編輯 /etc/sysctl.conf 文件,添加或更改這些參數.
#vi /etc/sysctl.conf
修改內容如下:
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
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=262144
net.core.wmem_max=262144
完成後,運行以下命令激活更改:/sbin/sysctl -p
#/sbin/sysctl –p

E:設置oracle環境變數
#su - oracle
$vi .bash_profile
增加以下內容
export ORACLE_BASE=/usr/local/oracle10g
export ORACLE_HOME=$ORACLE_BASE/db
export ORACLE_SID=moss
export PATH=$PATH:$ORACLE_HOME/bin
保存退出,source一下.bash_profile文件,使之立即更新
$source .bash_profile
檢查一下oracle的環境變數是不是有了oracle以上設置的變數
$env

F:啟動oracle用戶的vnc服務
檢查一下之前是不是有root用戶開啟了vnc服務,因安裝oracle需要在圖形界面,且是oracle用戶下安裝,所以必須啟動oracle用戶的vnc服務.
$ps –ef |grep vnc
$vncserver :1
New 'smsdb01.scn.com:1 (oracle)' desktop is smsdb01.scn.com:1

Starting applications specified in /home/oracle/.vnc/xstartup
Log file is /home/oracle/.vnc/smsdb01.scn.com:1.log
提示配置vnc服務的密碼,本項目中密碼為sctvnet

說明:此舉將在當前用戶oracle的目錄下創建了.vnc目錄,以及xstartup配置文件.第一次執行vncserver命令啟動vnc伺服器端,用vnc客戶端連接遠程桌面時,因一些vnc伺服器端的配置參數未配置,登陸遠程桌面色彩等達不到使用要求,因此需要修改vnc配置文件:
$vi ~/.vnc/xstartup
把下列2句前的#號的註釋去掉
#unset SESSION_MANAGER
#exec /etc/X11/xinit/xinitrc

twm &
句前加上#號註釋掉,並加上以下一句
startx &
保存退出

(2)、開始安裝oracle10g

在筆記本電腦上執行vnc客戶端

vnc密碼,此處設置的是:oracle

打開桌面的終端后,進入oracle的解壓后目錄
$cd /usr/local/oracle10g/database
$./runInstaller
彈出oracle10g的圖形安裝界面,開始安裝oracle10g,如下

彈出窗口,將create starter Database (additional 720MB)的勾去掉,暫不建資料庫,只安裝oracle,見下圖

系統要檢測一下


系統檢測一下環境


限於篇幅,oracle的安裝圖例就先寫到這裡,按照提示,一步一步安裝好oracle10g即可(安裝過程中需要以root用戶身份,按照安裝提示去執行2個腳本)

(3)、同樣的步驟,在伺服器2上,做同樣的操作,包括用戶名、組、目錄建立、oracle環境變數、內核參數等要完全一致.


Ⅶ、Oracle10g For Linux建資料庫
(1)、建立資料庫前的準備
檢查共享的磁碟陣列櫃的GFS分區是否正常掛載
$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/cciss/c0d0p1      25G  5.2G   18G  23% /
none                  1.9G     0  1.9G   0% /dev/shm
/dev/cciss/c0d0p3      41G   81M   39G   1% /home
/dev/mapper/oracle10g-oracle
                      559G  933M  558G   1% /usr/local/oracle10g/oracle10g_db

(2)、開始在伺服器1上的oracle10g建立moss資料庫
在筆記本電腦上執行vnc客戶端,以oracle身份,登陸伺服器1的linux遠程桌面,打開終端,執行dbca建庫命令,如下圖


彈出圖形界面的歡迎窗口,如下:


建立資料庫


選擇General Purpose,點next


建立一個名字為moss的資料庫


把Configure the Database with Enterprise Manger的勾去掉,點Next


輸入moss資料庫的密碼,這裡設置的是****


選擇資料庫安裝的文件系統,選擇默認File system,點Next繼續


選擇資料庫安裝的位置,這裡很重要,我們要把資料庫建立在共享的磁碟陣列櫃的GFS存儲空間上,之前我們曾把以/dev/mapper/oracle10g-oracle (/dev/oracle10g/oracle邏輯卷設備的軟鏈接,系統自動建立的)以GFS文件系統掛載到/usr/local/oracle10g/oracle10g_db目錄,這裡,我們建立資料庫的位置就選擇/usr/local/oracle10g/oracle10g_db目錄.
因此,我們在這裡選擇Use Common Location For All Database File,找到我們的gfs文件系統掛載的目錄:/usr/local/oracle10g/oracle10g_db后,點OK,然後點Next繼續

將Specify Flash Recovery Area的勾去掉,然後點Next繼續

點Next繼續


定義資料庫的字符集.選擇Character Sets,在Database Character Set中選擇Choose from the list of Character Sets,下拉框中選擇UTF8 – Unicode 3.0 UTF-8 Universal Character Set,在National Character Set中選擇」UTF8 – Unicode 3.0 UTF-8 Universal Character Set,CESU-8 compliant」,其他不變,點Next繼續


點Next繼續


點Next繼續


點Finish結束,開始創建資料庫


確認一下,點OK開始建庫


資料庫建立完成,點Exit退出


(3)、在資料庫2上建moss資料庫
以上在伺服器1上建立了moss資料庫,之後,我們要以oracle用戶身份用vnc登陸伺服器2,在其上面建立同樣的moss資料庫,注意建庫的存儲文件夾,同樣是/usr/local/oracle10g/oracle10g_db;

伺服器2建庫,要注意2點:
A、        在伺服器2建立資料庫前,建議把伺服器1的資料庫以及監聽程序關閉
命令如下
$ lsnrctl stop
$sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Thu Jul 17 11:35:11 2008
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
SQL>connect / as sysdba
Connected.
SQL> shutdown immediate

B、伺服器1建立oss資料庫時,在/usr/local/oracle10g/oracle10g_db目錄下生成了如下文件,建議全部刪除(伺服器2建庫時,會在該目錄下再次生成這些文件)
$ cd /usr/local/oracle10g/oracle10g_db/moss/
$ ll
total 955084
-rw-r-----  1 oracle oinstall   7061504 Jul 17 11:38 control01.ctl
-rw-r-----  1 oracle oinstall   7061504 Jul 17 11:38 control02.ctl
-rw-r-----  1 oracle oinstall   7061504 Jul 17 11:38 control03.ctl
-rw-r-----  1 oracle oinstall  52429312 Jul 17 11:35 redo01.log
-rw-r-----  1 oracle oinstall  52429312 Jul 16 14:46 redo02.log
-rw-r-----  1 oracle oinstall  52429312 Jul 16 14:46 redo03.log
-rw-r-----  1 oracle oinstall 262152192 Jul 17 11:34 sysaux01.dbf
-rw-r-----  1 oracle oinstall 503324672 Jul 17 11:34 system01.dbf
-rw-r-----  1 oracle oinstall  20979712 Jul 16 22:00 temp01.dbf
-rw-r-----  1 oracle oinstall  26222592 Jul 17 11:35 undotbs01.dbf
-rw-r-----  1 oracle oinstall   5251072 Jul 16 14:46 users01.dbf
$ rm –rf *

Ⅷ、Oracle10g手工測試

伺服器1和2建立資料庫之後,我們要手工分別測試一下伺服器1和伺服器2的資料庫.
(1)、測試準備
分別在兩台伺服器上以oracle身份執行以下命令,關閉伺服器1和2上的oracle的資料庫及監聽程序
$ lsnrctl stop
$ lsnrctl start
$sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Thu Jul 17 11:35:11 2008
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
SQL>connect / as sysdba
Connected.
SQL> shartup
SQL> shutdown immediate
(2)、手工在終端上用上述命令測試關閉及啟動oracle服務和監聽;
(3)、在筆記本電腦上,使用pl/sql工具連接測試,測試步驟(略);

說明:測試之後,請保持2台伺服器的oracle均為關閉狀態,目的是為之後的cluster的虛IP測試,減少出錯可能.

Ⅸ、Cluster配置、虛IP測試
(1)、修改hosts文件
保證兩台伺服器的hosts文件為如下顯示
# more /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1                localhost.localdomain localhost
10.10.10.201   smsdb01.scn.com
10.10.10.202    smsdb02.scn.com

(2)、檢測磁碟陣列櫃是否被伺服器1和2正常掛載
root用戶身份,分別在兩台伺服器上檢查,磁碟陣列柜上建立的邏輯卷,是否被正確mount掛載
# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/cciss/c0d0p1      25G  5.2G   18G  23% /
none                  1.9G     0  1.9G   0% /dev/shm
/dev/cciss/c0d0p3      41G  133M   39G   1% /home
/dev/mapper/oracle10g-oracle
                      559G  1.5G  557G   1% /usr/local/oracle10g/oracle10g_db

(3)、檢測cluster、GFS相關服務的狀態
root用戶身份,分別檢查兩台伺服器的cluster各個服務狀態
# service ccsd status
ccsd (pid 2824) is running...
#service cman status
Protocol version: 5.0.1
Config version: 30
Cluster name: SCN
Cluster ID: 544
Cluster Member: Yes
Membership state: Cluster-Member
Nodes: 2
Expected_votes: 1
Total_votes: 2
Quorum: 1   
Active subsystems: 8
Node name: smsdb01.scn.com
Node ID: 1
Node addresses: 10.10.10.201
#service rgmanager status
clurgmgrd (pid 3305 3304) is running...
#service fenced status
fenced (pid 2908) is running...
#service clvmd status
clvmd (pid 2920) is running...
active volumes: oracle
#service gfs status
Active GFS mountpoints:
/usr/local/oracle10g/oracle10g_db

(4)、用cluster的gui工具Cluster Management配置cluster
A、        啟動root用戶的vnc服務,遠程桌面連接伺服器1
# ps -ef |grep vnc
root     26603 26047  0 12:50 pts/1    00:00:00 grep vnc
# vncserver :1
New 'smsdb01.scn.com:1 (root)' desktop is smsdb01.scn.com:1
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/smsdb01.scn.com:1.log

B、        打開Appications – system settings – Server settings – Cluster Management


建立一個集群,名字SCN
添加2個cluster node ,名字分別為smsdb01.scn.com和smsdb02.scn.com;
添加1個Failover Domains,名字是smsdbHP,將smsdb01.scn.com和smsdb02.scn.com兩個node加到smsdbHP域中,並設置smsdb01.scn.com優先順序為1,smsdb02.scn.com優先順序為2(數字越小優先順序別越高);
Resource:增加1個resource資源:
         IP Address:192.168.16.203
添加一個Service,名字是oracle,在Service Management中,選擇Failover Domains是smsdbHP,並點擊Add a Shared Resource to this Service,將Resource資源記錄IP添加進來.

回到主界面,點擊File ¬– Save,將配置保存為/etc/cluster/cluster.conf,然後點Send to cluster把配置文件同步到第2台伺服器

(5)、重新啟動與cluster、GFS、clvmd相關的服務
在兩台伺服器上分別執行
# service ccsd restart
# service cman restart
# service rgmanager start
# service fenced restart
# service clvmd restart
# service gfs restart

(6)、Cluster的虛IP測試
根據cluster的配置,正常狀態下,伺服器1,即192.168.16.201是活躍狀態,伺服器2,即192.168.16.202是備用狀態,這在Cluster Management的GUI的工具中是可以看到的;
ssh以root用戶登陸192.168.16.201,將伺服器1執行init 6重新啟動,在這個過程中,觀察Cluster Management里的State,會發現伺服器2成為活躍主機,而伺服器1顯示dead;隨著伺服器1啟動完畢,伺服器1將接替伺服器2成為活躍狀態,伺服器2又將成為備用狀態;
在整個測試過程中,在筆記本上cmd命令行,連續ping虛IP地址192.168.16.203,應該是一直成功的.2


Ⅹ、Cluster + Oracle10g聯合測試
(1)、將oracle的三個腳本oracle、dbstart、dbshut通過ssh客戶端的FTP功能,分別上傳到兩台伺服器的/home/oracle目錄;
(2)、在兩台伺服器上執行以下命令,修改文件屬主以及增加任意用戶的可執行許可權
# cd /home/oracle/
# chown oracle:oninstall oracle dbstart dbshut
#chmod a+x oracle dbstart dbshut
(3)、手工關閉oracle資料庫及監聽程序
先在伺服器1上以oracle身份執行
    #su - oracle
$./dbstart
$./dbshut
應該可以正常啟動及關閉oracle資料庫和oracle的監聽程序
    之後在伺服器2上執行
#su - oracle
$./dbstart
$./dbshut
有可能報錯,原因可能是oracle在關閉狀態,而監聽程序在啟動狀態;
我們只需要手工方式確保伺服器2的oracle服務以及監聽服務關閉即可,具體方法可看一下dbshut腳本的內容
關閉監聽程序命令
$lsnrctl stop
關閉oracle服務的命令
$sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Thu Jul 17 11:35:11 2008
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
SQL>connect / as sysdba
Connected.
SQL> shutdown immediate
或者SQL> shutdown abort (謹慎使用)

(4)、啟動root用戶的vnc服務,遠程桌面連接伺服器1
# ps -ef |grep vnc
root     26603 26047  0 12:50 pts/1    00:00:00 grep vnc
# vncserver
New 'smsdb01.scn.com:1 (root)' desktop is smsdb01.scn.com:1
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/smsdb01.scn.com:1.log

(5)、設置Cluster Management,增加資源記錄
打開Appications – system settings – Server settings – Cluster Management
在已有的配置中的Resource:
增加2個resource資源,分別是:
GFS:名字是gfs_disk,Mount Point是/usr/local/oracle10g/oracle10g_db,Device是/dev/mapper/oracle10g-oracle,把Force Unmount點上
Script:名字是oracle_script_ha,文件路徑在/home/oracle/oracle

在名字為oracle的Service中的Service Management中,選擇Failover Domains為smsdbHP,並點擊Add a Shared Resource to this Service,將剛添加的Resource資源記錄GFS和oracle腳本添加進來.

回到Cluster Management主界面,點擊File ¬– Save,將配置保存為/etc/cluster/cluster.conf,然後點Send to cluster把配置文件發送到第2台伺服器.

(6)、重新啟動cluster的相關服務
在兩台伺服器上分別執行以下命令
# service ccsd restart
# service cman restart
# service rgmanager start
# service fenced restart
# service clvmd restart
# service gfs restart
重新啟動與cluster相關的服務,此時可以進行oracle服務的Cluster的測試(伺服器1的優先順序為1,高於伺服器2的優先順序2),例如:
1、撥掉cluster里活躍(active)主機 (伺服器1)的網線, 觀察cluster中備用(standby)主機(伺服器2)是否接替了活躍(active)主機(伺服器1)的工作;
2、重新啟動活躍(active)主機(伺服器1),觀察cluster中,備用(standby)主機(伺服器2)是否接替了活躍(active)主機(伺服器1),當原活躍(active)主機(伺服器1)重新啟動完畢,觀察原活躍(active)主機(伺服器1)是否重新接替了備用(standby)主機(伺服器2),成為活躍狀態.
3、以上測試過程中可在筆記本電腦上
用ping虛IP來驗證集群虛IP是否正常;
客戶端ssh連接虛IP來驗證集群虛IP是否正常,且哪台伺服器是active狀態;
可通過PL/SQL地址是虛IP的連接,測試oracle,來驗證集群服務的oracle是否正常,再用實際IP地址連接測試,判斷cluster狀態.
  
排錯命令:
#tail -f /var/log/messages
#dmesg

八、問題遺留
(1)、關於自動mount磁碟陣列庫
本次項目實施過程中,遇到一個關於自動mount GFS格式的共享磁碟陣列庫空間的問題。按照redhat工程師的說法,有三種解決方式,分別是:
A:在Cluster Management配置過程中,將GFS格式化的共享磁碟以Resource(資源)的方式加入進來;
B:修改/etc/fstab,添加一句:
/dev/mapper/oracle10g-oracle /usr/local/oracle10g/oracle10g_db default 0 0
C:寫一個簡單腳本,給以root的可執行許可權,內容如 :
#!/bin/bash
mount -t gfs /dev/oracle10g/oracle /usr/local/oracle10g/oracle10g_db
將文件放在/usr/local/oracle10g/目錄下,然後在/etc/rc.d/rc.local文件中加上此句。
上述三種方法,redhat工程師建議使用第一或第二種,本次項目中,經過試驗有一個現象,2台伺服器重新啟動后,只有第一台伺服器成功自動mount,而第2台伺服器則沒有實現自動mount.

(2)、關於fence問題
本次項目中使用的HP伺服器,內置了ilo的fence設備.我們在重新啟動伺服器時按F8進入BIOS,設置了ilo卡的IP地址(192.168.0.1與2)、用戶名與密碼(redhat/123456789),並將ILO卡連接至交換機,且將心跳網卡的IP地址與之同段相通,修改hosts文件后,此時,在Cluster Management里將有關fence項加入,試圖使用ilo卡來接替網卡心跳線工作,cluster啟動失敗;使用如下命令檢測ilo卡,也返回超時失敗消息:
#fence_ilo -a 192.168.0.1 -l redhat -p 123456789 -o status
原因暫時不明,fence設備暫時未使用.

*****視頻事業部
系統工程師 任** 2008-07-21
《解決方案》

好文,收藏先。。。。
《解決方案》

1,沒有rac不用gfs也可以啊。
2,沒有fence也敢生產環境用?
3,oracle不歸檔?沒有備份方案?
《解決方案》

回復 #3 jiecho 的帖子

1,沒有rac不用gfs也可以啊。
2,沒有fence也敢生產環境用?
3,oracle不歸檔?沒有備份方案?

--------------------
1、不用GFS,理論上可以我知道,但有可能因為兩台伺服器調試cluster過程中、建立資料庫時,操作不當把oracle數據損壞
2、有fence,現在不是沒調出來么?所以請教(客戶知道這件事,說好以後慢慢解決,暫時用網卡接網線做心跳)
3、我的此次任務是去調cluster。oracle的備份與恢復,由項目經理和ORACLE DBA負責

oracle不歸檔是啥意思我不知道,有需要的地方由DBA去管吧

我去調試HA之前,項目經理把資料庫遷移到一台單機oracle 上,我HA調試完畢,他再把數據遷移回來,備份方案讓DBA來做(DBA在北京)

我、項目經理、DBA是三個人,呵呵

[ 本帖最後由 literr 於 2008-7-29 14:42 編輯 ]

[火星人 ] (續)CLUSTER4.5 + GFS4.5 + Oracle10g HA調試文檔(二)已經有555次圍觀

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