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

서버에서 클라이언트에 이벤트를 전달하는 방법

클러스터 내에서 이벤트가 생성되면 CRNP 서버는 해당 유형의 이벤트를 요청한 모든 클라이언트에게 이벤트를 전달합니다. 이러한 전달은 SC_EVENT 메시지를 클라이언트의 콜백 주소로 보내는 것으로 이루어집니다. 각 이벤트의 전달은 새 TCP 연결에서 수행됩니다.

ADD_CLIENT 메시지나 ADD_EVENT 메시지를 포함하는 SC_CALLBACK_REG 메시지를 통해 클라이언트가 이벤트 유형을 등록한 직후에 서버는 해당 유형의 최신 이벤트를 클라이언트에게 보냅니다. 이렇게 하면 클라이언트는 후속 이벤트를 보내는 시스템의 현재 상태를 확인할 수 있습니다.

서버는 클라이언트에 대한 TCP 연결을 시작할 때 정확하게 하나의 SC_EVENT 메시지를 연결을 통해 보냅니다. 그런 다음 서버는 전이중 닫기를 실행합니다.

예를 들어, 클라이언트는 다음 작업을 수행합니다.

  1. 서버가 TCP 연결을 시작하기를 기다립니다.

  2. 서버로부터 들어오는 연결을 수락합니다.

  3. 서버로부터 SC_EVENT 메시지를 기다립니다.

  4. 서버로부터 SC_EVENT 메시지를 읽습니다.

  5. 서버가 연결을 닫았다는 표시를 수신합니다(소켓에서 0바이트를 읽음).

  6. 연결을 닫습니다.

등록된 모든 클라이언트는 해당 콜백 주소(IP 주소 및 포트 번호)에서 들어오는 이벤트 전달 연결을 계속 수신해야 합니다.

서버가 이벤트 전달을 위해 클라이언트에 연결하는 데 실패할 경우 지정된 간격으로 여러 번에 걸쳐 이벤트 전달을 다시 시도합니다. 모든 시도에 실패하면 서버의 클라이언트 목록에서 해당 클라이언트가 제거됩니다. 또한 클라이언트는 ADD_CLIENT 메시지를 포함하는 다른 SC_CALLBACK_REG 메시지를 보내 다시 등록해야만 추가 이벤트를 받을 수 있습니다.

이벤트 전달을 보장하는 방법

클러스터에서의 전체 이벤트 생성 순서가 각 클라이언트에 대한 이벤트 전달 순서가 됩니다. 다시 말해서 클러스터 내에서 이벤트 A가 이벤트 B보다 먼저 생성된 경우 클라이언트 X는 이벤트 B를 받기 전에 이벤트를 A를 받습니다. 그러나 모든 클라이언트에 대해 전체 이벤트 전달 순서가 유지되는 것은 아닙니다. 즉, 클라이언트 Y는 클라이언트 X가 이벤트 A를 받기 전에 이벤트 A와 B를 모두 받을 수 있습니다. 이는 속도가 느린 클라이언트가 모든 클라이언트에 대한 이벤트 전달을 방해하지 않는다는 것을 의미합니다.

클러스터가 생성한 이벤트를 누락시키는 오류가 서버에서 발생하는 경우를 제외하고 서버가 전달하는 모든 이벤트(하위 클래스에 대한 첫 번째 이벤트와 서버 오류 이후의 이벤트는 제외)는 클러스터가 생성하는 실제 이벤트에 응답하여 발생합니다. 이 경우 서버는 해당 유형의 시스템의 현재 상태를 나타내는 각 이벤트 유형에 대해 이벤트를 생성합니다. 각 이벤트는 해당 이벤트 유형을 원하는 등록된 클라이언트에게 보내집니다.

이벤트 전달에는 “최소한 한 번 이상”이라는 표현이 적용됩니다. 즉, 서버에서 동일한 이벤트를 클라이언트에 두 번 이상 보낼 수 있습니다. 이 기능은 서버가 일시적으로 다운되었다가 다시 원래 상태로 돌아왔을 때 클라이언트가 최신 정보를 받았는지 확인할 수 없는 경우에 필요합니다.

SC_EVENT 메시지의 내용

SC_EVENT 메시지는 클러스터 내에서 생성되어 SC_EVENT XML 메시지 형식에 맞게 변환된 실제 메시지를 포함합니다. 다음 표에는 이름 및 값 쌍, 게시자 및 공급업체를 비롯하여 CRNP가 제공하는 이벤트 유형이 설명되어 있습니다.


주 –

state_list에 대한 배열 요소의 위치는 node_list에 대한 배열 요소의 위치와 동기화됩니다. 즉, node_list 배열에 첫 번째로 나열된 노드의 상태는 state_list 배열에서도 첫 번째로 나열됩니다.

ev_로 시작하는 추가 이름과 관련 값이 존재할 수 있지만 이러한 값은 클라이언트가 사용하도록 되어 있지 않습니다.


클래스 및 하위 클래스 

게시자 및 공급업체 

이름 및 값 쌍 

EC_Cluster

ESC_cluster_membership

게시자: rgm 

공급업체: SUNW 

이름: node_list

값 유형: 문자열 배열 

이름: state_list

state_list는 ASCII로 표시되는 숫자만 포함합니다. 각 숫자는 클러스터의 해당 노드에 대한 현재 구현 번호를 나타냅니다. 이 번호가 이전 메시지에서 받은 번호와 같을 경우 노드의 클러스터에 대한 관계(이탈, 결합 또는 재결합)가 변경되지 않은 것입니다. 구현 번호가 –1일 경우 노드는 클러스터의 구성원이 아닙니다. 구현 번호가 음수가 아닌 숫자일 경우 노드는 클러스터의 구성원입니다.

값 유형: 문자열 배열 

EC_Cluster

ESC_cluster_rg_state

게시자: rgm 

공급업체: SUNW 

이름: rg_name

값 유형: 문자열 

이름: node_list

값 유형: 문자열 배열 

이름: state_list

state_list는 자원 그룹의 상태에 대한 문자열 표시를 포함합니다. 유효한 값은 scha_cmds(1HA) 명령으로 검색할 수 있는 값입니다.

값 유형: 문자열 배열 

EC_Cluster

ESC_cluster_r_state

게시자: rgm 

공급업체: SUNW 

이름: r_name

값 유형: 문자열 

이름: node_list

값 유형: 문자열 배열 

이름: state_list

state_list는 자원의 상태에 대한 문자열 표시를 포함합니다. 유효한 값은 scha_cmds(1HA) 명령으로 검색할 수 있는 값입니다.

값 유형: 문자열 배열