Oracle 11g RAC features
<一,>
oracle 11g r2 RAC提供了以下功能:
Failover的連接配置
有兩種連接方式可以實現數據庫連接的failover1. TAF(Transparent Application Failover)
讓我們看一下官方文檔。TAF讓Oracle Net將一個失效的連接從故障點轉移到另一個監聽上,用戶能使用這個新的連接來繼續未完成的工作,這是一個client端的功能。 TAF可以配置為使用client端的(Transparent Network Substrate)TNS連接字符串來連接,或者使用server端的服務。如果兩種方式同時使用,則使用server端的服務配置。 TAF可以工作在兩種模式下:session failover和select failover。前者在failover時會重建失敗的連接,后者則能夠繼續進程中未完成的查詢(如果failover前一個session正在從一個 游標中獲取數據,則新的session將在相同的snapshot下重新運行select語句,并返回余下的行)。如果failover 時,session執行了DML操作且未提交,則failover后,若不執行rollback回滾而執行新的操作,將會收到一條錯誤信息ORA-25402: transaction must roll back TAF在dataguard中使用,可以自動進行failover 一個典型的使用了TAF的TNS連接串如下: NEWSDB =(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dyora)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)
| failover_mode參數 | 說明 |
| BACKUP | 備用連接的網絡服務名。若使用了preconnect的連接方法,則需要指定這個參數 |
| DELAY | 連接重試的時間間隔(秒)。如果指定了RETRIES參數,若不指定該參數,默認為1秒。若注冊了callback,該參數將被忽略 |
| METHOD | 設置failover方法。basic: failover時才嘗試連接備用實例的監聽;preconnect: 每次連接數據庫時,都會在備用實例上也產生一個連接,以實現更快的切換 |
| RETRIES | failover后,嘗試連接的次數。如果指定了DELAY參數,則RETRIES默認為5次。若注冊了callback,則該參數將被忽略 |
| TYPE | OCI默認提供了3種類型:session: 若用戶連接丟失,將在備用節點上重新創建;select: 除了重建連接外,將繼續從打開的游標中獲取數據,如果采用這種方式,普通select操作也將在客戶端產生開銷;none: 默認值,也可顯示指定來禁用failover功能 |
2. FCF(Fast Connect Failover)
oracle11g提供了FCF方式連接數據庫,它支持JDBC Thin和JDBC OCI驅動;與連接緩存(implicit connection cache)協同工作提供更高的連接性能和高可用;可以在應用代碼中設置,無需另外配置 需要的條件:啟用了隱含連接緩存,FCF需要與JDBC的連接緩存機制共同工作,為應用管理連接以確保高可用;應用使用服務名而非服務標識符來連接數據庫;JDBC運行的節點上配置并啟用了Oracle Notification Service (ONS);JDBC例程運行的java虛擬機必須包含oracle.ons.oraclehome并指向ORACLE_HOME 例子: 配置ONS ods.setONSConfiguration("nodes=racnode1.example.com:4200,racnode2.example.com:4200"); 啟用FCF // declare datasourceods.setUrl(
"jdbc:oracle:oci:@(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=cluster_alias)
(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=service_name)))");
ods.setUser("scott");
ods.setConnectionCachingEnabled(true);
ods.setFastConnectionFailoverEnabled(true):
ctx.bind("myDS",ods);
ds=(OracleDataSource) ctx.lookup("MyDS");
try { ds.getConnection(); // transparently creates and accesses cache
catch (SQLException SE {
}
} 看糊涂了?上面的java代碼包含一個異常處理。工作過程如下: 1. 一個實例宕掉了,在緩存中留下一些過期連接 2. RAC產生一個事件,并將其發送給包含JDBC的java虛擬機 3. JVM中的后臺線程找出所有受到該RAC事件影響的所有連接,通過sql異常(ORA-17008)通知它們關閉連接,并回滾事務 4. 連接接收到sql異常并重新執行失敗的操作 FCF與TAF相比有如下不同: 1. FCF支持應用級別的連接重試,由應用來決定failover時如何處理,是重新執行,還是拋出異常;TAF只能在OCI/NET的層面進行重新連接 2. FCF與連接緩存很好地結合起來,讓連接緩存管理器來管理緩存,失敗的連接在緩存中會自動失效。而TAF在網絡層面做預連接,當一個連接失效,連接緩存不能檢測到 3. FCF基于Oracle RAC事件,可以快速為活躍/閑置的連接檢測到故障 4. FCF通過實例的UP事件實現負載均衡,分配到在線的RAC實例中 oracle建議不要在一個應用中同時使用TAF和FCF <二,> http://blog.sina.com.cn/s/blog_5fe8502601016atb.html <三,>
Grid Infrastructure共享組件
Grid Infrastructure使用兩種類型的共享設備來管理集群資源和節點:OCR(Oracle Cluster Registry)和表決磁盤。Oracle 11.2引入一個新的文件,稱作Oracle Local Registry(OLR),它只允許存放在本地。OCR和OLR
OCR為所有節點所共享,包含了集群資源的所有信息和 Grid Infrastructure需要的操作許可。為了實現共享,OCR需要存放在裸設備、共享塊設備、類似OCFS2的集群文件系統或者ASM上。在Grid Infrastructure中,只有通過升級而來的系統才支持非ASM管理的OCR,如果是新的安裝,你必須使用集群文件系統或者ASM。在RAC10和11.1中,OCR可以有1個鏡像,而到了11.2,則增加到了5個拷貝。
Grid Infrastructure每4個小時自動備份一次OCR,并保留一些備份用以恢復。RAC11.1中引入一個選項來手動備份Cluster Registy,以root用戶運行診斷程序時將執行附加的完整性檢查。Clusterware11.1通過Oracle Universal Installer簡化了Cluster Registry在共享的塊設備上的部署,在此之前,需要手動進行一個移動OCR到塊設備上的過程。當你在Red Hat 4或SLES10上,在RAC11.1中使用裸設備,需要通過udev來手動對裸設備進行配置。Oracle Support中對這個配置過程提供了說明,單路徑和多路徑連接共享存儲的方法有所不同。
在一些罕見的情況中,OCR可能會被毀壞,此時就需要從備份中來還原。根據毀壞的嚴重性,可能從一個鏡像中來還原就足夠了,也可能需要從備份中來還原。只能通過Oracle提供的工具來管理和維護OCR,如果直接對OCR中的內容進行轉儲和修改,造成的配置問題Oracle將不予支持。
Oracle 11.2中引入另一個集群配置文件,叫OLR。這個文件在每個節點的Grid Infrastructure安裝目錄中都有自己單獨的拷貝。OLR存儲了集群啟動初期OHAS使用的重要的安全環境。定位voting盤時需要用到OLR和網格即插即用配置文件,如果它們存儲在ASM中,GPnP 的profile中的discovery相關字符串將被集群同步進程用來尋找它們。在集群軟件啟動的后期,cssd進程將啟動ASM實例來連接OCR文 件。然而,它們的路徑存儲在/etc/ocr.loc文件中,和RAC11.1中一樣。當然,如果voting文件和OCR如果存儲在一個共享的集群文件 系統上,ASM實例不需要也不會啟動,除非其他資源需要使用到ASM。配置Voting Disks
若一個節點在指定時間內(countdown-threshold)無法響應其他節點的心跳請求,這個節點將被踢出集群。 與OCR類似,voting disk和它的鏡像都必須存放在共享存儲上(11.1中支持3個voting disks,11.2中增加到15個)。和OCR一樣,Grid Infrastructure只在升級的系統上支持裸設備,新安裝的只支持集群文件系統或ASM。塊設備和裸設備在Oracle12中將不再支持。 Oracle強烈建議在不同的位置上使用至少3個voting disks。當使用ASM管理voting disks時,你需要注意磁盤組和故障組的冗余級別。注意,voting disk的所有拷貝都在一個磁盤組里面,你不能將voting disks分布在多個磁盤組中。當使用外部冗余的磁盤組,你只能有1個voting disk。使用normal redundancy冗余級別需要至少3個故障組來存儲3個voting disks,high redundancy冗余級別更加靈活,它支持多達5個voting disks。?
使用ASM
ASM是oracle10.1中開始引入的,它是Oracle的物理數據庫結構上的一個支持集群的邏輯卷管理器。可以存儲在ASM中的文件包括控制文件、數據庫文件和在線重做日志(還有spfile和歸檔日志)。直到11g r2,都不能存儲任何類型的操作系統文件
ASM建立在ASM disk、Failure groups、ASM disk groups概念的基礎上的。
幾個ASM disk構成一個ASM disk group。與LVM類似,一個ASM disk就相當于LVM里的一個physical volume。與LVM不同的是,共享一個共同的故障點(例如磁盤控制器)的幾個ASM disk可以組成一個failure group。一個ASM disk group可以用來存儲物理數據庫結構:數據文件、控制文件、redo日志和其他一些文件類型。與linux里的邏輯卷管理器(LVM)相比較,disk group上面沒有再創建邏輯卷,取而代之的是,數據庫中的所有文件進行了邏輯分組放在disk group上的一個目錄里。ASM中不需要文件系統,這也是為何ASM相對傳統的LVM更具性能優勢。
Grid Infrastructure引入了ASM集群文件系統(ACFS),消除了存儲通用用途文件的限制。ASM使用stripe-and-mirror-everything方式來提供最佳性能。
ASM和ACFS的使用不受集群的限制;單實例oracle同樣可以通過它得到很多好處。技術上,Oracle ASM被應用為一種特殊的Oracle實例,它有自己的SGA,但沒有持續的字典。在RAC中,每個集群節點有且只有一個單獨的ASM實例。當啟動的時候,每個實例會通過集群軟件中的初始化參數在Grid Infrastructure檢測到ASM磁盤組資源。每個實例將掛載這些磁盤組。通過賦予正確的權限(ASM11.2中引入了訪問控制列表 (ACLs))數據庫可以訪問它們自己的數據文件。使用ASM需要應用OMF,這意味著不同的數據庫文件管理方式。RDBMS實例中的初始化參數,例如 db_create_file_dest和db_create_online_dest_n,還有db_recovery_file_dest,指定了相 關的文件存儲在哪個磁盤組中。當需要創建一個新的文件時,OMF將以以下格式來創建:+diskGroupName/dbUniqueName/file_type/file_type_tag.file.incarnation 給個例子:+DATA/oradb/datafile/users.293.699134381
ASM允許你執行許多在線操作,在ASM11.1及更高版本中,可以以滾動方式(rolling fashion)進行升級,最小化對數據庫的影響。
ASM在裸分區級別上進行操作;為了降低產品系統的開銷,應該避免使用LVM2邏輯卷。在NFS上ASM同樣是被支持的。但是,代替直接掛載文件管理器給出的目錄,需要用dd工具創建的零填補文件作為ASM卷。使用NFS的時候,你需要和供貨商協商,讓他們提供最佳實踐的文檔。
有特殊需求的環境,比如大于10TB數據量的海量數據庫,可以在磁盤組級別從可定制的盤區(extent)大小上得到好處。一個通用的存儲優化技術包括只使用磁盤邊緣位置,比使用其他位置能提供更高的性能。ASM的智能數據分布允許管理員來定義具備更高速度和帶寬的熱點區域。經常訪問的文件可以放置到這些位置來提高性能。硬盤制造商即將推出扇區大小為4k的硬盤,存儲密度增加,且更快,容量更大。ASM為此做好了準備,它提供了磁盤組的一個屬性,叫sector size,可以設置為512字節或4k。
大部分安裝中,一個典型的工作流程:存儲管理員提供集群的所有節點上用來做ASM disk的存儲;系統管理員為這些新的塊設備創建分區,做多路徑配置,使用ASMlib或udev將這些分區后的塊設備標記為候選磁盤;移交到數據庫小組后,Oracle管理員可以配置ASM disk和ASM磁盤組。這些操作都可以在線完成,不需要重啟服務器。
?
ASM disk
. ASM disk是ASM的基本組成單位。當一塊ASM候補磁盤被添加到磁盤組中時,元數據信息被寫入到它的頭部,使得ASM實例能認出這塊磁盤并掛載到磁盤組中。在存儲陣列中,磁盤故障經常發生。個別磁盤被高強度使用,它們發生故障是很正常的。大多數情況下,磁盤陣列能根據使用的保護級別,通過鏡像磁盤或奇偶校驗信息來恢復發生故障的磁盤數據。 ASM中的磁盤故障不經常發生,因為大多數情況下都是使用經過磁盤陣列保護的LUN。但是,如果當一個ASM保護的磁盤組中的磁盤發生了故障,需要緊急替換故障的磁盤以免它被丟棄。在ASM 11.1中引入一個新的參數叫做磁盤修復時間(disk repair time),使管理員可以修復短暫的磁盤故障,而不需要進行一個全局的調整操作。當一個磁盤被從一個磁盤組中添加或刪除時,會發生重新調整操作,對磁盤組中的成員重新進行條帶。根據ASM磁盤組的大小,這個調整可能會很耗時。若管理員能幸運地在重新調整操作發生之前使故障的ASM磁盤回到磁盤組中,磁盤組將能很快恢復到正常狀態,因為只需要應用有數據改變的區域(dirty region)的日志即可,不需要對整體全新進行調整。 根據存儲后臺的使用,LUN可以通過陣列的RAID級別得到保護,也可以是一個沒有經過保護的存儲的集合(JBOD)。 ************************************************************************************************************************************************************************************************ASMLib和udev ? ASMLib和udev都解決了設備名固定的問題。在linux中,設備的檢測和枚舉的順序并不是固定的。這和在Solaris中不一樣,舉個例子,除非一個磁盤在陣列中從物理上移動了,否則設備名(例如c0t0d1p1)不會改變。沒做多路徑的存儲陣列的重新配置在linux中會有很大的問題:一個設備原先在操作系統中顯示為/dev/sda可能會在重啟后被重新映射為/dev/sdg,僅僅是因為操作系統檢測到它比上一次啟動時晚了一點。基于設備名的裸設備映射注定是要失敗的。 首先看看udev的解決方法。一個SCSI設備的world-wide-ID(WWID)不會發生改變,在udev中利用了這一點制定一個規則,這個規則創建一個映射,它定義設備/dev/raw/raw1總是指向SCSI ID是xxxx的LUN中。udev的主要問題是,它的配置不夠直觀和易用。由于udev不能復制配置,在集群中的每個節點上管理員都需要去維護udev配置。(我們可以使用udevinfo -q path -n /dev/sda1 來查看/dev/sda1對應的udev設備名,該路徑在/sys下) 配置了多路徑的存儲則不會有這個問題,因為另一個軟件層(比如,devicemapper-multipath包)或供貨商指定的軟件會創建一個邏輯設備。 ASMLib提供了另一種方式。ASMLib工具可以在http://oss.oracle.com中免費下載,它使ASM磁盤的管理變得非常簡單。ASMLib由3個RPM包組成:一個內核模塊、實際ASMLib和支持工具。在使用一個LUN作為ASM disk前,你可以使用ASMLib工具通過將元數據信息添加到磁盤頭部來標記它,然后ASMLib就可以識別出這個新的LUN,將其作為添加到ASM disk group的一個可能的候選。重啟的時候,ASMLib將掃描磁盤頭部的信息來識別ASM disk,不管物理設備名在啟動過程中變成了什么。它保證了設備名的穩定性,而且成本非常低。ASMLib是一個內核模塊,在內部分配自己的內存結構,它可以在單路徑和多路徑下配置。 ************************************************************************************************************************************************************************************************
?
ASM Disk Group
ASM磁盤組有三個冗余級別:外部冗余;一般冗余;高度冗余 當創建一個外部冗余的磁盤組時,ASM讓存儲陣列來承擔數據保護的責任,不會做任何的鏡像。它會在磁盤組中的ASM disk間做默認盤區大小為1M的條帶。寫入錯誤會迫使ASM磁盤被卸載。這將產生嚴重的后果,因為該磁盤上的盤區沒有任何可用的拷貝,整個磁盤組都會變得不可用。 在普通冗余級別下,ASM將條帶和鏡像每個盤區,在一個盤區寫入到磁盤中時,會有另一個盤區寫入另一個故障組來提供冗余。在ASM11.2中,單個的文件可以用來做條帶和鏡像;默認做一個雙向的的鏡像。普通冗余可以容忍磁盤組中的一個ASM磁盤發生故障。 高度冗余提供了更高級別的保護,它默認提供條帶和鏡像,創建主盤區的兩個額外的拷貝,可以容忍磁盤組中兩個ASM磁盤的故障。 ?Failure Group
Failure group是一個邏輯的磁盤組,當其中一個組件發生故障,整個磁盤組都將不可用。打個比方,屬于一個SCSI控制器的磁盤組成一個failure group,如果這個控制器發生故障,所有的磁盤都不可用。在normal和high冗余中,ASM使用failure group來存儲數據的鏡像拷貝。如果沒有明確配置,每個ASM disk組成自己的failure group。Normal redundancy磁盤組需要由至少2個failure group來組成,high redundancy磁盤組需要至少3個。然后,建議使用比這個最小值更多的fail group來提供額外的數據保護。 ASM默認從一個ASM disk group中的primary extent中讀取,在一個extended distance集群中,如果primary extent在遠程的存儲陣列上,可能會導致性能問題。ASM 11.1引入了一個首選的鏡像讀取來解決這個問題:每個ASM實例都可以被指定從本地extent的拷貝中讀取,不管它是primary extent還是copied extent。ASM安裝與管理選項
在Oracle 11.1以前,最佳實踐是以單獨地安裝ASM,這提供了可以單獨升級集群軟件和ASM的好處。比如,集群軟件和ASM可以升級到11.1.0.7,而數據庫還保留在原來的版本。這個最佳實踐中,有三個標準的Oracle安裝目錄:集群軟件、ASM、數據庫 如果需要的話,ASM 11.1可以安裝在與安裝RDBMS不同的操作系統用戶下,Oracle對此解釋說,數據庫與存儲管理間的角色獨立是很多站點的通用實踐。 可以通過SQL*Plus、企業管理器(dbconsole)或者DBCA來管理ASM。 在Oracle 11g Release 2中,ASM現在已經是Grid Infrastructure的一部分,不管在單實例還是RAC環境中。一個新的配置助手asmca接受并擴展了11.1的DBCA中提供的功能。ASM也不再可以從RDBMS Oracle home以外的地方啟動。asmca增加了對另一個叫做ASM Cluster File System的ASM新特性的支持。 一個叫SYSASM的新的超級用戶角色的引入使角色分離成為可能,就像Oracle 9i以后的SYSDBA一樣。你可以將SYSASM權限綁定在不同于SYSOPER和SYSDBA用戶的角色中。總結
以上是生活随笔為你收集整理的Oracle 11g RAC features的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 陷阱:C++模块之间的”直接依赖“和”间
- 下一篇: 中国农业银行abc是什么意思