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

10장 일반 데이터 서비스

이 장에서는 일반 데이터 서비스(GDS)에 대하여 설명하고 SunPlex Agent Builder 또는 표준 Sun Cluster 관리 명령을 사용하여 GDS를 사용하는 서비스를 만드는 방법을 설명합니다.

GDS 개요

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

GDS는 사전에 컴파일된 하나의 데이터 서비스입니다. 사전 컴파일된 데이터 서비스와 해당 구성 요소, 콜백 메소드(rt_callbacks(1HA)) 구현 및 자원 유형 등록 파일(rt_reg(4))을 수정할 수 없습니다.

사전 컴파일된 자원 유형

일반 데이터 서비스 자원 유형 SUNW.gdsSUNWscgds 패키지에 포함되어 있습니다. 클러스터를 설치할 때 scinstall(1M) 유틸리티가 이 패키지를 설치합니다. SUNWscgds 패키지에는 다음과 같은 파일이 포함되어 있습니다.


# pkgchk -v SUNWscgds 

/opt/SUNWscgds 
/opt/SUNWscgds/bin 
/opt/SUNWscgds/bin/gds_monitor_check 
/opt/SUNWscgds/bin/gds_monitor_start 
/opt/SUNWscgds/bin/gds_monitor_stop 
/opt/SUNWscgds/bin/gds_probe 
/opt/SUNWscgds/bin/gds_svc_start 
/opt/SUNWscgds/bin/gds_svc_stop 
/opt/SUNWscgds/bin/gds_update 
/opt/SUNWscgds/bin/gds_validate 
/opt/SUNWscgds/etc 
/opt/SUNWscgds/etc/SUNW.gds

GDS를 사용하는 이유

GDS에는 SunPlex Agent Builder 생성 소스 코드 모델(scdscreate(1HA) 참조)이나 표준 Sun Cluster 관리 명령 사용시 다음과 같은 장점이 있습니다.

GDS를 사용하는 서비스를 만드는 방법

GDS를 사용하는 서비스를 만드는 다음 두 가지 방법이 있습니다.

GDS 및 SunPlex Agent Builder

SunPlex Agent Builder를 사용하여 GDS를 생성된 소스 코드 유형으로 선택합니다. 지정된 응용 프로그램을 위한 자원을 구성하는 관리 스크립트 세트를 만드는 데는 사용자 입력이 사용됩니다.

GDS 및 표준 Sun Cluster 관리 명령

이 메소드는 SUNWscgds의 사전 컴파일된 데이터 서비스 코드를 사용하지만 시스템 관리자는 표준 Sun Cluster 관리 명령(scrgadm(1M)scswitch(1M))을 사용하여 자원을 만들고 구성해야 합니다.

GDS 기반 서비스 구성에 사용할 방법 선택

Sun Cluster 관리 명령을 사용하여 GDS를 사용하는 고가용성 서비스를 만드는 방법GDS를 사용하는 확장 가능 서비스를 만들기 위한 표준 Sun Cluster 관리 명령의 절차에서 설명하는 것처럼 필요한 scrgadmscswitch 명령을 실행하려면 많은 양을 입력해야 합니다.

SunPlex Agent Builder를 통해 GDS를 사용하면 scrgadmscswitch 명령을 대신 실행해주는 관리 스크립트를 만들기 때문에 간단하게 처리할 수 있습니다.

GDS 기법을 사용하지 않을 경우

GDS를 사용하면 많은 장점이 있지만 GDS를 사용하는 것이 적절하지 않은 경우가 있습니다. 다음과 같은 경우 GDS 기법을 사용하지 않습니다.

GDS의 필수 등록 정보

다음 등록 정보를 제공해야 합니다.

Start_command 확장 등록 정보

Start_command 확장 등록 정보에서 지정한 시작 명령에서 응용 프로그램을 시작합니다. 이 명령은 쉘에 바로 전달되어 응용 프로그램을 시작할 수 있도록 인자가 모두 지정된 UNIX 명령이어야 합니다.

Port_list 등록 정보

