[RAC]23.10.26_RAC의 개념

망구씨·2023년 10월 26일
0

RAC

목록 보기
1/14
post-thumbnail

📖 RAC

RAC 목차
1. 소개
2. 관리
3. 튜닝
4. 고가용성
5. 클러스터 관리
6. 백업과 복구
7. 설치 (이수자 평가 제출)




공유디스크 5개가 있다!

⭐ 복사받은 이미지 가져오기
내가 했던 방법
1. 추가 버튼 누르고

2. 이친구 가져오기!

3. 파일> 관리> 가상미디어 관리에서 경고 표시 있으면 삭제하고 없으면 그냥 두기
4. .vdi 추가하기


5. 속성 일반에서 -> 공유 가능으로 변경해주기

6. RAC1 공유디스크 설정하기
: rac1 잡고, 설정 > 저장소로 들어가기


  • RAC2도 같은 방법으로 설정
  • 추가 네트워크 설정(rac1,rac2동일)

7. 네트워크 설정때문에 root로 시작시키기

  • rac1 네트워크 설정 (시스템>기본설정>네트워크연결)




    8. 터미널 열기
    : 아래 명령어 써서 이미지 처럼 2개만 남기기




  1. service network restart -> ifconfig
  2. rac2도 같은방법으로 하는데 네트워크 연결 들어가서 맥아이디 맞는거 두개만 남기고 모두 삭제, 이름을 (eth0,eth1) 변경해주고
    eth0,eth1의 편집은 rac1과 같게 하되 eth1의 주소만 192.168.56.112로, eth0을 11.0.2.16 하고, vi 열어 편집해주기 그리고 service network restart, reboot
  3. 푸티로 접속
    ifcong 해서 ipconfig를 넣고 이름을 rac1
    use system color
  4. gsd 빼고 모두 온라인 으로 변경되어야 한다.
  5. reboot를 양쪽에서 동시에 쳐본다.
  6. crsctl start crs도 동시에 쳐본다. 커뮤니케이션 안된다? 그럼 리부트 양쪽에서 동시에 한다.
  7. crs_stop -all 하면 양쪽 내리기 / crs_start -all 양쪽 동시에 올리기
  8. 잘 된다면 푸티에서 (한쪽에서만) sys에서 startup!

    명령어 재정리


✏️ 1. RAC의 개념

💡 Real Application Cluster의 약자 (진짜 응용프로그램 집단)

응용프로그램 : database, instance, listener, ASM, service, vip등 이러한 응용 프로그램들이 마치 하나의 서버에 있는 것 처럼 느껴지게 하는 오라클 아키텍쳐 중 하나이다.

공유 스토리지 하나를 인스턴스에서 공유해서 쓰는 것이다. 원래는 이 응용 프로그램들이 여러 노드(컴퓨터)들에 분산되어져 있는데, 마치 하나의 서버에 있는 것 처럼 보이게 하는 프로그램이다.

우리는 스토리지 하나에 인스턴스가 하나이라서 컴퓨터가 꺼지면 끝! 그렇지만 RAC는 한대 컴퓨터 꺼지면 다른 컴퓨터에서 엑세스 할 수 있어서 사용자들은 컴퓨터 한대가 꺼졌는지 모른다.

✏️ 2. RAC의 장점 2가지

  1. 고가용성 -> 24시간 끊김없는 서비스를 지원 받을 수 있다.
    : 내가 접속한 서버가 다운되었거나 인스턴스가 종료되어도 나는 다른 서버에서 계속 서비스를 지원 받을 수 있다.
  2. 확장성 -> 노드들을 계속 추가하몀ㄴ서 확장해 나갈 수 있다.
                             또 추가
     컴퓨터 1대 ---- 컴퓨터 1대 ---- 컴퓨터 1대   ...
       노드 1          노드2          노드3     ...
      인스턴스1       인스턴스2       인스턴스3   ...
           \            |             /
              \         |           /
                  ---------------
                    공유 스토리지
                  ---------------  

이론상으로 100대까지 연결이 가능하다.

회사들이 SI 프로젝트를 하는 주기가 8년 ~ 10년 주기이다.

    구장비 --------------------> 신장비
     노드1                      노드1 -- 노드2 -- 노드3
    
    RAC   --------------------> RAC
    11g                         19c

