Computer >> 컴퓨터 >  >> 프로그램 작성 >> 데이터 베이스

Oracle RAC 노드 가중치 소개

Oracle RAC(Real Application Clusters) 환경에서 모든 인스턴스 또는 서버는 사설 네트워크에서 고속 상호 연결을 사용하여 서로 통신합니다. RAC의 인스턴스 구성원이 이 개인 상호 연결을 통해 서로 핑하거나 연결하는 데 실패하면 물리적으로 작동하고 실행 중인 모든 서버(및 해당 서버의 데이터베이스 인스턴스)가 분할 브레인 상태가 될 수 있습니다. .

Oracle 클러스터(Oracle RAC 12c Release 2 이전 버전)에서는 네트워크 또는 디스크 문제로 인해 스플릿 브레인 문제가 발생했을 때 노드 번호가 가장 낮은 노드가 클러스터에서 살아남았습니다. 그러나 최신 Oracle RAC 12cRelease 2에서는 분할 브레인으로 인해 하위 클러스터에 동일한 수의 노드가 생성되는 특정 경우에 대해 축출할 후보 노드를 선택하는 알고리즘이 변경되었습니다. .

이 블로그 게시물은 새로운 노드 가중치 기능을 기반으로 하는 OracleRAC 12c 릴리스 2의 노드 제거 알고리즘 변경 사항을 다룹니다.

노드 가중치 알고리즘 소개

다음 이미지는 노드 가중치 알고리즘을 보여줍니다.

Oracle RAC 노드 가중치 소개 Oracle의 노드 가중치

출처:https://goo.gl/images/qarxrq

노드 가중치는 펜싱 동안 클러스터에서 호스팅되는 워크로드를 고려하는 Oracle RAC 12c 릴리스 2에 도입된 새로운 기능입니다. 분할 브레인 상황이 발생하면 Oracle Clusterware는 특정 규칙을 적용하여 살아남은 코호트를 선택하고 시스템은 중요한 리소스로 실행 중인 노드를 축출할 수 있습니다. 이 새로운 기능을 사용하여 특정 노드에 가중치를 할당하고 노드가 클러스터에서 종료되는 것을 방지할 수 있습니다.

새로 생성된 태그 CSS\_CRITICAL , 다양한 수준 또는 구성 요소에 설정하여 클러스터가 오류 발생 시 이를 보존하려고 시도할 수 있도록 "중요"로 표시할 수 있습니다. Oracle Clusterware가 스플릿 브레인의 경우 제거할 노드를 결정할 때 CSS_CRITICAL 다른 기술적 이유가 노드의 생존을 금지하지 않는 한 태그는 적용됩니다(노드에 장애가 발생했을 때 하나 이상의 중요한 구성 요소가 있는 경우). 이 개념은 다른 모든 것이 동일하다면 대부분의 작업이 영향을 받지 않도록 합니다.

노드 가중치 알고리즘 작업

노드 가중치 알고리즘은 다음 작업을 수행합니다.

  • 데이터베이스 인스턴스 또는 서비스에 가중치를 할당합니다. -css_critical을 설정할 수 있습니다. yessrvctl 데이터베이스 추가 사용 또는 srvctl 서비스 추가 데이터베이스 인스턴스 또는 서비스를 추가할 때 명령. srvctl 데이터베이스 수정을 사용하여 매개변수를 설정하거나 변경할 수도 있습니다. 및 srvctl 서비스 수정 명령.
  • ora.*가 아닌 리소스에 가중치를 할당합니다. -attr CSS_CRITICAL=yes를 사용합니다. 리소스를 추가하거나 수정할 때 *crsctl add resource* 및 *crsctl modify resource* 명령이 있는 매개변수입니다.
  • 서버에 가중치를 할당합니다. -css_critical 매개변수를 yes로 설정 crsctl 세트 서버 사용 명령.

다음은 데이터베이스 인스턴스 또는 서비스에 가중치를 할당하는 몇 가지 예입니다.

$srvctl modify database –d <dbname> css\_critical yes
$srvctl modify service  –db  <dbname> -service <service_name> css_critical yes

리소스에 가중치가 할당되지 않은 경우 알고리즘은 다음 고려 사항을 검사합니다.

  • 최대 서비스 수를 생성한 노드는 무엇입니까?
  • 인스턴스에 대해 싱글톤 서비스가 생성됩니까?
  • 노드가 구성된 Flex ASM 인스턴스입니까?
  • 공용 네트워크 장애가 있었나요?
  • 노드 유형은 허브 또는 리프입니까?

테스트 케이스

다음 코드 연습은 bond2가 2노드 클러스터에 대한 개인 상호 연결로 사용되는 경우를 조사합니다.

$oifcfg getif
bond0  147.167.80.0  global  public
bond2  10.168.33.32  global  cluster\_interconnect
$olsnodes -s -n
node1   1       Active
node2   2       Active
$
$crsctl set server css\_critical yes
$crsctl get server css\_critical
CRS-5092: Current value of the server attribute CSS_CRITICAL is yes.
$

node1과 node2 사이의 통신 실패를 시뮬레이션하기 위해 bond2를 중지합시다.

#ifdown bond2

$olsnodes -s -n
node1   1       Active
node2   2       Inactive

OCSSD.trc의 출력

2018-01-09 11:01:21.220 :    CSSD:1825834752: clssnmrCheckNodeWeight: node(1) has weight stamp(393228187) pebbles (0) goldstars (0) flags (3) SpoolVersion (0)
2018-01-09 11:01:21.220 :    CSSD:1825834752: clssnmrCheckNodeWeight: node(2) has weight stamp(0) pebbles (0) goldstars (0) flags (0) SpoolVersion (0)
2018-01-09 11:01:21.727 :    CSSD:1825834752: clssnmrCheckNodeWeight: node(1) has weight stamp(393228187) pebbles (0) goldstars (0) flags (3) SpoolVersion (0)
2018-01-09 11:01:21.727 :    CSSD:1825834752: clssnmrCheckNodeWeight: node(2) has weight stamp(0) pebbles (0) goldstars (0) flags (0) SpoolVersion (0)
2018-01-09 11:01:21.727 :    CSSD:1825834752: clssnmrCheckNodeWeight: Server pool version not consistent
2018-01-09 11:01:21.727 :    CSSD:1825834752: clssnmrCheckNodeWeight: stamp(393228187), completed(1/2)

결론

RAC 12c 릴리스 2부터 새로운 알고리즘은 다음과 같이 제거하거나 유지(스플릿 브레인 시나리오 동안)할 노드를 결정합니다.

  • 하위 클러스터의 크기가 다른 경우 기능은 이전 릴리스와 동일합니다.

  • 모든 하위 클러스터의 크기가 같은 경우 기능이 다음과 같이 수정되었습니다.

    • 하위 클러스터의 노드 가중치가 같으면 노드 번호가 가장 낮은 하위 클러스터가 유지되어 2노드 클러스터에서 노드 번호가 가장 낮은 노드가 유지됩니다.
    • 하위 클러스터의 노드 가중치가 동일하지 않은 경우 가중치가 더 높은 하위 클러스터가 살아남아 2노드 클러스터에서 가중치가 낮아 노드 번호가 가장 낮은 노드가 제거됩니다.

서버 가중치 기반 노드 제거를 사용하여 분할 브레인의 경우 종료하거나 제거해야 하는 클러스터 노드를 선택하여 OracleClusterware 오류 복구 메커니즘에 대한 더 많은 제어를 얻습니다. 이 주제에 대해 질문이 있거나 지침이 필요한 경우 아래 필드에 의견을 추가할 수 있습니다.