Failover pres JDBC na Oracle SE

Richard Holly rho na interway.sk
Čtvrtek Březen 19 01:10:51 CET 2009


Dobry den,
kedze to co chcete riesit zahrna komplexnejsiu sadu Oracle technologii  
trochu sa rozpisem :) a uvediem toho viac.
Neuviedol ste o ktoru verziu Oracle DB by sa malo jednat, preto uvediem 
informacie aj pre 10GR2 a takisto aj pre 11gR1.

Uvodom vas hned trochu sklamem pretoze ak chcete vyuzivat technologiu 
Oracle Data Guard resp. Active Data Guard vo verzii 11gR1 jedna sa o 
plateny option Enterprise Edicie, co teda inymi slovami znamena ze okrem 
toho ze musite mat zakupenu licenciu enterprise ( a teda aj viac licenci 
pre multi site deployment) tak musite mat tiez zakupeny aj tento option.
http://www.oracle.com/database/product_editions.html

Ak sa teda prenesieme cez tento "detail" a aj napriek tomu sa rozhodnete 
pokracovat v navrhu takehoto riesenia, tak je vhodne pouvazovat co 
skutocne od takehoto riesenia ocakavate, kedze ulohou Data Guard je 
primarne ochranit pred "site failure".   Len pre vysvetlenie, Oracle ma 
viacero technologii pre hi-availability na urovni DB pricom kazda riesi 
nieco ine
RAC (real application cluster ) - Computer (server) Failure
ASM (automatic storage management) -  Storage Failure
Flashback - Human Errors
RMAN, Oracle HARD - Corruption
Data Guard - Site Failure

Ak teda chceme riesit site failure resp. je pre nas lakava moznost 
replikacie DB a pokracujeme dalej, tak je dobre vediet akym sposobom 
planujete vykonavat replikaciu kedze:
Pre 10G mozete mat
Physical standby -  funguje na baze blok-blok replikovania recovey dat 
(vytusil som ze zrejme mate umysel pouzivat tento typ replikacie) 
nevyhodou physical stanby vo tejto verzii DB je ze standby DB je "len" v 
mount rezime, a bez switch overu, resp. failoveru nad nou nedokazete s 
vynimkou recovery resp. read only otvorenia robit nic.
Logical standby - tato replikacia funguje na baze "prehravania" sql dat, 
ktore ziskava logminer z recovery dat, jej havnou nevyhodou je ze 
nedokazete replikovat vsetky datove objekty ale na druhej strane standby 
db je v read only mode, takze uz minimalne reportovanie je mozne robit 
aj na strane standby.

Pre 11G
je physical stanby uz aj na strane standby DB otvorena v read only mode 
takze situacia je lepsia. Predpokladam teda ze by ste sa rozhodol pre 
11gR1 physical standby
viac info.
http://download.oracle.com/docs/cd/B28359_01/server.111/b28294/whatsnew.htm#sthref8

Uvediem este dalsie riziko, ktore moze mat nasledky pri "automatickom 
prepnuti" na strane klienta,  skor nez prejdeme ku klientskej konfiguracii.
Prvou vecou je aky sposob " Data Protecion mode" by ste chcel aby Data 
Guard zabezpecoval, pretoze moze byt
maximum protection - jedna sa o synchronny zapis redo dat  na primarnej 
a aspon na jednej sekundarnej standby DB, v pripade ze sa tak nestane 
tak primarna DB ide dole.  Inymi slovami transakcia moze byt commitnuta 
az vtedy ked su redo data zapisane na oboch stranach (a teda ak mate na 
strane klienta nastaveny "popularny" AUTOCOMMIT=true, nebudete sa stacit 
cudovat co sa (ne)bude diat).
maximum availability - jedna sa o synchronny zapis redo dat  na 
primarnej a aspon na jednej sekundarnej standby DB , V pripade ze 
nedojde k zapisu redo dat vsak DB nezleti dole.
maximum performance - asynchronny zapis, transakcia moze byt commitnuta 
tak skoro ako su data zapisane v lokalnom redo logu. Tu uz vsak ideme do 
rizika ze replikacia sa sprava asynchronne s urcitymi oneskoreniami, 
resp. ak dosledne riesime site failure, tak ideme do rizika ze prideme o 
urcite data.

Podtrhnute a zhrnute, logicky by ste sa teda asi rozhodol kvoli 
performance pre rezim maximum performance, ale pokial by fakt doslo k 
vypadku site, tak sa moze stat ze nebudete mat 100% replikovany stav a v 
tomto pripade failover  ( a nasledne automticke prepnutie middleware) 
nebude transparente. Ale pokial to co s tym planujte robit zrovna nie je 
napr. bankovy system, tak je to mozno pre vas akceptovatelne riziko, na 
druhej strane pri investovani nemalych prostriedkov do vystavby takehoto 
riesenia mi pride fakt ze stratim nejake data, ako nieco co by mi aj 
vadilo bez ohladu co na tom pobezi.

