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

2장 데이터 서비스 개발

이 장에서는 응용 프로그램의 가용성을 높이거나 확장 가능하게 만드는 방법을 설명하고 데이터 서비스 개발에 대한 자세한 정보를 제공합니다.

이 장은 다음 내용으로 구성되어 있습니다.

응용 프로그램 적합성 분석

데이터 서비스 만들기의 첫 번째 단계는 대상 응용 프로그램이 고가용성 및 확장성에 대한 요구 사항을 충족시키는지 확인하는 것입니다. 응용 프로그램이 모든 요구 사항을 충족시키지 못할 경우 응용 프로그램 소스 코드를 수정하여 가용성을 높이거나 확장 가능하게 만들 수 있습니다.

다음 목록에는 확장 가능한 고가용성의 응용 프로그램을 만들기 위한 요구 사항이 요약되어 있습니다. 자세한 내용이 필요하거나 응용 프로그램 소스 코드를 수정해야 하는 경우 부록 B, 샘플 데이터 서비스 코드 목록을 참조하십시오.


주 –

확장 가능한 서비스는 목록 뒤에 나오는 일부 추가 기준뿐만 아니라 고가용성에 대한 다음 조건을 모두 충족시켜야 합니다.


확장 가능한 서비스는 다음 요구 사항도 충족시켜야 합니다.

확장 가능 서비스의 경우 응용 프로그램 특성에서 로드 균형 조정 정책도 결정합니다. 예를 들어, 인스턴스가 클라이언트 요청에 응답할 수 있도록 허용하는 로드 균형 조정 정책 Lb_weighted는 클라이언트 연결을 위해 서버의 메모리 내장 캐시를 사용하는 응용 프로그램에는 작동하지 않습니다. 이 경우 지정된 클라이언트의 트래픽을 응용 프로그램의 한 인스턴스로 제한하는 로드 균형 조정 정책을 지정해야 합니다. 로드 균형 조정 정책 Lb_stickyLb_sticky_wild는 클라이언트의 모든 요청을 동일한 응용 프로그램 인스턴스로 반복해서 전송하며 이 인스턴스에서 메모리 내장 캐시를 사용할 수 있습니다. 서로 다른 클라이언트에서 여러 클라이언트 요청이 올 경우 RGM은 서비스 인스턴스 간에 요청을 분산시킵니다. 확장 가능한 데이터 서비스의 로드 균형 조정 정책 설정에 대한 자세한 내용은 페일오버 자원 구현을 참조하십시오.

사용할 인터페이스 결정

Sun Cluster 개발자 지원 패키지(SUNWscdev)에서는 데이터 서비스 메소드를 코딩하기 위한 다음 두 집합의 인터페이스를 제공합니다.

그리고 데이터 서비스 작성을 자동화하는 도구인 SunPlex Agent Builder도 Sun Cluster 개발자 지원 패키지에 포함되어 있습니다.

데이터 서비스를 개발하기 위해 권장되는 방법은 다음과 같습니다.

  1. C 쉘 또는 Korn 쉘로 코드화할 것인지 결정합니다. Korn 쉘을 사용할 경우 C 인터페이스만 제공하는 DSDL을 사용할 수 없습니다.

  2. Agent Builder를 실행하고, 요청된 정보를 지정한 다음 소스 코드와 실행 코드, RTR 파일 및 패키지를 포함하는 데이터 서비스를 생성합니다.

  3. 생성된 데이터 서비스에 사용자 정의가 필요한 경우 생성된 소스 파일에 DSDL 코드를 추가할 수 있습니다. Agent Builder는 사용자 고유 코드를 추가할 수 있는 소스 파일의 특정 위치를 주석과 함께 표시합니다.

  4. 코드에 대상 응용 프로그램을 지원하기 위한 추가 사용자 정의가 필요할 경우 기존 소스 코드에 RMAPI 기능을 추가할 수 있습니다.

실제로는 여러 가지 방법으로 데이터 서비스를 만들 수 있습니다. 예를 들어, 사용자 코드를 Agent Builder에서 생성된 코드의 특정 위치에 추가하는 대신 생성된 메소드 중 하나 또는 생성된 모니터 프로그램을 DSDL이나 RMAPI 함수를 사용하여 새로 작성한 프로그램으로 전부 바꿀 수 있습니다. 그러나 처리 방식과 무관하게 대부분의 경우 다음과 같은 이유로 인해 Agent Builder에서 시작하는 것이 좋습니다.


주 –

C 함수 집합과 스크립트에서 사용할 명령 집합을 제공하는 RMAPI와는 달리 DSDL에서는 C 함수 인터페이스만 제공합니다. 따라서 Agent Builder에 Korn 쉘(ksh) 출력을 지정한 경우 DSDL ksh 명령이 없기 때문에 생성된 소스 코드에서 RMAPI를 호출합니다.


데이터 서비스 작성을 위한 개발 환경 설정

데이터 서비스 개발을 시작하기 전에 Sun Cluster 개발 패키지(SUNWscdev)를 설치해야만 Sun Cluster 헤더 및 라이브러리 파일에 액세스할 수 있습니다. 모든 클러스터 노드에 이 패키지가 설치되어 있더라도 일반적으로 클러스터 노드가 아닌 별도의 비클러스터 개발 시스템에서 데이터 서비스를 개발합니다. 이런 일반적인 경우 pkgadd 명령을 사용하여 개발 시스템에 SUNWscdev 패키지를 설치해야 합니다.

코드를 컴파일 및 링크할 경우 특수한 옵션을 설정하여 헤더 및 라이브러리 파일을 식별해야 합니다.


주 –

Solaris Operating System 및 Sun Cluster 제품에서 호환성 모드 컴파일 C++ 코드와 표준 모드 컴파일 C++ 코드를 혼합할 수 없습니다. 따라서 Sun Cluster에서 사용할 C++ 기반 데이터 서비스를 만들려면 해당 데이터 서비스를 다음과 같이 컴파일해야 합니다.


비클러스터 노드에서 개발을 마친 경우 테스트를 위해 완성된 데이터 서비스를 클러스터에 전송할 수 있습니다.


주 –

Solaris 운영 체제를 사용하는 경우 Solaris 8 OS 이상 버전의 개발자 또는 전체 배포 소프트웨어 그룹을 사용 중인지 확인합니다.


이 절에서는 다음 작업을 수행하는 절차를 설명합니다.

Procedure개발 환경 설정 방법

다음 절차는 데이터 서비스 개발을 위해 SUNWscdev 패키지를 설치하고 컴파일러 및 링커 옵션을 설정하는 방법에 대해서 설명합니다.

단계
  1. 수퍼유저가 되거나 그에 상응하는 역할을 맡고

  2. 디렉토리를 원하는 CD-ROM 디렉토리로 변경합니다.


    # cd cd-rom-directory
    
  3. 현재 디렉토리에 SUNWscdev 패키지를 설치합니다.

    • 영역 환경에서 Solaris 10 OS를 사용하는 경우 전역 영역의 전역 관리자로 다음 명령을 입력합니다.


      # pkgadd -G -d . SUNWscdev
      

      SUNWscdev의 내용이 비전역 영역과 공유되는 전역 영역에 영향을 주지 않으면 SUNWscdev 패키지가 전역 영역에 추가됩니다.

    • 다른 Solaris OS 버전을 사용하거나 비영역 환경에서 Solaris 10 OS를 사용하는 경우 다음 명령을 입력합니다.


      # pkgadd -d . SUNWscdev
      
  4. makefile에서 데이터 서비스 코드용으로 포함할 파일과 라이브러리 파일을 식별하는 컴파일러 및 링커 옵션을 지정합니다.

    Sun Cluster 헤더 파일을 식별하는 -I 옵션, 개발 시스템의 컴파일 시 라이브러리 검색 경로를 지정하는 -L 옵션 및 클러스터의 런타임 링커에 대한 라이브러리 검색 경로를 지정하는 -R 옵션을 지정합니다.

    # Makefile for sample data service
    ...
    
    -I /usr/cluster/include
    
    -L /usr/cluster/lib
    
    -R /usr/cluster/lib
    ...