Port_list 등록 정보는 응용 프로그램이 수신하는 포트 목록을 식별합니다. Port_list 등록 정보는 SunPlex Agent Builder에 의해 작성되는 시작 스크립트에 지정되거나 표준 Sun Cluster 관리 명령을 사용할 경우에는 scrgadm 명령에 지정되어야 합니다.

GDS의 선택적 등록 정보

선택적 GDS 등록 정보에는 다음이 포함됩니다.

Network_resources_used 등록 정보

이 등록 정보의 기본값은 null입니다. 응용 프로그램이 하나 이상의 주소에 바인드되어야 하는 경우에는 이 등록 정보를 지정해야 합니다. 이 등록 정보가 생략되거나 Null로 지정되면 응용 프로그램이 모든 주소에서 수신하는 것으로 처리됩니다.

GDS 자원을 구성하기 전에 LogicalHostname 또는 SharedAddress 자원이 이미 구성되어 있어야 합니다. LogicalHostname 또는 SharedAddress 자원을 구성하는 방법에 대한 정보는 Sun Cluster Data Services Planning and Administration Guide for Solaris OS를 참조하십시오.

값을 지정하려면 하나 이상의 자원 이름을 지정합니다. 각 자원 이름에는 하나 이상의 LogicalHostname 또는 하나 이상의 SharedAddress가 포함될 수 있습니다. 자세한 내용은 r_properties (5)를 참조하십시오.

Stop_command 등록 정보

중지 명령은 응용 프로그램을 중지하고 응용 프로그램이 완전히 중지된 다음에만 반환되어야 합니다. 이 명령은 쉘에 바로 전달되어 응용 프로그램을 중지시킬 수 있도록 완성된 UNIX 명령이어야 합니다.

Stop_command를 입력하면 GDS 중지 메소드는 중지 시간 초과값의 80% 동안 중지 명령을 실행합니다. 중지 명령의 실행 결과와 관계없이 GDS 중지 메소드는 중지 시간 초과값의 15% 동안 SIGKILL을 전달합니다. 남은 5%의 시간은 작업 관리 오버헤드를 위해 예약됩니다.

중지 명령이 생략되면 GDS가 Stop_signal에 지정된 신호를 사용하여 응용 프로그램을 중지시킵니다.

Probe_command 등록 정보

검사 명령으로 지정된 응용 프로그램의 상태를 주기적으로 검사합니다. 이 명령은 쉘에 바로 전달되어 응용 프로그램을 검사할 수 있도록 인자가 모두 지정된 UNIX 명령이어야 합니다. 응용 프로그램이 정상일 경우 검사 명령은 0인 종료 상태를 반환합니다.

검사 명령의 종료 상태는 응용 프로그램의 장애 수준을 확인하는 데 사용됩니다. 검사 상태라고 부르는 이 종료 상태는 0 (성공)과 100 (완전한 실패) 사이의 정수이어야 합니다. 검사 상태가 특수한 값 201이 될 수도 있는데, 이 값이 반환되면 Failover_enabled가 false로 설정되지 않은 경우에 즉시 응용 프로그램을 페일오버합니다. 검사 상태는 GDS 검사 알고리즘 내에서 사용됩니다. 응용 프로그램을 로컬로 다시 시작할지 또는 다른 노드로 페일오버할지 결정하려면 scds_fm_action(3HA)을 참조하십시오. 종료 상태가 201인 경우 응용 프로그램이 즉시 페일오버됩니다.

검사 명령이 생략되면 GDS에서 Network_resources_used 등록 정보에 있는 IP 주소 세트나 scds_get_netaddr_list(3HA)의 출력을 통해 응용 프로그램에 연결하는 간단한 자체 검사를 제공합니다. 연결에 성공하면 즉시 연결을 끊습니다. 연결과 연결 끊기가 모두 성공하면 응용 프로그램이 안정적으로 실행되는 것으로 판단할 수 있습니다.


주 –

GDS에 의해 제공되는 검사는 완전한 기능의 응용 프로그램 검사를 대신하여 간단한 기능만 합니다.


