• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Rac
 

Rac

on

  • 1,759 views

 

Statistics

Views

Total Views
1,759
Views on SlideShare
1,151
Embed Views
608

Actions

Likes
0
Downloads
18
Comments
0

7 Embeds 608

http://www.highload.ru 401
http://archive.highload.ru 110
http://2012.highload.co 48
http://highload.ru 44
http://www.slideshare.net 2
http://2012.highload.ru 2
http://highload.co 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Rac Rac Presentation Transcript

    • Отказоустойчивость приложений в Oracle RAC
      Игорь Мельников, Геннадий Сигалаев
      Oracle Corp.
    • План
      • Transparent Application Failover [TAF]
      • Демонстрация
      • TAF – API для разработчиков
      • Демонстрация
      • Fast Application Notification [FAN]
      • FAN – API для разработчиков
      • Демонстрация
    • Transparent Application Failover
    • Узел A отказал, пользователи
      переключаются
      Node
      A
      Node
      A
      Node
      B
      Node
      B
      • Transparent Application Failover (TAF) обеспечивает защиту от сбоя:
      • Oracle Client автоматически и прозрачно переключает на другой узел
    • Нормальная ситуация
    • TAF
      Потеря текущего узла
    • OLTP =
      (DESCRIPTION=
      (FAILOVER=ON|TRUE|YES)
      (ADDRESS=
      (PROTOCOL=tcp)(HOST=rac1-vip) PORT=1521))
      (PROTOCOL=tcp)(HOST=rac2-vip) PORT=1521))
      (LOAD_BALANCE=yes)
      (CONNECT_DATA=
      (SERVICE_NAME=oltp)
      (FAILOVER_MODE=
      (TYPE=session)
      (METHOD=basic)
      (RETRIES=20)
      (DELAY=3))))
      Oracle Net ожидает 3 сек. перед попыткой нового соединения.
      Oracle Net делает 20 попыток соединения.
      • TAF сохраняет или восстанавливает:
      • Соединение между клиентом и сервером
      • Подготовленные SQL команды
      • Активные курсоры (команда select), начавшие возвращать результат выполнения
      • TAF не сохраняет и не защищает:
      • Активные транзакции
      • Серверные переменные PL/SQL пакетов
      • Приложения не использующие OCI8
      • Состояние сессии пользователя (команды alter session)
      • Для всех незафиксированных транзакций, командыinsert, update и delete
      • Возникает исключение ORA-25402: transaction must roll back
      • Приложение должно явно сделать откат (rollback)
      • Приложение должно повторить транзакцию
      • FAILOVER_TYPE = SELECT
      • Если были только операторы SELECT
      • Для больших запросов, пользователь не заметит сбоя в работе
    • Д е м о н с т р а ц и я
      Transparent Application Failover
      (тип SELECT)
    • rac1
      rac2
      Oracle RAC on OVM
      Oracle VM Server (XEN)
      Oracle Real Application Clusters 11.1.0.7
      Oracle Database 11.1.0.7
      Oracle Clusterware 11.1.0.7
      Enterprise Linux Release 5 Update 4 x86
      Oracle Real Application Clusters 11.1.0.7
      Oracle Database 11.1.0.7
      Oracle Clusterware 11.1.0.7
      Enterprise Linux Release 5 Update 4 x86
      Public Network
      Physical NIC with
      VM bridged protocol
      Interconnect
      Physical Intel
      Dual Core 2 Gz
      OpenFiler
      Voting
      OCR
      PhysicalRAM
      4096Mb
      Database
    • SQL> SELECT * FROM emp where dep_no = :x;
      empno name
      ------- -------
      7369 Smith
      7499 Allen
      7521 Ward
      7566 Jones
      7654 Martin
      7698 Blake
      Экземпляр 1
      • Oracle Client хранит: переменные привязки число прочитанных строк
      • контрольную сумму прочитанных строк
      • SCN начала запроса !
      Oracle Client :
      • посылает запрос на старый SCN
      • “тихо”fetch-ит 3 записи
      • считает контрольную сумму прочитанных строк
      • сравнивает с старой !
      Экземпляр2
      Разрыв соединения
    • Transparent Application Failover
      API для разработчиков
    • Java TAF Callback
      Создаем экземпляробр. вызова
      CallBackfcbk= new CallBack();
      ::
      ((OracleConnection)conn).registerTAFCallback(fcbk, msg);
      ::
      class CallBack implements OracleOCIFailover {
      public intcallbackFn (Connection conn, Object ctxt, int type, int event) {
      ::
      switch (event) {
      case FO_BEGIN:
      Регистрируем его
      Реализуем обратный вызов
      Реагируем на сбой
    • Пример на C# (для .NET-приложений)
      public static FailoverReturnCodeOnFailover(object sender,
      OracleFailoverEventArgseventArgs) {
      switch (eventArgs.FailoverEvent) {
      case FailoverEvent.Begin :
      ::
      case FailoverEvent.End :
      ::
      … … … …
      con.Failover += new OracleFailoverEventHandler(OnFailover);
    • Д е м о н с т р а ц и я
      TAF-Callback для обеспечения непрерывности работы приложения
    • Procedure TTAFDemo.makeTransaction1;
      Begin
      FStepNo := 1;
      FSession.ExecSQLEx('begin :v_xCDR_Id := tafdemo.saveCDR …
      … … … … …
      FSession.Commit;
      End;
      Procedure TTAFDemo.makeTransaction2;
      Begin
      FStepNo := 2;
      FSession.ExecSQLEx('begin tafdemo.billCall(:v_xCDR_Id ) …
      … … … … …
      FSession.Commit;
      End;
    • Обработчик исключения восстанавливает контекст сессии и повторяет сбойную транзакцию
      case FailoverState of
      … … … … …
      fsEnd : Begin
      v_gConsole.WriteLine('Failover End’);
      Raise ETAFException.Create('TAF');
      End;
      … … … … …
      else
      v_gConsole.WriteLine('Bad Failover’);
      end;
      End;
    • Восстанавливаем контекст сессии
      Procedure TTAFDemo.ProcessFailover;
      Begin
      FSession.Rollback;
      FSession.ExecSQLEx('alter session set nls_date_format=''dd.mm.yyyy hh24:mi:ss''',[]);
      FSession.ExecSQLEx('begin tafdemo.init; end;',[]);
      Case FStepNo Of
      1 : Begin
      makeTransaction1;
      makeTransaction2;
      End;
      2 : makeTransaction2;
      End;
      End;
      Повторяем потерянные транзакции
    • Fast Application Notification
    • Что такое FAN
      • Технология для посылки сообщений о состоянии компонентов RAC:
      • Изменение статуса: узла, сервиса, экземпляра, СУБД
      • Событие FAN включает в себя информацию о событии: что изменилось, где и когда
      • Возможность определения FAN-callback на стороне клиента
      • Подписчики получают сообщения FAN через AQ или ONS
      • FAN интегрирован в JDBC, OCI, ODP.Net, Listeners
    • FAN-callback (C# - для .NET-приложений)
      public static void OnFANEventHandler(OracleHAEventArgs eventArgs)
      {
      lock(typeof(FANCallBackSample))
      {
      if (eventArgs.Status == OracleHAEventStatus.Down)
      ... ... ...
      }
      }
      ... ... ...
      OracleDependency.Port = 2009;
      v_xConn.HAEvent += newOracleHAEventHandler(OnFANEventHandler);
    • Д е м о н с т р а ц и я
      Получение FAN-сообщений в .NET
    • Презентация и исходные тексты демо-примеров:
      http://dsvolk.blogspot.com
    • Игорь Мельников, Геннадий Сигалаев
      Oracle Сorp.
      Email:
      Igor.Melnikov@oracle.com
      Gennady.Sigalaev@oracle.com
    • 26