SI프로젝트 순서
1. OS 설치
2. Oracle 설치
3. data 이행
4. 개발
5. 테스트
6. 오픈


📖 RAC 소개

  1. rac 란 무엇인가 ?
  2. rac 의 장점 2가지 ?
  3. cluster 란 무엇인가 ?
  4. rac 의 장점인 speedup 과 scaleup
  5. rac 환경에서 일관된 data 를 볼 수 있는 기술인지 무엇인지 ?
  6. rac 환경에서 lock
  7. rac 환경에서 병렬처리
  8. 클러스터 서비스 3가지
  9. rolling patch 와 rolling upgrade 란 ?
  10. voting disk 와 ocr file 이 무엇인지?
  11. rac 설치시 구성할 수 있는 storage 3가지

✏️ 3. cluster란 무엇인가?

💡 집단 이라는 뜻인데 여러대의 노드(서버)들의 집단을 마치 하나의 서버처럼 보이게 하는 소프트웨어를 cluster라고 한다.

이더넷 0이 퍼블릭, 이더넷1이 각퍼블릭을 연결시켜주는애 디스크는 쉐어드 스토리지
(rac1)192.168.56.111(이더넷1)이 프라이빗
(rac2)192.168.56.112(이더넷1)

RAC를 운영할 때 필요한 IP가 3가지가 있다.
1. Public ip : 외부 클라이언트들이 노드로 접속할 때 사용하는 ip
2. private ip : 노드간의 통신을 하기 위해 사용하는 ip
3. virtual ip : failover를 지원하기 위해서 사용하는 ip

failover 란? 내가 접속한 노드가 죽었을 때 살아있는 다른 노드로 접속되는 기능

실습 위 3가지 ip를 확인합니다

  • Public ip, private ip
vi /etc/hosts

  • virtual ip

✔️ cluster software가 정상인지 확인하는 방법

$ crsctl check crs


➡️ 이 4개가 정상!

✔️ 오라클 인스턴스가 제대로 올라왔는지 확인

  • 내가 접속한 노드의 인스턴스가 정상인지 확인
select instance_name, status
 from v$instance;
  • 모든 노드의 인스턴스가 정상인지 확인
select instance_name, status
 from gv$instance;

✔️ 공유 스토리지가 같은지 보는 법

: 디비는 하나이고 인스턴스가 별개라서 같아야한다. rac1, rac2에서 보기

select file_name from dba_data_files;

✅ 오라클 설치 순서
1. grid (cluster + ASM 소프트웨어) 설치(그리드만 깔면 두개가 알아서 깔린다.)
2. DB 설치

  • 오라클 클러스터 설치 -> DB 엔진 설치 -> DB 생성

문제 rac1, rac2로 sqlplus 로 접속했을때 SQL> 이 아니라 racdb1>, racdb2>로 나오게 하시오!

[oracle@racdb1 ~]$  cd $ORACLE_HOME/sqlplus/admin
[oracle@racdb1 admin]$ vi glogin.sql

define _editor='vi'

set sqlprompt "_connect_identifier > "


✏️ 4. RAC의 장점 speedup, scaleup (I-11)

  • speedup -> 하나의 작업을 얼마나 빨리 처리할 수 있는가?
    하나의 작업이 100%라면 노드1(50%), 노드2(50%) : 시간이 절반으로 줄어든다!

  • sacleup -> 정해진 시간에 얼마나 많은 일을 할 수 있는가?
    하나의 작업이 100%라면 노드1(100%), 노드2(100%) : 정해진 시간안에 두배의 일을 할 수 있다.

rac1,2에서 top 확인해서 cpu보기

✏️ 5. rac환경에서 일관된 data를 볼 수 있는 기술이 무엇인지?

💡 rac 환경에서는 내가 어느 노드로 접속하던지 간에 항상 맨 마지막에(최신데이터) commit된 일관된 데이터를 조회할 수 있다.

최신 데이터가 어느 노드에 있는지 어떻게 알 수 있는가???
GRD :(Global Resource directory)에 최신 데이터가 어느 노드에 있다 라는 위치정보가 존재한다.

  • GRD는 각각의 노드의 shared pool에 존재한다.
    (예 - emp 테이블의 최신 데이터에 대한 위치정보는 1번 노드의 GRD에 있고,
    dept 테이블의 최신 데이터에 대한 위치정보는 2번 노드의 GRD에 있다.)


