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