(사진 10:42)
★ RAC (Real Application Cluster)
- 동일한 데이터베이스에 대해 여러 인스턴스를 실행하여
클러스터된 하드웨어를 사용할 수 있도록 하는 소프트웨어
- 데이터베이스 파일은 각 노드에 물리적 또는 논리적으로 연결된 디스크에 저장되므로
모든 활성 인스턴스에서 읽고 쓸 수 있다.
★ RAC 의 장점
1. 높은 가용성
- 24시간 끊김 없는 서비스를 지원받을 수 있다.
- 접속한 서버가 다운되었거나, 인스턴스가 종료되어도 다른 서버에서 계속 서비스를 지원한다.
(곧 테스트해 볼 예정)
2. 확장성
- 노드들을 계속 추가하면서 확장해 나갈 수 있다.
- 노드의 개수는 (이론적으로는) 100개까지 가능하다.
- 노드는 운영 중에 추가가 가능하다.
★ RAC 구조
1. public network (공용 네트워크)
- public IP
- 외부의 클라이언트들이 노드로 접속할 때 사용하는 IP
2. private interconnect (전용 인터커넥트)
- private IP
- 노드 간의 통신을 위해 사용하는 IP
3. virtual IP
- fail over 가 발생했을 때 사용하는 IP
(한쪽 노드에서 fail 이 일어나면 자동으로 다른 쪽 노드로 접속할 때 쓰는 IP)
4. 공유 스토리지 Shared Storage
- 여러 노드가 데이터를 공유하기 위해서 공유 스토리지를 사용한다.
- 각 노드는 SAN (Storage Area Network) 스위치를 통해 스토리지와 통신한다.
- 로 디바이스 raw device
- 파일 시스템을 사용하지 않은 원시적인 형태의 디바이스를 의미한다.
- 로 디바이스를 사용하는 경우에는 별도의 파일 시스템을 거치지 않고 디스크로 직접 액세스한다.
- 장점: 쓰기 속도가 빠르다.
- 단점: 관리가 어렵다.
- 클러스터 파일 시스템 (clustered file system)
- 로 디바이스의 불편함, 즉 파일 시스템을 사용할 수 없다는 단점으로 인해
클러스터 파일 시스템을 채택하는 경우가 많다.
- 장점: 관리가 쉽다.
- 단점: 비용이 많이 든다.
디스크가 잘 깨진다.
- veritas
- ASM (Automatic Storage Management)
- 오라클 10g NF
- 자동화 로드맵 중 스토리지에 대한 구현 제공
- 스트라이핑, 미러링, 백업 복구에 필요한 모든 기능 제공
- 로 디바이스와 클러스터 파일 시스템의 장점인 볼륨 매니저 기능 제공
(사진 11:20)
- 장점: OS 의 RAID 기법 (스트라이핑, 미러링) 을 구성하지 않고
오라클이 알아서 RAID 0+1 의 스트라이핑과 미러링을 알아서 지원한다.
(RAID 0 = 스트라이핑 = 흩어져서 저장 /
RAID 1 = 미러링 = 한 디스크의 데이터를 또다른 디스크에도 저장해서
원래 디스크의 원본 데이터가 삭제되더라도 복구할 수 있도록 하는 것)
- 단점: (초창기 버전에서) 거미가 뷔페를 차려도 될 정도의 버그 파티
안정성이 너무 떨어져서 버그 FIX 를 해야 할 일이 너무 많았다.
1, 2, 3 의 아이피 주소들은 이 명령어로 확인할 수 있다:
cat /etc/hosts
3교시
# cluster
여러 대의 서버 (노드) 를 마치 하나의 서버 (노드) 처럼 보이게 하는 소프트웨어를 클러스터 소프트웨어라고 한다.
9i 버전까지는 OS의 클러스터 소프트웨어 서비스를 이용해야 한다.
IBM : HACMP (High Availability Cluster Multi Processing)
HP : HP - serviceGuard
SUN : SUN Cluster
오라클 10g 버전부터 oracle cluster 소프트웨어를 지원 (grid infrastructure)
4교시
★ OCR (Oracle Cluster Repository)
- RAC 구성의 전체 정보를 저장하고 있는 디스크로, RAC 에서의 핵심 역할을 담당한다.
- RAC 를 시작하려면 OCR 에 저장되어 있는 정보를 보고 RAC 를 구성해야 하는데
10g RAC 까지는 RAC 시작 후 ASM instance 를 시작하기 때문에 OCR 을 ASM 에 저장할 경우
RAC 를 시작할 수 없게 되었다.
단, 11g 부터는 이 부분이 개선되어 ASM 디스크를 그대로 사용할 수 있다.
- OCR 에 장애가 발생하면 RAC 전체가 중단된다.
- 오라클에서 권장하는 OCR 의 최소 크기는 100MB
OCR 이 어디 있는지 확인해보기
[oracle@rac1 ~]$ cat /etc/oracle/ocr.loc
OCR 체크하기
[oracle@rac1 ~]$ ocrcheck
OCR은 자동으로 백업을 한다.
(4시간마다, 매일, 매주)
백업 주기는 자동으로 설정되어 있다.
[oracle@rac1 ~]$ ocrconfig -showbackup
만약 결과가 아래 화면과 같이 나온다면?
해결책
★ 보트 디스크 Vote Disk
- RAC는 여러 개의 인스턴스 노드 instance node 들로 구성되어 있으며
각 노드들에 문제 (서로 소통하지 못하는 것 / split brain) 가 있는지 없는지 실시간으로 파악하고 있어야 한다.
그래야 클라이언트들이 요청하는 서비스에 정확하게 연결해줄 수 있다.
- CSSD 프로세스는 각 노드들이 정상적으로 작동하고 있는지 interconnect 를 통해
매초마다 heartbeat 을 보내고 각 노드들은 그에 대한 응답을 보내서
자신이 정상적으로 동작하고 있다는 것을 알려주는 정보를 저장한다.
(출석 부르는 것과 비슷한데, 이름을 불렀는데도 대답이 없으면 다시 한번 불러보고
그래도 대답이 없을 때는 그 노드가 내려갔다는 것을 인지 > 해당 노드로 접속하는 유저들을
다른 살아있는 노드 쪽으로 연결해준다)
- 오라클에서 권장하는 vote disk 의 최소 크기는 20MB
- 11g RAC 부터는 OCR 과 Vote Disk 모두 ASM 스토리지에 저장할 수 있다.
Vote Disk 가 어디에 만들어졌는지 보기
3군데에 만들어져 있다. (한 군데가 깨졌더라도 문제되지 않도록 삼중화해놓은 것)
[oracle@rac1 ~]$ crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-----------------------------------------------------------------------------------------------------------------------------------------
1. ONLINE 9282108203824ff0bf1659fa37157579 (/dev/oracleasm/disks/ASMDISK01) [DATA]
2. ONLINE 342d5dc1f7174fcfbf8b1fef4886eeea (/dev/oracleasm/disks/ASMDISK02) [DATA]
3. ONLINE 6dc334443e0c4f89bfc3a9e2ed314949 (/dev/oracleasm/disks/ASMDISK03) [DATA]
Located 3 voting disk(s).
5교시
★ RAC 로드 밸런싱 RAC load balancing
아이피 주소 확인하기
[oracle@rac1 ~]$ cat /etc/hosts
[oracle@rac1 ~]$ . oraenv
ORACLE_SID = [racdb1] ? (엔터)
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle
[oracle@rac1 ~]$ sqlplus / as sysdba
SQL> select instance_name, status from v$instance;
INSTANCE_NAME STATUS
--------------------------------------------
racdb1 OPEN
다른 쪽 노드 (rac2) 의 상태가 어떤지 확인하려면 > 거기로 가서 똑같이 해보면 된다.
그런데 이걸 왔다갔다하면서 하기가 너무 불편하고
그냥 한 곳에서 끝내고 싶다면?
그럴 때 쓰는 명령어가 gv$...
이걸 쓰면 한쪽 노드에서 여러 노드의 상태를 한꺼번에 확인할 수 있다.
SQL> select instance_name, status from gv$instance;
INSTANCE_NAME STATUS
--------------------------------------------
racdb1 OPEN
racdb2 OPEN
# client tnsnames.ora
tnsnames.ora 파일 찾기
C: > oracleexe > app > oracle > product > 11.2.0 > server > network > ADMIN > tnsnames.ora 열기
ora11g 든 뭐든 하나 복사해오기
(근데 나는 저 폴더가 아예 없어... 본체를 바꿔버려서... ㅠㅠ)
근데 폴더가 없는 줄 알았더니 있네?...
있는데 새로 바꾼 본체에는 아예 oracle 프로그램이 안깔려있네?
...
아무튼 저기 들어가봤더니 tnsnames.ora 파일은 있는데 열리지를 않아...
어떡하지...
그래서 그냥 필기만 받아씀.
그런데 내 본체에서 폴더째로 가져온 오라클 파일을 열고
oracle.exe 파일을 실행하고 나서 저 위치로 들어가서 파일을 열어봤더니 또 열리네?...
뭐하자는 거야 ㅠㅠㅠㅠㅠㅠㅠ
어쨌든 파일은 무사히 여는 데 성공...!
tnsnames.ora 파일에서 아무거나 하나 복사해오기
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-3874RB3)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
얘를
cat /etc/hosts 하면 나오는 virtual 주소를 사용해서 수정하기
racdb =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.111)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.112)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
)
)
수정한 내용은 tnsnames.ora 파일의 맨 아래 붙여넣고 저장하기
명령 프롬프트 켜기
C:\Users\itwill> sqlplus sys/oracle@racdb as sysdba
로 접속하기
그리고
SYS@racdb> select instance_name, status from v$instance;
INSTANCE_NAME STATUS
---------------------------------------------------
racdb1 OPEN
아직 노드 밸런싱이 되지 않았다. (???)
참고로
racdb =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.111)(PORT =1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.112)(PORT =1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
)
)
여기서 파란색 111이랑 빨간색 112를 순서를 바꾸고 > tnsnames.ora 파일에 저장하고
> cmd 창에서 sqlplus sys/oracle@racdb as sysdba 하면
2번 노드로 들어가진다.
이건 아이피 주소 설정할 때 첫번째 아이피 주소의 우선순위가 높아서 그런 것
# tnsnames.ora 파일에 load_balance = yes
racdb =
(DESCRIPTION =
(LOAD_BALANCE = YES)
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.111)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.112)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
)
)
파란색으로 표시한 한 줄 (LOAD_BALANCE = YES) 추가한 다음
아까 tnsnames.ora 파일에 붙여넣었던 racdb 부분 삭제하고 얘로 다시 붙여넣기 > 저장
아까의 명령 프롬프트 창에서 exit 한 다음
명령 프롬프트 창 하나 더 켜기
그리고 두 개의 창에서 각각
sqlplus sys/oracle@racdb as sysdba
수행하기
첫번째 창
두번째 창
그런 다음 다시 두 개의 창에서
select instance_name, status from v$instance;
얘를 각각 수행하면> sqlplus sys/oracle@racdb as sysdba 입력한 창에서는 racdb 2로 접속되고
sqlplus / as sysdba 수행한 창에서는 racdb1 로 접속된다.
(근데 난 거꾸로야... 하지만 그래도 상관없다고 하심)
첫번째 창
두번째 창
# 특정 노드에만 접속 수행
(특정 업무팀이 특정 노드에만 접속하고 다른 노드에는 접속할 수 없도록 막아놓는 것)
다시 tnsnames.ora 파일에서 racdb 부분 수정하고 > 저장
racdb =
(DESCRIPTION =
(LOAD_BALANCE = YES)
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.111)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
)
)
원본은 얘였는데 LOAD_BALANCE = YES 아래 두 개의 ADDRESS 부분 중
111만 남기고 보라색으로 표시한 112 부분은 아예 지워버린 것
racdb =
(DESCRIPTION =
(LOAD_BALANCE = YES)
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.111)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.112)(PORT = 1521)) --- 얘를 삭제
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
)
)
명령 프롬프트 창을 다시 켠 다음 SQL+ 로 다시 접속하기
C:\Users\itwill>sqlplus sys/oracle@racdb as sysdba
SQL> select instance_name from v$instance;
INSTANCE_NAME
------------------------------
racdb1
2024년 3월 11일 (학원에서의 마지막 날) (0) | 2024.03.11 |
---|---|
2024년 3월 8일 (4) | 2024.03.08 |
2024년 3월 5일 1교시 (0) | 2024.03.05 |
2024년 3월 4일 1교시 QUESTION. (0) | 2024.03.04 |
2024년 2월 29일 QUESTION. (0) | 2024.02.29 |