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

Start 메소드 작동 방식

데이터 서비스 자원을 포함하는 자원 그룹이 노드에서 온라인 상태가 되거나 자원 그룹이 이미 온라인 상태에서 자원이 활성화되는 경우 RGM은 해당 클러스터 노드에서 Start 메소드를 실행합니다. 샘플 응용 프로그램의 Start 메소드는 해당 노드에서 in.named(DNS) 데몬을 활성화합니다.

이 절에서는 샘플 응용 프로그램에 사용된 Start 메소드의 주요 부분에 대해 설명합니다. parse_args() 함수, syslog() 함수와 같이 모든 콜백 메소드에 공통된 기능은 다루지 않습니다. 공통된 기능에 대해서는 모든 메소드에 공통 기능 제공에서 설명합니다.

Start 메소드의 전체 목록은 Start 메소드 코드 목록을 참조하십시오.

Start 메소드의 기능

샘플 데이터 서비스의 Start 메소드는 DNS를 시작하기 전에 구성 디렉토리와 구성 파일(named.conf)이 액세스 및 사용 가능한지 확인합니다. named.conf의 정보는 DNS 작업을 성공적으로 수행하는 데 필수적입니다.

이 콜백 메소드는 PMF(pmfadm)를 사용하여 DNS 데몬(in.named)을 시작합니다. DNS가 중단되거나 시작하는 데 실패할 경우 PMF는 지정된 간격 동안 지정된 횟수만큼 DNS 데몬을 시작합니다. 재시도 횟수와 간격은 데이터 서비스 RTR 파일의 등록 정보에서 지정합니다.

구성 확인

DNS를 실행하려면 구성 디렉토리의 named.conf 파일에 있는 정보가 필요합니다. 따라서 Start 메소드는 DNS를 시작하기 전에 디렉토리와 파일을 액세스할 수 있는지 확인하기 위해 몇 가지 온전성 검사를 수행합니다.

Confdir 확장 등록 정보는 구성 디렉토리의 경로를 제공합니다. 이 등록 정보 자체는 RTR 파일에 정의되어 있습니다. 그러나 데이터 서비스를 구성할 때 클러스터 관리자가 실제 위치를 지정합니다.

샘플 데이터 서비스에서 Start 메소드는 scha_resource_get() 함수를 사용하여 구성 디렉토리의 위치를 검색합니다.


주 –

Confdir이 확장 등록 정보이므로 scha_resource_get()은 유형과 값을 모두 반환합니다. awk 명령은 값만 검색하여 쉘 변수인 CONFIG_DIR에 저장합니다.


# find the value of Confdir set by the cluster administrator at the time of
# adding the resource.
config_info=`scha_resource_get -O Extension -R $RESOURCE_NAME \
-G $RESOURCEGROUP_NAME Confdir`

# scha_resource_get returns the "type" as well as the "value" for the
# extension properties. Get only the value of the extension property 
CONFIG_DIR=`echo $config_info | awk '{print $2}'`

Start 메소드는 CONFIG_DIR 값을 사용하여 디렉토리에 액세스할 수 있는지 확인합니다. 액세스할 수 없는 경우 Start는 오류 메시지를 기록하고 오류 상태로 종료합니다. Start 종료 상태를 참조하십시오.

# Check if $CONFIG_DIR is accessible.
if [ ! -d $CONFIG_DIR ]; then
   logger -p ${SYSLOG_FACILITY}.err \
         -t [$SYSLOG_TAG] \
         "${ARGV0} Directory $CONFIG_DIR is missing or not mounted"
   exit 1
fi

응용 프로그램 데몬을 시작하기 전에 이 메소드는 named.conf 파일이 존재하는지 확인하기 위해 최종 검사를 수행합니다. 파일이 없는 경우 Start는 오류 메시지를 기록하고 오류 상태로 종료합니다.

# Change to the $CONFIG_DIR directory in case there are relative
# pathnames in the data files.
cd $CONFIG_DIR