Start_timeout 등록 정보

이 등록 정보에서 시작 명령에 대한 시작 시간 초과를 지정합니다(자세한 내용은 Start_command 확장 등록 정보 참조). Start_timeout의 기본값은 300초입니다.

Stop_timeout 등록 정보

이 등록 정보에서 중지 명령에 대한 중지 시간 초과를 지정합니다(자세한 내용은 Stop_command 등록 정보 참조). Stop_timeout의 기본값은 300초입니다.

Probe_timeout 등록 정보

이 등록 정보에서 검사 명령에 대한 시간 초과값을 지정합니다(자세한 내용은 Probe_command 등록 정보 참조). Probe_timeout의 기본값은 30초입니다.

Child_mon_level 등록 정보

이 등록 정보에서 PMF를 통해 모니터되는 프로세스에 대한 제어를 제공합니다. 이 등록 정보는 분기된 자식 프로세스에 대한 모니터 범위를 나타냅니다. 이 등록 정보는 pmfadm(1M) 명령에 -C 인자를 사용한 것과 유사합니다.

이 등록 정보를 생략하거나 기본값 -1로 설정하면 pmfadm 명령에서 -C 옵션을 생략하는 것과 동일한 효과가 있습니다. 즉, 모든 자식 및 그 하위가 모니터됩니다.


주 –

이 옵션 지정에는 표준 Sun Cluster 관리 명령만 사용할 수 있습니다. SunPlex Agent Builder를 사용하는 경우에는 이 옵션을 지정할 수 없습니다.


Failover_enabled 등록 정보

이 부울 확장 등록 정보는 자원의 페일오버 동작을 제어합니다. 이 확장 등록 정보를 true로 설정한 경우 retry_interval 내(초)에 재시작 횟수가 retry_count를 초과하면 응용 프로그램이 페일오버됩니다.

이 확장 등록 정보가 false로 설정되면 retry_interval의 초 단위 시간 내에 재시작 횟수가 retry_count를 초과할 경우에 응용 프로그램이 다시 시작되거나 다른 노드로 페일오버되지 않습니다.

이 확장 등록 정보를 사용하면 응용 프로그램 자원이 자원 그룹의 페일오버를 시작하지 못하게 할 수 있습니다. 기본값은 true입니다.

Stop_signal 등록 정보

GDS는 이 정수 확장 등록 정보 값을 사용하여 PMF를 통해 응용 프로그램 중지에 사용한 신호를 확인합니다. 지정할 수 있는 정수 값 목록은 signal(3HEAD)을 참조하십시오. 기본값은 15 (SIGTERM)입니다.

SunPlex Agent Builder를 사용하여 GDS를 사용하는 서비스 만들기

SunPlex Agent Builder를 사용하여 GDS를 사용하는 서비스를 만들 수 있습니다. SunPlex Agent Builder는 제 9 장에 보다 자세히 설명되어 있습니다.

SunPlex Agent Builder에서 GDS를 사용하는 서비스 만들기

Agent Builder에서 GDS를 사용하는 서비스 만들기
  1. SunPlex Agent Builder를 시작합니다.


    # /usr/cluster/bin/scdsbuilder
    
  2. SunPlex Agent Builder 창이 열립니다.

    주 Agent Builder 화면을 표시하는 SunPlex Agent Builder라는 대화 상자
  3. Vendor Name을 입력합니다.

  4. Application Name을 입력합니다.


    주 –

    Vendor Name과 Application Name을 합해서 9자를 넘으면 안됩니다. 관리 스크립트에 대한 패키지 이름으로 사용됩니다.


  5. 작업 디렉토리로 이동합니다.

    경로를 입력하지 않고 Browse 풀다운 메뉴를 사용하여 디렉토리를 선택할 수 있습니다.

  6. 데이터 서비스가 확장 가능인지 아니면 페일오버인지 선택합니다.

    Network Aware는 GDS를 구성할 때 기본값이기 때문에 선택하지 않아도 됩니다.

  7. GDS를 선택합니다.

  8. Create 버튼을 눌러 관리 스크립트를 만듭니다.

  9. SunPlex Agent Builder 창에 서비스를 구성한 결과가 표시됩니다. Create 버튼이 회색으로 표시되어 비활성화되면 이제 Next 버튼을 사용할 수 있습니다.

    정보를 입력한 후의 Create 화면을 나타내는 대화 상자
