主機環境:雙節點,浪潮850
操作系統:REDHAT 6.3
內核版本:2.6.32-279.el6.x86_64
ORACLE數據庫版本:11.2.0.3.0
網卡兩塊:bond0,bond0:1 均爲多塊eth網卡捆綁後的網卡
共享存儲連光纖交換機
一 操作系統準備
1 系統軟件包
binutils-2.17.50.0.6
compat-libstdc++-33-3.2.3
compat-libstdc++-33-3.2.3 (32 bit)
elfutils-libelf-0.125
elfutils-libelf-devel-0.125
# gcc-4.1.2
gcc-c++-4.1.2
# glibc-2.5-24
# glibc-common-2.5
# glibc-devel-2.5
# glibc-headers-2.5
ksh-20060214
libaio-0.3.106
libaio-0.3.106 (32 bit)
libaio-devel-0.3.106
libaio-devel-0.3.106 (32 bit)
# libgcc-4.1.2
libstdc++-4.1.2
libstdc++-4.1.2 (32 bit)
libstdc++-devel 4.1.2
make-3.81
numactl-devel-0.9.8.x86_64
sysstat-7.0.2
numactl-devel
unixODBC
unixODBC-devel
安裝gcc軟件時需要上述“#”號後面軟件包按一定順序安裝,否則在安裝GI時(測試完成之後)會
報錯:"error in inroking target 'mkldflags ntcontab.o nnfgt' of makefile ' /u01/app/11.2.0/grid/network/lib/ins-net-client.mk' "
安裝順序如下:
glibc-common-2
kernel-header-2
libgcc-4
glibc-2
libgomp-4
nscd-2
glib-headers-2
glibc-devel-2
mpfr-2.4
ppl-0.
cloop-ppl-0.
cpp-4
gcc-4
報錯時上網查詢,有給出CPP包沒安的解釋,但如果不按順序把GCC按上的話仍然會報次錯誤。
( 配置操作系統參數 )
2 網絡參數
由於不使用DNS,直接在/etc/host
#public
192.168.20.17 lc01 lc01.localdomain
192.168.20.18 lc02 lc02.localdomain
#private
10.10.10.17 lc01-priv lc01-priv.localdomain
10.10.10.18 lc02-priv lc02-priv.localdomain
#virtual
192.168.20.22 lc01-vip lc01-vip.localdomain
192.168.20.21 lc02-vip lc02-vip.localdomain
#scan
192.168.20.19 data-scan
3 修改操作系統內核
在/etc/sysctl.conf文件中添加修改
# 信息隊列的最大值
kernel.msgmnb = 65536
# 一條信息的最大值
kernel.msgmax = 65536
# 用於定義單個共享內存的最大值,應能在一個共享內存段下容納下整個SGA,設置過低會導致需創建多個共享導致系統性能下降
kernel.shmmax = 687194767360
# 可使用共享內存總頁數,單位 pages,一般爲shmmax/shmmin
kernel.shmall = 167772160
#共享內存段的最大數量,一般爲4096
kernel.shmmni = 4096
#semaphores:semmsl,semmns,semopm,semmni
kernel.sem = 5200 665600 5200 128
#semmsl 信號量集合中能包含的信號量最大數目
#semmns 系統內可許可的信號量最大數目
#semopm 表示單個semopm()調用在一個信號集合上可以執行的操作數量
#semmni 表示系統信號量集合總數
#系統許可的文件句柄的最大數,linux系統中可以打開文件的數量
fs.file-max = 6815744
#同時可擁有異步IO請求數目
fs.aio-max-nr = 1048576
#套接字接收緩衝區大小的缺省值
net.core.rmem_default = 262144
#套接字接收緩衝區大小的最大值
net.core.rmem_max = 4194304
#套接字發送緩衝區大小的缺省值
net.core.wmem_default = 262144
#套接字發送緩衝區大小的最大值
net.core.wmem_max = 1048586
#應用程序可使用的ipv4端口範圍
net.ipv4.ip_local_port_range = 9000 65500
修改完後使用/sbin/sysctl -p使參數生效
4 修改/etc/security/limits.conf
加入
#nproc 單個用戶可用最大進程數量,nofile 可打開文件的最大數量
* soft nproc 6000
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536
5 禁用selinux和firewall
在 /etc/selinux/config 文件中把SELINUX=enable改爲SELINUX=disable
service iptables stop
chkconfig iptables off
#如果不按firewall安裝GI時會報錯
6 建立用戶和組
groupadd -g 500 oninstall
groupadd -g 501 dba
groupadd -g 502 oper
useradd -u 600 -g oinstall -G dba,oper oracle
passwd oracle
7 創建文件夾
mkdir -p /u01/app/grid
mkdir -p /u01/app/11.2.0/grid
mkdir -p /u01/app/oracle
chown -R root:dba /u01
chown -R oracle:oinstall /u01/app/oracle
chown -R grid:oinstall /u01/app/grid
chmod -R 755 /U01
8 添加環境變量
su - oracle
在 .bash_profile中
#ORACLE_SETTING
export DIAPLAY=:0.0
TMP=/tmp;export TMP
TMPDIR=$TMP;export TMPDIR
ORACLE_BASE=/u01/app/oracle;export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1;export ORACLE_HOME
ORACLE_SID=db_1;export ORACLE_SID
export ORACLE_UNQNAME=db
ORA_CRS_HOME=$ORACLE_BASE/product/11.2.0/crs;export ORA_CRS_HOME
ORACLE_TERM=xterm;export ORACLE_TERM
PATH=/user/sbin/:$PATH;export PATH
PATH=$ORACLE_HOME/bin:$PATH;export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
export CLASSPATH
su - grid
在.bash_profile
# for oracle
export DISPLAY=:0.0
export TMP=/tmp;
export TMPDIR=$TMP;
export ORACLE_BASE=/u01/app/grid;
export ORACLE_HOME=/u01/app/11.2.0/grid;
export ORACLE_TERM=xterm;
export PATH=/usr/sbin:$PATH;
export PATH=$ORACLE_HOME/bin:$PATH;
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
9 設置ssh互信
設置grid用戶互信
在grid用戶下 mkdir .ssh
chmod 755 .ssh
ssh-keygen -t rsa 在.ssh目錄下生成id_rsa.pub,id_rsa
ssh-keyget -t dsa 在.ssh目錄下生成id_dsa.pub,id_dsa
都在.ssh目錄下
把節點1 的.pub文件全部拷貝到authorized_key文件中,cat id_rsa.pub>>authorized_key,cat id_dsa.pub>>authorized_key;
節點2的.pub文件全部拷貝到authorized_keys文件中, cat id_rsa.pub>>authorized_key,cat id_dsa.pub>>authorized_keys.
把節點1的authorized_key文件拷貝到節點2的.ssh目錄下
scp authorized_key 節點2:.ssh/
在節點2 把authorized_key追加到authorized_keys文件中 cat authorized_key>>authorized_keys,
這時authorized_keys中包含所有節點的公鑰。
把節點2下的authorized_keys拷貝回節點1.ssh目錄下
scp authorized_keys 節點1:.ssh/
這時兩個節點都有全部的公鑰。
測試:ssh 節點1 date;
ssh 節點1-priv date;
ssh 節點1-vip date;
ssh 節點2 date;
ssh 節點2-priv date;
ssh 節點2-vip date;
測試在.ssh目錄下生成known_hosts文件記錄連接的主機信息,第一次連接選擇yes即可。
同樣步驟在oracle用戶下設置互信
二 設置共享存儲
共享存儲是rac集羣能夠實現的關鍵,而網絡上大部分都是用虛擬機環境設置的,在真實環境下設置有點膽戰心驚。
首先請存儲工程師掛載共享存儲
掛在完成後在/dev下發現sd*等文件共70張。
第一個考慮的問題用不用向正常訪問一樣分區,格式化。
因爲要使用ASM,考慮ASM的一個目的是繞過操作系統直接操作存儲,如果格式化了又把磁盤的操作交給操作系統,一旦操作系統出了問題可能會影響讀寫性能,也可能成爲性能瓶頸,最後決定不分區也不格式化直接用裸盤。
這時問題來了,通過redhat6.3的磁盤實用程序查看磁盤時,磁盤都有報警:“Warning:Several paths to this drive has been detected but no corresponding multipath device was found.You OS may be misconfigured.”
與存儲工程師聯繫確認發現,那邊只掛載了10塊盤,而我這邊卻顯示爲70塊這是怎麼回事?
原來存儲工程師在掛在存儲時使用了多路勁技術,這種技術能實現:1 故障的切換和恢復 2 IO流量的負載均衡 3 磁盤虛擬化
測了一下磁盤的IO確實有巨大的提升
那多路徑形成的sd*盤能否直接使用?感覺如果直接使用就可能失去故障切換恢復和IO流量負載均衡的優勢,在掛載ASM磁盤時也不好掛在(70多張盤)。
最後決定使用linux下的多路徑軟件multipath解決
1 安裝multipath
在操作系統光盤目錄下安裝以下軟件
device-mapper-event-libs
device-mapper-multipath
device-mapper-libs
device-mapper-multipath-libs
device-mapperevent
device-mapper-persistent-data
device-mapper
2 加載
查看多路徑狀態 multipath -ll
返回結果有:DM multipath kernel driver not loaded 說明DM模塊沒有加載
初始化DM: modprobe dm-multipath
modprobe dm-round-robin
service multipath start
multipath -v2
這時再通過 multipath -ll 查看
返回 /etc/multipath.conf does not exist 說明多路徑軟件的配置文件還沒有配置
3 配置文件
在/etc下建立文件multipath.conf加入
#默認策略
defaults {
udev_dir /dev #默認使用的目錄
user_friendly_names yes
path_grouping_policy multibus #默認的路徑組策略
failback immediae #故障恢復的模式
no_path_retry fail #在路徑不可用下嘗試失效路徑的次數(不嘗試)
getuid_callout "/sbin/scsi_id -g -u --whitelisted --device=/dev/%n"
#獲得唯一設備號的默認程序,通過唯一設備號把同一個盤識別出來
}
#如果不想讓某些磁盤被多路徑軟件識別出來而是作爲虛擬磁盤使用可以加入
# blacklist { devnode "^sdh"}
#因爲使用多路徑掛載的每次重啓系統後同一塊盤的顯示磁盤會發生變化,這樣如果按名稱來可能出錯,因此按路徑來
#使用multipath -v3 查詢出每塊磁盤的wwid
multipaths {
multipath {
wwid3600507680180870dd0000000000003d0
alias OCR01
}
multipath {
wwid 3600507680180870dd0000000000003d1
alias OCR02
}
multipath {
wwid 3600507680180870dd0000000000003cf
alias OCR03
}
multipath {
wwid 3600507680180870dd0000000000003ce
alias DG01
}
multipath {
wwid 3600507680180870dd0000000000003d7
alias DG02
}
multipath {
wwid 3600507680180870dd0000000000003d6
alias DG03
}
multipath {
wwid 3600507680180870dd0000000000003d5
alias ARCHDG01
}
multipath {
wwid 3600507680180870dd0000000000003d3
alias VOTE01
}
multipath {
wwid 3600507680180870dd0000000000003d4
alias VOTE02
}
multipath {
wwid 3600507680180870dd0000000000003d2
aliasVOTE03
}
}
#這時無論重啓時某塊磁盤在系統中顯示是:/dev/sda,/dev/sdaa,/dev/sdab,
#還是/dev/sda,/dev/sds,/dev/sdj
#在/dev/mapper目錄下都是DG1
4 使配置文件生效
每次修改配置文件都得重啓,或重新加載服務
service multipathd restart/ service multipathd reload
重新配置策略 :multipath -F 清空以前的策略,這時在/dev/mapper下除了control文件外沒有其他文件
multipath -v2 加載新的策略,這時在/dev/mapper下出現 OCR1,OCR2,OCR3等文件
使用設備時直接使用/dev/mapper/OCR1等就可以
5 權限
/dev下默認屬主爲:root,屬組爲 disk
在安裝GI時會顯示不出來磁盤,必須修改磁盤權限
但直接修改 /dev/mapper/OCR1等文件不會生效,該目錄不能修改屬主(可能因爲都是link文件)
但該目錄下的control文件可以修改,chown grid:oinstall /dev/mapper/control
修改完成後在安裝GI時確實能顯示磁盤/dev/mapper/*,但仍有報錯,而且重啓後權限又變回root:disk.
通過multipath -l 查詢
查詢結果處理說明 /dev/mapper/OCR*是由哪幾塊/dev/sd*組成,後面還顯示了這時dm-*,
感覺dm-*爲鏈接文件的真實文件,查找後發現dm-*就在/dev下
修改權限 chown grid:oinstall /dev/dm-*
修改後 GI運行沒有報關於ASM存儲的錯誤
三 安裝GI
1 解壓
將軟件包p10404530_112030_Linux-x86-64_3of7.zip解壓到節點rac01.
# unzip p10404530_112030_Linux-x86-64_3of7.zip
2 安裝cvuadisk包
在Grid的安裝包grid/rpm/cvuqdisk-1.0.9-1.rpm,以root用戶安裝
# export CVUQDISK_GRP=oinstall
# rpm -ivh cvuqdisk-1.0.9-1.rpm
3 以grid用戶在grid目錄下執行./runInstall名令
export LANG=C #這種語言變量,否則在出現的圖形界面爲亂碼
./runInstall
如果使用./runInstall 出現錯誤:"無法使用命令 /usr/bin/xdpyinfo自動檢查顯示器顏色,是否設置DISPLAY"
解決辦法:1 在root用戶下執行:xhost +
返回信息爲:"access control disabled,clients can connect from any host"
2 在 grid 用下,export DISPLAY=遠程來源IP:0.0
即可
4 過程
安裝選項: 安裝和配置集羣的網格基礎結構.
安裝類型: 高級安裝
語言: 簡體中文
網格即插即用: 集羣名稱: rac-cluster
SCAN名稱: rac-scan (此名稱應該與/ETC/HOSTS文件中sanip的對應名稱一致)
SCAN端口: 1521
不配置GNS,如果需要自動生成虛擬IP,需配置GNS
GNS子域: racgrid
GNS VIP地址: 192.168.89.91
集羣節點信息: 編輯和添加主機和虛擬IP名稱
主機名 虛擬IP名
rac01 rac01v
rac02 rac02v
點ssh按鈕配置節點ssh互信(需要輸入grid用戶密碼)
注:第一次安裝時肯能是缺少了某些包,出現一個小問題
當進行下一步時,提示錯誤"該主機名(節點-vip)已經被使用" 的錯誤,只有在兩個節點的/etc/hosts文件中把vip的信息註釋掉才能通過。如果在這之前註釋掉vip仍然會報錯,得把vip信息加上,再碰到錯誤"該主機名(節點-vip)已經被使用",才能進行下一步。懷疑是某個軟件包(GCC等)沒有安好。安裝好後不會有次怪異的問題。
網絡接口使用情況: 接口名稱 子網 接口類型
PublicNet 192.168.20.0 公共
PrivateNet 10.10.10.0 專用
存儲選項: 自動存儲管理(ASM)
創建ASM磁盤組: 當選擇存儲選項:自動存儲管理(ASM)後,需要創建ASM磁盤.
設置ASM磁盤搜索路徑/dev/mapper/* #這時如果沒有應注意/dev/dm*的權限
設置磁盤組名,使用normal,勾選出現的磁盤
#這時選擇的磁盤作爲OCR和vote盤使用
ASM口令: 設置SYS和ASMSNMP的口令,是用相同口令
故障隔離: 不使用智能平臺管理接口(IPMI).
安裝位置: 設置安裝位置默認:Oracle基目錄/u01/app/grid,軟件位置/u01/app/11.2.0/grid
先決條件檢查: 自動檢查先決條件
/* 第一次檢查時有幾個報錯 1 缺少包 cvuqdisk
(在grid/rpm目錄下安裝即可)
2 device check for asm
(應該是磁盤的順序或權限有問題,順序問題通過綁定wwid解決,權限問題修改/dev/dm*屬主與屬組)
3 NTP failed
NTP服務失敗。因爲兩個節點都沒做NTP服務,時間同步服務器在其他主機上,把/etc/ntp.conf改成/etc/ntp.conf.bak即可。
4 task resolv.conf Intergrity 因爲沒有使用DNS服務器,直接用/etc/hosts,該錯誤可以忽略。
*/
安裝
/* 安裝時報錯
KFOD-070311
ORA-027472
都是因爲共享磁盤權限的問題
OUI-10066
PRCI-1108
PRCI-1003
都是因爲缺少包 libcap
*/
按提示在各節點上以root用戶執行腳本.
/* 執行腳本時一定要先在第一個主機,即運行./runInstall程序的主機上執行,然後再在另一個上執行,否則會導致錯誤。
# /u01/app/oraInventory/orainstRoot.sh
# /u01/app/11.2.0/grid/root.sh
完成
檢查: olsnodes
crsctl check crs (次命令只有root可以執行)
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
crs_stat -t -v
srvctl status listener
重新啓動節點後,如果集羣服務不能啓動.crsctl check crs
需要檢查設備權限的問題,重啓後磁盤設備owner會被修改爲root.
或者沒有設置crs隨系統啓動.
/u01/app/11.2.0/grid/bin/crsctl stop crs # 停止CRS服務
/u01/app/11.2.0/grid/bin/crsctl start crs # 啓動CRS服務
/u01/app/11.2.0/grid/bin/crsctl disable crs # 禁止隨系統啓動
/u01/app/11.2.0/grid/bin/crsctl enable crs # 允許隨系統啓動
/u01/app/11.2.0/grid/bin/crsctl stop cluster -all # 停止所有節點上運行的全部集羣資源
/u01/app/11.2.0/grid/bin/crsctl start cluster -all # 啓動所有節點上運行的全部集羣資源
四 安裝ORACLE軟件
1 將oracle數據庫軟件解壓到節點rac01.
unzip p10404530_112030_Linux-x86-64_1of7.zip
unzip p10404530_112030_Linux-x86-64_2of7.zip
2 以oracle登入系統,運行database下的runInstaller文件
配置安全更新 不需要接收更新
安裝選項 選擇僅安裝數據庫軟件,後續再通過dbca創建數據庫.
網格選項 Real Application Clusters數據庫安裝
節點全選 #如果CRS沒有自動重啓,就看不到節點,重新後得重新runInstall才能看到節點
點按鈕SSH Connectivity.配置oracle下ssh互信.
產品語言 根據需要選擇:英語、簡體中文
數據庫版本 企業版
安裝位置 默認(根據.bash_profile中的全局變量設置)
Oracle基目錄: /u01/app/oracle
軟件位置: /u01/app/oracle/product/11.2.0/db_1
操作系統組 oinstall
先決條件檢查 忽略警告
安裝
按提示在每個節點上執行腳本/u01/app/oracle/product/11.2.0/db_1/root.sh
點OK完成安裝
五 配置ASM
以grid用戶運行asmca.
設置ASM磁盤搜索路徑/dev/mapper/*,出現multipath配置的磁盤
創建磁盤時報錯,因爲每塊磁盤不能超過兩T,需要把超過2T的磁盤進行分區。
分區之後/dev/mapper下不會有變化,只有在fdisk -l 時能看到分區的盤,通過ASM也不會看到。
只有通過 multipath -F 清空多路徑,再 multipath -v2 重新連接多路徑才能看到,這時在ASM裏也能選磁盤的分區了。
六 創建數據庫
以oracle用戶運行dbca.(爲方便管理應該在第一個節點上執行,否則可能會出現sid_1在節點2上運行,sid_2在節點1上運行的情況)
數據庫類型 Oracle Real Application Clusters數據庫
操作 創建數據庫
數據庫模板 一般用途
數據庫標識 設置全局數據庫名和SID前綴,節點全選
管理選項 默認
數據庫身份 設置密碼
數據庫文件位置 存儲類型:自動存儲管理,使用Oracle-Managed files,數據庫區:設置之前創建的磁盤組+DATA
恢復區:+FLASH_AREA
字符集
安裝
出現提示在節點rac02上啓動database control出錯,在節點rac02執行以下命令:
[oracle@rac02 ~]$ export ORACLE_UNQNAME=astt
[oracle@rac02 ~]$ /u01/app/oracle/product/11.2.0/db_1/bin/emctl start dbconsole
點OK安裝完成.
安裝後可能不能連接
如果出現錯誤ORA-12537: TNS:connection closed,可能是權限的問題,執行以下可以解決:
# chown -R oracle:oinstall /u01/app/oracle
# chown -R grid:oinstall /u01/app/grid
# chmod -R 755 /u01/app/oracle
# chmod -R 755 /u01/app/grid
七 測試數據庫
運行sqlplus,以dba權限登錄Oracle系統後執行以下語句查詢集羣節點狀態:
$ ./crs_stat -t -v
$ sqlplus / as sysdba;
SQL> select instance_name,host_name,status from v$instance;
SQL> select instance_name,host_name,status from gv$instance;
$ srvctl stop database -d db -o immediate;
$ srvctl start database -d db;