RAC的原理和日常管理

一、 Oracle RAC原理

ORACLE RAC原理在一個應用環境當中,所有的服務器使用和管理同一個數據庫,目的是爲了分散每一臺服務器的工作量,硬件上至少需要兩臺以上的服務器,而且還需要一個共享存儲設備。同時還需要兩類軟件,一個是集羣軟件,另外一個就是Oracle數據庫中的RAC組件。同時所有服務器上的OS都應該是同一類OS,根據負載均衡的配置策略,當一個客戶端發送請求到某一臺服務的listener後,這臺服務器根據我們的負載均衡策略,會把請求發送給本機的RAC組件處理也可能會發送給另外一臺服務器的RAC組件處理,處理完請求後,RAC會通過集羣軟件來訪問我們的共享存儲設備。

 

邏輯結構上看,每一個參加集羣的節點有一個獨立的instance,這些instance訪問同一個數據庫。節點之間通過集羣軟件的通訊層(communication layer)來進行通訊。同時爲了減少IO的消耗,存在了一個全局緩存服務,因此每一個數據庫的instance,都保留了一份相同的數據庫cache。

 

二、 RAC中的特點是:

 

每一個節點的instance都有自己的SGA

每一個節點的instance都有自己的background process

每一個節點的instance都有自己的redo logs

每一個節點的instance都有自己的undo表空間

所有節點都共享一份datafiles和controlfiles

 

Oracle還提出了一個緩存融合的技術(Cachefusion)

目的有兩個

1.保證緩存的一致性

2.減少共享磁盤IO的消耗

因此在RAC環境中多個節點保留了同一份的DB CACHE

 

緩存融合(Cache fusion)工作原理:

­****************************************

1.其中一個節點會從共享數據庫中讀取一個block到db cache中

2.這個節點會在所有的節點進行交叉db block copy

3.當任何一個節點緩存被修改的時候,就會在節點之間進行緩存修改

4.爲了達到存儲的一致最終修改的結果也會寫到磁盤上

 

三、 ClusterWare組件

*******************

有四種Service

Crsd - 集羣資源服務

Cssd - 集羣同步服務

Evmd - 事件管理服務

oprocd - 節點檢測監控

 

有三類Resource

VIP - 虛擬IP地址(Virtual IP)

OCR - Oracle Cluster Registry(集羣註冊文件),記錄每個節點的相關信息

Voting Disk - Establishes quorum (表決磁盤),仲裁機制用於仲裁多個節點向共享節點同時寫的行爲,這樣做是爲了避免發生衝突。

 

四、 RAC的組件

************

比單實例的產品多提供了額外的進程,用來維護數據庫

LMS - Gobal Cache Service Process 全局緩存服務進程

LMD - Global Enqueue Service Daemon 全局查詢服務守護進程

LMON - Global Enqueue Service Monitor全局查詢服務監視進程

LCK0 - Instance Enqueue Process 實例查詢進程

 

五、 Oracle RAC日常管理

5.1、CRS的管理  (CRS是clusterware提供的一項管理資源的服務)

CRSCTL命令控制着本地節點的CRS服務(Oracleclusterware processes)

停止CRS:

$ crsctl stop crs      root用戶

或者

$ /etc/init.crs stop

或者

$ crs_stop -all

$crs_stop  資源名(ora.ORCL.ORATEST.cs) 停一個資源

*在$ORA_CRS_HOME/bin/下有一些管理的命令,如:CRS_STAT、CRS_START、CRS_STOP等

啓動CRS:

$ crsctl start crs

或者

$ /etc/init.crs start

禁止Clusterware在系統重啓後自動啓動的方法:

$ /etc/init.crs disable

啓動Clusterware在系統重啓後自動啓動的方法:

$ /etc/init.crs enable

查看CRS服務狀態

$ crsctl check crs

 

5.2、OCR的資源管理

OCR的資源,當RAC cluster啓動併成功運行以後,你可以使用crs_stat工具查看ORC的資源

$ crs_stat

或者

$ $ORA_CRS_HOME/bin/crs_stat

通常情況下,所有的資源的狀態都應該是online。另外,OCR每4個小時會備份一次。有一些情況你可以通過恢復OCR的配置文件來恢復出現問題的OCR。

比如使用出現如下情況:

$ crs_stat –t

CRS-0184: Cannot communicate with the CRS daemon.

$ crsctl check boot

Failure 4 at procr_open_key with status 4.

PROC-4: The cluster registry key to be operated on does not exist.

$ crsctl check crs

Failure 1 contacting CSS daemon

