Добавление кастомного ресурса в Oracle Clusterware: практическое руководство
Введение
Oracle Clusterware (ранее известный как Oracle Cluster Ready Services) предоставляет надежную платформу для управления высокодоступными приложениями в кластерной среде. В некоторых случаях возникает необходимость интегрировать в кластер пользовательские приложения или сервисы, которые не являются стандартными компонентами Oracle. В этой статье рассмотрим пошаговый процесс добавления кастомного ресурса в кластерную инфраструктуру.
Преимущества интеграции кастомных ресурсов
- Автоматический запуск и остановка приложения при переключении узлов
- Мониторинг состояния приложения кластером
- Интеграция в общую систему управления кластером
- Зависимости между ресурсами для корректного порядка запуска
Подготовительные шаги
1. Настройка прав sudo для сервисного пользователя
Создаем файл конфигурации sudo для пользователя grid:
sudo visudo -f /etc/sudoers.d/custom_service
Добавляем содержимое:
# Sudo permissions for service user to manage custom_service
Defaults:grid !requiretty
Cmnd_Alias CUSTOM_SERVICE_CTL = \
/usr/bin/systemctl start custom_service.service, \
/usr/bin/systemctl stop custom_service.service, \
/usr/bin/systemctl is-active --quiet custom_service.service
grid ALL=(root) NOPASSWD: CUSTOM_SERVICE_CTL
2. Создание враппер-скриптов
Создаем скрипты-обертки для управления сервисом:
/usr/local/bin/cs_start.sh:
#!/bin/bash
exec /usr/bin/sudo /usr/bin/systemctl start custom_service.service
/usr/local/bin/cs_stop.sh:
#!/bin/bash
exec /usr/bin/sudo /usr/bin/systemctl stop custom_service.service
/usr/local/bin/cs_check.sh:
#!/bin/bash
exec /usr/bin/sudo /usr/bin/systemctl is-active --quiet custom_service.service
3. Настройка прав доступа к скриптам
chown root:root /usr/local/bin/cs_start.sh /usr/local/bin/cs_stop.sh /usr/local/bin/cs_check.sh
chmod 755 /usr/local/bin/cs_start.sh /usr/local/bin/cs_stop.sh /usr/local/bin/cs_check.sh
Интеграция с Oracle Clusterware
4. Создание пользовательского типа ресурса
crsctl add resourcegrouptype custom_app_type -basetype cluster_resourcegroup
5. Добавление ресурсной группы
crsctl add resourcegroup custom_service_rg -type custom_app_type
6. Создание ресурса в кластере
crsctl add resource custom_service \
-type generic_application \
-group custom_service_rg \
-attr "START_PROGRAM='/usr/local/bin/cs_start.sh', \
STOP_PROGRAM='/usr/local/bin/cs_stop.sh', \
CLEAN_PROGRAM='/usr/local/bin/cs_stop.sh', \
CHECK_PROGRAMS='/usr/local/bin/cs_check.sh'"
7. Настройка зависимостей ресурса
Указываем зависимости от других ресурсов кластера (в примере - от группы ASM):
crsctl modify resourcegroup custom_service_rg -attr "START_DEPENDENCIES='hard(ora.asmgroup)'"
Тестирование конфигурации
Запуск ресурса
crsctl start resource custom_service
Ожидаемый результат:
CRS-2672: Attempting to start 'custom_service' on 'node01'
CRS-2676: Start of 'custom_service' on 'node01' succeeded
Проверка статуса
crsctl status resource custom_service -t
Ожидаемый результат:
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
custom_service(custom_service_rg)
1 ONLINE ONLINE node01 STABLE
--------------------------------------------------------------------------------
Остановка ресурса
crsctl stop resourcegroup custom_service_rg
Ожидаемый результат:
CRS-33673: Attempting to stop resource group 'custom_service_rg' on server 'node01'
CRS-2673: Attempting to stop 'custom_service' on 'node01'
CRS-2677: Stop of 'custom_service' on 'node01' succeeded