문서유형ㅣ기술정보
분야ㅣ관리/환경설정
적용제품버전ㅣTibero6, Tibero7
문서번호ㅣTADTI200
개요
본 문서는 TAC 환경에서 Veritas 클러스터 파일 시스템(이하: VCFS)을 사용하는 경우 사용자의 기동 절차 미준수로 TAC Split Brain 발생하는 현상에 대해 기술하였습니다.
방법
VxCFS
- VxCFS는 Veritas의 클러스터 파일 시스템 솔루션 입니다.
- VxCFS를 사용하는 경우 로우 디바이스를 클러스터로 묶어 공유 파일 시스템으로 사용할 수 있습니다.
- Oracle ASM, Tibero TAS 등과 비슷함, TAS의 경우 파일 시스템으로 사용이 불가합니다.
TAC/VxCFS
- VxCFS 공유 파일 시스템을 통해 TAC 구성 시 VxCFS가 정상적으로 기동 되었는지 확인 후 TAC 기동이 진행 되어야합니다.
- VxCFS의 mount_vxfs는 Veritas 솔루션이 자동으로 마운트하며, 설명을 위해 기술하였습니다.
VxCFS 사용 환경 기동 순서
1) 운영체제 기동
2) 운영체제 디바이스 장치 연결
3) Veritas 기동 수행
4) Veritas 기동 완료
5) Tibero Cluster Manager 기동
6) Tibero Cluster Manager 확인
7) Tibero Database Instance 기동
8) Tibero Database Instance 확인
TAC/VxCFS Split Brain
- 정상적으로 기동 된 상태라면, VxCFS 영향으로 Split Brain 현상이 나타나지 않습니다.
- TAC 노드가 모두 기동 된 상태에서 한쪽 노드씩 OS 재기동을 수행하는 경우 발생할 수 있습니다.
TAC 1번 OS/Veritas/TAC 정지
VxCFS 사용 환경 정지 순서
1) Tibero Database Instance 정지 수행
2) Tibero Database Instance 정지 확인
3) Tibero Cluster Manager 정지 수행
4) Tibero Cluster Manager 정지 확인
5) Vertias 정지 수행
6) Veritas 정지 확인
7) 운영체제 정지
TAC 1번 OS/Veritas/TAC 기동
- 운영체제 기동과 운영체제 관련 디바이스가 정상적으로 연결된 상태에서 발생할 수 있습니다.
Split Brain 발생 현상 순서
- Split Braint이 발생하는 순서는 1~8 번호 순서대로 기동이 정상적으로 이루어져야 하지만, 그렇지 않은 경우 문제가 발생합니다.
- "3)"이 수행되기 전에 "5)", "6)"이 먼저 수행되면 Tibero Cluster Manager에서 이상 동작이 발생합니다.
1) 운영체제 기동
- 정상적으로 기동
2) 운영체제 디바이스 장치 연결
- 정상적으로 확인
5) Tibero Cluster Manager 기동
- VxCFS의 CMFILE에 접근을 해야하지만, Veritas기동이 안되어 로컬의 CMFILE 경로에 접근
- 2번 노드의 CMFILE을 읽어 들일 수 없어, 1번 노드가 Master 노드로 기동 됨
6) Tibero Cluster Manager 확인
- 정상적으로 CMFILE을 생성하고 클러스터가 UP 되어 있음
3) Veritas 기동 수행
- Veritas가 기동되며 기존에 CMFILE을 쓰고 있던 경로가 활성화 됨
- 기존 CMFILE 경로가 활성화되지만, 여전히 "5)" 단계에서 로컬의 CMFILE 경로를 UP 상태로 가지고 있음
4) Veritas 기동 완료
- Veritas 입장에서는 정상 기동된 것으로 판단
7) Tibero Database Instance 기동
- 1번 노드 tbboot 수행 시 1번 노드와 2번 노드가 서로 다른 CMFILE을 바라보고 있는 상태
- 위와 같은 상황에서 정상적인 시그널을 TAC 노드 간 공유하지 못하는 현상 발생
8) Tibero Database Instance 확인
- 양 쪽 노드가 모두 normarl 모드로 기동 되어 있는 상태로 한쪽에서 I/O가 이루어지게 되면 인터널 에러를 받고 인스턴스 다운 발생
- 각 노드의 REDO의 TSN이 달라 CF와 DF의 TSN 정보가 맞지 않는 현상 발생 (1번 또는 2번에서 현상이 나타날 수 있음)
- 1번 노드와 2번 노드가 서로 CMFILE을 공유하지 못하고 상대 노드가 다운된 것으로 판단하는 상황 발생
- 1번 노드에서 I/O가 이루어져 REDO로그와 CF와 DF의 TSN이 업데이트 됨
- 1번 노드는 2번 노드의 존재를 다운으로 보기 때문에 정보를 공유하지 않음
- 2번 노드에서 CF와 DF의 TSN이 2번 노드의 REDO와 달라 인터널 에러 발생
Internal Error [Code:RV_0ZQNII] with condition '((tsnval_t)((((uint64_t)(uint16_t)(tsn_wrap(low_cache->tsn))) << 32) | \ ((uint64_t)(uint32_t)(tsn_base(low_cache->tsn))))) >= ((tsnval_t)((((uint64_t)(uint16_t)(tsn_wrap(org->low_cache.tsn))) << 32) | \ ((uint64_t)(uint32_t)(tsn_base(org->low_cache.tsn)))))' (2 args) (cf_ckpt.c:105:cf_put_ckpt_progress) (pid=20413, sessid=284, tid=284)
대응 방안
본 현상은 정지/기동 절차 미 준수로 인해 발생하는 현상입니다.
기본적으로 기동 절차 수행 시 각각의 솔루션들의 정상 기동 확인을 필수적으로 진행되어야 합니다.
기동 절차 미 준수로 인해 TAC Split Brain 현상이 발생하여 데이터베이스 정합성에 손상을 주었다면, 다음과 같은 절차를 진행할 수 있습니다.
- 테이블 전체 FULL SCAN COUNT 정합성 확인
- 손상된 테이블이 발견되는 경우 데이터베이스 백업 본을 통한 복구 수행