Prichadzame teda k tomu co mozeme urobit na strane klientskej aplikacie.
Riesenie je zastresene viacerymi oracle technologiami, ktore sa daju 
navyse skombinovat, uvediem ich nazvy plus odkazy do dokumentacie a tak 
trochu to tu priblizim (ked uz tu robim take male pr pre Oracle :)

TAF (transparent application failover)
http://download.oracle.com/docs/cd/B28359_01/network.111/b28316/advcfg.htm#i476388
resp.
http://download.oracle.com/docs/cd/B28359_01/network.111/b28316/advcfg.htm#i480772   
(Example: TAF Pre-Establishing a Connection)

tento sposob sa da nakofigurovat ako pre oci tak pre thin jdbc driver.  
Pri oci je vsak zaznam v tnsnames.ora a v jdbc url pouzivame len alias.
Pre vas zamer by potom napr. s vyuzitim oci drivera mal tns zaznam 
vyzerat nasledovne:

sales_alias =
 (DESCRIPTION=
  (ADDRESS=
       (PROTOCOL=tcp)  
       (HOST=sales1-server)  
       (PORT=1521)) 
  (CONNECT_DATA=
     (SERVICE_NAME=sales.us.example.com) 
     (INSTANCE_ROLE=primary) 
     (FAILOVER_MODE=
       (BACKUP=sales2.example.com) 
       (TYPE=select) 
       (METHOD=preconnect))))




Dalsou moznostou nevyuzivajucou primo TAF je tiez nasledovna 
konfiguracia, ktora vsak moze priniest problemy ak primany site je dole 
nie kvoli switchoveru.

sales_alias =
 (DESCRIPTION=
  (ADDRESS_LIST=
    (|SOURCE_ROUTE=on)|
    (LOAD_BALANCE=off)
    (ADDRESS=(PROTOCOL=tcp)(HOST=primary-server)(PORT=1521))
    (ADDRESS=(PROTOCOL=tcp)(HOST=secondary-server)(PORT=1521)))
  (CONNECT_DATA=
    (SERVICE_NAME=sales.us.example.com)))

tie dve options znamenaju podla dokumentacie nasledovne
Use each address in order until destination reached -  SOURCE_ROUTE=on
Use only the first address -  LOAD_BALANCE=off

Vyssie uvedene metody vsak mozu prinest problemy pre middleware v 
priapde pouzivania connection poolov, pretoze po switchoveri zostanu v 
nom nevalidne connecty o ktorych sa dozvieme az ked ich aplikacia 
pouzije (a uvidime spustu exceptions v logoch).
Toto sa da eliminovat pomocou Fast Connection Failover.
http://download.oracle.com/docs/cd/B28359_01/java.111/b31224/fstconfo.htm#CIHJBFFC
Primarne urcenie je hlavne pre RAC ale nevidim technicky problem v tom 
ze by sa to nedalo nasetupovat aj pre Data Guard.
Tu sa vyuziva ONS (oracle notification service), ktory propaguje event 
smerom na jvm kde mame pool spojeni, ktore su nasledne revalidovane.
Mne osobne sa vsak tento sposob zda uz trochu pracny pretoze ons musi 
byt nakonfiguravny a bezat aj na strane middleware, a pokial zrovna 
nepouzivame Oracle IAS (kde to uz je by default aspon nainstalovane) tak 
je to nie je az take easy.

Ak ste nestratili trpezlivost a docitali ste sa az sem,
tak dufam ze som vam aspon trochu pomohol.
Riso.


Lukas Zapletal  wrote / napísal(a):
> Zdravim konferenci,
>
> zajimalo by me, jestli JDBC ovladac pro Oracle (a pokud ano tak ktery) 
> umi fail over na STANDARD EDITION databazi, ktera je replikovana pres 
> redo logy na standby backup instanci.
>
> Tzn. jestli lze do URL napsat neco jako server1;server2 a v pripade ze 
> se server2 stane "master" (administrator to prehodi), tak se JDBC 
> automaticky prepne na novy server.
>
> Samozrejme s nejakym tim vypadkem (stavajici connections spadnou a 
> provede se reconnect), neocekavam od toho, ze by to fungovalo jako 
> RAC. Jde mi o "levne" reseni postavene na standard edicich. Jestli to 
> zkratka lze nejak pomoci JDBC vyresit, nebo to je treba resit v aplikaci.
>
> Diky za rady
>

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://amaio.cz/pipermail/konference/attachments/20090319/db472e26/attachment.htm>
------------- další část ---------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 4902 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://amaio.cz/pipermail/konference/attachments/20090319/db472e26/attachment.bin>


Další informace o konferenci Konference