상세 컨텐츠

본문 제목

2024년 3월 6일 2교시 + 3교시 + 4교시

오라클 RAC

by 병아리 엔지니어 2024. 3. 6. 15:39

본문

 

(사진 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

'오라클 RAC' 카테고리의 다른 글

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

관련글 더보기