Oracle GoldenGate 皇馬第一彈之:要掌握一個工具,必先掌握其原理

    

    掌握和使用一個工具的最好方法,就是先掌握其原理,瞭解其架構,然後才能用起來得心應手,否則用起來,都不知道這一步爲什麼這樣做,不能夠快速定位問題,更別提快速解決問題。


OGG架構及原理:

  Oracle GoldenGate 的原理,是相當簡單的,就是通過抽取源端的redo log或者archive log,然後通過TCP/IP協議,傳送到目標端,然後解析並應用到目標庫上,從而實現源端到目標端的複製。

 

其架構圖如下,下面會詳細解釋其中的進程

wKiom1RaHxKDwQFCAAL3Su1uXr0696.jpg

要想深入瞭解OGG,其官方文檔是個不錯的選擇

下載地址:

http://www.oracle.com/technetwork/middleware/goldengate/documentation/index.html

官方文檔上提供了官方的詳細解釋,這裏就不做翻譯了,我用自己的理解來闡述OGG的架構,如果有什麼不對的地方,還請指出,共同進步。


進程理解:

我把一個OGG實例看作一個足球隊,我的主隊皇馬。


1)Manager進程---中場節拍器(摩德利奇,克羅斯,龍哥[雖然已不在])

   顧名思義,Manager進程就是OGG實例的管理進程,其同時運行在源端和目標端,控制着OGG其他進程的,啓動,重啓,監控,報告錯誤及事件,分配空間等。每個OGG實例需要一個Manager進程。Manager進程就像球場上的中場指揮官,把握着全隊的節奏,組織着球隊的防守和進攻。


2)Extract進程---後防天團(水爺,武僧,卡瓦哈爾,隊寵,金毛)

   extract進程,運行在源端數據庫,負責從源端數據表或者日誌中捕獲數據。根據時間段的不同,extract的作用不同,初始階段,extract直接從源端數據表中抽取數據,已完成數據的初始化,使源端數據和目標端數據相同。同步變化階段,就是extract進程捕獲源端數據庫的變化(dml,ddl),已傳送並應用到目標端。就像後防天團的水爺,武僧,,他們負責處理後場的變化,搶斷球,並將球分給邊後衛或者中場,讓他們來傳送到前場完成助攻【有時候水爺也他媽的直接進攻到前場,就像沒有配置data dump的情況下,extract進程將捕獲的數據直接傳送到target端的remote trail文件裏】。

   checkpoint機制---門神(卡西)

   Extract進程總會有異常終止或者服務器異常宕機或者網絡中段的時候,當重新啓動extract進程後,GG怎麼會知道已經同步了哪些數據還有哪些沒有同步? 這個時候,就需要配置checkpoint,Extract進程利用其內在的checkpoint機制,週期性的檢查並記錄其讀寫的位置,並通常記錄到trail文件裏,在重啓Extract進程後,會讀取trail文件,然後繼續進行同步,防止了數據的損失。就像聖卡西,是球隊的最後保障,在後防天團阻斷冥想的時候,聖卡西站出來維護球隊的尊嚴,力保球門不失,併發起反擊。


3)Data dump進程---中場組織者(莫德里奇,伊斯科)

   dump進程運行在源端,如果源端使用了本地的trail文件,dump進程降trail文件已數據塊的形式,通過TCP/IP協議發送到目標端,通常這也是最保險的方式。當然,如果源端沒有配置trail,extract進程就會直接在抽取完數據後,直接傳遞到目標端。就像軟妹的外腳背和伊斯科的盤帶,他們就是保證球能夠通過中場,把球交到前場那幾位爺腳下。

   Server Collector進程---10號球員(j羅,本澤馬)

   Server Collector進程不需要配置,所以就想透明的,不需要特殊注意,其與運行在目標端,與源端的dump進程互相對應,其任務就是把extract或者dump進程傳遞來的數據塊,重組成trail文件,就是所謂的remote trail文件,即遠程trail文件。j羅嘛,我羅的腦殘粉,拿到球來完成最後一傳是分內的事,爲什麼本澤馬加進來呢,我覺的本澤馬是目前前鋒中最會做球的,甚至是最適合皇馬的。