관리 스크립트 구성

관리 스크립트를 만든 후에는 SunPlex Agent Builder를 사용하여 새 서비스를 구성해야 합니다.

  1. Next 버튼을 누르십시오. 구성 창이 나타납니다.

  2. Start 명령의 위치를 입력하거나 Browse 버튼을 사용하여 Start 명령을 찾습니다.

  3. (옵션) Stop 명령을 입력하거나 Browse 버튼을 사용하여 Stop 명령을 찾습니다.

  4. (옵션) Probe 명령을 입력하거나 Browse 버튼을 사용하여 Probe 명령을 찾습니다.

  5. (옵션) Start, Stop 및 Probe 명령에 대한 시간 초과값을 지정합니다.

  6. Configure를 눌러 관리 스크립트 구성을 시작합니다.


    주 –

    패키지 이름은 Vendor Name과 Application Name을 연결하여 구성됩니다.


    관리 스크립트 패키지가 다음 위치에 만들어집니다.


    <working-dir>/<vendor_name><application>/pkg
    
    예: /export/wdir/NETapp/pkg

  7. 완성된 패키지를 클러스터의 모든 노드에 설치합니다.


    # cd /export/wdir/NETapp/pkg 
    # pkgadd -d . NETapp
    

  8. pkgadd에서 다음과 같은 파일이 설치됩니다.


    /opt/NETapp 
    /opt/NETapp/README.app 
    /opt/NETapp/man 
    /opt/NETapp/man/man1m 
    /opt/NETapp/man/man1m/removeapp.1m 
    /opt/NETapp/man/man1m/startapp.1m 
    /opt/NETapp/man/man1m/stopapp.1m 
    /opt/NETapp/man/man1m/app_config.1m 
    /opt/NETapp/util 
    /opt/NETapp/util/removeapp 
    /opt/NETapp/util/startapp 
    /opt/NETapp/util/stopapp 
    /opt/NETapp/util/app_config


    주 –

    설명서 페이지와 스크립트 이름은 앞에 스크립트 이름을 사용하고 뒤에는 위에서 입력한 Application Name을 사용하여 만듭니다(예:startapp).


    설명서 페이지를 보려면 설명서 페이지에 대한 경로를 지정해야 합니다. 예를 들어, startapp 설명서 페이지를 보려면 다음 명령을 사용하십시오.


    # man -M /opt/NETapp/man startapp
    
  9. 클러스터의 한 노드에서 자원을 구성하고 응용 프로그램을 시작합니다.


    # /opt/NETapp/util/startapp -h <logichostname> -p <port and protocol list>
    

    시작 스크립트의 매개 변수는 자원의 유형에 따라 달라집니다 (failover 또는 scalable). 사용자 지정된 설명서 페이지를 확인하거나 인자 없이 시작 스크립트를 실행하여 사용 방법을 확인하십시오.


    # /opt/NETapp/util/startapp
     The resource name of LogicalHostname or SharedAddress must be
     specified. 
     For failover services: 
     Usage: startapp -h <logical host name> 
              -p <port and protocol list> 
              [-n <ipmpgroup/adapter list>] 
     For scalable services: 
     Usage: startapp  
              -h <shared address name> 
              -p <port and protocol list> 
              [-l <load balancing policy>]  
              [-n <ipmpgroup/adapter list>] 
              [-w <load balancing weights>]

SunPlex Agent Builder의 출력

SunPlex Agent Builder는 패키지를 만들 때 사용자가 입력한 정보를 기준으로 세 개의 관리 스크립트와 하나의 구성 파일을 생성합니다. 구성 파일은 자원 그룹과 자원 유형의 이름을 지정합니다.

관리 스크립트는 다음과 같습니다.