➡️ 그림 설명 : 유저가 접속할때 만약 30명이 들어온다하면 15명씩 나눠준다. update한 최신 데이터는 노드1에 있는데 노드 2에서 누가 scott위 월급을 조회하면 디스크가 아닌 프라이빗 네트워크로 노드1의 GRD를 확인해서 3000이 아닌 0 이 보인다.
만약, 노드1이 emp테이블을 관리하는 노드인데 사람들이 이쪽에서 dept를 자꾸 조회한다? 그럼 dept를 노드1에서 관리하게 된다.

✔️ GRD가 관리하는 서비스 2가지

✔️ GCS (Global Cache Service) : 노드간의 데이터를 전송하는 서비스

1. GCS (Global Cache Service) : 노드간의 데이터를 전송하는 서비스
: 데이터 전송을 전문으로 하는 데몬 프로세서: LMS 데몬

[oracle@racdb1 ~]$ ps -ef | grep lms
grid      3822     1  0 15:38 ?        00:00:07 asm_lms0_+ASM1
oracle    4318     1  0 15:39 ?        00:00:05 ora_lms0_racdb1
oracle    4322     1  0 15:39 ?        00:00:05 ora_lms1_racdb1 -- 왜 또있니
oracle    5458  5054  0 16:00 pts/1    00:00:00 grep lms

lms실습 lms 프로세서의 갯수를 몇개 띄울 수 있는지 확인하고 갯수를 더 늘리기

SQL> show parameter gcs
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
gcs_server_processes                 integer     2

문제 gcs_server_processes를 3개로 늘리기

alter system set gcs_server_processes=3 --변경이 안된다 !


➡️ 같은 파일을 보고있다.

col name for a30

select  name, issys_modifiable
       from  v$parameter
       where  name  like '%&name%';

NAME                           ISSYS_MOD
------------------------------ ---------
gcs_server_processes           FALSE  

col name for a20
col value for a10
select inst_id, name, value, issys_modifiable, isinstance_modifiable
      from gv$parameter
      where name like '%&parameter%';    

   INST_ID NAME                 VALUE      ISSYS_MOD ISINS
---------- -------------------- ---------- --------- -----
         1 gcs_server_processes 2          FALSE     FALSE -- 
         2 gcs_server_processes 2          FALSE     FALSE
       
alter system set gcs_server_processes=3 scope=spfile sid='*';
-- false는 바로 바꾸지 못한다는 거니까, scope=spfile을 적어줘야한다.
-- 그런데 RAC는 isinstance_modifiable 가 false라는 것은 따로따로 못바꾸고 둘다 동시에 바꿔야 한다 라는 뜻이다.

➡️ sid='*'은 모든 인스턴스에 다 적용하겠다 라는 뜻! sid='racdb1'이라고 하면 racbd1만 적용하겠다 라는 것
➡️ v$parameter : 현재 메모리에 어떻게 적용되어져 있는지 확인
➡️ v$spparameter : spfile안에 어떻게 적용되어져 있는지 확인

💡 1번노드, 2번노드 둘다 파라미터 파일 안에는 아래의 내용만 있다.
SPFILE='+DATA/racdb/spfileracdb.ora'
현재 spfile을 가지고 pfile을 생성한다!

racdb1 > create pfile from spfile;

❓ 실습하면서 문제
alter문을 실행하기 전에 pfile을 만들어서, 직접 pfile을 열어 파라미터를 수정, 디비 내렸다 올렸다. alter문을 실행하고 pfile을 만들었어야 반영이 정상적으로 되었을 것!

/u01/app/oracle/product/11.2.0/db_1/dbs
[oracle@racdb1 dbs]$ vi initracdb1.ora

오늘의 마지막 문제
그럼 다시 gcs_server_processes를 1로 변경하고 인스턴스를 둘다 내렸다 올려서 반영하기

alter system set gcs_server_processes=1 scope=spfile sid='*';

우리 지금 pfile이라서 명령어로는 안되고, 직접 열어서 수정해준다.

2. GES ( Global Enqueue Service)

profile
Slow and steady wins the race.

0개의 댓글

관련 채용 정보