클러스터에 데이터 서비스 전송

개발 시스템에서 데이터 서비스 개발을 완료한 경우 테스트를 위해 데이터 서비스를 클러스터에 전송해야 합니다. 전송 중 오류가 발생할 가능성을 줄이려면 데이터 서비스 코드와 RTR 파일을 하나의 패키지로 결합한 다음 이 패키지를 해당 클러스터의 모든 노드에 설치합니다.


주 –

pkgadd를 사용하거나 데이터 서비스를 설치하는 다른 방법을 사용하여 데이터 서비스를 모든 클러스터 노드에 두어야 합니다. Agent Builder는 이 패키지를 자동으로 생성합니다.


자원 및 자원 유형 등록 정보 설정

Sun Cluster에서는 데이터 서비스의 정적 구성을 정의하기 위해 사용하는 자원 유형 등록 정보와 자원 등록 정보 집합을 제공합니다. 자원 유형 등록 정보는 각각의 콜백 메소드에 대한 경로뿐만 아니라 자원 유형, 자원 버전, API 버전 등을 지정합니다. 모든 자원 유형 등록 정보의 목록은 자원 유형 등록 정보를 참조하십시오.

Failover_mode, Thorough_probe_interval 및 메소드 시간 초과값과 같은 자원 등록 정보는 자원의 정적 구성을 정의합니다. Resource_stateStatus와 같은 동적 자원 등록 정보는 관리 자원의 활성 상태를 반영합니다. 자원 등록 정보에 대한 자세한 내용은 자원 등록 정보를 참조하십시오.

데이터 서비스의 필수 구성 요소인 자원 유형 등록(RTR) 파일에서 자원 유형 및 자원 등록 정보를 선언합니다. 클러스터 관리자가 Sun Cluster에 데이터 서비스를 등록할 때 RTR 파일에 데이터 서비스의 초기 구성을 정의합니다.

Agent Builder에서 데이터 서비스에 유용하고 필요한 등록 정보 집합을 선언하기 때문에 Agent Builder를 사용하여 데이터 서비스용 RTR 파일을 생성하는 것이 좋습니다. 예를 들어, RTR 파일에 특정 등록 정보(예: Resource_type)를 선언해야 합니다. 그렇지 않으면 데이터 서비스 등록에 실패합니다. 필수는 아니지만 기타 등록 정보는 RTR 파일에 해당 등록 정보를 선언하지 않은 경우 클러스터 관리자가 사용할 수 없습니다. 반면 일부 등록 정보는 RGM에서 해당 등록 정보를 정의하고 기본값을 제공하기 때문에 선언 여부와 관계없이 사용할 수 있습니다. 이러한 복잡성을 피하려면 Agent Builder를 사용하여 올바른 RTR 파일을 생성합니다. 나중에 RTR 파일을 편집하여 필요한 경우 특정 값을 변경할 수 있습니다.

이 절의 나머지 부분에서는 Agent Builder에서 생성된 샘플 RTR 파일을 설명합니다.

자원 유형 등록 정보 선언

클러스터 관리자는 개발자가 RTR 파일에 선언한 자원 유형 등록 정보를 구성할 수 없습니다. 이러한 자원 유형 등록 정보는 자원 유형 영구 구성의 일부가 됩니다.


주 –

클러스터 관리자만 자원 유형 등록 정보 Installed_nodes를 구성할 수 있습니다. RTR 파일에 Installed_nodes를 선언할 수 없습니다.


자원 유형 선언 구문은 다음과 같습니다.

property-name = value;

주 –

자원 그룹, 자원 및 자원 유형의 등록 정보 이름은 대소문자를 구분하지 않습니다. 등록 정보 이름을 지정하는 경우 대문자와 소문자를 임의로 조합해서 사용할 수 있습니다.


다음은 샘플(smpl) 데이터 서비스용 RTR 파일의 자원 유형 선언입니다.

# Sun Cluster Data Services Builder template version 1.0
# Registration information and resources for smpl
#
#NOTE: Keywords are case insensitive, i.e., you can use
#any capitalization style you prefer.
#
Resource_type = "smpl";
Vendor_id = SUNW;
RT_description = "Sample Service on Sun Cluster";

RT_version ="1.0"; 
API_version = 2;
Failover = TRUE;

Init_nodes = RG_PRIMARIES;

RT_basedir=/opt/SUNWsmpl/bin;

Start           =    smpl_svc_start;
Stop            =    smpl_svc_stop;

Validate        =    smpl_validate;
Update          =    smpl_update;

Monitor_start   =    smpl_monitor_start;
Monitor_stop    =    smpl_monitor_stop;
Monitor_check   =    smpl_monitor_check;

정보 –

RTR 파일의 첫 번째 항목으로 Resource_type 등록 정보를 선언해야 합니다. 그렇지 않으면 자원 유형 등록에 실패합니다.


자원 유형 선언의 첫 번째 집합에서는 다음과 같이 자원 유형에 대한 기본 정보를 제공합니다.

Resource_typeVendor_id

자원 유형 이름을 제공합니다. 자원 유형 이름은 Resource_type 등록 정보(smpl)로만 지정하거나 샘플과 같이 Vendor_id 등록 정보를 접두어로 사용하고 “.”으로 자원 유형과 구분하여 지정합니다(SUNW.smpl). Vendor_id를 사용하는 경우 자원 유형을 정의하는 회사의 주식 기호를 사용합니다. 자원 유형 이름은 클러스터에서 고유해야 합니다.


주 –

일반적으로 자원 유형 이름(vendoridApplicationname)이 패키지 이름으로 사용됩니다. Solaris 9 운영 체제부터는 Vendor ID와 Application Name의 조합이 9자를 넘을 수 있습니다. 그러나 이전 버전의 Solaris 운영 체제를 사용 중이면 RGM에서 이 제한을 적용하지 않는 경우에도 Vendor ID와 Application Name의 조합이 9자를 넘을 수 없습니다.

한편 Agent Builder는 명시적으로 자원 유형 이름에서 패키지 이름을 생성하기 때문에 9자 제한을 적용합니다.


RT_description

자원 유형을 간단하게 설명합니다.

RT_version

샘플 데이터 서비스의 버전을 식별합니다.

API_version

API의 버전을 식별합니다. 예를 들어 API_version = 2는 Sun Cluster 3.0부터, API_version = 5는 Sun Cluster 3.1 9/04부터 모든 버전의 Sun Cluster에 데이터 서비스를 설치할 수 있음을 나타냅니다. 그러나 API_version = 5는 또한 Sun Cluster 3.1 9/04 이전에 릴리스된 Sun Cluster의 모든 버전에 데이터 서비스를 설치할 수 없음을 나타냅니다. 이 등록 정보에 대해서는 자원 유형 등록 정보API_version 항목에서 자세히 설명합니다.

Failover = TRUE

동시에 여러 노드에서 온라인 상태가 될 수 있는 자원 그룹에서 데이터 서비스를 실행할 수 없음을 나타냅니다. 즉, 이 선언은 페일오버 데이터 서비스를 지정합니다. 이 등록 정보에 대해서는 자원 유형 등록 정보Failover 항목에서 자세히 설명합니다.

Start, Stop Validate

RGM에서 호출한 각각의 콜백 메소드 프로그램에 대한 경로를 제공합니다. 이러한 경로는 RT_basedir에 지정된 디렉토리에 상대적인 경로입니다.

나머지 자원 유형 선언에서는 다음과 같은 구성 정보를 제공합니다.

Init_nodes = RG_PRIMARIES

RGM이 데이터 서비스를 마스터할 수 있는 노드에서만 Init, Boot, FiniValidate 메소드를 호출하도록 지정합니다. RG_PRIMARIES에서 지정한 노드는 데이터 서비스가 설치된 모든 노드 의 서브 세트입니다. 데이터 서비스가 설치된 모든 노드에서 RGM이 이러한 메소드를 호출하도록 지정하려면 값을 RT_INSTALLED_NODES로 설정합니다.

RT_basedir

콜백 메소드 경로 등 상대 경로를 완료하려면 /opt/SUNWsample/bin을 디렉토리 경로로 지정합니다.

Start, Stop Validate