이 관리 스크립트는 인터페이스와 기능이 GDS 기반이 아닌 에이전트를 위해 SunPlex Agent Builder에서 만드는 유틸리티 스크립트와 동일합니다. 스크립트는 여러 클러스터에서 다시 사용할 수 있도록 Solaris 패키지로 패키지화됩니다.

scrgadm 명령에 입력으로 지정하는 자원 그룹과 기타 매개 변수의 이름을 원하는 대로 지정하여 구성 파일을 사용자 정의할 수 있습니다. 스크립트를 사용자 지정하지 않으면 SunPlex Agent Builder가 scrgadm 매개 변수에 적절한 기본값을 제공합니다.

표준 Sun Cluster 관리 명령을 사용하여 GDS를 사용하는 서비스 만들기

이 절에서는 이 매개 변수가 실제로 GDS에 입력될 수 있는 방법에 대해 설명합니다. GDS는 scrgadmscswitch와 같은 기존 Sun Cluster 관리 명령을 통해 사용되고 관리됩니다.

관리 스크립트가 필요한 기능을 제공하는 경우에는 이 절에 있는 낮은 수준의 관리 명령을 입력할 필요가 없습니다. 그러나 GDS 기반 자원을 세부적으로 제어해야 할 경우에는 이 절에서 설명하는 관리 명령이 필요합니다. 이 명령은 실제로 관리 스크립트에 의해 실행되는 명령입니다.

Sun Cluster 관리 명령을 사용하여 GDS를 사용하는 고가용성 서비스를 만드는 방법
  1. 자원 유형 SUNW.gds를 등록합니다.


    # scrgadm -a -t SUNW.gds
    
  2. LogicalHostname 자원과 페일오버 서비스 자체를 포함하는 자원 그룹을 만듭니다.


    # scrgadm -a -g haapp_rg
    
  3. LogicalHostname 자원을 위한 자원을 만듭니다.


    # scrgadm -a -L -g haapp_rs -l hhead
    
  4. 페일오버 서비스 자체를 위한 자원을 만듭니다.


    # scrgadm -a -j haapp_rs -g haapp_rg -t SUNW.gds \
             -y Scalable=false -y Start_timeout=120 \
             -y Stop_timeout=120 -x Probe_timeout=120 \
             -y Port_list="2222/tcp" \
             -x Start_command="/export/ha/appctl/start" \
             -x Stop_command="/export/ha/appctl/stop" \    
             -x Probe_command="/export/app/bin/probe" \
             -x Child_mon_level=0 -y Network_resources_used=hhead \
             -x Failover_enabled=true -x Stop_signal=9
    
  5. 자원 그룹 haapp_rg를 온라인 상태로 전환합니다.


    # scswitch -Z -g haapp_rg
    
GDS를 사용하는 확장 가능 서비스를 만들기 위한 표준 Sun Cluster 관리 명령
  1. 자원 유형 SUNW.gds를 등록합니다.


    # scrgadm -a -t SUNW.gds
    
  2. SharedAddress 자원을 위한 자원 그룹을 만듭니다.


    # scrgadm -a -g sa_rg
    

  3. sa_rg에 SharedAddress 자원을 만듭니다.


    # scrgadm -a -S -g sa_rg -l hhead
    
  4. 확장 가능 서비스를 위한 자원 그룹을 만듭니다.


    # scrgadm -a -g app_rg -y Maximum_primaries=2 \
          -y Desired_primaries=2 -y RG_dependencies=sa_rg
    
  5. 확장 가능 서비스 자체를 위한 자원 그룹을 만듭니다.


    # scrgadm -a -j app_rs -g app_rg -t SUNW.gds \
           -y Scalable=true -y Start_timeout=120 \ 
           -y Stop_timeout=120 -x Probe_timeout=120 \
           -y Port_list="2222/tcp" \
           -x Start_command="/export/app/bin/start" \
           -x Stop_command="/export/app/bin/stop" \
           -x Probe_command="/export/app/bin/probe" \
           -x Child_mon_level=0 -y Network_resource_used=hhead \
           -x Failover_enabled=true -x Stop_signal=9 
    
  6. 네트워크 자원이 포함된 자원 그룹을 온라인 상태로 전환합니다.


     # scswitch -Z -g sa_rg
    
  7. 자원 그룹 app_rg를 온라인 상태로 전환합니다.


    # scswitch -Z -g app_rg
    

