Механизмы отказоустойчивости в кластерах Oracle Real Application Clusters Основная секция
Тезисы
Тезисы:
На этом докладе Вы познакомитесь с методами защиты приложений от сбоя в Oracle Real Application Clusters (RAC) - ключевой технологией Oracle для обеспечения масштабируемости и надежности высоконагруженных промышленных баз данных.
Материал ориентирован, в основном, на разработчиков, но также будет полезен и для DBA.
Сбой узла кластера, или что такое TAF
Сбой узла кластера - это отказ экземпляра Oracle на одном из узлов кластера. Все приложения, которые имели сессии с отказавшим узлом кластера, эти соединения, разумеется, теряют. Клиентское программное обеспечение Oracle Call Interface [OCI] в этом случае обеспечит переключение на один из оставшихся в "живых" узлов. Фактически, библиотеки времени выполнения OCI в этом осуществляют закрытие "мертвой" сессии и открытие новой на одном из оставшихся работоспособных узлов кластера, причем это переключение происходит прозрачно для приложения и не требует дополнительного программирования. Данная функциональность носит название Transparent Application Failover [TAF] и поддерживается, начиная с версий Oracle Client 8.0.6.
Одно из самых распространенных заблуждений относительно Oracle RAC состоит в том, что если в момент сбоя узла кластера приложение имело на нем незавершенную транзакцию, то после прохождения переключения на другой узел транзакция продолжит свое выполнение. К сожалению, это не так!
Рассмотрим ситуацию "падения" узла кластера и выполнения TAF более подробно:
- Приложение имеет соединение с одним из узлов кластера Oracle RAC и начинает выполнение транзакции;
- Несколько операторов транзакции успешно выполнены, но транзакция еще не завершена (НЕ зафиксирована);
- Происходит "падение" узла кластера, с которым приложение имело соединение;
- Клиентское программное обеспечение OCI произвело открытие новой сессии на одном из работоспособных узлов кластера;
- Далее приложение получает новую сессию.
После последнего шага возникает проблема: поскольку все промежуточные операции транзакции потеряны, то выполнение оставшихся операторов транзакции не будет иметь смысла (может привести к непредсказуемым результатам). Помимо этого, не следует забывать, что приложение могло иметь на сервере глобальные переменные пакетов PL/SQL, значения которых в результате сбоя также было потеряно.
Вывод: поскольку контекст выполнения сессии не дублируется на всех узлах кластера (это было бы слишком расточительно), то нормальное выполнение приложения после отработки TAF невозможно.
Для решения этой проблемы разработчики СУБД Oracle предоставили выход в виде специального callback-вызова на клиенте: приложение регистрирует в OCI свою функцию обратного вызова, эта функция будет вызываться в процессе отработки TAF. В этой функции программист может корректно обработать операцию потерю контекста сессии и, возможно, восстановить его.
В ходе презентации будут показаны примеры исходного кода для реализации TAF-callback для языков программироввания C,c#,Java, Delphi (с использованием ODAC). Также будет показана живая демонстрация приложения, которое умеет восстанавливать потерянную транзакцию и повторять ее после переключения на "живой" узел.
Упреждающее оповещение приложений о событиях в кластере, или что такое FAN
Основная проблема при использовании FAN заключается в том, что приложения узнают, что текущая сессия "мертва" только при следующем обращении к СУБД, и поэтому проведенная работа между падением узла и последним обращением к СУБД будет потеряна.
Для решения данной проблемы Oracle дополнительно предлагает новый механизм - Fast Application Notification [FAN]. Основная идея заключается в посылке сообщения приложения о событии в кластере (запуск/сбой узла, запуск/останов сервиса). Приложение также регистрирует callback на клиента, который "зажигается" в момент прихода очередного сообщения. Таким образом, клиентское приложение получает возможность быстрой реакции на события, происходящие в кластере.
В ходе презентации будут подробно рассмотрены примеры исходного кода, использующие FAN, и показан демо-пример на C#.
Также будут рассмотрены возникающие при использовании FAN особенности:
- транспорт доставки сообщений (может быть отдельное сетевое соединение так и очередь Advanced Queueing);
- приложение, реализующее FAN-callback становится многопоточным (callback вызывается во вторичном потоке и приложение должно использовать методы синхронизации с основным потоком - такие как мьютексы, семафоры и критические секции).
План доклада:
1. Использование TAF для восстановления контекста сессии. Демонстрация.
2. FAN - анализ и реакция на сообщения от кластера. Демонстрация.
3. Защита middleware (серверов приложений и web-серверов) в RAC. Поддержка перезапуска приложений на узлах и виртуальные IP. Демонстрация.
4. Заключение.
Целевая аудитория:
Разработчики бизнес-критичных приложений, администраторы баз данных.
Докладчики:
Мельников Игорь, cтарший консультант Oracle CIS
Краткая информация:
Старший консультант Oracle СНГ по серверным технологиям СУБД. Сфера деятельности: адаптация решений компаний-разработчиков под технологическую платформу Oracle Database. Хобби: создание и оптимизация приложений для кластеров Oracle Real Application Cluster, а также создание веб-приложений в среде Oracle Application Express.
Геннадий Сигалаев cтарший консультант Oracle CIS
Краткая информация:
Старший консультант Oracle СНГ по Oracle Database и Fusion Middleware. Основная работа связана с поддержкой технологических партнеров и заказчиков по использованию базовой платформы Oracle.