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개만 남기기
service network restart
-> ifconfig
- rac2도 같은방법으로 하는데 네트워크 연결 들어가서 맥아이디 맞는거 두개만 남기고 모두 삭제, 이름을 (eth0,eth1) 변경해주고
eth0,eth1의 편집은 rac1과 같게 하되 eth1의 주소만192.168.56.112
로, eth0을11.0.2.16
하고, vi 열어 편집해주기 그리고service network restart
,reboot
- 푸티로 접속
ifcong 해서 ipconfig를 넣고 이름을 rac1
use system color- gsd 빼고 모두 온라인 으로 변경되어야 한다.
- reboot를 양쪽에서 동시에 쳐본다.
- crsctl start crs도 동시에 쳐본다. 커뮤니케이션 안된다? 그럼 리부트 양쪽에서 동시에 한다.
- crs_stop -all 하면 양쪽 내리기 / crs_start -all 양쪽 동시에 올리기
- 잘 된다면 푸티에서 (한쪽에서만) sys에서 startup!
명령어 재정리
💡 Real Application Cluster의 약자 (진짜 응용프로그램 집단)
응용프로그램
: database, instance, listener, ASM, service, vip등 이러한 응용 프로그램들이 마치 하나의 서버에 있는 것 처럼 느껴지게 하는 오라클 아키텍쳐 중 하나이다.
공유 스토리지 하나를 인스턴스에서 공유해서 쓰는 것이다. 원래는 이 응용 프로그램들이 여러 노드(컴퓨터)들에 분산되어져 있는데, 마치 하나의 서버에 있는 것 처럼 보이게 하는 프로그램이다.
우리는 스토리지 하나에 인스턴스가 하나이라서 컴퓨터가 꺼지면 끝! 그렇지만 RAC는 한대 컴퓨터 꺼지면 다른 컴퓨터에서 엑세스 할 수 있어서 사용자들은 컴퓨터 한대가 꺼졌는지 모른다.
고가용성
-> 24시간 끊김없는 서비스를 지원 받을 수 있다.확장성
-> 노드들을 계속 추가하몀ㄴ서 확장해 나갈 수 있다. 또 추가
컴퓨터 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. 오픈
💡 집단 이라는 뜻인데 여러대의 노드(서버)들의 집단을 마치 하나의 서버처럼 보이게 하는 소프트웨어를 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
$ 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 > "
speedup
-> 하나의 작업을 얼마나 빨리 처리할 수 있는가?
하나의 작업이 100%라면 노드1(50%), 노드2(50%) : 시간이 절반으로 줄어든다!
sacleup
-> 정해진 시간에 얼마나 많은 일을 할 수 있는가?
하나의 작업이 100%라면 노드1(100%), 노드2(100%) : 정해진 시간안에 두배의 일을 할 수 있다.
💡 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에서 관리하게 된다.
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 '%¶meter%'; 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)