# Check that the named.conf file is present in the $CONFIG_DIR directory
if [ ! -s named.conf ]; then
   logger -p ${SYSLOG_FACILITY}.err \
         -t [$SYSLOG_TAG] \
         "${ARGV0} File $CONFIG_DIR/named.conf is missing or empty"
   exit 1
fi

응용 프로그램 시작

이 메소드는 프로세스 관리자 기능(pmfadm)을 사용하여 응용 프로그램을 시작합니다. pmfadm 명령을 사용하면 지정된 시간 프레임 동안 응용 프로그램을 재시작할 횟수를 설정할 수 있습니다. RTR 파일에는 응용 프로그램 재시작을 시도하는 횟수를 지정하는 Retry_count 등록 정보와 시도 기간을 지정하는 Retry_interval 등록 정보가 포함되어 있습니다.

Start 메소드는 scha_resource_get() 함수를 사용하여 Retry_countRetry_interval 값을 검색하고 이러한 값을 쉘 변수에 저장합니다. Start 메소드는 -n-t 옵션을 사용하여 이러한 값을 pmfadm으로 전달합니다.

# Get the value for retry count from the RTR file.
RETRY_CNT=`scha_resource_get -O Retry_count -R $RESOURCE_NAME \
-G $RESOURCEGROUP_NAME`
# Get the value for retry interval from the RTR file. This value is in seconds
# and must be converted to minutes for passing to pmfadm. Note that the 
# conversion rounds up; for example, 50 seconds rounds up to 1 minute.
((RETRY_INTRVAL=`scha_resource_get -O Retry_interval -R $RESOURCE_NAME \
-G $RESOURCEGROUP_NAME` / 60))

# Start the in.named daemon under the control of PMF. Let it crash and restart
# up to $RETRY_COUNT times in a period of $RETRY_INTERVAL; if it crashes
# more often than that, PMF will cease trying to restart it.
# If there is a process already registered under the tag
# <$PMF_TAG>, then PMF sends out an alert message that the
# process is already running.
pmfadm -c $PMF_TAAG -n $RETRY_CNT -t $RETRY_INTRVAL \
    /usr/sbin/in.named -c named.conf

# Log a message indicating that HA-DNS has been started.
if [ $? -eq 0 ]; then
   logger -p ${SYSLOG_FACILITY}.err \
         -t [$SYSLOG_TAG] \
         "${ARGV0} HA-DNS successfully started"
fi
exit 0

Start 종료 상태

Start 메소드는 기본 응용 프로그램이 실제로 실행 중이고 사용 가능할 때까지 성공 상태로 종료해서는 안 되며 특히 종속된 다른 데이터 서비스가 있는 경우에는 더욱 그러합니다. 성공을 확인하는 한 가지 방법은 Start 메소드를 종료하기 전에 응용 프로그램을 검사하여 실행 중인지 확인하는 것입니다. 데이터베이스와 같은 복잡한 응용 프로그램의 경우 응용 프로그램이 충돌 복구를 초기화 및 수행할 수 있을 만큼 RTR 파일의 Start_timeout 등록 정보 값을 충분히 높게 설정해야 합니다.


주 –

샘플 데이터 서비스의 응용 프로그램 자원(DNS)은 신속하게 시작되므로 샘플 데이터 서비스는 성공 상태로 종료하기 전에 DNS가 실행 중인지 확인하기 위해 폴링을 수행하지 않습니다.


이 메소드가 DNS를 시작하지 못하고 실패 상태로 종료할 경우 RGM은 대응 방법을 결정하는 Failover_mode 등록 정보를 검사합니다. 샘플 데이터 서비스는 Failover_mode 등록 정보를 명시적으로 설정하지 않으므로 클러스터 관리자가 기본값을 무시하고 다른 값을 지정하지 않은 경우 이 등록 정보는 기본값 NONE을 가집니다. 이 경우 RGM은 데이터 서비스의 상태를 설정하는 것 외에 다른 조치를 취하지 않습니다. 동일한 노드에서 재시작하거나 다른 노드로 페일오버하려면 클러스터 관리자가 해당 작업을 시작해야 합니다.