RGM에서 호출한 각각의 콜백 메소드 프로그램에 대한 경로를 제공합니다. 이러한 경로는 RT_basedir에 지정된 디렉토리에 상대적인 경로입니다.

자원 등록 정보 선언

자원 유형 등록 정보와 마찬가지로 RTR 파일에 자원 등록 정보를 선언합니다. 일반적으로 RTR 파일의 자원 유형 선언 다음에 자원 등록 정보 선언이 나옵니다. 자원 선언 구문은 둥근 괄호로 묶은 속성 값 쌍의 집합입니다.

{
    attribute = value;
    attribute = value;
             .
             .
             .
    attribute = value;
}

Sun Cluster에서 제공하는 시스템 정의 등록 정보라는 자원 등록 정보의 경우 RTR 파일에서 특정 속성을 변경할 수 있습니다. 예를 들어, Sun Cluster는 각 콜백 메소드에 대한 메소드 시간 초과 등록 정보의 기본값을 제공합니다. RTR 파일에서 다른 기본값을 지정할 수 있습니다.

Sun Cluster에서 제공하는 등록 정보 속성 집합을 사용하여 RTR 파일에 확장 등록 정보라는 새 자원 등록 정보를 정의할 수도 있습니다. 자원 등록 정보 속성에서는 자원 등록 정보를 변경하고 정의하기 위한 속성을 나열합니다. RTR 파일의 시스템 정의 등록 정보 선언 다음에는 확장 등록 정보 선언이 나옵니다.

시스템 정의 자원 등록 정보의 첫 번째 집합에서 다음과 같이 콜백 메소드의 시간 초과값을 지정합니다.

...

# Resource property declarations appear as a list of bracketed
# entries after the resource type declarations. The property 
# name declaration must be the first attribute after the open
# curly bracket of a resource property entry.
#
# Set minimum and default for method timeouts.
{
        PROPERTY = Start_timeout;
        MIN=60;
        DEFAULT=300;
}

