Solaris OS용 Sun Cluster 데이터 서비스 개발 안내서

모든 메소드에 공통 기능 제공

이 절에서는 샘플 데이터 서비스의 모든 콜백 메소드에 사용되는 다음 기능에 대해 설명합니다.

명령 인터프리터 식별 및 경로 내보내기

쉘 스크립트의 첫 번째 줄은 명령 인터프리터를 식별해야 합니다. 샘플 데이터 서비스의 각 메소드 스크립트는 다음과 같이 명령 인터프리터를 식별합니다.

#!/bin/ksh

샘플 응용 프로그램의 모든 메소드 스크립트에서는 사용자의 PATH 설정을 사용하는 대신 Sun Cluster 이진 및 라이브러리에 대한 경로를 내보냅니다.

#######################################################################
# MAIN
#######################################################################

export PATH=/bin:/usr/bin:/usr/cluster/bin:/usr/sbin:/usr/proc/bin:$PATH

PMF_TAGSYSLOG_TAG 변수 선언

Validate를 제외한 모든 메소드 스크립트는 pmfadm을 사용하여 데이터 서비스 또는 모니터를 시작하거나 중지하여 자원 이름을 전달합니다. 각 스크립트는 pmfadm에 전달할 수 있는 PMF_TAG 변수를 정의하여 데이터 서비스나 모니터를 식별합니다.

마찬가지로 각 메소드 스크립트는 logger 명령을 사용하여 시스템 로그에 메시지를 기 록합니다. 각 스크립트는 -t 옵션과 함께 logger에 전달할 수 있는 SYSLOG_TAG 변수를 정의하여 메시지가 기록되는 자원의 자원 유형, 자원 이름 및 자원 그룹을 식별합니다.

모든 메소드는 다음 샘플 코드에 표시된 것처럼 동일한 방법으로 SYSLOG_TAG를 정의합니다. dns_probe, dns_svc_start , dns_svc_stopdns_monitor_check 메소드는 다음과 같이 PMF_TAG를 정의합니다(dns_svc_stop 메소드에서 pmfadmlogger를 사용한 경우).

#########################################################################
# MAIN
#########################################################################

PMF_TAG=$RESOURCE_NAME.named

SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME

   # Send a SIGTERM signal to the data service and wait for 80% of the
   # total timeout value.
   pmfadm -s $PMF_TAG.named -w $SMOOTH_TIMEOUT TERM
   if [ $? -ne 0 ]; then
      logger -p ${SYSLOG_FACILITY}.info \
          -t [$SYSLOG_TAG] \
          “${ARGV0} Failed to stop HA-DNS with SIGTERM; Retry with \
           SIGKILL”

dns_monitor_start, dns_monitor_stopdns_update 메소드는 다음과 같이 PMF_TAG를 정의합니다(dns_monitor_stop 메소드에서 pmfadm을 사용한 경우).

#####################################################################
# MAIN
#####################################################################

PMF_TAG=$RESOURCE_NAME.monitor
SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME
...
# See if the monitor is running, and if so, kill it. 
if pmfadm -q $PMF_TAG.monitor; then
   pmfadm -s $PMF_TAG.monitor KILL

함수 인자 구문 분석

RGM은 Validate를 제외한 모든 콜백 메소드를 다음과 같이 실행합니다.

method-name -R resource-name -T resource-type-name -G resource-group-name

메소드 이름은 콜백 메소드를 구현하는 프로그램의 경로 이름입니다. 데이터 서비스는 RTR 파일의 각 메소드에 대한 경로 이름을 지정합니다. 이러한 경로 이름은 마찬가지로 RTR 파일에 있는 RT_basedir 등록 정보에 지정된 디렉토리에 상대적입니다. 예를 들어, 샘플 데이터 서비스의 RTR 파일에서 기본 디렉토리 및 메소드 이름은 다음과 같이 지정됩니다.

RT_basedir=/opt/SUNWsample/bin;
Start = dns_svc_start;
Stop =  dns_svc_stop;
...

모든 콜백 메소드 인자는 다음과 같이 플래그가 지정된 값으로 전달됩니다. -R 인자는 자원 인스턴스의 이름을 나타냅니다. -T 인자는 자원 유형을 나타냅니다. -G 인자는 자원이 구성되는 그룹을 나타냅니다. 콜백 메소드에 대한 자세한 내용은 rt_callbacks(1HA) 설명서 페이지를 참조하십시오.


주 –

Validate 메소드는 추가 인자, 즉 메소드가 호출되는 자원 및 자원 그룹의 등록 정보 값과 함께 호출됩니다. 자세한 내용은 등록 정보 업데이트 처리를 참조하십시오.


각 콜백 메소드에는 전달되는 인자를 구분 분석하기 위한 함수가 필요합니다. 모든 콜백에 동일한 인자가 전달되므로 데이터 서비스는 응용 프로그램의 모든 콜백에서 사용되는 단일 구분 분석 함수를 제공합니다.

