Oracle11g RAC部署文檔node
1、RAC簡介linux
RAC 是 Oracle 數據庫的一個羣集解決方案,是有着兩個或者兩個以上的數據庫節點協調運做能力的。c++
Oracle Real Application Cluster :在服務器集羣上運行,可調整集羣中全部應用程序的工做量,同時還提供如下功能:sql
• 集成式集羣件:其中包括用於進行集羣鏈接、消息傳送和鎖定、集羣控制與恢復的功能。在 Oracle Database 10g 或更高版本支持的全部平臺上都可使用這些功能。數據庫
• 自動工做量管理:能夠定義一些規則,以便在正常操做和對故障做出響應期間將處理資源自動分配給每一個服務。用戶能夠動態地修改這些規則,以知足不斷變化的業務需求。這種在數據庫網格中動態分配資源的功能是 Oracle RAC 特有的功能。緩存
• 向中間層自動發送事件通知:集羣配置發生更改後,中間層能夠當即適應實例故障轉移或可用的新實例。這樣,最終用戶在發生實例故障轉移時可繼續工做,不存在一般由網絡超時引發的延遲。有新實例可用時,中間層能夠當即開始與該實例創建負載平衡鏈接。Oracle Database 10g 或更高版本中的 Java 數據庫鏈接 (JDBC) 驅動程序擁有「快速鏈接故障轉移」功能,該功能能夠自動啓用以處理以上事件。安全
RAC的特色bash
一、集羣內多臺服務器節點(m個)上存在多個實例(n個);服務器
二、一個數據庫(database)文件系統存儲在共享存儲設備上,好比NAS、SAN;網絡
三、實例之間經過內聯網絡及集成式集羣件互相通信、交換數據。
四、每個節點的實例都有本身的SGA、後臺進程、Redo Logs、Undo Tablespace及參數配置文件(也可以使用同一套公共的參數文件)。
RAC的缺陷
RAC並不能解決物理讀寫、數據安全等問題,由於無論多少個實例,數據都是存儲在一個共享存儲設備上。
儘管RAC能夠經過多實例冗餘實現高可用性,但終究脫離不了集中式數據庫的本質,其與分佈式系統相比,硬盤讀寫速度、網絡帶寬及質量仍然是其瓶頸所在。由於它使用一套共享存儲系統,在多實例同時讀寫時,在網絡中傳輸大容量的數據顯然不如傳輸分發的數據處理任務訪問須要的數據分片方便快捷,並且分佈式集羣中大部分任務都是使用局部本地數據庫,訪問速度效率更高。
後臺進程
LMSn 全局緩存服務進程GCS
LMD 全局查詢服務守護進程
LMON 全局查詢服務監視進程
LCK0 實例查詢進程
DIAG 診斷守護進程
服務進程
CRS 集羣資源服務
CSS 集羣同步服務
EVMD 事件管理服務
ONS 事件的發佈及訂閱服務
Cache Fusion機制
前映像 past image
VIP 虛擬IP地址,ORC 集羣註冊文件,Voting Disk 表決磁盤
2、環境說明
Vmware ESXI 5.1
系統:Red Hat Enterprise Linux Server release 6.3
安裝包:linux.x64_11gR2_database_2of2.zip,linux.x64_11gR2_database_1of2.zip,linux.x64_11gR2_grid
硬件:內存至少2G,Swap至少3G
node1 eth0 192.168.24.95 192.168.24.71(VIP) rac1
eth1 10.0.24.1
node2 eth0 192.168.24.96 192.168.24.72(VIP) rac2
eth1 10.0.24.2
兩塊網卡:VMware virtual Ethernet adapter 1 192.168.24網段
VMware virtual Ethernet adapter 2 10.0.24網段
3、vmware中硬盤網絡部署
Vmware存儲器中增長rac文件夾放置共享存儲文件
Rac1
1.添加硬盤。選擇建立新的虛擬磁盤。
2.選擇厚置備置零的置備模式,不然虛機開機會報錯。
3.節點1選擇scsi(1:0),模式-獨立-持久
4.SCSI總線共享選擇虛擬
Rac2
1.添加硬盤,使用節點1的硬盤2文件
2.選擇與節點1相同的SCSI(1:0)
3.SCSI總線共享選擇虛擬,模式-獨立-持久
3.1 IP規劃
Rac1:ifconfig eth0:1 192.168.24.71 netmask 255.255.255.0 up
ifconfig eth1 10.0.24.1 netmask 255.255.255.0 up
Rac2:ifconfig eth0:1 192.168.24.72 netmask 255.255.255.0 up
ifconfig eth1 10.0.24.2 netmask 255.255.255.0 up
刪除IP:ip addr del 192.168.24.72 dev eth0:1
Rac安裝前VIP不須要配置
/etc/hosts
###eth0 public ip
192.168.24.95 rac1
192.168.24.96 rac2
###etc1 private ip
10.0.24.1 rac1-priv
10.0.24.2 rac2-priv
###virtual ip
192.168.24.71 rac1-vip
192.168.24.72 rac2-vip
###scan ip
192.168.24.70 rac-scan
注:scan ip 和virtual ip 無需設置IP,爲空IP
rac1
vi /etc/sysconfig/network
HOSTNAME=rac1
rac2
vi /etc/sysconfig/network
HOSTNAME=rac2
3.2 關閉服務,兩節點操做
chkconfig ip6tables off
chkconfig postfix off
mv /etc/ntp.conf /etc/ntp.confbak
reboot
3.3 軟件包檢查,兩節點操做
rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE}(%{ARCH})\n' binutils \
compat-libstdc++-33 \
elfutils-libelf- \
elfutils-libelf-devel \
gcc \
gcc-c++ \
glibc \
glibc-common \
glibc-devel \
glibc-devel \
glibc-headers \
ksh \
libaio \
libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
make \
numactl-devel \
sysstat
3.4 安裝not installed,兩節點操做
yum install -y compat-libstdc++-33 elfutils-libelf-devel gcc gcc-c++ glibc-devel glibc-headers ksh libaio-devel libstdc++-devel numactl-devel compat-libcap1
3.5 建立用戶,組,兩節點操做
groupadd oinstall
groupadd dba
groupadd oper
groupadd asmadmin
groupadd asmdba
groupadd asmoper
useradd -g oinstall -G dba,asmdba,asmadmin,asmoper grid
useradd -g oinstall -G dba,oper,asmdba oracle
echo -n oracle|passwd --stdin grid
echo -n oracle|passwd --stdin oracle
3.6 建立軟件安裝目錄並賦予權限,兩節點操做
目錄規劃:
Oracle Base 目錄 :/oracle/db
Grid Base 目錄:/oracle/grid
Grid Home 目錄:/oracle/asm
建立目錄
mkdir -p /oracle
mkdir -p /oracle/db
mkdir -p /oracle/grid
mkdir -p /oracle/asm
賦予權限
chown -R grid.dba /oracle
chown -R grid.dba /oracle/asm
chown -R grid.dba /oracle/grid
chown -R oracle.dba /oracle/db
chmod -R 775 /oracle
3.7 修改系統內核參數,兩節點操做
3.7.1 編輯/etc/sysctl.conf文件中加入下列參數
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 5368709120
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
sysctl -p 運行使其生效
3.7.2 設置Shell Limits(系統資源限制)
在/etc/security/limits.conf文件中加入下面行
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
grid soft stack 10240
3.7.3 修改安全限制
編輯/etc/pam.d/login文件,添加下列行
session required pam_limits.so
3.7.4 修改/etc/profile
添加下列爲文件
if [ $USER = "oracle" ] || [ $USER = "grid" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
# source /etc/profile 運行使其生效
4、修改用戶環境變量
4.1 Grid 用戶
修改rac1環境變量
# su - grid
$ vi .bash_profile
export ORACLE_BASE=/oracle/grid
export ORACLE_HOME=/oracle/asm
export ORACLE_SID=+ASM1
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin:$PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
export CLASSPATH
$ source .bash_profile 使其生效
修改rac2環境變量
# su - grid
$ vi .bash_profile
export ORACLE_BASE=/oracle/grid
export ORACLE_HOME=/oracle/asm
export ORACLE_SID=+ASM2
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin:$PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
export CLASSPATH
$ source .bash_profile 使其生效
4.2 Oracle 用戶
修改rac1環境變量
# su - oracle
$ vi .bash_profile
export ORACLE_BASE=/oracle/db
export ORACLE_HOME=$ORACLE_BASE/product/11.2
export ORACLE_SID=racdb1
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin:$PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
export CLASSPATH
$ source .bash_profile 使其生效
修改rac2環境變量
# su - oracle
$ vi .bash_profile
export ORACLE_BASE=/oracle/db
export ORACLE_HOME=$ORACLE_BASE/product/11.2
export ORACLE_SID=racdb2
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin:$PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
export CLASSPATH
$ source .bash_profile 使其生效
5、配置互信
5.1 Grid用戶互信配置
Rac1
[root@rac1 ~]# su – grid
[grid@rac1 ~]$ ssh-keygen -t rsa
[grid@rac1 ~]$ ssh-keygen -t dsa
Rac2
[root@rac2 ~]# su – grid
[grid@rac2 ~]$ ssh-keygen -t rsa
[grid@rac1 ~]$ ssh-keygen -t dsa
Rac1
[grid@rac1 ~]$ cat ~/.ssh/*.pub >> ~/.ssh/authorized_keys
[grid@rac1 ~]$ ssh grid@rac2 cat ~/.ssh/*.pub >> ~/.ssh/authorized_keys
Rac2
[grid@rac2 ~]$ cat ~/.ssh/*.pub >> ~/.ssh/authorized_keys
[grid@rac2 ~]$ ssh grid@rac1 cat ~/.ssh/*.pub >>~/.ssh/authorized_keys
檢驗 在rac一、rac2同時執行如下操做
$ssh rac1 date
$ssh rac1-priv date
$ssh rac2 date
$ssh rac2-priv date
5.2 oracle用戶互信配置
Rac1
[root@rac1 ~]# su - oracle
[oracle@rac1 ~]$ ssh-keygen -t rsa
[oracle@rac1 ~]$ ssh-keygen -t dsa
Rac2
[root@rac2 ~]# su - oracle
[oracle@rac2 ~]$ ssh-keygen -t rsa
[oracle@rac2 ~]$ ssh-keygen -t dsa
Rac1
[oracle@rac1 ~]$ cat ~/.ssh/*.pub >> ~/.ssh/authorized_keys
[oracle@rac1 ~]$ ssh oracle@rac2 cat ~/.ssh/*.pub >>~/.ssh/authorized_keys
Rac2
[oracle@rac2 ~]$ cat ~/.ssh/*.pub >> ~/.ssh/authorized_keys
[oracle@rac2 ~]$ ssh oracle@rac1 cat ~/.ssh/*.pub >>~/.ssh/authorized_keys
檢驗在rac一、rac2同時執行如下操做
$ssh rac1 date
$ssh rac1-priv date
$ssh rac2 date
$ssh rac2-priv date
6、建立共享磁盤
確保兩臺機器均是如下狀態,打開虛擬機進行磁盤的格式化等操做
查看兩個節點中服務器識別狀態
[root@rac1 ~]# fdisk /dev/sdb
[root@rac1 ~]# fdisk -l /dev/sdb
[root@rac1 ~]# partprobe /dev/sdb
Rac2
[root@rac2 ~]# fdisk -l /dev/sdb
兩個節點均要操做
映射到裸設備
修改/etc/udev/rules.d/60-raw.rules文件,添加如下內容
ACTION=="add",KERNEL=="sdb1",RUN+="/bin/raw /dev/raw/raw1 %N"
KERNEL=="raw*",OWNER="grid",GROUP="dba",MODE="660"
兩個節點均要操做
[root@rac1 ~]# partprobe
[root@rac1 ~]# start_udev
[root@rac1 ~]# ls -l /dev/raw/
7、介質上傳
[root@rac1 ~]# mkdir /soft
[root@rac1 ~]# mv grid /soft
[root@rac1 ~]# chown -R grid.dba /soft/
使用grid用戶上傳
cluster安裝
[root@rac1 ~]# cd /soft/grid/rpm
[root@rac1 rpm]# rpm -ivh cvuqdisk-1.0.7-1.rpm
[root@rac1 rpm]# scp cvuqdisk-1.0.7-1.rpm rac2:/tmp
[root@rac2 ~]# rpm -ivh /tmp/cvuqdisk-1.0.7-1.rpm
[grid@rac1 grid]$ ./runInstaller
7.1 選擇要安裝的軟件類型
選擇Install and Configure GridInfrastructure for a Cluster,點擊「Next」
7.2 選擇安裝類型
選擇Advanced Installation,點擊「Next」
7.3 選擇產品語言
添加簡體中文,Simplified Chinese,點擊「Next」
7.4 設置集羣名稱和scan名字
7.5 配置集羣節點信息
添加節點2的信息,名字和虛擬ip都是在hosts中配置的
此處就不須要再配置ssh互信了,以前已經作過配置,若是前面沒有配置,此處能夠進行配置,10G以前沒有此選項
7.6 配置網絡接口
查看是否正常
7.7 指定OCR和vote的存儲位置
7.8 定義DG名字,選擇所存儲的盤
7.9 指定asm的密碼
可能會提示密碼強度不夠,點擊yes便可,next
7.10 系統組設置選擇用戶組
選擇dba組,出現提示,忽略便可
7.11指定安裝目錄
查看是不是環境變量中設置的路徑
7.12 創建產品清單目錄
7.13安裝前檢查,勾選如下警告
不影響安裝,點擊next
7.14 整體信息檢查
檢查相關配置信息是否正確
7.15 執行配置腳本
使用root用戶執行如下兩個腳本
Rac1
/oracle/oraInventory/orainstRoot.sh
Rac2
/oracle/oraInventory/orainstRoot.sh
Rac1
/oracle/asm/root.sh
Rac2
/oracle/asm/root.sh
報錯
11.2.0.1 BUG
監控/var/tmp/.oracle/npohasd,有內容時運行
/bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1消除BUG
碰到問題回滾
/oracle/asm/crs/install/rootcrs.pl -deconfig -verbose -force
7.16 安裝完成
碰見如下錯誤,是正常的,是由於在hosts文件中存在有scan ip,只要兩個節點能夠ping同scan的ip便可
安裝完成,查看集羣狀態
crs_stat -t
8、安裝數據庫軟件
rdbms的安裝
[oracle@rac1 ~]$ cd database/
[oracle@rac1 database]$ ./runInstaller
8.1 選擇安裝類型
8.2 安裝選項選擇
選擇Oracle Real Application Clusters database installation
8.3 選擇產品語言
8.4 選擇安裝數據庫類型,選擇企業版
8.5 安裝目錄選擇
查看是否和oracle用戶環境變量中配置的相同
8.6 設置系統組
均選擇dba組
8.7 安裝前檢查
8.8 執行配置腳本
安裝完成
[root@rac2 ~]#/oracle/oraInventory/orainstRoot.sh
[root@rac1 ~]#/oracle/db/product/11.2/root.sh
[root@rac2 ~]#/oracle/db/product/11.2/root.sh
9、數據庫建立
9.1 使用oracle用戶建立數據庫
[oracle@rac1 ~]$ dbca
9.2建立一個數據庫
9.3自定義數據庫
9.4指定數據庫名和實例名
9.5選擇不安裝EM
9.6設置數據庫管理密碼
可能會提示強度不夠,忽略便可
9.7選擇數據文件存儲方式
9.8不指定閃回區
9.9選擇數據庫組件,根據須要選擇
9.10配置數據庫相關參數
9.11字符集選擇
9.12數據庫文件定義
9.13正式安裝
9.14完成安裝
9.15檢查集羣狀態
[grid@rac1 ~]$ crs_stat –t
數據庫鏈接
[oracle@rac1 ~]$ sqlplus system/oracle@racdb
[oracle@rac2 ~]$ sqlplus system/oracle@racdb
10、平常管理
RAC全部資源信息
crs_stat –t
show parameter instance
查看RAC環境
列出配置的全部數據庫
srvctl config database
全部實例和服務狀態
srvctl status database -d 實例名
ASM實例狀態
srvctl status asm -n SID名
顯示RAC數據庫配置
srvctl config database -d 實例名
查詢集羣中全部正在運行的實例
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;
select name from v$datafile
union
select member from v$logfile
union
select name from v$controlfile
union
select name from v$tempfile;
11、RAC關閉順序
11.1 關閉數據庫,oracle用戶執行srvctl命令
中止全部節點上的實例
[oracle@node1 ~]$srvctl stop database -d 實例名
查看節點狀態
[oracle@node1 ~]$srvctl status database -d 實例名
SQL>shutdown immediate;
11.2 中止集羣服務,必須以root用戶運行
中止全部節點服務
[root@node1 ~]/oracle/asm/bin/crsctl stop cluster -all
查看節點狀態
[grid@node1 ~]crs_stat -t -v
11.3 中止HAS(High Availability Services),必須以root用戶運行,全部節點都要執行
[root@node1 ~]/oracle/asm/bin/crsctl stop has
12、RAC啓動順序
12.1 啓動HAS(High Availability Services),必須以root用戶 ,全部節點都要執行
[root@node1 ~]/oracle/asm/bin/crsctl start has
查看節點狀態
[grid@node1 ~]crs_stat -t -v
12.2 啓動集羣(cluster)
[root@node1 ~]/oracle/asm/bin/crsctl start cluster -all
12.3 啓動數據庫,oracl用戶執行srvctl命令
[oracle@node1 ~]$ srvctl start database -d 實例名
檢查節點狀態
[grid@node1 ~]crs_stat -t -v
檢查數據庫狀態
[grid@node1 ~]$ srvctl status database -d 實例名
檢查ASM狀態
[grid@node1 ~]$srvctl status asm
故障恢復須要運行/bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1消除BUG