SunPlex Agent Builder에 대한 명령줄 인터페이스

SunPlex Agent Builder에는 GUI 인터페이스와 동일한 기능을 가진 명령줄 인터페이스가 있습니다. 이 인터페이스는 scdscreate(1HA)scdsconfig(1HA) 명령으로 구성됩니다. 다음 절에서는 GUI 기반의 절차 Agent Builder의 명령줄 버전을 사용하여 GDS를 사용하는 서비스 만들기와 동일한 기능을 수행하지만 GUI 인터페이스를 사용하지 않습니다.

Agent Builder의 명령줄 버전을 사용하여 GDS를 사용하는 서비스 만들기
  1. 서비스를 만듭니다.

    페일오버 서비스의 경우에는 다음 명령을 사용하십시오.


    # scdscreate -g -V NET -T app -d /export/wdir
    

    확장 가능 서비스의 경우에는 다음 명령을 사용하십시오.


    # scdscreate -g -s -V NET -T app -d /export/wdir
    

    주 –

    –d 매개 변수는 선택적입니다. 이 매개 변수를 지정하지 않으면 작업 디렉토리가 현재 디렉토리로 기본 설정됩니다.


  2. 서비스를 구성합니다.


    # scdsconfig -s "/export/app/bin/start' -t "/export/app/bin/stop" \
    -m "/export/app/bin/probe" -d /export/wdir
    


    주 –

    시작 명령만 필수입니다. 다른 매개 변수는 모두 선택 사항입니다.


  3. 완성된 패키지를 클러스터의 모든 노드에 설치합니다.


    # cd /export/wdir/NETapp/pkg 
    # pkgadd -d . NETapp
    

  4. pkgadd에서 다음과 같은 파일이 설치됩니다.


    /opt/NETapp 
    /opt/NETapp/README.app 
    /opt/NETapp/man 
    /opt/NETapp/man/man1m 
    /opt/NETapp/man/man1m/removeapp.1m 
    /opt/NETapp/man/man1m/startapp.1m 
    /opt/NETapp/man/man1m/stopapp.1m 
    /opt/NETapp/man/man1m/app_config.1m 
    /opt/NETapp/util 
    /opt/NETapp/util/removeapp 
    /opt/NETapp/util/startapp 
    /opt/NETapp/util/stopapp 
    /opt/NETapp/util/app_config


    주 –

    설명서 페이지와 스크립트 이름은 앞에 스크립트 이름을 사용하고 뒤에는 위에서 입력한 Application Name을 사용하여 만듭니다(예: startapp).


    설명서 페이지를 보려면 설명서 페이지에 대한 경로를 지정해야 합니다. 예를 들어, startapp 설명서 페이지를 보려면 다음 명령을 사용하십시오.


    # man -M /opt/NETapp/man startapp
    
  5. 클러스터의 한 노드에서 자원을 구성하고 응용 프로그램을 시작합니다.


    # /opt/NETapp/util/startapp -h <logichostname> -p <port and protocol list>
    

    시작 스크립트의 매개 변수는 자원의 유형에 따라 달라집니다 (failover 또는 scalable). 사용자 지정된 설명서 페이지를 확인하거나 인자 없이 시작 스크립트를 실행하여 사용 방법을 보십시오.


    # /opt/NETapp/util/startapp 
     The resource name of LogicalHostname or SharedAddress must be
     specified.
     For failover services: 
     Usage: startapp -h <logical host name> 
              -p <port and protocol list> 
              [-n <ipmpgroup/adapter list>] 
     For scalable services: 
     Usage: startapp  
              -h <shared address name> 
              -p <port and protocol list> 
              [-l <load balancing policy>]  
              [-n <ipmpgroup/adapter list>] 
              [-w <load balancing weights>]