Pages

9 Ocak 2011 Pazar

RAC mimarisinde Transparent Application Failover (TAF)

Bu yazı "Oracle 10g RAC mimarisinde gelişmiş yük dengeleme" adlı yazımın devamıdır. TAF(şeffaf uygulama yük devri), OCI sürücüsünün çalışma süresi özelliğidir. Çalıştırdığınız uygulamanın başlangıç bağlantısı düştüğü zaman otomatik olarak servise yeniden bağlanmasını sağlar. Yeniden bağlanırken, işlemlerin geri alınmasına rağmen, o an işlem gören SELECT işleminin çalışmasını opsiyonel olarak kaldığı yerden devam ettirir. TAF iki şekilde yük devreder:

       BASIC metodu ile yeniden bağlantı yük devri süresinde saptanır. Servis tüm düğümlerde başladıktan sonra başlangıç bağlantısı sağlanır. Listener bağlantıyı saplar ve herhangi bir sebepten dolayı bağlantı düşene kadar çalışan uygulama Oracle 10g veritabanına erişir. Çalışan uygulama bir sonraki sefer veritabanına erişmeyi deneyene kadar hata alır. Sonra, OCI sürücüsü aynı servise tekrar bağlanmayı dener, uygulama bir sonraki sefer veritabanına erişmeyi denerken şeffaf olarak yeni oluşturulan bağlantıyı kullanır. TAF, çok hızlı şekilde düşme olaylarını tespit ederek yük devrinde FAN olaylarının alımını etkinleştirebilir.
        PRECONNECT metodu BASIC metodu ile benzerlik gösterir. Tek farkı; PRECONNECT'in gölge bağlantının aynı zamanda yük devrini önceden kestirmek için oluşturduğu başlangıç bağlantısı esnasında olmasıdır. TAF, otomatik olarak oluşturulan ve sürdürülen gölge servisi kullanarak gölge bağlantının her zaman servisinizin en uygun instancelarında oluşturulmasını garanti altına alır.

FAN olmadan temel TAF yapılandırması
TAF kullanmaya başlamadan önce, bağlantılar  esnasında kullanılan bir servis oluşturmanız ve bu servisi başlatmanız tavsiye edilir. Böylece, TAF ve servislerin birbiriyle entagrasyonu kolaylaşır. Eğer bu servis ile beraber BASIC TAF kullanmak isterseniz, servisi oluştururken –P BASIC seçeneğini kullanmalısınız. Servis oluşturulduktan sonra veritabanınzda bu servisi çalıştırın.

FAILOVER_MODE parametresi bağlantı tanımlayıcısının CONNECT_DATA kısmına dahil edilmelidir:

       TYPE yük devir tipini belirtir. SESSION değeri, OCI uygulamasındaki açık cursorların yeniden yürütülmesi gerekse bile sadece kullanıcı oturumunun sunucu tarafında yeniden kimliğinin onaylandığını gösterir. SELECT değeri ise sadece kullanıcı oturumunun sunucu tarafında yeniden kimliğinin doğrulanmadığı, aynı zamanda OCI içindeki açık cursorlarında fetching işlemine devam ettiğini belirtir.
       METHOD=BASIC olarak ayarlanmışsa, yük devri esnasında yeniden bağlanmada kullanılır.
       RETRIES değeri yük devri sonrasında bağlantı denemesi süresinin sayısıdır.
       DELAY değeri, bağlantı denemeleri arasındaki toplam bekleme süresidir.

Not: Eğer TAF kullanılıyorsa listener dosyasında GLOBAL_DBNAME parametresini ayarlamayın.

$ srvctl add service -d RACDB -s SERVICE1 -r RAC1,RAC2  -P BASIC
$ srvctl start service -d RACDB -s SERVICE1

SERVICE1 =
 (DESCRIPTION =(FAILOVER=ON)(LOAD_BALANCE=ON)
  (ADDRESS=(PROTOCOL=TCP)(HOST=rac1-vip)(PORT=1521))
  (ADDRESS=(PROTOCOL=TCP)(HOST=rac2-vip)(PORT=1521))
   (CONNECT_DATA =
      (SERVICE_NAME = SERVICE1)
      (FAILOVER_MODE =
        (TYPE=SESSION)
        (METHOD=BASIC)
        (RETRIES=180)
        (DELAY=5))))

$ srvctl add service -d RACDB -s SERVICE1 -r RAC1,RAC2
$ srvctl start service -d RACDB -s SERVICE1

execute dbms_service.modify_service (  
 service_name => 'SERVICE1' ,
 aq_ha_notifications => true,
 failover_method  => dbms_service.failover_method_basic ,
 failover_type    => dbms_service.failover_type_session ,
 failover_retries => 180, failover_delay => 5,
 clb_goal => dbms_service.clb_goal_long);

SERVICE1 =
 (DESCRIPTION =(FAILOVER=ON)(LOAD_BALANCE=ON)
  (ADDRESS=(PROTOCOL=TCP)(HOST=rac1-vip)(PORT=1521))
  (ADDRESS=(PROTOCOL=TCP)(HOST=rac2-vip)(PORT=1521))
   (CONNECT_DATA = (SERVICE_NAME = SERVICE1)))

TAF Preconnect Configuration
Oracle Clusterware tarafından gölge servisin oluşturulup otomatik yönetilmesi için –P PRECONNECT seçeneği ile servisin belirlenmesi gerekir. Gölge servisi her zaman  <servis_ismi>_PRECONNECT formatı kullanılarak adlandırılır.

Üstteki örnekten ana farklılığı; METHOD değeri PRECONNECT olarak atanır ve BACKUP adı olan ilave bir parametre eklenir. BACKUP parametresi, gölge servisi işaret eden tnsnames.ora dosyasındaki başka bir girişe eklenir.

$ srvctl add service -d RACDB -s SERVICE2 -r RAc1 –a RAC2 -P PRECONNECT
$ srvctl start service -d RACDB -s SERVICE2

SERVICE2 =
 (DESCRIPTION =(FAILOVER=ON)(LOAD_BALANCE=ON)
  (ADDRESS=(PROTOCOL=TCP)(HOST=rac1-vip)(PORT=1521))
  (ADDRESS=(PROTOCOL=TCP)(HOST=rac2-vip)(PORT=1521))
   (CONNECT_DATA = (SERVICE_NAME = SERVICE2)
    (FAILOVER_MODE = (BACKUP=SERVICE2_PRECONNECT)
                (TYPE=SESSION)(METHOD=PRECONNECT))))

SERVICE2_PRECONNECT =
 (DESCRIPTION =(FAILOVER=ON)(LOAD_BALANCE=ON)
  (ADDRESS=(PROTOCOL=TCP)(HOST=rac1-vip)(PORT=1521))
  (ADDRESS=(PROTOCOL=TCP)(HOST=rac2-vip)(PORT=1521))
   (CONNECT_DATA = (SERVICE_NAME = SERVICE2_PRECONNECT)))

0 yorum:

Yorum Gönder