http://blog.naver.com/kiyoun82/110071439206
|
* RAC [ Real Application Cluster]
- Application : 클라이언트, 리스너 같은 데이터 베이스로 부터 서비를 받는 모든 것들..
- Cluster : 군집, 집합
: 하나의 데이터 베이스에 여러개의 인스턴스를 띄어 놓아 만들어진 상태
* 싱글 인스턴스
* Instance 가 두 개 일 경우
- 인스턴스는 각 머신에 있다.
- 1번 인스턴스에서 작업을 하다 인스턴스가 죽었을 경우(Fail over)
2번 인스턴스로 투명하게 넘어가서 쓰게 된다. (가용성)
* RAC 를 쓰는 이유?
1] 가용성
2] 로드 발란스
* RAC 구조
- Interconnect : DATAFILE 로 내려 가지 않고 메모리 to 메모리로 전송이 가능하게 해준다.
(Cache Fusion) (OPS 보다 당연히 빠르다.)
: Ethernet + UDP : 가장 보편적으로 사용
- 1Gbit Ethernet : 현재 보편적으로 사용 (초당 125M 정도)
- 10Gbit Ethernet : 향후..
: Infiniband : 향후 ( 초당 2Gbit ~ 96Gbit 까지 적용)
: 전송량이 많을 때 부하가 생긴다.
% ops : 메모리에서 다른 메모리로 읽어질 때 중간에 디스크로 내려썼다가 올라온다.
- 한쪽 클라이언트에서 다른 쪽 클라이언트 까지 같이 설치해 주어야 한다.
- Shared Storage : Raw Device : 가장 보편적 으로 사용 / 쓰기 속도가 좋다 / 관리가 불편
: Clustered File System : 비싸다. 잘 깨진다는 문제가 있다.
: ASM : 점점 기능이 좋아지고 있다.(아직까지는 문제가...
* 클러스터
- OS 클러스터
- ORACLE 클러스터
* 10g RAC 설치 순서
1] 오라클 클러스터를 먼저 설치
2] 오라클 소프트웨어 설치
3] 오라클 ASM 설치 (10g) [OS 클러스터를 안쓸 경우 ASM 을 무조건 설치해 주어야 한다.]
4] 오라클 DB 설치
* RAW Device = > OS 클러스터를 설치 해 주어야 한다.
% 여기서 잠깐!!!!!
$ CRS_STAT -t : [Target 컬럼] online 되어져 있어야 다른 쪽 노드로 넘어갈 수 있다. : [State] 현재 상태
$ CRS_STOP -all : RAC 서비스가 멈추어있을 경우에는 stat 를 먼저 확인해 본후 OFF LIne 되었을 경우 $ CRS_START -all : 서비스를 내렸다가(STOP) 다시 올려준다.(START) |
- GCS : Global Cache Sercive [LMS process]
: 인스턴스간 DATA 전송을 담당
: 노드 간의 DATA , 메세지 전송을 관리하는 서비스
-> LMS Process : Global Cache 동기화, 최대 36개까지. (10g R2)
: 데이터 전송이 느릴 때 갯수를 늘려준다.
- GES : Global Enqueue Service [LMD, LCK process]
: Global 하게 Lock 을 관리
: 노드간의 Lock 정보를 요청하고 응답하는 것을 관리 하는 서비스
-> LMD Process : Global enqueue 동기화 (Lcok)
-> LCK Process : Library Cache Lock / Pin , Row Cache Lock 동기화
- CGS : Cluster Group Service [LMON Process ]
: 클러스터의 멤버쉽을 관리하는 서비스
-> LMON Process : Global Lock Monitoring. Process Recovery 등의 작업 수행
(PMON의 Global Version 작업 수행)
[ PMON 의 역활? http://blog.naver.com/kiyoun82/110068928804 ]
- GRD : Global Resource Directory
: Global Resource 의 위치 및 상태를 관리하는 분산 DATABASE
: 모든 BLOCK 의 정보는 BLOCK이 속한 MASTER NODE 의 GRD 에서 관리
: BLOCK 에 최신 정보가 있다.
-> GRD 가 관리하는 정보
: DBA [DATA BLOCK ADDRESS] + Holder 위치 [ holding 하고 있는 위치, emp가 1번에 있니?2번에 있니?없니??]
+ LOCK MODE [Null , Shared , Exclusive] + Role [ Local , Global ] + SCN + PI (Past Image)
% Global - 여러개의 인스턴스를 하나로 쓴다고 하여 Global 이라 표현
* show parameter service
--> 1번 세션확인 : OLTP , YU , BATCH 2번 세션확인 : DB2
--> 1번 세션을 shutdown abort (엔터 강하게!!!!)
--> 1번 세션은 DB down 상태 ----------------> 2번 세션 : OLTP , YU, BATCH
1번 세션에서 넘겨야 한다는 정보는 OCR File 에 들어있다.
% RAC 는 Data file, Control File, Redo log File 이외에, Voting Disk 와 OCR File 까지 필요하다.
- OCR File : 클러스터 구성에 필요한 메타 정보를 가지고 있다.
( -> 작업 중이던 Service가 인스턴스가 죽으면 다른 인스턴스에 넘겨야 한다는 정보가 들어있다)
- Voting Disk : Split Brain 현상을 방지하기 위한 파일
( Split Brain 은 의학용어로 좌뇌와 우뇌의 SYNC 가 맞지 않은 경우, 동기화가 이루어져 있지 않은 경우를 말함)
: 일관된 이미지를 보기 위한 것
: 양 쪽의 인스턴스가 동기화, SYNC 를 맞춰주는 것
* [논리적 / 물리적] 백업을 해주어야 한다.
* OCR FIle 은 오라클이 자동으로 해준다.
* Cahce Fusion
- interconnect 를 통한 효율적인 글로벌 버퍼 동기화 메커니즘.
- Memory to Memory 동기화!!!!!
: Request Node, Master Node, Holder Node 가 Interconnect 를 통해 Block/Message 를 교환 하는 Mechanism
- Request Node : 필요한 특정 블록을 Master Node 의 LMSn 에 요청
: [Request 와 Master 는 메세지만 전송되어진다]
- Master Node : 요청받은 블록(버퍼)의 홀더 노드를 파악한 후 LMSn 에게 요청 노드로의 버퍼 전송을 요청
만일 없을 시에는 Block Grant Message 전달 (직접 ㄷ스크에서 읽어 들이는 권한을 부여]
- Holder Node : 블럭(버퍼)전송이 가능한 경우, 요청 노드로 버퍼를 전송한다.
% 노드가 두개 일 경우!!!
1 - A user 가 EMP 를 읽으려면 1번 instance GRD 를 확인, 없으면 2번 GRD 확인, 없으면 디스크에서 올린다.
2 - 이 때 B user 가 EMP 를 읽으려고 2번 instance 에서 접근시 LMSn 이 interconnect 로 emp 를 넘겨준다.
3 - 이 경우 둘 다 Shared mode 의 Lock 을 갖는다.
4 - B user 가 scott 의 SAL 을 UPDATE 하고 COMMIT 하였을 경우,
-> B user 가 갖고 있던 Shared mode Lock 은 Exclusive 하게 바뀐다.
5 - A user 가 가지고 있던 Shared Mode Lock 은 Null Mode 로 바뀐다.
6 - A user 가 다음 EMP 를 보고자 할 경우에는 UPDATE 된 것을 보아야 한다.(commit 했으니깐...)
[Null Mode 는 다른 노드에서 받아와야 한다는 의미를 내포한다.]