{
        PROPERTY = Stop_timeout;
        MIN=60;
        DEFAULT=300;
}
{
        PROPERTY = Validate_timeout;
        MIN=60;
        DEFAULT=300;
}
{
        PROPERTY = Update_timeout;
        MIN=60;
        DEFAULT=300;
}
{
        PROPERTY = Monitor_Start_timeout;
        MIN=60;
        DEFAULT=300;
}
{
        PROPERTY = Monitor_Stop_timeout;
        MIN=60;
        DEFAULT=300;
{
        PROPERTY = Monitor_Check_timeout;
        MIN=60;
        DEFAULT=300;
}

등록 정보(PROPERTY = value) 이름은 각 자원 등록 정보 선언의 첫 번째 속성이어야 합니다. RTR 파일의 등록 정보 속성에서 정의하는 한도 내에서 자원 등록 정보를 구성할 수 있습니다. 예를 들어, 해당 샘플의 각 메소드 시간 초과 기본값은 300초입니다. 클러스터 관리자가 이 값을 변경할 수 있지만, MIN 속성에서 지정한 허용 가능한 최소값은 60초입니다. 자원 등록 정보 속성은 자원 등록 정보 속성의 목록을 포함합니다.

자원 등록 정보의 다음 집합에서는 데이터 서비스에서 특정 용도가 있는 등록 정보를 정의합니다.

{
        PROPERTY = Failover_mode;
        DEFAULT=SOFT;
        TUNABLE = ANYTIME;
}
{
        PROPERTY = Thorough_Probe_Interval;
        MIN=1;
        MAX=3600;
        DEFAULT=60;
        TUNABLE = ANYTIME;
}

# The number of retries to be done within a certain period before concluding
# that the application cannot be successfully started on this node.
{
        PROPERTY = Retry_count;
        MAX=10;
        DEFAULT=2;
        TUNABLE = ANYTIME; 
}

# Set Retry_interval as a multiple of 60 since it is converted from seconds
# to minutes, rounding up. For example, a value of 50 (seconds)
# is converted to 1 minute. Use this property to time the number of
# retries (Retry_count).
{
        PROPERTY = Retry_interval;
        MAX=3600;
        DEFAULT=300;
        TUNABLE = ANYTIME;
}

{
        PROPERTY = Network_resources_used;
        TUNABLE = WHEN_DISABLED;
        DEFAULT = "";
}
{
        PROPERTY = Scalable;
        DEFAULT = FALSE;
        TUNABLE = AT_CREATION;
}
{
        PROPERTY = Load_balancing_policy;
        DEFAULT = LB_WEIGHTED;
        TUNABLE = AT_CREATION;
}
{
        PROPERTY = Load_balancing_weights;
        DEFAULT = "";
        TUNABLE = ANYTIME;
}
{
        PROPERTY = Port_list;
        TUNABLE = ANYTIME;
        DEFAULT = ;
}

이 자원 등록 정보 선언은 클러스터 관리자가 이 특성과 관련된 등록 정보 값을 변경할 수 있는 경우를 제한하는 TUNABLE 특성을 포함합니다. 예를 들어, AT_CREATION 값은 자원을 만들고 나중에 변경할 수 없는 경우에만 클러스터 관리자가 해당 값을 지정할 수 있음을 의미합니다.

이러한 등록 정보의 대부분은 변경할 이유가 없는 한 Agent Builder에서 생성한 기본값을 사용할 수 있습니다. 다음은 이 등록 정보에 대한 정보입니다. 자세한 내용은 자원 등록 정보 또는 r_properties(5) 설명서 페이지를 참조하십시오.

Failover_mode

Start 또는 Stop 메소드가 실패할 경우 RGM에서 자원 그룹을 다시 배치하거나 노드를 중단할지를 나타냅니다.

Thorough_probe_interval, Retry_count Retry_interval

오류 모니터에서 사용합니다. TunableANYTIME과 동일하므로 오류 모니터가 최적의 상태로 작동하지 않을 경우 클러스터 관리자가 조정할 수 있습니다.

Network_resources_used

데이터 서비스에 사용된 논리 호스트 이름 또는 공유 주소 자원 목록입니다. Agent Builder는 클러스터 관리자가 데이터 서비스 구성 시 자원 목록(있는 경우)을 지정할 수 있도록 이 등록 정보를 선언합니다.

Scalable

FALSE로 설정하면 이 자원에서 클러스터 네트워킹(공유 주소) 기능을 사용하지 않음을 나타냅니다. 이 등록 정보를 FALSE로 설정한 경우 페일오버 서비스를 나타내려면 자원 유형 등록 정보 FailoverTRUE로 설정해야 합니다. 이 등록 정보를 사용하는 방법은 클러스터에 데이터 서비스 전송 콜백 메소드 구현을 참조하십시오.

Load_balancing_policyLoad_balancing_weights

자동으로 이 등록 정보를 선언하지만, 페일오버 자원 유형에서는 사용되지 않습니다.

Port_list

서버가 수신하는 포트 목록을 식별합니다. Agent Builder는 클러스터 관리자가 데이터 서비스 구성 시 포트 목록을 지정할 수 있도록 이 등록 정보를 선언합니다.

확장 등록 정보 선언

확장 등록 정보는 샘플 RTR 파일의 끝에 있습니다.

# Extension Properties
#

# The cluster administrator must set the value of this property to point to the 
# directory that contains the configuration files used by the application.
# For this application, smpl, specify the path of the configuration file on
# PXFS (typically named.conf).
{
        PROPERTY = Confdir_list;
        EXTENSION;
        STRINGARRAY;
        TUNABLE = AT_CREATION;
        DESCRIPTION = "The Configuration Directory Path(s)";
}

# The following two properties control restart of the fault monitor.
{
        PROPERTY = Monitor_retry_count;
        EXTENSION;
        INT;
        DEFAULT = 4;
        TUNABLE = ANYTIME;
        DESCRIPTION = "Number of PMF restarts allowed for fault monitor.";
}
{
        PROPERTY = Monitor_retry_interval;
        EXTENSION;
        INT;
        DEFAULT = 2;
        TUNABLE = ANYTIME;
        DESCRIPTION = "Time window (minutes) for fault monitor restarts.";
}
# Time out value in seconds for the probe.
{
        PROPERTY = Probe_timeout;
        EXTENSION;
        INT;
        DEFAULT = 120;
        TUNABLE = ANYTIME;
        DESCRIPTION = "Time out value for the probe (seconds)";
}

# Child process monitoring level for PMF (-C option of pmfadm).
# Default of -1 means to not use the -C option of pmfadm.
# A value of 0 or greater indicates the desired level of child-process.
# monitoring.
{
        PROPERTY = Child_mon_level;
        EXTENSION;
        INT;
        DEFAULT = -1;
        TUNABLE = ANYTIME;
        DESCRIPTION = “Child monitoring level for PMF";
}
# User added code -- BEGIN VVVVVVVVVVVV
# User added code -- END   ^^^^^^^^^^^^

Agent Builder는 대부분의 데이터 서비스에 유용한 다음과 같은 확장 등록 정보를 만듭니다.

Confdir_list

많은 응용 프로그램에 유용한 정보인 응용 프로그램 구성 디렉토리에 대한 경로를 지정합니다. 클러스터 관리자는 데이터 서비스를 구성할 때 이 디렉토리의 위치를 지정할 수 있습니다.

Monitor_retry_count, Monitor_retry_interval Probe_timeout

서버 데몬이 아니라 오류 모니터 자체의 재시작을 제어합니다.

Child_mon_level

PMF에서 수행할 모니터링 수준을 설정합니다. 자세한 내용은 pmfadm(1M) 설명서 페이지를 참조하십시오.

User added code 주석으로 구분된 영역에 추가 확장 등록 정보를 만들 수 있습니다.

콜백 메소드 구현

이 절에서는 콜백 메소드 구현에 관련된 일반적인 정보를 제공합니다.

자원 및 자원 그룹 등록 정보 액세스

일반적으로 콜백 메소드는 자원 등록 정보 액세스해야 합니다. RMAPI에서는 자원의 시스템 정의 등록 정보와 확장 등록 정보를 액세스하기 위해 콜백 메소드에서 사용할 수 있는 쉘 명령과 C 함수를 모두 제공합니다. scha_resource_get(1HA)scha_resource_get(3HA) 설명서 페이지를 참조하십시오.

DSDL에서는 시스템 정의 등록 정보를 액세스하기 위한 C 함수 세트(각 등록 정보마다 하나의 함수)와 확장 등록 정보를 액세스하기 위한 함수를 제공합니다. scds_property_functions(3HA)scds_get_ext_property(3HA) 설명서 페이지를 참조하십시오.

StatusStatus_msg 외에는 자원 등록 정보 설정을 위해 사용할 수 있는 API 함수가 없기 때문에 등록 정보 기법을 사용하여 데이터 서비스의 동적 상태 정보를 저장할 수 없습니다. 그보다는 전역 파일에 동적 상태 정보를 저장해야 합니다.


주 –

클러스터 관리자는 scrgadm 명령을 사용하거나 사용 가능한 그래픽 관리 명령 또는 인터페이스를 통해 특정한 자원 등록 정보를 설정할 수 있습니다. 그러나 클러스터 재구성 도중, 즉 RGM에서 메소드를 호출할 때 scrgadm이 실패하므로 콜백 메소드에서 scrgadm을 호출하지 마십시오.


메소드의 멱등원

일반적으로 RGM은 동일한 인자를 가진 동일한 자원에 연속해서 둘 이상의 메소드를 호출하지 않습니다. 그러나 Start 메소드가 실패할 경우 RGM은 자원이 한 번도 시작되지 않았더라도 자원에 대한 Stop 메소드를 호출할 수 있습니다. 마찬가지로 자원 데몬이 저절로 소멸된 경우에도 RGM은 이 자원 데몬에 대해 Stop 메소드를 실행할 수 있습니다. 동일한 시나리오가 Monitor_startMonitor_stop 메소드에 적용됩니다.

이러한 이유로 StopMonitor_stop 메소드에 멱등원을 작성해야 합니다. 동일한 인자를 가진 동일한 자원에 대해 Stop 또는 Monitor_stop을 반복해서 호출할 경우 단일 호출과 동일한 결과가 만들어집니다.

멱등원에 함축된 한 가지 의미는 자원 또는 모니터가 이미 중지되고 아무런 작업을 수행하지 않더라도 StopMonitor_stop에서 0(성공)을 반환해야 한다는 것입니다.


주 –

Init, Fini, BootUpdate 메소드도 멱등원이어야 합니다. Start 메소드는 멱등원일 필요가 없습니다.


일반 데이터 서비스

일반 데이터 서비스(GDS)는 단순 응용 프로그램을 Sun Cluster의 Resource Group Manager 프레임워크에 연결하여 가용성을 높이고 확장 가능하게 만드는 기법입니다. 이 기법에서는 일반적인 방법으로 응용 프로그램의 가용성을 높이거나 확장 가능하게 만들 때처럼 데이터 서비스를 코딩할 필요가 없습니다.

GDS 모델은 RGM 프레임워크와 상호 작용하기 위해 사전 컴파일된 자원 유형인 SUNW.gds를 사용합니다. 자세한 내용은 10 장, 일반 데이터 서비스을 참조하십시오.

응용 프로그램 제어

콜백 메소드를 사용하면 RGM에서 노드가 클러스터에 결합되거나 클러스터를 떠날 때마다 기본 자원(즉, 응용 프로그램)을 제어할 수 있습니다.

자원 시작 및 중지

자원 유형 구현에는 최소한 Start 메소드와 Stop 메소드가 필요합니다. RGM은 자원 그룹을 오프라인 및 온라인 상태로 전환하기 위해 적절한 시간에 적절한 노드에서 자원 유형의 메소드 프로그램을 호출합니다. 예를 들어, 클러스터 노드의 충돌 후 RGM은 해당 노드에서 마스터하는 모든 자원 그룹을 새 노드로 이동합니다. Start 메소드를 구현하여 RGM에 남은 호스트 노드에서 각 자원을 다시 시작하는 방법을 제공합니다.

로컬 노드에서 자원을 시작하고 사용할 수 있을 때까지 Start 메소드를 반환하면 안 됩니다. 긴 초기화 기간이 필요한 자원 유형의 Start 메소드에 설정된 시간 초과값이 충분히 긴지 확인합니다. 시간 초과값이 충분하도록 RTR 파일에서 Start_timeout 등록 정보에 대한 기본값과 최소값을 설정합니다.

RGM이 자원 그룹을 오프라인으로 만드는 상황에 Stop 메소드를 구현해야 합니다. 예를 들어, 자원 그룹이 노드 1에서 오프라인 상태가 되고 노드 2에서 다시 온라인 상태가 되는 것으로 가정합니다. 자원 그룹을 오프라인 상태로 만드는 동안 RGM은 해당 그룹의 자원에 대해 Stop 메소드를 호출하여 노드 1의 모든 활동을 중지합니다. 노드 1에서 모든 자원에 대해 Stop 메소드가 완료되면 RGM은 노드 2에서 자원 그룹을 다시 온라인 상태로 만듭니다.

해당 자원이 로컬 노드에서 모든 활동을 완전히 중지하고 종료될 때까지 Stop 메소드를 반환하면 안 됩니다. Stop 메소드의 가장 안전한 구현에서는 자원과 관련된 로컬 노드의 모든 프로세스를 종료합니다. 종료하는 데 긴 시간이 필요한 자원 유형은 Stop 메소드에 설정된 시간 초과값이 충분히 길어야 합니다. RTR 파일에 Stop_timeout 등록 정보를 설정합니다.

Stop 메소드가 실패하거나 시간 초과되면 자원 그룹은 클러스터 관리자의 개입이 필요한 오류 상태가 됩니다. 이런 상태를 방지하려면 StopMonitor_stop 메소드 구현에서 가능한 모든 오류 조건을 복구해야 합니다. 이상적으로는 이 메소드가 0 (성공) 오류 상태로 종료되어야 합니다. 이 상태는 로컬 노드에 있는 자원과 자원 모니터의 모든 활동을 성공적으로 중지한 상태입니다.

사용할 StartStop 메소드 결정

이 절에서는 Prenet_start Postnet_stop 메소드 사용과 비교하여 StartStop 메소드 사용 시기에 대한 설명을 제공합니다. 사용할 올바른 메소드를 결정하려면 클라이언트와 데이터 서비스의 클라이언트-서버 네트워킹 프로토콜에 대해 모두 잘 알아야 합니다.

네트워크 주소 자원을 사용하는 서비스에서는 논리 호스트 이름 주소 구성과 관련된 특정 순서로 시작 또는 중지 단계를 수행해야 합니다. 선택적인 콜백 메소드 Prenet_start Postnet_stop을 사용하면 동일한 자원 그룹의 네트워크 주소가 활성 또는 비활성으로 구성되기 전후에 자원 유형 구현에서 특수한 시작 및 종료 작업을 수행할 수 있습니다.

RGM은 데이터 서비스의 Prenet_start 메소드를 호출하기 전에 네트워크 주소를 연결하지만 네트워크 주소를 활성으로 구성하지 않는 메소드를 호출합니다. RGM은 데이터 서비스의 Postnet_stop 메소드를 호출한 후 네트워크 주소를 연결 해제하는 메소드를 호출합니다. RGM이 자원 그룹을 온라인 상태로 전환하는 순서는 다음과 같습니다.

  1. 네트워크 주소를 연결합니다.

  2. 데이터 서비스의 Prenet_start 메소드를 호출합니다(있는 경우).

  3. 네트워크 주소를 활성으로 구성합니다.

  4. 데이터 서비스의 Start 메소드를 호출합니다(있는 경우).

RGM이 자원 그룹을 오프라인 상태로 전환하는 순서는 그 반대입니다.

  1. 데이터 서비스의 Stop 메소드를 호출합니다(있는 경우).

  2. 네트워크 주소를 비활성으로 구성합니다.

  3. 데이터 서비스의 Postnet_stop 메소드를 호출합니다(있는 경우).

  4. 네트워크 주소를 연결 해제합니다.

Start, Stop, Prenet_start 또는 Postnet_stop 메소드 사용 여부를 결정할 때에는 먼저 서버측을 고려하십시오. 데이터 서비스 응용 프로그램 자원과 네트워크 주소 자원을 포함하는 자원 그룹을 온라인 상태로 전환할 경우 RGM에서는 데이터 서비스 자원 Start 메소드를 호출하기 전에 네트워크 주소를 활성으로 구성하는 메소드를 호출합니다. 따라서 데이터 서비스가 시작될 때 네트워크 주소를 활성으로 구성해야 하는 경우에는 Start 메소드를 사용하여 데이터 서비스를 시작합니다.

마찬가지로 데이터 서비스 자원과 네트워크 주소 자원을 모두 포함하는 자원 그룹을 오프라인 상태로 전환할 경우 RGM에서는 데이터 서비스 자원 Stop 메소드를 호출한 후 네트워크 주소를 비활성으로 구성하는 메소드를 호출합니다. 따라서 데이터 서비스가 중지될 때 네트워크 주소를 활성으로 구성해야 하는 경우에는 Stop 메소드를 사용하여 데이터 서비스를 중지합니다.

예를 들어, 데이터 서비스를 시작하거나 중지하려면 데이터 서비스의 관리 유틸리티나 라이브러리를 실행해야 할 수 있습니다. 경우에 따라 데이터 서비스에는 클라이언트-서버 네트워킹 인터페이스를 사용하여 관리를 수행하는 관리 유틸리티나 라이브러리가 있습니다. 즉, 관리 유틸리티에서 서버 데몬을 호출하기 때문에 관리 유틸리티나 라이브러리를 사용하려면 네트워크 주소가 활성 상태여야 합니다. 이 시나리오에서는 StartStop 메소드를 사용합니다.

데이터 서비스가 시작 및 중지될 때 네트워크 주소를 비활성으로 구성해야 하는 경우 Prenet_startPostnet_stop 메소드를 사용하여 데이터 서비스를 시작 및 중지하십시오. 클러스터 재구성 후 네트워크 주소 또는 데이터 서비스 중 어떤 것이 먼저 온라인 상태로 전환되는지에 따라 클라이언트 소프트웨어에서 다르게 응답하도록 할지를 고려합니다( SCHA_GIVEOVER 인자를 사용한 scha_control() 또는 scswitch를 사용한 스위치오버). 예를 들어, 클라이언트 구현에서는 최소한의 재시도를 수행하고 데이터 서비스 포트가 사용 불가능한지 확인한 후 바로 중지할 수 있습니다.

데이터 서비스를 시작할 때 네트워크 주소를 활성으로 구성할 필요가 없을 경우 네트워크 인터페이스를 활성으로 구성하기 전에 데이터 서비스를 시작합니다. 이런 방식으로 데이터 서비스를 시작하면 네트워크 주소가 활성으로 구성된 직후 데이터 서비스가 클라이언트 요청에 응답할 수 있으므로 클라이언트가 재시도를 중지할 가능성이 줄어듭니다. 이 시나리오에서는 Start 메소드 대신 Prenet_start 메소드를 사용하여 데이터 서비스를 시작합니다.

Postnet_stop 메소드를 사용할 경우 데이터 서비스 자원은 여전히 네트워크가 주소가 비활성으로 구성되는 지점에 활성화되어 있습니다. 네트워크 주소가 비활성으로 구성된 후에만 Postnet_stop 메소드가 실행됩니다. 그 결과, 네트워크 주소가 응답하지 않는 경우를 제외하고 데이터 서비스의 TCP 또는 UDP 서비스 포트 또는 해당 RPC 프로그램 번호가 항상 네트워크의 클라이언트에 사용 가능한 것으로 표시됩니다.


주 –

클러스터에 RPC 서비스를 설치할 경우 서비스에서 100141, 100142, 100248 등의 프로그램 번호를 사용해서는 안 됩니다. 이 번호는 각각 Sun Cluster 데몬 rgmd_receptionist, fed, pmfd용으로 예약되어 있습니다. 설치하는 RPC 서비스에서 이 프로그램 번호 중 하나를 사용할 경우 해당 RPC 서비스의 프로그램 번호를 변경합니다.


Prenet_startPostnet_stop 메소드 대신 StartStop 메소드를 사용하거나 둘 다 사용하도록 결정하는 경우 서버와 클라이언트의 요구 사항과 동작을 모두 고려해야 합니다.

Init, FiniBoot 메소드

세 개의 선택적 메소드, Init, FiniBoot를 사용하면 RGM에서 자원에 대한 초기화 및 종료 코드를 실행할 수 있습니다.

RGM은 다음 조건 중 하나의 결과로 자원이 관리 상태가 될 경우 Init 메소드를 실행하여 자원의 일회성 초기화를 수행합니다.

RGM은 다음 조건 중 하나의 결과로 자원이 관리 해제 상태가 될 경우 Fini 메소드를 실행하여 자원을 정리합니다.

정리는 멱등원이어야 합니다. 즉, 정리가 이미 완료된 경우 Fini가 성공적으로 종료됩니다.

RGM은 새로 클러스터에 결합된 노드, 즉 부트되거나 재부트된 노드에서 Boot 메소드를 실행합니다.

Boot 메소드는 일반적으로 Init와 동일한 초기화를 수행합니다. 이 초기화는 멱등원이어야 합니다. 즉, 로컬 노드에서 자원을 이미 초기화한 경우 BootInit가 성공적으로 종료됩니다.

자원 모니터링

일반적으로 검사한 자원이 제대로 작동하는지 확인하기 위해 자원에 대해 정기적인 오류 검사를 수행하도록 모니터를 구현합니다. 오류 검사가 실패할 경우 모니터에서 로컬로 재시작하거나 scha_control() RMAPI 함수 또는 scds_fm_action() DSDL 함수를 호출하여 영향을 받는 자원 그룹의 페일오버를 요청할 수 있습니다.

자원의 성능을 모니터하고 성능을 조정 또는 보고할 수도 있습니다. 자원 유형별 오류 모니터 작성은 선택 사항입니다. 오류 모니터를 작성하도록 선택하지 않더라도 자원 유형은 Sun Cluster에서 수행하는 클러스터의 기본 모니터링의 혜택을 받을 수 있습니다. Sun Cluster는 공용 네트워크에서 통신할 수 있기 위해 호스트 하드웨어의 오류, 호스트 운영 체제의 전체 오류 및 호스트의 오류를 검색합니다.

RGM에서 자원 모니터를 직접 호출하지는 않지만 자원 모니터를 자동으로 시작하는 기능을 제공합니다. 자원을 오프라인 상태로 전환할 경우 RGM은 자원을 중지하기 전에 Monitor_stop 메소드를 호출하여 로컬 노드에서 자원의 모니터를 중지합니다. 자원을 온라인 상태로 전환할 경우 RGM은 자원이 시작된 후 Monitor_start 메소드를 호출합니다.

scha_control() RMAPI 함수 및 scds_fm_action() DSDL 함수(scha_control() 호출)를 사용하면 자원 모니터에서 자원 그룹을 다른 노드로 페일오버하도록 요청할 수 있습니다. 온전성 검사의 하나로 scha_control()Monitor_check(정의된 경우)을 호출하여 요청한 노드가 자원을 포함하는 자원 그룹을 마스터할 수 있을 만큼 충분히 신뢰할 수 있는지 확인합니다. Monitor_check에서 노드를 신뢰할 수 없다고 역보고하거나 메소드가 시간 초과한 경우 RGM은 다른 노드를 찾아 페일오버 요청을 수행합니다. Monitor_check가 모든 노드에서 실패하면 페일오버가 취소됩니다.

자원 모니터는 자원 상태의 모니터 뷰를 반영하도록 StatusStatus_msg 등록 정보를 설정할 수 있습니다. scha_resource_setstatus() RMAPI 함수, scha_resource_setstatus 명령 또는 scds_fm_action() DSDL 함수를 사용하여 이 등록 정보를 설정합니다.


주 –

StatusStatus_msg 등록 정보는 자원 모니터에 대한 특수 용도로 사용되지만 모든 프로그램에서 이 등록 정보를 설정할 수 있습니다.


RMAPI로 구현되는 오류 모니터의 예는 오류 모니터 정의를 참조하십시오. DSDL로 구현되는 오류 모니터의 예는 SUNW.xfnts 오류 모니터를 참조하십시오. Sun에서 제공하는 데이터 서비스에 내장된 오류 모니터에 대한 정보는 Sun Cluster Data Services Planning and Administration Guide for Solaris OS를 참조하십시오.

자원에 메시지 로깅 추가

다른 클러스터 메시지와 동일한 로그 파일에 상태 메시지를 기록하려면 일반 함수 scha_cluster_getlogfacility()를 사용하여 클러스터 메시지 기록에 사용할 기능 번호를 검색합니다.

일반 Solaris syslog() 함수와 함께 이 기능 번호를 사용하여 클러스터 로그에 메시지를 작성합니다. 일반 scha_cluster_get() 인터페이스를 통해 클러스터 로그 기능 정보를 액세스할 수도 있습니다.

프로세스 관리 제공

RMAPI 및 DSDL에서는 자원 모니터와 자원 제어 콜백 구현을 위한 프로세스 관리 기능을 제공합니다. RMAPI에서는 다음과 같은 기능을 정의합니다.

Process Monitor Facility(PMF): pmfadmrpc.pmfd

프로세스 및 하위 프로세스를 모니터하고 프로세스가 소멸될 경우 재시작하는 방법을 제공합니다. 이 기능은 모니터되는 프로세스를 시작 및 제어하기 위한 pmfadm 명령과 rpc.pmfd 데몬으로 구성됩니다.

DSDL에서는 PMF 기능을 구현하기 위해 scds_pmf_ 이름이 앞에 나오는 함수 집합을 제공합니다. DSDL PMF 기능 개요 및 개별 함수 목록은 PMF 함수를 참조하십시오.

명령 및 데몬에 대한 자세한 내용은 pmfadm(1M)rpc.pmfd(1M) 설명서 페이지를 참조하십시오.

halockrun

파일 잠금을 유지하는 동안 자식 프로그램을 실행하기 위한 프로그램. 이 명령은 쉘 스크립트에 사용하기에 편리합니다.

이 명령에 대한 자세한 내용은 halockrun(1M) 설명서 페이지를 참조하십시오.

hatimerun

시간 초과 제어 하에 자식 프로그램을 실행하기 위한 프로그램. 이 명령은 쉘 스크립트에 사용하기에 편리합니다.

DSDL에서는 hatimerun 기능을 구현하기 위해 scds_hatimerun() 함수를 제공합니다.

이 명령에 대한 자세한 내용은 hatimerun(1M) 설명서 페이지를 참조하십시오.

자원 관리 지원 제공

클러스터 관리자가 자원에 대해 수행할 수 있는 작업에는 자원 등록 정보 설정 및 변경이 포함됩니다. API는 사용자가 이러한 관리 작업에 연결되는 코드를 만들 수 있도록 ValidateUpdate 콜백 메소드를 정의합니다.

자원을 만들 때 및 클러스터 관리자가 자원이나 자원을 포함하는 그룹의 등록 정보를 업데이트할 때 RGM에서 선택적인 Validate 메소드를 호출합니다. RGM은 자원과 자원 그룹의 등록 정보 값을 Validate 메소드에 전달합니다. RGM은 자원 유형의 Init_nodes 등록 정보로 표시된 클러스터 노드 집합에서 Validate를 호출합니다. Init_nodes에 대한 자세한 내용은 자원 유형 등록 정보 또는 rt_properties(5) 설명서 페이지를 참조하십시오. RGM은 만들기 또는 업데이트를 적용하기 전에 Validate를 호출합니다. 노드의 메소드에서 실패 종료 코드가 발생하면 만들기 또는 업데이트가 실패합니다.

RGM은 클러스터 관리자가 자원 또는 자원 그룹 등록 정보를 변경하거나(RGM에서 등록 정보를 설정하는 경우 제외) 모니터가 StatusStatus_msg 자원 등록 정보를 설정하는 경우에만 Validate를 호출합니다.

RGM은 선택적인 Update 메소드를 호출하여 실행 중인 자원에 등록 정보가 변경되었음을 알립니다. 클러스터 관리자가 자원이나 자원 그룹의 등록 정보 설정에 성공한 후 Update가 실행됩니다. RGM은 자원이 온라인인 노드에서 이 메소드를 호출합니다. 이 메소드에서는 API 액세스 함수를 사용하여 활성 자원에 영향을 미치는 등록 정보 값을 읽고 그에 따라 실행 중인 자원을 조정할 수 있습니다.

페일오버 자원 구현

페일오버 자원 그룹에는 내장된 자원 유형 LogicalHostnameSharedAddress와 같은 네트워크 주소와 페일오버 데이터 서비스에 대한 데이터 서비스 응용 프로그램 자원과 같은 페일오버 자원이 포함됩니다. 데이터 서비스가 페일오버 또는 스위치오버된 경우 하위 데이터 서비스 자원과 함께 네트워크 주소 자원이 클러스터 노드 사이 간을 이동합니다. RGM에서는 페일오버 자원의 구현을 지원하는 여러 개의 등록 정보를 제공합니다.

부울 자원 유형 등록 정보 FailoverTRUE로 설정하여 한 번에 둘 이상의 노드에서 온라인 상태가 될 수 있는 자원 그룹에 자원이 구성되지 못하도록 제한합니다. 이 등록 정보의 기본값은 FALSE이므로 페일오버 자원의 RTR 파일에서 TRUE로 선언해야 합니다.

Scalable 자원 등록 정보는 자원에서 클러스터 공유 주소 기능을 사용하는지 확인합니다. 페일오버 자원의 경우 페일오버 자원에서 공유 주소를 사용하지 않기 때문에 ScalableFALSE로 설정합니다.

클러스터 관리자는 RG_mode 자원 그룹 등록 정보를 사용하여 자원 그룹을 페일오버 또는 확장 가능한 것으로 식별할 수 있습니다. RG_modeFAILOVER일 경우 RGM은 그룹의 Maximum_primaries 등록 정보를 1로 설정하고 자원 그룹을 단일 노드에서 마스터하도록 제한합니다. RGM을 사용하면 Failover 등록 정보가 True인 자원을 RG_modeScalable인 자원 그룹에 만들 수 없습니다.

Implicit_network_dependencies 자원 그룹 등록 정보에서는 RGM이 그룹 내 모든 네트워크 주소 자원(LogicalHostnameSharedAddress)에서 비네트워크 주소 자원의 강력한 암시적 종속성을 적용하도록 지정합니다. 그 결과, 그룹의 네트워크 주소를 활성으로 구성할 때까지 그룹의 비네트워크 주소(데이터 서비스) 자원의 Start 메소드가 호출되지 않습니다. Implicit_network_dependencies 등록 정보 기본값은 TRUE로 설정됩니다.

확장 가능한 자원 구현

확장 가능한 자원은 동시에 둘 이상의 노드에서 온라인 상태가 될 수 있습니다. 확장 가능한 자원에는 Sun Cluster HA for Sun Java System Web Server(이전의 Sun Cluster HA for Sun ONE Web Server) 및 Sun Cluster HA for Apache 같은 데이터 서비스가 포함됩니다.

RGM에서는 확장 가능한 자원의 구현을 지원하는 여러 개의 등록 정보를 제공합니다.

부울 자원 유형 등록 정보 FailoverFALSE로 설정하여 한 번에 둘 이상의 노드에서 온라인 상태가 될 수 있는 자원 그룹에 자원이 구성될 수 있도록 합니다.

Scalable 자원 등록 정보는 자원에서 클러스터 공유 주소 기능을 사용하는지 확인합니다. 확장 가능한 서비스는 공유 주소 자원을 사용하여 확장 가능한 서비스의 여러 인스턴스가 클라이언트에 단일 서비스로 나타나도록 하기 때문에 이 등록 정보를 TRUE로 설정합니다.

RG_mode 등록 정보를 사용하여 클러스터 관리자는 자원 그룹을 페일오버나 확장 가능으로 식별할 수 있습니다. RG_modeSCALABLE일 경우 RGM을 사용하면 Maximum_primaries가 1보다 큰 값을 가질 수 있습니다. 이것은 여러 노드에서 그룹을 동시에 마스터할 수 있음을 의미합니다RGM을 사용하면 Failover 등록 정보가 FALSE인 자원을 RG_modeSCALABLE인 자원 그룹에서 인스턴스화할 수 있습니다.

클러스터 관리자는 확장 가능한 서비스 자원을 포함하는 확장 가능한 자원 그룹을 만들고, 확장 가능한 자원이 종속된 공유 주소 자원을 포함하는 별도의 페일오버 자원 그룹을 만듭니다.

클러스터 관리자는 RG_dependencies 자원 그룹 등록 정보를 사용하여 노드에서 자원 그룹을 온라인 및 오프라인 상태로 전환하는 순서를 지정합니다. 확장 가능한 자원과 확장 가능한 자원이 종속되는 공유 주소 자원은 서로 다른 자원 그룹에 있기 때문에 확장 가능 서비스에는 이 순서 지정이 중요합니다. 확장 가능한 데이터 서비스를 시작하기 전에 먼저 해당 네트워크 주소(공유 주소) 자원을 활성으로 구성해야 합니다. 따라서 클러스터 관리자는 확장 가능한 서비스를 포함하는 자원 그룹의 RG_dependencies 등록 정보를 공유 주소 자원이 있는 자원 그룹을 포함하도록 설정해야 합니다.

자원의 RTR 파일에서 Scalable 등록 정보를 선언할 경우 RGM에서는 자원에 대해 다음과 같은 확장 가능 등록 정보 집합을 자동으로 만듭니다.

Network_resources_used

이 자원에서 사용한 공유 주소 자원을 식별합니다. 이 등록 정보 기본값은 빈 문자열로 설정되므로 클러스터 관리자는 자원을 만들 때 확장 가능한 서비스에서 사용하는 공유 주소의 실제 목록을 제공해야 합니다. scsetup 명령 및 SunPlex Manager는 확장 가능한 서비스에 필요한 자원과 그룹을 자동으로 설정하는 기능을 제공합니다.

Load_balancing_policy

자원의 로드 균형 조정 정책을 지정합니다. RTR 파일에서 정책을 명시적으로 설정하거나 기본값 LB_WEIGHTED를 사용할 수 있습니다. 어떤 경우든 RTR 파일에서 Load_balancing_policy에 대한 TunableNONE 또는 FALSE로 설정하지 않는 한 클러스터 관리자는 자원을 만들 때 이 값을 변경할 수 있습니다. 올바른 값은 다음과 같습니다.

LB_WEIGHTED

Load_balancing_weights 등록 정보에 설정된 가중치에 따라 여러 노드에 로드를 분산합니다.

LB_STICKY

확장 가능 서비스의 해당 클라이언트(클라이언트 IP 주소로 식별)는 항상 같은 클러스터 노드로 전송됩니다.

LB_STICKY_WILD

고정된 와일드카드 서비스의 IP 주소로 연결되는 해당 클라이언트(클라이언트의 IP 주소로 식별)는 들어오는 포트 번호에 관계없이 항상 같은 클러스터 노드로 전송됩니다.

LB_STICKY 또는 LB_STICKY_WILDLoad_balancing_policy가 있는 확장 가능한 서비스의 경우 서비스가 온라인 상태일 때 Load_balancing_weights 를 변경하면 기존 클라이언트 유사성이 재설정될 수 있습니다. 이 경우 클러스터의 다른 노드에서 이전에 클라이언트에 서비스를 제공했더라도 다른 노드에서 후속 클라이언트 요청을 서비스할 수 있습니다.

마찬가지로 클러스터에서 서비스의 새로운 인스턴스를 시작하면 기존 클라이언트 유사성이 재설정될 수 있습니다.

Load_balancing_weights

각 노드에 전송할 로드를 지정합니다. 형식은 weight@node,weight@node입니다. 여기서 weight는 지정한 node로 분산된 로드의 상대적인 비율을 반영하는 정수입니다. 노드로 분산되는 로드의 분수는 이 노드에 대한 가중치를 활성 인스턴스의 모든 가중치의 합으로 나눈 것입니다. 예를 들어 1@1,3@2는 노드 1에서 1/4의 로드를 받고 노드 2에서 3/4의 로드를 받도록 지정합니다.

Port_list

서버가 수신하고 있는 포트를 식별합니다. 이 등록 정보의 기본값은 빈 문자열입니다. RTR 파일에서 포트 목록을 제공할 수 있습니다. 그렇지 않으면 클러스터 관리자는 자원을 만들 때 실제 포트 목록을 제공해야 합니다.

클러스터 관리자가 확장 가능 또는 페일오버로 구성할 수 있는 데이터 서비스를 만들 수 있습니다. 그렇게 하려면 데이터 서비스의 RTR 파일에서 Failover 자원 유형 등록 정보와 Scalable 자원 유형을 FALSE로 선언합니다. 만들 때 조정 가능한 Scalable 등록 정보를 지정합니다.

Failover 등록 정보 값 FALSE를 사용하면 자원을 확장 가능한 자원 그룹에 구성할 수 있습니다. 클러스터 관리자는 자원을 만들 때 Scalable의 값을 TRUE로 변경함으로써 공유 주소를 사용 가능하게 하여 확장 가능한 서비스를 만들 수 있습니다.

한편 FailoverFALSE로 설정하더라도 클러스터 관리자는 자원을 페일오버 자원 그룹으로 구성하여 페일오버 서비스를 구현할 수 있습니다. 클러스터 관리자는 FALSEScalable의 값을 변경하지 않습니다. 이 시나리오를 지원하려면 Scalable 등록 정보에서 Validate 메소드를 선택해야 합니다. ScalableFALSE일 경우 자원이 페일오버 자원 그룹으로 구성되었는지 확인합니다.

확장 가능한 자원에 대한 추가 정보는 Solaris OS용 Sun Cluster 개념 안내서를 참조하십시오.

확장 가능 서비스에 대한 검증 검사

확장 가능한 등록 정보를 TRUE로 설정하여 자원을 만들거나 업데이트할 경우 RGM에서 다양한 자원 등록 정보를 검증합니다. 등록 정보가 제대로 구성되지 않은 경우 RGM은 시도된 업데이트나 만들기를 거부합니다. RGM에서 다음과 같은 검사를 수행합니다.

데이터 서비스 쓰기 및 테스트

TCP 연결 유지를 사용하여 서버 보호

서버측에서는 TCP 연결 유지를 사용하여 다운 또는 네트워크 분할된 클라이언트에 대해 시스템 자원이 낭비되지 않도록 합니다. 오랫동안 유지된 서버에서 이 자원이 정리되지 않을 경우 클라이언트 충돌 및 재부트 시 자원 낭비가 무한대로 증가합니다.

클라이언트-서버 통신에서 TCP 스트림을 사용할 경우 클라이언트와 서버 모두에서 TCP 연결 유지 기법을 사용해야 합니다. 비HA 단일 서버의 경우에도 마찬가지입니다.

다른 연결 지향 프로토콜에도 연결 유지 기법이 있을 수 있습니다.

클라이언트측에서 TCP 연결 유지를 사용하면 물리적 호스트 간에 네트워크 주소 자원이 페일오버되거나 스위치오버된 경우 클라이언트에게 이를 알릴 수 있습니다. 네트워크 주소 자원을 전송하면 TCP 연결이 끊어집니다. 그러나 클라이언트에서 연결 유지를 사용하지 않는 한, TCP 연결이 끊어지더라도 이러한 사실을 알 수 없습니다.

예를 들어, 클라이언트가 장기간 실행 중인 요청에 대한 서버의 응답을 기다리고 있고, 클라이언트의 요청 메시지는 이미 서버에 도착하여 TCP 계층에 인식된 것으로 가정합니다. 이 경우 클라이언트의 TCP 모듈은 요청을 계속 재전송할 필요가 없으며 클라이언트 응용 프로그램이 차단된 상태로 요청에 대한 응답을 기다립니다.

가능한 경우 클라이언트 응용 프로그램은 TCP 연결 유지 기법을 사용하는 것 외에도 응용 프로그램 수준에서 자체적으로 연결 유지를 주기적으로 수행해야 합니다. 모든 상황에서 TCP 연결 유지 기법이 완벽한 것은 아니기 때문입니다. 일반적으로 응용 프로그램 수준의 연결 유지를 사용하면 클라이언트-서버 프로토콜에서 null 작업을 지원하거나 최소한 상태 작업과 같은 효율적인 읽기 전용 작업을 지원해야 합니다.

HA 데이터 서비스 테스트

이 절에서는 HA 환경에서 데이터 서비스 구현을 테스트하는 방법을 제안합니다. 테스트 사례는 제안 사항이며 모든 경우를 다 적어 놓은 것은 아닙니다. 테스트 기반 Sun Cluster 구성에 액세스하여 테스트 작업이 작업 시스템에 영향을 미치지 않도록 해야 합니다.

자원 그룹이 물리적 호스트 간에 이동되는 모든 경우에 HA 데이터 서비스가 올바로 동작하는지 테스트합니다. 이러한 경우에는 시스템 충돌과 scswitch 명령 사용이 포함됩니다. 이러한 이벤트 발생 후에도 클라이언트 시스템을 계속 사용할 수 있는지 테스트합니다.

메소드의 멱등원을 테스트합니다. 예를 들어, 원래 메소드를 두 번 이상 호출하는 간단한 쉘 스크립트로 각 메소드를 임시로 교체합니다.

자원 간 종속성 조정

경우에 따라 하나의 클라이언트-서버 데이터 서비스에서 클라이언트에 대한 요청을 이행하면서 다른 클라이언트-서버 데이터 서비스에 대한 요청을 합니다. 예를 들어, A가 서비스를 제공하기 위해 B가 서비스를 제공해야 하는 경우 데이터 서비스 A는 데이터 서비스 B에 종속됩니다. Sun Cluster에서는 자원 그룹내에서 자원 종속성을 구성할 수 있도록 허용하여 이 요구 사항을 제공합니다. 종속성은 Sun Cluster에서 데이터 서비스를 시작 및 중지하는 순서에 영향을 미칩니다. 자세한 내용은 scrgadm(1M) 설명서 페이지를 참조하십시오.

자원 유형의 자원이 다른 유형의 자원에 종속될 경우 클러스터 관리자에게 자원과 자원 그룹을 적절하게 구성하도록 지시하거나, 올바로 구성하도록 스크립트나 도구를 제공해야 합니다. 종속 자원을 “종속 대상” 자원과 동일한 노드에서 실행해야 할 경우 두 자원을 모두 동일한 자원 그룹에 구성해야 합니다.

명시적인 자원 종속성을 사용할지 또는 HA 데이터 서비스의 고유한 코드에서 다른 데이터 서비스의 가용성에 대해 명시적인 자원 종속성을 생략하고 폴링할지 여부를 결정합니다. 종속 및 종속 대상 자원을 서로 다른 노드에서 실행할 수 있는 경우 이들을 별도의 자원 그룹에 구성합니다. 이 경우 전체 그룹에 자원 종속성을 구성할 수 없기 때문에 폴링이 필요합니다.

일부 데이터 서비스에서는 직접 데이터를 저장하지 않지만, 대신 다른 백엔드 데이터 서비스에 종속되어 모든 데이터를 저장합니다. 그런 데이터 서비스에서는 모든 읽기 및 업데이트 요청을 백엔드 데이터 서비스의 호출로 변환합니다. 예를 들어, 모든 데이터를 Oracle과 같은 SQL 데이터베이스에 보관하는 가상의 클라이언트-서버 약속 캘린더 서비스를 고려해 보십시오. 약속 캘린더 서비스에는 고유한 클라이언트-서버 네트워크 프로토콜이 있습니다. 예를 들어, ONC RPC 같은 RPC 사양 언어를 사용하여 해당 프로토콜을 정의했을 수 있습니다.

Sun Cluster 환경에서 HA-ORACLE을 사용하여 백엔드 Oracle 데이터베이스의 가용성을 높일 수 있습니다. 그런 다음 약속 캘린더 데몬을 시작 및 중지하기 위한 간단한 메소드를 작성할 수 있습니다. 클러스터 관리자가 약속 캘린더 자원 유형을 Sun Cluster에 등록합니다.

약속 캘린더 응용 프로그램을 Oracle 데이터베이스와 동일한 노드에서 실행해야 할 경우 클러스터 관리자가 HA-ORACLE 자원과 동일한 자원 그룹에 약속 캘린더 자원을 구성하고, 약속 캘린더 자원을 HA-ORACLE 자원에 종속되게 합니다. 이 종속성은 scrgadmResource_dependencies 등록 정보 태그를 사용하여 지정합니다.

HA-ORACLE 자원을 약속 캘린더 자원과 다른 노드에서 실행할 수 있는 경우 클러스터 관리자는 두 개의 별도 자원 그룹에 이를 구성하고 Oracle 자원 그룹에 캘린더 자원 그룹의 자원 그룹 종속성을 구성할 수 있습니다. 그러나 자원 그룹 종속성은 자원 그룹을 모두 동일한 시간에 동일한 노드에서 시작 또는 중지할 경우에만 유효합니다. 따라서 캘린더 데이터 서비스 데몬을 시작한 후 Oracle 데이터베이스가 사용 가능하게 될 때까지 대기하도록 폴링할 수 있습니다. 캘린더 자원 유형의 Start 메소드에서는 대개 이 경우 성공을 반환합니다. 그러나 Start 메소드가 무기한 차단된 경우 이 메소드는 자원 그룹을 사용 중 상태로 만듭니다. 사용 중 상태에서는 그룹의 상태 변경(편집, 페일오버 또는 스위치오버)이 차단됩니다. 그러나 캘린더 자원의 Start 메소드가 시간 초과되거나 0 이외의 상태로 종료된 경우 Oracle 데이터베이스를 사용할 수 없는 동안에는 둘 이상의 노드 간에 자원 그룹이 핑퐁될 수 있습니다.