다음은 샘플 응용 프로그램의 콜백 메소드에 사용되는 parse_args() 함수를 보여줍니다.

#########################################################################
# Parse program arguments.
#
function parse_args # [args ...]
{
      typeset opt

      while getopts 'R:G:T:' opt
      do
             case "$opt" in
             R)
                  # Name of the DNS resource.
                  RESOURCE_NAME=$OPTARG
                  ;;
             G)
                  # Name of the resource group in which the resource is
                  # configured.
                  RESOURCEGROUP_NAME=$OPTARG
                  ;;
             T)
                  # Name of the resource type.
                  RESOURCETYPE_NAME=$OPTARG
                  ;;
             *)
                  logger -p ${SYSLOG_FACILITY}.err \
                  -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME] \
                  "ERROR: Option $OPTARG unknown"
                  exit 1
                      ;;
             esac
    done
}

주 –

샘플 응용 프로그램의 PROBE 메소드는 Sun Cluster 콜백 메소드가 아니라 사용자 정의 메소드이지만 콜백 메소드와 동일한 인자와 함께 호출됩니다. 따라서 이 메소드는 다른 콜백 메소드에 사용되는 것과 동일한 구문 분석 함수를 포함합니다.


구문 분석 함수는 다음과 같이 MAIN에서 호출됩니다.

parse_args “$@”

오류 메시지 생성

콜백 메소드는 syslog() 함수를 사용하여 오류 메시지를 최종 사용자에게 출력해야 합니다. 샘플 데이터 서비스의 모든 콜백 메소드는 다음과 같이 scha_cluster_get 명령을 사용하여 클러스터 로그에 사용되는 syslog() 함수 번호를 검색합니다.

SYSLOG_FACILITY=`scha_cluster_get -O SYSLOG_FACILITY`

이 값은 쉘 변수 SYSLOG_FACILITY에 저장되며 logger 명령 기능으로 사용되어 메시지를 클러스터 로그에 기록할 수 있습니다. 예를 들어, 샘플 데이터 서비스의 Start 메소드는 다음과 같이 syslog() 함수를 검색하고 데이터 서비스가 시작되었다는 메시지를 기록합니다.

SYSLOG_FACILITY=`scha_cluster_get -O SYSLOG_FACILITY`
...
if [ $? -eq 0 ]; then
   logger -p ${SYSLOG_FACILITY}.err \
         -t [$SYSLOG_TAG] \
         "${ARGV0} HA-DNS successfully started"
fi

자세한 내용은 scha_cluster_get(1HA) 설명서 페이지를 참조하십시오.

등록 정보에 대한 정보 얻기

대부분의 콜백 메소드는 데이터 서비스의 자원 및 자원 유형 등록 정보에 대한 정보를 얻어야 합니다. API는 이러한 정보를 얻을 수 있도록 scha_resource_get() 함수를 제공합니다.

시스템 정의 등록 정보와 확장 등록 정보를 사용할 수 있습니다. 시스템 정의 등록 정보는 미리 정의되어 있는 반면 확장 등록 정보는 RTR 파일에서 개발자가 직접 정의합니다.

scha_resource_get()을 사용하여 시스템 정의 등록 정보의 값을 얻을 때는 -O 옵션과 함께 등록 정보의 이름을 지정합니다. 이 경우 명령은 등록 정보의 만 반환합니다. 예를 들어, 샘플 데이터 서비스에서 Monitor_start 메소드는 검사 프로그램을 찾아야만 시작할 수 있습니다. 검사 프로그램은 RT_basedir 등록 정보에서 가리키는 데이터 서비스의 기본 디렉토리에 있으므로 Monitor_start 메소드는 다음과 같이 RT_basedir의 값을 검색하여 RT_BASEDIR 변수에 저장합니다.

RT_BASEDIR=`scha_resource_get -O RT_basedir -R $RESOURCE_NAME -G \
$RESOURCEGROUP_NAME`

확장 등록 정보의 경우 -O 옵션을 사용하여 확장 등록 정보라고 지정하고 등록 정보의 이름을 마지막 인자로 제공해야 합니다. 이때 명령은 등록 정보의 유형을 모두 반환합니다. 예를 들어, 샘플 데이터 서비스에서 검사 프로그램은 다음과 같이 Probe_timeout 확장 등록 정보의 유형과 값을 검색한 다음 awk 명령을 사용하여 값만 PROBE_TIMEOUT 쉘 변수에 저장합니다.

probe_timeout_info=`scha_resource_get -O Extension \
-R $RESOURCE_NAME -G $RESOURCEGROUP_NAME Probe_timeout`
PROBE_TIMEOUT=`echo $probe_timeout_info | awk '{print $2}'`