RAC+Dataguard環境中JDBC Failover配置

itpremier發表於2011-06-22

在rac+dataguard的環境中,為了減少應用當機時間及改動,提高業務的可用性,要求jdbc客戶端配置failover。同時為了很好地做應用分割,又不能load balance。

即在第一個例項不行時,去償試第二個例項,兩個例項都不行時,去償試data guard。這樣的目的看起來簡單,其實有些細小的地方值的注意。

下面是一個配置的例子:

jdbc:oracle:thin:@(description=
(ADDRESS_LIST =
(LOAD_BALANCE=OFF)(FAILOVER=ON)
(ADDRESS = (PROTOCOL = TCP)(HOST = x)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = y)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = z)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = aaaa)
(failover_mode=(type=select)(method=basic))
)
)

其中host x和host y是rac的兩個instance的service ip

z是data guard的ip地址。

這種配置在,應用在第一個例項連不上的情況下(包括主機宕掉;監聽宕掉;例項宕掉但監聽不宕掉三種情況)會去償試第二個例項,第二個例項也連不上的情況下會去償試第三個。

這裡有幾點需要注意:

1。為了達到例項宕掉,但監聽不宕的情況下也行,監聽需要全部是動態註冊的,不允許靜態配置的service name。這個理由很明顯。因為動態註冊的話,當instance宕掉後,其service name就會從監聽中消失,此時應用才會去償試第二個IP地址。如果有靜態配置的話,則由於監聽是可以接受客戶端的請求,將不會去償試第二個IP地址,而是報出oracle not available的錯誤。

2.data guard的監聽配置兩個,平時啟著1526埠,用於歸檔日誌的傳輸,當需要切到data guard時,才將1521埠起來。這樣會防止某些情況下,應用連線到data guard上面來。

3.不能設定remote_listener引數,否則會發生監聽層面的load balance。同時在配置中需要將load_balance設為no或false,以防止發生client 層面的load balance。

ref:

http://logzgh.itpub.net/post/3185/291989

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/350519/viewspace-1051468/,如需轉載,請註明出處,否則將追究法律責任。

相關文章