以文本方式查看主題 - 曙海教育集團論壇 (http://www.hufushizhe.com/bbs/index.asp) -- Oracle數(shù)據(jù)庫 (http://www.hufushizhe.com/bbs/list.asp?boardid=65) ---- oracle高可靠性的一些討論和想法 (http://www.hufushizhe.com/bbs/dispbbs.asp?boardid=65&id=2495) |
-- 作者:wangxinxin -- 發(fā)布時間:2010-12-11 10:46:58 -- oracle高可靠性的一些討論和想法 有關(guān)oracle高可靠性的一些討論和想法 http://skyhorse.blogbus.com/logs/2004/03/106569.html 有關(guān)RAC的工作日志: 12月16日到12月23日做RAC的試驗。12月24日把服務(wù)器交給QYC做DataGuard. QYC做完DataGuard試驗之后,1月4日我重新開始做RAC的試驗。 當(dāng)初說是要做XX集團的雙機熱備,因為我應(yīng)用oracle的時間非常短,對oracle并不熟悉,所以我這段時間就搜集了 一些相關(guān)的信息和資料,以供大家參考。 XX集團的應(yīng)用我分析了一下,應(yīng)該是不要求24*7連續(xù)工作的,只要能夠及時恢復(fù)訪問即可,而且數(shù)據(jù)量不是太大 。 而且我原來讓XX方面做了NAT, 我們在這里就可以進行遠(yuǎn)端的控制,控制到XX集團內(nèi)部的Intranet的個別服務(wù)器。 我在網(wǎng)上所能搜到的信息是高可用性解決方案分為4種, 一種是oracle提供的被用方法,Standby (=9i DataGuard) 一種是AR (高級復(fù)制Advanced Replication,在以前版本叫快照snapshot) 一種是oracle 并行服務(wù)器8i的OPS (9i RAC,Real Application Cluster) 一種是第三方HA解決方案 (如Rose HA,故障切換時間是幾分鐘) oracle公司的牛人著的里也是 把這4種方法做為高可用方案的組成。 這幾種方案從原理上來講都很容易理解,但是實際上有相當(dāng)多的細(xì)節(jié)和問題。 另外還有一種是大家都不太熟悉的是oracle 的 failsafe。 failsafe 采用的是SHARE NOTHING結(jié)構(gòu),即采用若干臺服務(wù)器組成集群,共同連接到一個共享磁盤系統(tǒng), 在同一時刻,只有一臺服務(wù)器能夠訪問共享磁盤,能夠?qū)ν馓峁┓⻊?wù).這與第3方HA方案的概念基本一樣。 但是 failsafe系統(tǒng)局限于WINDOWS(winnt,win2k...)平臺,必須配合MSCS(microsoft cluster server). 我在網(wǎng)上找到現(xiàn)成的雙機熱備的文檔 就是講在 oracle8i上如何做standby. 其保證了始終有一臺備用的 數(shù)據(jù)庫能夠在很短時間內(nèi)通過人工,恢復(fù)正常的訪問,并保證數(shù)據(jù)一致。這是不要求24*7連續(xù)工作時所考慮的方 案。 我們所能做試驗的就是前三種方案,因為人手有限,所以就做了9i的DataGuard 和RAC 兩種方案的試驗。 高級復(fù)制據(jù)說lwd在很久以前做過。我打電話問oracle公司,他說AR對數(shù)據(jù)庫的性能影響太大。 高級復(fù)制也分為兩種情況 1.主動/被動策略: node1處于主動模式,數(shù)據(jù)庫可讀寫,node2處于被動模式,數(shù)據(jù)庫只讀。 2.主動/主動策略: node1和node2 都處于主動模式,數(shù)據(jù)庫都可讀寫。這種對數(shù)據(jù)庫的性能影響特別大。 在講述DataGuard和RAC這兩種方案之前,我先補充一點關(guān)于oracle Client 如何能夠不修改本機配置就能 訪問兩臺oracles數(shù)據(jù)庫的方法。 也就是修改本機的tnsname.ora 一個通常的tnsname.ora 如下: RACDB = (DESCRIPTION = (LOAD_BALANCE = off) (failover = on) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 211.68.29.61)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 211.68.29.62)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = racdb) ) ) 在 ADDRESS_LIST 中 寫了兩個地址,client 通過oracle net 在訪問時,如果訪問不通第一個ip,就會訪問第2個 ip. 這個特性是早就有了的。load_balance 特性也是有的。但是在兩臺數(shù)據(jù)庫內(nèi)容不一致的情況下是沒有任何意義的 。 不過,在oracle9i 的官方pdf中,load_balance 特性是不推薦使用的。 RAC 的試驗我昨天已經(jīng)做成了,雖然遇到了一些不大不小的Bug和不穩(wěn)定現(xiàn)象。 環(huán)境是oracle9.2.0.1.0 , 2* RedHatAdvanceServer 2.1 和一個磁盤陣列, 采用的是裸設(shè)備。 RAC 是share everything 模式,兩個數(shù)據(jù)庫實例同時共享同一套數(shù)據(jù)文件,控制文件,日志文件。 客戶端可以同時訪問這兩臺數(shù)據(jù)庫得到的數(shù)據(jù)都是一致的,它的重點是高性能,可擴展性。但是可靠性是不如Data Guard的。 因為首先在物理上是連接在一起的,是沒法容災(zāi)的。 其次,instance1 死掉的話,可能可能影響instance2。 (Oracle 公司的電話支持說的, 以及網(wǎng)上的論壇中有相關(guān)的例子,一個實例down機拖累另一臺不能正常工作, 我在做RAC試驗的時候,也出現(xiàn)了node1 重起,造成node2也重起的個別現(xiàn)象) 當(dāng)然了,與單機的oracle相比,可用性肯定是高的。 另外網(wǎng)上我所能找得到的RAC成功案例(論壇oracle版主之類實施),無一例外都是oracle經(jīng)過認(rèn)證的服務(wù)器硬件和 軟件. 例如HP,DELL PowerEdge服務(wù)器。DELL/EMC fiber-channel storage array 等等。 另外,因為沒有多余交換機,4塊網(wǎng)卡中的進行內(nèi)部通信用的兩塊網(wǎng)卡我采用的是直接級聯(lián) (新聚思公司的oracle支持說這樣不穩(wěn)定,但是為什么不穩(wěn)定也沒有說原因) 有關(guān)共享文件系統(tǒng)的一些問題: 采用裸設(shè)備無法進行日常管理,也沒有辦法進行文件系統(tǒng)級的備份。 開始我第一次在Mandrake8.1的時候,對陣列進行分區(qū),而fdisk在linux下只能分16個分區(qū),我只好采用 lvm(logical volume manager,支持256個)對裸設(shè)備進行管理。后來在dbca創(chuàng)建數(shù)據(jù)庫的最后階段無法創(chuàng)建,只 好作罷。 第二次用RedHat AS2.1,oracle網(wǎng)站新推出了針對ocfs,我將其2003-1-3 更新的有關(guān)ocfs的所有rpm包(只適用 于AS2.1)安裝上,但是卻發(fā)現(xiàn)無法正常加載ocfs module, 我查了好久,估計這與我們所用的世紀(jì)曙光硬件有關(guān) , 采用的AMD雙Athlon MP 1800+ 以及相關(guān)主機硬件,RedHat AS 2.1 無法正常認(rèn)出,從而造成ocfs modules也無法 正常加載,因為ocfs modules與kernel是相關(guān)的。或許換成intel 的雙cpu, 或換成單cpu ,然后重裝系統(tǒng)就可以 解決。 因為rhAS2.1的內(nèi)核不支持 lvm, 需要重新編譯內(nèi)核才能支持,我只好 將磁盤陣列分成2個drive,分別進行了 分區(qū),跳過了fdisk分區(qū)數(shù)量限制,給oracle提供了足夠多的裸分區(qū)。 當(dāng)初做方案時買的vertris 的冷備份軟件(大概10萬元)是只能在oracle停機時通過smb來copy 文件進行備份到磁 帶里的。 而裸設(shè)備是沒有辦法copy 的。 客戶端在tnsname.ora配好address_list后, 當(dāng)nodeA 停機時,是可以不用修改配置訪問到nodeB 的。 但是這也分很多種情況 nodeA down, listenerA down, InstanceA down, InstanceA in indeterminate state, session die等等。 并非每種情況都能實現(xiàn)自動轉(zhuǎn)到node2上。 第三方HA軟件是靠自己的agent軟件檢測模塊按照自己的故障判斷標(biāo)準(zhǔn)進行強制轉(zhuǎn)換的。第一臺肯定不會被訪問到 , 在幾分鐘之后所有的訪問都會訪問到第二臺剛剛起來的數(shù)據(jù)庫上。 oracle 要想實現(xiàn)與第三方HA軟件一樣的功能,只能與microsoft cluster server一起 在windows平臺 上實現(xiàn)failover. 除此之外,oracle本身的幾種High Available 方案是不提供與此類似的自動failover功能的。 RAC提供并行; standby/dataguard提供熱備份服務(wù)器(需要人工維護切換); AR 可以基本實時提供兩臺數(shù)據(jù)一致的數(shù)據(jù)庫,但是數(shù)據(jù)庫性能受影響。而且客戶端能否在各種各樣的情況下都自 動 切換到第二臺數(shù)據(jù)庫上我也不知道。(例如listener running, instance down時無法切換到第二臺) 主數(shù)據(jù)庫發(fā)生災(zāi)難,無法訪問的情況下應(yīng)該是能夠切換的,但是有些情況下,只需要修改 tnsname.ora或者停掉node1的listener即可。 以前曾經(jīng)有人在職成網(wǎng)做過 RoseHA+oracle817+Turbolinux的集成方案, 據(jù)說效果也非常差。我所看到我們這里 的人去職成網(wǎng) 進行維護N多次。(N非常大) 所以在集成方案中如果用到了oracle數(shù)據(jù)庫,就準(zhǔn)備好有人長期進行維護,主數(shù)據(jù)庫 在萬一情況下發(fā)生災(zāi)難,只要有一臺熱的備用數(shù)據(jù)庫能夠在比較短(電話通知之后1天之內(nèi))的時間內(nèi)繼續(xù)投入使用 就達(dá)到了可用性的目的,不至于主數(shù)據(jù)庫損壞,重新進行安裝恢復(fù)占用星期級的時間。 要想達(dá)到failover自動切換,無需人的參予是一種理想化狀態(tài),在unix平臺上無法實現(xiàn),windows平臺上的oracle failover 我不太清楚,應(yīng)該是能實現(xiàn)這個想法的。 standby備用數(shù)據(jù)庫 是在oracle7.x才開始提供的一項功能,到了oracle8i才能提供read only模式, 到了9i 才使日志應(yīng)用等實現(xiàn)了自動化,但是這個自動化不是故障切換自動化,而是只為了實現(xiàn)熱備份數(shù)據(jù)庫的功 能完善而 增加的一些自動化。 歸根到底,oracle公司開發(fā)這么久,還沒有開發(fā)完善這些高可用方案,只是一直處于完善階 段。 RAC的并行提供服務(wù)我從一些oracle技術(shù)支持那里聽來的說法也是最好一臺用來做讀寫,另一臺專門提供只讀操作 的查詢, 不然仍然影響性能。用來做我們這種failover應(yīng)用的倒不多。 很容易理解的一些稍微復(fù)雜的原理,要想在實際中應(yīng)用是需要大量時間的,里面所涉及到的眾多細(xì)節(jié)如日志增量 等等很麻煩。 就連oracle9.0.0.1在linux下的OUI(oracle univesal installer) 安裝程序在它認(rèn)證的linux上運行也是一堆Bug. 也就是它的jre有毛病,所以我當(dāng)初在mandrake8.1上創(chuàng)建數(shù)據(jù)庫出現(xiàn)了問題,無法進行下去。 特定的環(huán)境,特定的問題,很多都是沒有解釋的。這是網(wǎng)上的一個DBA的原話。 網(wǎng)上也有oracle81700升級到81740就出故障的案例。 使用DataGuard(standby) 是不能實現(xiàn)故障的自動切換的,因為據(jù)oracle公司的人說無從判斷究竟算什么樣的故障 才開始進行轉(zhuǎn)移, 這個已經(jīng)超出oracle軟件本身的范圍了。或許可以通過自己編寫程序來按照自己的標(biāo)準(zhǔn)來進行判斷和轉(zhuǎn)移。 但是DataGuard做到了始終有一臺數(shù)據(jù)庫與主數(shù)據(jù)庫保持一致。在加上客戶端的tnsname.ora的addresslist在一定 程度上 是可以實現(xiàn)部分的故障切換的。 備數(shù)據(jù)庫平時只能處于read only或 recovery manage 模式。 read only 不能應(yīng)用主數(shù)據(jù)庫傳來的重作日志,recovery manage 可以進行數(shù)據(jù)恢復(fù),但是不能被客戶端訪問。 備用數(shù)據(jù)庫經(jīng)常處于修復(fù)狀態(tài),因此不能被終端用戶使用,這從管理角度是一種浪費(所以8i開始提供了read only模式)。 我的想法是 1. 主數(shù)據(jù)庫發(fā)生災(zāi)難,被迫關(guān)閉,XX方面打電話通知過來,我們通過遠(yuǎn)程由人工激活備用的數(shù)據(jù)庫即可。也就是 敲幾行sql命令即可。 完全可以寫成腳本,隨便找一個人執(zhí)行一下即可。 2. 備數(shù)據(jù)庫白天處于read only 模式,可供webserver(也就是客戶端)查詢,晚上12點到1點通過cron 運行在recover managed模式, 將白天主數(shù)據(jù)庫的更改應(yīng)用到備數(shù)據(jù)庫上。 3. 通過cron將備數(shù)據(jù)庫白天處于 primary 模式,可讀可寫,晚上通過腳本改回standby模式,并且應(yīng)用主數(shù)據(jù)庫 的更新。 這樣當(dāng)主數(shù)據(jù)庫down機,客戶端會立刻連到第二臺數(shù)據(jù)庫上,同時也能夠進行讀寫。數(shù)據(jù)分歧只有一天,并且達(dá) 到了無人 切換狀態(tài)。 這3種方法,第1種是最好的。 第2種是可行的,是oracle官方認(rèn)可的,有數(shù)據(jù)分歧,和只讀的局限性。 第3種有數(shù)據(jù)分歧并且有或大或小的細(xì)節(jié)問題沒有考慮,只是我的一個臨時想法。 在RAC 和 DataGuard 這兩種方案中, RAC對硬件和操作系統(tǒng)要求都比較高,維護也非常復(fù)雜,我們買的vertas 備份軟件也沒有辦法使用冷備的文件。 對人員的素質(zhì)要求也很高。 隨便舉個例子,RedHat AS 2.1 如果認(rèn)不出SCSI driver,就沒法做了。因為oracle9.2i只能用這個操作系統(tǒng)。 ( webmail沒有用mandrake8.1而是用mandrake8.2就是這個原因) 不確定因素太多。 在做系統(tǒng)集成方案和買硬件時都要仔細(xì)考慮,買什么樣的服務(wù)器,陣列,網(wǎng)卡,幾個交換機,linuxAS21能否裝上 等等。 而不是隨便寫個雙機熱備,買兩個服務(wù)器,一個交換機就行了。 不過這個方案可以用在我們自己的機房里,提供高性能的oracle數(shù)據(jù)庫服務(wù)。(但是需要比較多的時間來準(zhǔn)備和調(diào) 試)。 我現(xiàn)在只能做到把oracle92i裝起來,具體平時的管理還要靠有數(shù)據(jù)庫使用經(jīng)驗的其他同事來做。 安裝文檔我放在附件里了。 |