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

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

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 데이터베이스를 사용할 수 없는 동안에는 둘 이상의 노드 간에 자원 그룹이 핑퐁될 수 있습니다.