Cannot communicate with CRS

Cannot communicate with EVM

引起這個錯誤的一種可能原因是OCR配置丟了。這個我們可以利用這些備份來還原以前的配置。

# /etc/init.crs disable

# /etc/init.crs stop

先保證所有的crs進程全部停止

# su – oracle

$ cd $ORA_CRS_HOME/bin

$ ./ocrconfig –restore /opt/app/oracle/crs/cdata/crs/week.ocr

然後切換到root用戶下,重新enable CRS

# /etc/init.crs enable

最後reboot兩個節點。

 

5.3、SRVCTL 命令介紹

       SRVCTL命令可以控制RAC數據庫中的instance,listener以及services。

       通常SRVCTL在oracle用戶下執行,下面來介紹srvctl命令:

1)、通過SRVCTL命令來start/stop/status所有的實例:

$ srvctl start|stop|status database –d <db_name>

 

2)、start/stop/status指定的實例:

$ srvctl start|stop|status instance –d <db_name> -I <instance_name>

 

3)、列出當前RAC下所有的節點:

$ srvctl config database –d <db_name>

 

4)、start/stop/status所有的nodeapps,比如:VIP,GSD,listener,ONS:

$ srvctl start|stop|status nodeapps –n <node_name>

 

5)、如果使用ASM,srvctl也可以start/stop ASM實例:

$ srvctl start|stop asm –n <node_name> [-i <asm_inst_name>] [-o <oracle_home>]

 

6)、可以獲取所有的環境信息

$ srvctl getenv database –d <db_name> [-i <instance_name>]

 

7)、設置全局環境和變量:

$ srvctl setenv database –d <db_name> -t LANG=en

 

8)、從OCR中刪除已有的數據庫:

$ srvctl remove database –d <db_name>

 

9)、向OCR中添加一個數據庫:

$ srvctl add database –d <db_name> -o <oracle_home> [-m <domain_name>] [-p <spfile>] [-A <name|ip>/netmask] [-r {PRIMARY|PHYSICAL_STANDBY|LOGICAL_STANDBY}] [-s <start_options>]

 

10)、向ORC中添加一個數據庫的實例

$ srvctl add instance –d <db_name> -i <instance_name> n <node1|node2>

 

11)、向OCR中添加一個ASM實例:

$ srvctl add asm –n <node_name> -i <asm_inst_name> -o <oracle_home>

 

12)、添加一個service:

$ srvctl add service –d <db_name> -s <service_name> -r <preferred_list> [-a <available_list>] [-P <TAF_policy>] [-u]

 

13)、修改在其他節點上的service:

$ srvctl modify service –d <db_name> -s <service_name> -l <orig_instance_name> -t <target_instance_name>

 

14)、relocate某個節點的service到其他節點:

$ srvctl relocate service –d <db_name> -s <service_name> -l <orig_instance_name> -t <target_instance_name>

 

 

 

 

 

 

 

 

1、rac狀態檢查:

Application service 狀態應該都爲online

[oracle@node1 ~]$ crs_stat -t

Name           Type           Target    State     Host       

------------------------------------------------------------

ora....SM1.asm application    ONLINE    ONLINE    node1      

ora....E1.lsnr application    ONLINE    ONLINE    node1      

ora.node1.gsd  application    ONLINE    ONLINE    node1      

ora.node1.ons  application    ONLINE    ONLINE    node1      

ora.node1.vip  application    ONLINE    ONLINE    node1      

ora....SM2.asm application    ONLINE    ONLINE    node2      

ora....E2.lsnr application    ONLINE    ONLINE    node2      

ora.node2.gsd  application    ONLINE    ONLINE    node2      

ora.node2.ons  application    ONLINE    ONLINE    node2      

ora.node2.vip  application    ONLINE    ONLINE    node2      

ora.rac.db     application    ONLINE    ONLINE    node1      

ora....c1.inst application    ONLINE    ONLINE    node1      

ora....c2.inst application    ONLINE    ONLINE    node2  

2、查看服務器的RAC DB狀態

[oracle@node1 ~]$ srvctl status database -d rac

Instance rac1 is running on node node1

Instance rac2 is running on node node2

3、查看其中一臺服務器的實例狀態

[oracle@node1 ~]$ srvctl status instance -d rac -i rac1

Instance rac1 is running on node node1

4、特定節點上節點應用程序狀態

[oracle@node1 ~]$ srvctl status nodeapps -n node1

VIP is running on node: node1

GSD is running on node: node1

Listener is running on node: node1

ONS daemon is running on node: node1



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章