4)Replicat進程---致命一擊(我羅,大聖)

   Replicat進程,也叫做應用進程,負責讀取目標端trail文件內容,或者extract進程直接傳遞來的內容,將其解析成DML/DDL操作,並應用到目標端數據庫中。就像我羅和大聖,總是球隊進攻的最後一環,將球送進對方球門來完成最後一擊。

   Replicat進程,也有其內部的checkpoint機制,來保證replicate進程重啓後,能夠從上次記錄的位置開始恢復,而無數據損失的風險。

5)GGSCI---教練(安胖)

   GGSCI就是GoldenGate Software Command Unterface的縮寫,GG的命令接口,來完成各種操作,就像安胖,不多說,有問題就吃速效救心丸。



需要注意的地方:

只是整理了一小部分,肯定有漏掉的地方,歡迎補充,也可能有說錯的地方,歡迎糾正。


1: 內存

 a. 併發進程數決定GG內存的大小

 b. 在源端至少需要一個extract和data—pump進程

        目標端至少需要一個replicate進程

        每個GG instance 需要一個manager 進程

        每個GG instance上,GGSCI最多支持300個extract和

    replicate進程,每個extract和replicate進程大概需要25-55M的內存

 c. GG的cache manager 利用cirtual memory來來保證GG的正常運行,所以系統需要保證一定的swap空間

  --通過一下的方法來確定需要swap space 的大小:

1 Start up oneExtract or Replicat.

2 Run GGSCI.

3 View thereport file and find the line PROCESS VM AVAIL FROM OS (min).

4 Round up thevalue to the next full gigabyte if needed. For example, round up 1.76GB to 2GB.

5 Multiplythat value by the number of Extract and Replicat processes that will be running.The result is the maximum amount of swap space that could be required. To determinethe number of processes you will need, consult the configuration chapters in theOracle GoldenGate Windows and UNIX Administrators Guide.

 

2:硬盤空間

 a. GG軟件需要50-150M的空間,根據數據庫和gg版本來定

  b.   每個gg實例的工作目錄之類的 需要大概80M左右的空間

 c. 注意 如果是在集羣上部署OGG 那麼,GG binaries和files需要放在共享存儲上

 d. 有可能data_pump進程死掉,但是extract進程還在不停的抓取數據那麼trails文件就會越來越大,所以至少需要1G的空間來存放trail文件,而且,爲了避免trail文件被幹擾,最好分配獨立的disk或者文件系統來存放trail文件。

       如果trail文件放在target端,那麼就需要根據PURGEOLDEXTRACTS參數來定

 

3:集羣環境

   對於RAC集羣,GG需要安裝在共享設備裏,這樣就可以從任何一個接點啓動,而且當一個接點啓動失敗時,可以從其他節點直接啓動,而不需要配置

 

4:網絡

  a.  GG的端口默認從7840開始

  b. 可以在配置manager進程的時候,通過參數來指定一組端口,以便ogg的需要     

    A range ofports for local Oracle GoldenGate communications: can be the default rangestarting at port     7840 or a customized range of up to 256 other ports.

 

5:系統權限

    就是最好建立一個GG用戶,對gg安裝目錄有讀寫權限,也可以用oracle用戶


6:數據庫配置

  a.如果是oracle 10G ,則必須要在sqlnet.ora中設置 bequeath_detach=true 以使用dequeath_detach

 

7:使用ASM

  如果使用ASM,那麼manager 需要能夠訪問asm 實例


8.環境變量

  a. 在linux32bit系統上運行GG,需要指定LD_LIBRARY_PATH ,其要包含32bit的oracle libraries

 b. 如果是一個instance 那麼可以在系統級別設置oracle_home and oracle_sid

    如果是多個instance 那麼就可以在配置extract和replicate進程的時候通過setenv來指定

    Oracle_home和 oracle_sid

       SETENV (ORACLE_HOME = <path to Oraclehome location>”)

       SETENV (ORACLE_SID = <SID>”)

    多個實例就需要對每個extract replicate進程進行setenv設置

        Setenv 參數  會覆蓋掉系統級別的設置


















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