Oracle9i RAC og Tran sparen t Application Failover (TAF) Ingem ar Jansson Haverstad ingem ar@oraklet.no Version 1.0 20.05.2003
Min e tjen ester Rådgivn in g og tilretteleggin g m ed fokus på Oracle9i: Avansert replikering Distribuerte databaser Datavaruhus Skalerin g / Parallelliserin g Real Ap p lication Cluster
Agen da Tran sparen t Application Failover Oppsett Bruk av Tran sparen t Application Failover Dem o
Tran sparen t Application Failover 4 Tran sparen t Application Failover: A runtim e failover for h igh availability en vironm ents, su ch as Real Ap plication Clusters. TAF refers to the failover and reestablishm en t of ap plication -to-service con nections. It en ables clien t applications to au tom atically recon nect to th e database if th e con nection fails, an d optionally resum e a SELECT statem ent that was in progress. Th is recon nect happens au tom atically from with in th e Oracle Call In terface (OCI) library. Tran sparen t - Adj. gjen n om siktig Tran slucen t - Adj. gjen n om skin n elig Failover Arbeide videre, uten avbrudd... Autom atisk oppkobling
5 Vesen tlige faktorer... Klien t / Server database oppkoblin ger. Brukeren s sessjon er hvor kom m an doer utføres. Åpn e cu rsors som brukes for å hen te data. Aktive tran saksjon er. Program variabler på server-siden.
6 Hvor kan TAF ben yttes? Plan lagte stopp Kon trollert vedlikehold Last balan serin g Klien t aktivitet un der en overtakelse
7 Plan lagte stopp Av og til er det behov for plan lagte stopp. Da er det m ulig å bruke TRANSACTIONAL ved stopp på en in stan s. SHUTDOWN TRANSACTIONAL Stopp blir forsin ket til alle aktive tran saksjon er er avsluttet. SHUTDOWN TRANSACTIONAL LOCAL Forhin drer n ye tran saksjon er på den n e in stan sen. Utfør en direkte stopp etter at alle aktive tran saksjon er er avslu ttet.
8 Lastbalan serin g Last balan serin g er m ulig i både shared og dedikert m odus. Lastbalan serin g for Shared Server: 1) Minst belastet node 2) Minst belastet instans 3) Min st belastet dispatcher for den in stan sen Lastbalan serin g for Dedikert Server: 1) Minst belastet node 2) Minst belastet instans Kan justere for lastbalan serin g m ellom an tallet n oder også. Listen er filer oppdateres autom atisk. 2 n oder -> 3 n oder -> 4 n oder -> 3 n oder
9 Avbrudd ved spørrin g Klienten skjerm es m est m ulig ved avbrudd. Hvis data er tilgjen gelig i buffer cachen på den andre n oden er nedetiden kort. Ved en krasj gjenoppretter de overlevende noden e inform asjonen från den n oden som krasjer. Dette kan m edføre en len gre pause. Kan benytte PRECONNECT for å ha en tilgjengelig forbindelse på den overtagende noden. Gir kortere responstid m en bruker ressurser i forkan t.
10 Avbrudd ved DML DML eller Data Man ipu lation Lan gu age klien ter utfører INSERT, UPDATE og DELETE. Oracle hån dterer en kelte feil og kobler opp klien ten igjen. Klien ten vil oppleve en (kort) hen g fordi de gjen væ ren de n oden e gjen oppretter bekreftede tran saksjon er. Skriver kode i applikasjon en som fortsetter m ed arbeidet på en hen siktsm essig m åte.
11 Restriksjon er PL/SQL pakke statuser m istes ved en overtakelse. ALTER SESSION setn in ger m istes. Aktive tran saksjon er m å rulles tilbake og utføres på n ytt: OCI: OCITran srollback -> suksess -> gjen ta TYPE=SELECT i service som ben yttes, spørrin g fortsetter på overleven de in stan se. Fortsatt arbeide på en cu rsor kan resultere i en feilm eldin g.
12 Oracle Call In terface - OCI Fordi gjen oppkoblin g skjer autom atisk in n en for OCI-biblioteker på klien ten, m å Oracle OCI biblioteker ben yttes. Ben ytt JDBC OCI i stedet for PL/SQL pakker. Kan ikke bruke tyn n JDBC hvis TAF fun ksjon alitet øn skes.
13 Java program eksem pel Eksem pel OCIFailOver.java i $ORACLE_HOM E/jdbc/dem o/sam ples/jdbcoci // TAF callback function public int callbackfn (Connection conn, Object ctxt, int type, int event) {... switch (event) { case FO_BEGIN: System.out.println(ctxt + ": "+ ftype + " failing over..."); break; case FO_END: System.out.println(ctxt + ": failover ended"); break; William Gietz null: SELECT failing over... null: failover error gotten. Sleeping... null: failover ended Steven King
14 Failover param etere Settes i tn sn am es.ora db.us.acme.com= (description= (load_balance=on) /* only connect time load balancing and */ /* connection load balancing */ (failover=on) /* only connect time failover */ (address= (protocol=tcp) (host=db1-server) (port=1521)) (address= (protocol=tcp) (host=db2-server) (port=1521)) (connect_data= (service_name=db.us.acme.com) (failover_mode= (type=select) (method=basic))))
15 FAILOVER_MODE Settes i tn sn am es.ora i CONNECT_DATA delen... (connect_data= (service_name=db.us.acme.com) (failover_mode= (type=select) (method=basic)))) FAILOVER_MODE BACKUP backup-serv er for PRECONNECT TYPE BASIC/SELECT METHOD BASIC/PRECONNECT RETRIES ant all ganger oppkoblings skal prøv es DELAY vent et id i sekunder innen nyt t forsøk
16 Sjekk oppkoblin gen... Bruk tn spin g eller se i n ett-loggen listen er.log $ tnsping TEST TNS Ping Utility for Linux: Version 9.2.0.1.0 - Production on 20-MAY-2003 13:48:14 Used parameter files: /oracle/product/ora920/network/admin/sqlnet.ora Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (FAILOVER = ON) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = tuppen) (PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = TEST.oracle.no) (FAILOVER_MODE = (TYPE = SELECT) (METHOD = BASIC)))) OK (10 msec)
17 Bekreftelsen Tre kolon n er i V$SESSION kan sjekkes: SELECT MACHINE, FAILOVER_TYPE, FAILOVER_METHOD, FAILED_OVER, COUNT(*) FROM V$SESSION GROUP BY MACHINE, FAILOVER_TYPE, FAILOVER_METHOD, FAILED_OVER; MACHINE FAILOVER_TYPE FAILOVER_M FAI COUNT(*) -------------------- ------------- ---------- --- ---------- db1-server NONE NONE NO 11 db2-server SELECT PRECONNECT NO 1 Og etter den sim ulerte krasjen... MACHINE FAILOVER_TYPE FAILOVER_M FAI COUNT(*) -------------------- ------------- ---------- --- ---------- db2-server NONE NONE NO 10 db2-server SELECT PRECONNECT YES 1
Og nå DEMO!