오라클 데이터베이스 RAC구성하기(듀얼 노드,x86_64)

심우열·2023년 10월 18일
0

Oracle DB

목록 보기
6/8

1. 오라클 데이터베이스 RAC란?

  • 고가용성 서비스를 위해 개발된 기능
  • 고가용성 기능을 구현하기 위해서는 최소 두대 이상의 시스템을 연결해야 함

1. 고가용성 서비스의 종류

1. Active-Standby

  • 운영중인 시스템에 장애가 발생하였을 경우 대기하고 있던 Standby 서버로 서비스가 전환되어 시스템을 운영하는 방식
  • Standby 서버로 전환되어지는 시간동안 서비스 중단이 발생

2. Active-Active

  • 두대 이상의 시스템 모두 정상적으로 서비스를 운영하는 방식
  • 하나의 시스템에 장애가 발생하더라도 다른 정상적인 시스템들이 운영되어 서비스가 되기 때문에 조금의 시간도 서비스 중단 없이 운영이 가능

2. 오라클 RAC?

  • Real Application Cluster
  • Active-Active 방식을 채택
  • 클러스터를 이용하여 데이터베이스를 이중화 구성
  • RAC 기능을 사용하게 되면 클러스터(Grid Infrastructure) 소프트웨어를 이용하여 두 대 이상의 서버를 하나의 데이터베이스 서버로 묶어 사용 가능
  • 오라클에서는 RAC 환경의 볼륨 관리를 위해 기존의 파일 시스템 방식이 아닌 자동 스토리지 관리(ASM) 방식을 사용함

2. RAC 물리적 구조

3. RAC 데이터 구조

4. RAC 설치를 위한 가상머신 설정

1. 시스템 요구사항

2. RAC 설치를 위한 가상머신 준비

1. RAC 1번 노드 하드웨어 설정

  • 이름: OEL8_Oracle19c_Rac1
  • ISO image: Oracle Linux 8.5-x86_64.dvd.iso
  • skip Unattended Installation 체크
  • 기본 메모리: 8192 MB
  • 프로세서 : 2개
  • VDI : 50 GB

2. RAC 1번 노드 네트워크 설정

RAC는 물리적으로 2개의 LAN 카드가 필요함

  • 외부 접속을 위한 네트워크 카드
  • 클러스터로 연결된 서버간의 통신을 위한 네트워크 카드

1. 어댑터 1

  • NAT 네트워크 선택

2. 어댑터 2

  • 호스트 전용 어댑터 선택

3. RAC 2번 노드 하드웨어 설정

  • RAC 1번 노드와 이름을 제외하고 동일하게 설정
  • 이름: OEL8_Oracle19c_Rac2

4. RAC 2번 노드 네트워크 설정

  • RAC 1번 노드와 동일하게 설정

3. RAC 설치를 위한 리눅스 설치

1. 기본 설정(RAC 1번, 2번 노드 동일)

1. Root Password

  • 루트 패스워드 설정

2. Localization(Time&Date)

  • Seoul 설정

3. System(kdump)

  • 체크 해제

4. System(Security Policy)

  • Apply security policy: OFF

2. 네트워크 설정

1. RAC 1번 노드 - enp0s3

  • Host Name: oraser01 (꼭 수정하고 APPLY, 아래 사진에서는 실수로 미적용해서 OS 설치 후 /etc/hostname 파일 수정함)
  • RAC 에 포함되어 있는 서버들은 용도가 같은 네트워크 카드의 장치명은 동일해야 함.
    -> Etherent 탭, Device : enp0s3
  • General, Connect automatically with priority : 0 체크
  • IPv4 Settings
    -> Method: Manual
    -> Address: 192.168.0.100
    -> Netmask: 255.255.255.0
    -> Gateway: 192.168.0.1
    -> Additional DNS Servers: 8.8.8.8

2. RAC 1번 노드 - enp0s8

  • RAC 에 포함되어 있는 서버들은 용도가 같은 네트워크 카드의 장치명은 동일해야 함.
    -> Etherent 탭, Device : enp0s8
  • General, Connect automatically with priority : 0 체크
  • IPv4 Settings
    -> Method: Manual
    -> Address: 10.10.10.10
    -> Netmask: 8

3. RAC 2번 노드 - enp0s3

  • Host Name: oraser02 (꼭 수정하고 APPLY, 아래 사진에서는 실수로 미적용해서 OS 설치 후 /etc/hostname 파일 수정함)
  • IPv4 Settings
    -> Method: Manual
    -> Address: 192.168.0.101
    -> Netmask: 255.255.255.0
    -> Gateway: 192.168.0.1
    -> Additional DNS Servers: 8.8.8.8
  • 나머지 1번 노드와 동일

4. RAC 2번 노드 - enp0s8

  • IPv4 Settings
    -> Method: Manual
    -> Address: 10.10.10.11
    -> Netmask: 8

  • 나머지 1번 노드와 동일

3. Installation Destination 설정(RAC 1번, 2번 노드 동일)

  • Custom 선택
  • swap : 8GiB (메모리 크기와 동일하게)
  • /boot : 1GiB
  • /tmp : 1GiB
  • / : 40 GiB

4. 설치

5. 라이선스 및 유저

  • 라이선스 동의
  • 유저 미생성
  • Finish Configuration

3. 공유 스토리지 디스크 설정

  • CRS 디스크 (1GB * 3EA)
  • DATA 디스크 (10GB * 1EA)
  • ARCH 디스크 (5GB * 1EA)

1. 스토리지 생성

파일 -> 도구 -> 가상 미디어 관리자(V)

  • 이전에 생성한 RAC 2개 노드의 VDI 확인 가능

만들기 클릭

  • CRS01-03

2. 공유 가능 스토리지로 변경

  • 5개 VDI 모두 공유 가능 설정

3. 가상 머신에 공유 스토리지 추가

  • RAC 1번, 2번 노두 모두에 추가

1 번 노드

2번 노드

5. RAC 설치를 위한 OS 설정

1. 메모리, SWAP(가상 메모리) 및 Temp 사이즈 확인

# 물리 메모리 확인
grep MemtTotal /proc/meminfo

# swap 메모리 확인
grep SwapTotal /proc/meminfo

# 디렉토리 사이즈 확인
df -h /tmp

2. 패키지 요구사항

RAC 1번, 2번 노드 동일

yum install -y bc binutils elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc glibc-devel ksh libaio libaio-devel libXrender libX11 libXau libXi libXtst libgcc libnsl librdmacm libstdc++ libstdc++-devel libxcb libibverbs make smartmontools sysstat libnsl2
yum --enablerepo=ol8_codeready_builder install -y libnsl2-devel

3. 네트워크 설정

1. 권장 사양

2. hosts 파일 설정

RAC 1번, 2번 노드 동일

vi /etc/hosts

### Public IP ###
192.168.0.100	oraser01
192.168.0.101	oraser02
### Private IP ###
10.10.10.10		oraser01-priv
10.10.10.11 	oraser02-priv
### Virtual IP ###
192.168.0.103 	oraser01-vip
192.168.0.104 	oraser02-vip
### Scan IP ###
192.168.0.105 	oraser-scan

4. OS 커널 값 요구 사항

1. /etc/sysctl.conf 변경

RAC 1번, 2번 노드 모두 동일

nano /etc/sysctl.conf

kernel.shmmax = 2147483648
kernel.shmall = 943749
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
kernel.panic_on_oops = 1
fs.file-max = 6815744
fs.aio-max-nr = 1048576
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.ip_local_port_range = 9000 65500

2. 설정한 커널 값 적용

sysctl -p

5. OS 리소스 값 확인 및 변경

1. /etc/security/limits.conf

RAC 1번, 2번 노드 모두 동일

nano /etc/security/limits.conf

oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
oracle soft memlock 3774874
oracle hard memlock 3774874

6. NOZEROCONF 설정

1. /etc/sysconfig/network

nano /etc/sysconfig/network

NOZEROCONF=yes

7. 자동 스토리지 관리(ASM) & Support 설치

1. ASM 라이브러리 설치

1. 패키지 다운로드 및 RAC 각 노드에 업로드

oracleasmlib-2.0.17-1.el8.x86_64.rpm 다운로드
에서 oracleasmlib-2.0.17-1.el8.x86_64.rpm 다운로드
oracleasm-support-2.1.12-1.el8.rpm 다운로드
에서 oracleasm-support-2.1.12-1.el8.rpm 다운로드

2. 패키지 인스톨

RAC 1번, 2번 노드 모두 동일

# ASM 라이브러리 설치
rpm -ivh oracleasmlib-2.0.17-1.el8.x86_64.rpm

# ASM Support 설치
rpm -ivh oracleasm-support-2.1.12-1.el8.x86_64.rpm

8. SCP 파일 변경

  • scp의 경우에는 버그가 있어 설치를 위한 방법으로 파일을 수정 후 RAC 설치를 모두 완료 후에 원래의 파일로 복구해야 함
# 1번 서버 scp 파일 이동
[root@oraser01 ~]# mv /usr/bin/scp /usr/bin/scp.orig

# 1번 서버 scp 파일 생성
[root@oraser01 ~]# vi /usr/bin/scp
/usr/bin/scp.orig -T $*

# 1번 서버 scp 파일 권한 변경
[root@oraser01 ~]# chmod 555 /usr/bin/scp

# 2번 서버 scp 파일 이동
[root@oraser02 ~]# mv /usr/bin/scp /usr/bin/scp.orig

# 2번 서버 scp 파일 생성
[root@oraser02 ~]# vi /usr/bin/scp
/usr/bin/scp.orig -T $*

# 2번 서버 scp 파일 권한 변경
[root@oraser02 ~]# chmod 555 /usr/bin/scp

9. 방화벽 & SELinux 해제

1. SELinux 해제

# 1번 서버 SELinux 해제
[root@oraser01 ~]# vi /etc/selinux/config
………
SELINUX=disabled
………
SELINUXTYPE=targeted

# 1번 서버 재 기동
[root@oraser01 ~]# reboot

# 2번 서버 SELinux 해제
[root@oraser02 ~]# vi /etc/selinux/config
………
SELINUX=disabled
………
SELINUXTYPE=targeted

# 2번 서버 재 기동
[root@oraser02 ~]# reboot

2. 방화벽 해제

# 1번 서버 방화벽 중지
[root@oraser01 ~]# systemctl stop firewalld

# 1번 서버 방화벽 상태 확인
[root@oraser01 ~]# systemctl status firewalld
………
   Active: inactive (dead) since Fri 2023-03-03 21:50:33 KST; 25s ago
………
Mar 03 21:50:33 oraser01 systemd[1]: Stopping firewalld - dynamic firewall daemon...
Mar 03 21:50:33 oraser01 systemd[1]: firewalld.service: Succeeded.
Mar 03 21:50:33 oraser01 systemd[1]: Stopped firewalld - dynamic firewall daemon.

# 1번 서버 방화벽 비활성화
[root@oraser01 ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

# 2번 서버 방화벽 중지
[root@oraser02 ~]# systemctl stop firewalld

# 2번 서버 방화벽 상태 확인
[root@oraser02 ~]# systemctl status firewalld
………
   Active: inactive (dead) since Fri 2023-03-03 21:50:33 KST; 25s ago
………
Mar 03 21:50:33 oraser01 systemd[1]: Stopping firewalld - dynamic firewall daemon...
Mar 03 21:50:33 oraser01 systemd[1]: firewalld.service: Succeeded.
Mar 03 21:50:33 oraser01 systemd[1]: Stopped firewalld - dynamic firewall daemon.

# 2번 서버 방화벽 비활성화
[root@oraser02 ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

3. avahi-daemon 해제

# 1번 서버 avahi-daemon 중지
[root@oraser01 ~]# systemctl stop avahi-daemon
Warning: Stopping avahi-daemon.service, but it can still be activated by:
  avahi-daemon.socket

# 1번 avahi-daemon 상태 확인
[root@oraser01 ~]# systemctl status avahi-daemon
………
   Active: inactive (dead) since Fri 2023-03-03 21:48:20 KST; 16s ago
  Process: 2011 ExecStart=/usr/sbin/avahi-daemon -s (code=exited, status=0/SUCCESS)
 Main PID: 2011 (code=exited, status=0/SUCCESS)
   Status: "avahi-daemon 0.7 starting up."
………
Mar 03 21:48:20 oraser01 systemd[1]: avahi-daemon.service: Succeeded.
Mar 03 21:48:20 oraser01 systemd[1]: Stopped Avahi mDNS/DNS-SD Stack.

# 1번 avahi-daemon 상태 비활성화
[root@oraser01 ~]# systemctl disable avahi-daemon
Removed /etc/systemd/system/multi-user.target.wants/avahi-daemon.service.
Removed /etc/systemd/system/sockets.target.wants/avahi-daemon.socket.
Removed /etc/systemd/system/dbus-org.freedesktop.Avahi.service.

# 2번 서버 avahi-daemon 중지
[root@oraser02 ~]# systemctl stop avahi-daemon
Warning: Stopping avahi-daemon.service, but it can still be activated by:
  avahi-daemon.socket

# 2번 avahi-daemon 상태 확인
[root@oraser02 ~]# systemctl status avahi-daemon
………
   Active: inactive (dead) since Fri 2023-03-03 21:48:20 KST; 16s ago
  Process: 2011 ExecStart=/usr/sbin/avahi-daemon -s (code=exited, status=0/SUCCESS)
 Main PID: 2011 (code=exited, status=0/SUCCESS)
   Status: "avahi-daemon 0.7 starting up."
………
Mar 03 21:48:20 oraser01 systemd[1]: avahi-daemon.service: Succeeded.
Mar 03 21:48:20 oraser01 systemd[1]: Stopped Avahi mDNS/DNS-SD Stack.

# 2번 avahi-daemon 상태 비활성화
[root@oraser02 ~]# systemctl disable avahi-daemon
Removed /etc/systemd/system/multi-user.target.wants/avahi-daemon.service.
Removed /etc/systemd/system/sockets.target.wants/avahi-daemon.socket.
Removed /etc/systemd/system/dbus-org.freedesktop.Avahi.service.

10. 오라클 디렉토리 생성 및 유저 설정

RAC 설치를 위한 기본 정보

  • 오라클 사용자 홈 디렉토리 : /oracle
  • 오라클 소프트웨어 홈 디렉토리 : /oracle/db/19c
  • 오라클 그리드 홈 디렉토리 : /oracle/grid/19c
  • 오라클 데이터 디스크 그룹 : DATA
  • 오라클 아카이브로그 디스크 그룹 : ARCH
  • 오라클 그리드 디스크 그룹 : CRS
  • 오라클 관리 그룹 : dba
  • 오라클 사용 유저 : oracle

1. 오라클 디렉토리 생성

# 1번 서버 디렉토리 생성
[root@oraser01 ~]# mkdir -p /oracle/db/19c
[root@oraser01 ~]# mkdir -p /oracle/grid/19c

# 2번 서버 디렉토리 생성
[root@oraser02 ~]# mkdir -p /oracle/db/19c
[root@oraser02 ~]# mkdir -p /oracle/grid/19c

2. OS 그룹 및 유저 생성

# 1번 서버 OS 유저 및 그룹 생성
[root@oraser01 ~]# groupadd -g 500 dba
[root@oraser01 ~]# useradd -u 500 -g dba oracle
[root@oraser01 ~]# passwd oracle
Changing password for user oracle.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.

# 2번 서버 OS 유저 및 그룹 생성
[root@oraser02 ~]# groupadd -g 500 dba
[root@oraser02 ~]# useradd -u 500 -g dba oracle
[root@oraser02 ~]# passwd oracle
Changing password for user oracle.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.

3. 디렉토리 소유권 및 그룹 변경

# 1번 서버 디렉토리 소유권 및 그룹 변경
[root@oraser01 ~]# chown oracle:dba -R /oracle
[root@oraser01 ~]# chmod -R 775 /oracle

# 2번 서버 디렉토리 소유권 및 그룹 변경
[root@oraser02 ~]# chown oracle:dba -R /oracle
[root@oraser02 ~]# chmod -R 775 /oracle

4. OS 오라클 계정 환경변수(.bash_profile) 설정

# 1번 서버 환경변수 설정
[root@oraser01 ~]# su - oracle
[oracle@oraser01 ~]$ vi .bash_profile

# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
# User specific environment and startup programs
umask 022
export ORACLE_SID=ORCL1
export ORACLE_UNQNAME=ORCL
export ORACLE_BASE=/oracle/db
export ORACLE_HOME=/oracle/db/19c
export GRID_HOME=/oracle/grid/19c
export ORACLE_TERM=vt100
export ORACLE_OWNER=oracle
export EDITOR=vi
export NLS_LANG=AMERICAN_AMERICA.KO16MSWIN949
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/X11R6/lib
export PATH=$ORACLE_HOME/OPatch:$ORACLE_HOME/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:$PATH:.
export LANG=C
export CV_ASSUME_DISTID=RHEL7.6
PS1='[${ORACLE_SID}]$PWD> '

# 1번 서버 환경변수 적용
[oracle@oraser01 ~]$ . .bash_profile
[ORCL1]/home/oracle>

# 2번 서버 환경변수 설정
[oracle@oraser02 ~]$ vi .bash_profile

# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
# User specific environment and startup programs
umask 022
export ORACLE_SID=ORCL2
export ORACLE_UNQNAME=ORCL
export ORACLE_BASE=/oracle/db
export ORACLE_HOME=/oracle/db/19c
export GRID_HOME=/oracle/grid/19c
export ORACLE_TERM=vt100
export ORACLE_OWNER=oracle
export EDITOR=vi
export NLS_LANG=AMERICAN_AMERICA.KO16MSWIN949
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/X11R6/lib
export PATH=$ORACLE_HOME/OPatch:$ORACLE_HOME/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:$PATH:.
export LANG=C
export CV_ASSUME_DISTID=RHEL7.6
PS1='[${ORACLE_SID}]$PWD> '

# 2번 서버 환경변수 적용
[oracle@oraser01 ~]$ . .bash_profile
[ORCL2]/home/oracle>

11. 자동 스토리지 관리(ASM) 디스크 그룹 설정

  • RAC 데이터를 저장하기 위한 공유 볼륨을 설정해야 함
  • RAC 공유 스토리지 디스크 설정에서 구성한 5개의 디스크를 이용하여 자동 스토리지 관리(ASM) 디스크 그룹을 생성

1. Raw device 설정 - root 권한으로

# 1번 서버 ORACLEASM 상태 확인
[root@oraser01 ~]# oracleasm configure
ORACLEASM_ENABLED=false
ORACLEASM_UID=
ORACLEASM_GID=
ORACLEASM_SCANBOOT=true
ORACLEASM_SCANORDER=""
ORACLEASM_SCANEXCLUDE=""
ORACLEASM_SCAN_DIRECTORIES=""
ORACLEASM_USE_LOGICAL_BLOCK_SIZE="false"

# 1번 서버 ORACLEASM 설정
[root@oraser01 ~]# oracleasm configure -i
Configuring the Oracle ASM library driver.
………
Default user to own the driver interface []: oracle
Default group to own the driver interface []: dba
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: done

# 1번 서버 ORACLEASM 상태 확인
[root@oraser01 ~]# oracleasm configure
ORACLEASM_ENABLED=true
ORACLEASM_UID=oracle
ORACLEASM_GID=dba
ORACLEASM_SCANBOOT=true
ORACLEASM_SCANORDER=""
ORACLEASM_SCANEXCLUDE=""
ORACLEASM_SCAN_DIRECTORIES=""
ORACLEASM_USE_LOGICAL_BLOCK_SIZE="false"

# 1번 서버 ASM Mount Point 설정
[root@oraser01 ~]# oracleasm init
Creating /dev/oracleasm mount point: /dev/oracleasm
Loading module "oracleasm": oracleasm
Configuring "oracleasm" to use device physical block size
Mounting ASMlib driver filesystem: /dev/oracleasm

# 1번 서버 Raw device 확인 및 구성
[root@oraser01 dev]# cd /dev
[root@oraser01 dev]# ls -la sd*
………
brw-rw---- 1 root disk 8, 16 Mar  3 22:33 sdb
brw-rw---- 1 root disk 8, 32 Mar  3 22:33 sdc
brw-rw---- 1 root disk 8, 48 Mar  3 22:33 sdd
brw-rw---- 1 root disk 8, 64 Mar  3 22:33 sde
brw-rw---- 1 root disk 8, 80 Mar  3 22:33 sdf

[root@oraser01 dev]# fdisk /dev/sdb
………
Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-2097151, default 2048): 2048
Last sector, +sectors or +size{K,M,G,T,P} (2048-2097151, default 2097151): 2097151
Created a new partition 1 of type 'Linux' and of size 1023 MiB.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

[root@oraser01 dev]# fdisk /dev/sdc
………
Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-2097151, default 2048): 2048
Last sector, +sectors or +size{K,M,G,T,P} (2048-2097151, default 2097151): 2097151
Created a new partition 1 of type 'Linux' and of size 1023 MiB.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

# /dev/sdb, /dev/sdc와 동일한 작업으로 /dev/sdf 까지 작업 진행

# 1번 서버 Raw device 확인
[root@oraser01 dev]# ls -la sd*
………
brw-rw---- 1 root disk 8, 16 Mar  3 22:35 sdb
brw-rw---- 1 root disk 8, 17 Mar  3 22:35 sdb1
brw-rw---- 1 root disk 8, 32 Mar  3 22:35 sdc
brw-rw---- 1 root disk 8, 33 Mar  3 22:35 sdc1
brw-rw---- 1 root disk 8, 48 Mar  3 22:36 sdd
brw-rw---- 1 root disk 8, 49 Mar  3 22:36 sdd1
brw-rw---- 1 root disk 8, 64 Mar  3 22:36 sde
brw-rw---- 1 root disk 8, 65 Mar  3 22:36 sde1
brw-rw---- 1 root disk 8, 80 Mar  3 22:37 sdf
brw-rw---- 1 root disk 8, 81 Mar  3 22:37 sdf1
  • 화면과 같이 각 Raw device가 새롭게 파티션이 생성되어 있는 것을 확인할 수 있다.
  • 파티션 생성시 크기를 확인해서 어떤 디스크가 CRS 인지 DATA 인지 ARCH 인지 기록 후 ASM 디스크 그룹 생성 시 맞게 입력해주어야 함

2. 자동 스토리지 관리(ASM) 디스크 그룹 생성

# 1번 서버 디스크 그룹 생성
[root@oraser01 dev]# oracleasm createdisk CRS01 /dev/sdb1
Writing disk header: done
Instantiating disk: done
[root@oraser01 dev]# oracleasm createdisk CRS02 /dev/sdc1
Writing disk header: done
Instantiating disk: done
[root@oraser01 dev]# oracleasm createdisk CRS03 /dev/sdd1
Writing disk header: done
Instantiating disk: done
[root@oraser01 dev]# oracleasm createdisk DATA01 /dev/sde1
Writing disk header: done
Instantiating disk: done
[root@oraser01 dev]# oracleasm createdisk ARCH01 /dev/sdf1
Writing disk header: done
Instantiating disk: done
[root@oraser01 dev]# oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...

# 1번 서버 디스크 그룹 확인
[root@oraser01 dev]# oracleasm listdisks
ARCH01
CRS01
CRS02
CRS03
DATA01

# 2번 서버 디스크 그룹 SCAN
[root@oraser02 ~]# oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
Instantiating disk "CRS01"
Instantiating disk "CRS02"
Instantiating disk "CRS03"
Instantiating disk "DATA01"
Instantiating disk "ARCH01"

# 2번 서버 디스크 그룹 확인
[root@oraser02 ~]# oracleasm listdisks
ARCH01
CRS01
CRS02
CRS03
DATA01
  • RAC 2번 서버에서 SCAN만 하는 이유는 앞에서 설명한 바와 같이 RAC의 스토리지 구성은 공유 볼륨이기 기본이기 때문에 1번 서버에서 모든 디스크 그룹 작업을 완료 한 후에 2번 서버에서는 1번 서버에서 구성한 디스크를 인식만 시켜주면 되기 때문

RAC 2번 서버에서 oracleasm scandisks 오류시

# 오류 상황
[root@oraser02 ~]# oracleasm configure
ORACLEASM_ENABLED=false
ORACLEASM_UID=
ORACLEASM_GID=
ORACLEASM_SCANBOOT=true
ORACLEASM_SCANORDER=""
ORACLEASM_SCANEXCLUDE=""
ORACLEASM_SCAN_DIRECTORIES=""
ORACLEASM_USE_LOGICAL_BLOCK_SIZE="false"

# 2번 서버 ORACLEASM 설정
[root@oraser02 ~]# oracleasm configure -i
Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library
driver.  The following questions will determine whether the driver is
loaded on boot and what permissions it will have.  The current values
will be shown in brackets ('[]').  Hitting <ENTER> without typing an
answer will keep that current value.  Ctrl-C will abort.

Default user to own the driver interface []: oracle
Default group to own the driver interface []: dba
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: done

# 2번 서버 ORACLEASM 상태 확인
[root@oraser02 ~]# oracleasm configure
ORACLEASM_ENABLED=true
ORACLEASM_UID=oracle
ORACLEASM_GID=dba
ORACLEASM_SCANBOOT=true
ORACLEASM_SCANORDER=""
ORACLEASM_SCANEXCLUDE=""
ORACLEASM_SCAN_DIRECTORIES=""
ORACLEASM_USE_LOGICAL_BLOCK_SIZE="false"

# 2번 서버 ORACLEASM Mount Point 설정
[root@oraser02 ~]# oracleasm init
Creating /dev/oracleasm mount point: /dev/oracleasm
Loading module "oracleasm": oracleasm
Configuring "oracleasm" to use device physical block size
Mounting ASMlib driver filesystem: /dev/oracleasm

# 2번 서버 디스크 그룹 재 SCAN
[root@oraser02 ~]# oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
Instantiating disk "DATA01"
Instantiating disk "CRS03"
Instantiating disk "ARCH01"
Instantiating disk "CRS02"
Instantiating disk "CRS01"

# 2번 서버 디스크 그룹 확인
[root@oraser02 ~]# oracleasm listdisks
ARCH01
CRS01
CRS02
CRS03
DATA01

6. 그리드 인프라스트럭쳐 설치

  • 그리드 인프라스트럭처 설치는 RAC 1번 서버에서 진행
  • 2번 서버의 설치는 SSH를 이용해서 오라클이 네트워크를 통해서 설치를 진행

1. 설치파일 이동 및 압축 해제

1. 그리드 인프라스트럭쳐 설치파일 다운로드

다운로드

2. 설치파일 RAC 1번 서버로 이동

scp [원본 그리드 인프라스트럭처 파일 경로] oracle@[RAC 1번 서버 IP 주소]:/oracle/grid/19c

3. 설치파일 압축 해제

[ORCL1]/oracle/grid/19c> unzip LINUX.X64_193000_grid_home.zip

2. 그리드 인프라스트럭쳐 설치 파일 실행

1. XWindow 를 위한 DISPLAY 변수 설정

[ORCL1]/home/oracle> nano .bash_profile

...
...
# 아래의 내용 추가
export DISPLAY=[디스플레이를 표시하고자 하는 PC의 IP주소]:0.0

# 변수 적용
[ORCL1]/home/oracle> . .bash_profile

2. 설치 파일 실행

[ORCL1]/home/oracle> cd $GRID_HOME
[ORCL1]/oracle/grid/19c> ./gridSetup.sh

3. GUI 로 그리드 인프라스트럭쳐 설치

1. 설치 옵션

  • 신규 설치이기 때문에 첫 번째 옵션을 선택 후 “Next” 버튼을 선택

2. 클러스터 구성 옵션

3. SCAN 및 GNS 구성

Local SCAN

  • Cluster Name: oraser
  • SCAN Name: oraser-scan
  • SCAN Port: 1521

4. 클러스터 구성

1. 2번 서버 추가

  • 화면 전환시에는 아래와 같이 1번 서버만 보이기 때문에 ADD 버튼을 눌러 2번 서버 추가

Add a single node

Public/Virtual Hostname은 /etc/hosts 파일에 명시한 alias를 입력한다.

  • Public Hostname : oraser02
  • Virtual Hostname : oraser02-vip
  • 다음과 같이 정상적으로 2번 서버가 추가된 모습

2. 2번 서버 SSH 확인

  • SSH Connectivity 클릭 후 oracle 유저 패스워드 입력 후 테스트 버튼 클릭
  • 오류 발생

SSH 오류 해결 방안

참고 자료

  • D) 암호없는 SSH 접속 환경 설정 부분 참고
[ORCL1]/home/oracle> cd $GRID_HOME/oui/prov/resources/scripts
[ORCL1]/oralce/grid/19c/oui/prov/resources/scripts> ./sshUserSetup.sh -user oracle -hosts "oraser01 oraser02" -noPromptPassphrase -advanced
  • 해결 완료

3. SSH connectivity test 성공하면 next

5. 네트워크 인터페이스 구성

  • enp0s3(192.168.0.0) : Public
  • enp0s8(10.0.0.0) : ASM & Private
  • vibr0(192.168.122.0) : Do Not Use

6. 스토리지 옵션 설정

  • Use Oracle Flex ASM for storage 선택

7. 그리드 인프라스트럭쳐 관리 저장소 구성

  • NO 선택

8. 그리드 인프라스트럭쳐의 정보를 저장하는 디스크 그룹 구성

1. Change Discovery Path 버튼 클릭

  • Disk Discovery Path : /dev/oracleasm/disks

2. 그리드 인프라스트럭쳐 데이터 저장 디스크 체크

  • 그리드 인프라스트럭쳐의 정보를 저장하는 디스크는 CRS
  • DISK group name : CRS
  • Redundancy : Normal
  • CRS01-03 체크

8. ASM 관리자 패스워드 설정

  • Use same passwords for these accounts 체크
  • 비밀번호 입력

아래 오류는 무시해도 괜찮음

9. IPMI(서버 관리를 위한 관리 인터페이스) 구성

  • Do not use Intelligent Platform Management Interface(IPMI) 선택

10. EM(오아클 관리 툴) 구성

체크 해제(사용하지 않음)

11. ASM이 속한 OS의 그룹 지정

  • 모든 OS의 그룹: dba

아래 오류는 무시해도 괜찮음

12. 그리드 인프라스트럭쳐 소프트웨어가 설치될 오라클 베이스 디렉토리

  • Oracle Base : /oracle/db

아래 오류는 무시해도 괜찮음

13. 인벤토리 위치 지정

  • Inventory Directory : /oracle/oraInventory

14. 설치 중 스크립트 실행 옵션

  • Automatically run configuration scripts 체크 해제

15. 모든 구성이 정상적인지 사전 체크

  • 설치에 문제가 없는 부분들이므로 우측 상단 Ignore Action 체크박스 선택 후 next

아래 오류는 무시해도 괜찮음

16. 설치 내용 및 설치

1. Save Response File

2. Install

3. root 권한으로 실행할 스크립트

  • 별도로 RAC 2개의 서버에서 새로운 터미널을 열어 아래의 스크립트를 root 권한으로 실행
  • oraser01 먼저 작업 후 oraser02 작업하는게 좋음

oraser01

[root@oraser01 ~]# /oracle/oraInventory/orainstRoot.sh
Changing permissions of /oracle/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /oracle/oraInventory to dba.
The execution of the script is complete.
[root@oraser01 ~]# /oracle/grid/19c/root.sh
Performing root user operation.

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /oracle/grid/19c

Enter the full pathname of the local bin directory: [/usr/local/bin]:
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Relinking oracle with rac_on option
Using configuration parameter file: /oracle/grid/19c/crs/install/crsconfig_params
The log of current session can be found at:
  /oracle/db/crsdata/oraser01/crsconfig/rootcrs_oraser01_2023-10-30_05-19-03PM.log
2023/10/30 17:19:10 CLSRSC-594: Executing installation step 1 of 19: 'SetupTFA'.
2023/10/30 17:19:10 CLSRSC-594: Executing installation step 2 of 19: 'ValidateEnv'.
2023/10/30 17:19:10 CLSRSC-363: User ignored prerequisites during installation
2023/10/30 17:19:10 CLSRSC-594: Executing installation step 3 of 19: 'CheckFirstNode'.
2023/10/30 17:19:12 CLSRSC-594: Executing installation step 4 of 19: 'GenSiteGUIDs'.
2023/10/30 17:19:13 CLSRSC-594: Executing installation step 5 of 19: 'SetupOSD'.
2023/10/30 17:19:13 CLSRSC-594: Executing installation step 6 of 19: 'CheckCRSConfig'.
2023/10/30 17:19:13 CLSRSC-594: Executing installation step 7 of 19: 'SetupLocalGPNP'.
2023/10/30 17:19:41 CLSRSC-594: Executing installation step 8 of 19: 'CreateRootCert'.
2023/10/30 17:19:43 CLSRSC-4002: Successfully installed Oracle Trace File Analyzer (TFA) Collector.
2023/10/30 17:19:47 CLSRSC-594: Executing installation step 9 of 19: 'ConfigOLR'.
2023/10/30 17:20:01 CLSRSC-594: Executing installation step 10 of 19: 'ConfigCHMOS'.
2023/10/30 17:20:01 CLSRSC-594: Executing installation step 11 of 19: 'CreateOHASD'.
2023/10/30 17:20:07 CLSRSC-594: Executing installation step 12 of 19: 'ConfigOHASD'.
2023/10/30 17:20:07 CLSRSC-330: Adding Clusterware entries to file 'oracle-ohasd.service'
2023/10/30 17:20:28 CLSRSC-594: Executing installation step 13 of 19: 'InstallAFD'.
2023/10/30 17:20:33 CLSRSC-594: Executing installation step 14 of 19: 'InstallACFS'.
2023/10/30 17:20:37 CLSRSC-594: Executing installation step 15 of 19: 'InstallKA'.
2023/10/30 17:20:41 CLSRSC-594: Executing installation step 16 of 19: 'InitConfig'.

ASM has been created and started successfully.

[DBT-30001] Disk groups created successfully. Check /oracle/db/cfgtoollogs/asmca/asmca-231030PM052116.log for details.

2023/10/30 17:22:09 CLSRSC-482: Running command: '/oracle/grid/19c/bin/ocrconfig -upgrade oracle dba'
CRS-4256: Updating the profile
Successful addition of voting disk 5c2c0f81c00d4f00bf4b8cf20c8c55e1.
Successful addition of voting disk 3b292022609d4f55bf6a41f0d640fc43.
Successful addition of voting disk eaa78f834e124f87bf64f63c52b6cfed.
Successfully replaced voting disk group with +CRS.
CRS-4256: Updating the profile
CRS-4266: Voting file(s) successfully replaced
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   5c2c0f81c00d4f00bf4b8cf20c8c55e1 (/dev/oracleasm/disks/CRS01) [CRS]
 2. ONLINE   3b292022609d4f55bf6a41f0d640fc43 (/dev/oracleasm/disks/CRS02) [CRS]
 3. ONLINE   eaa78f834e124f87bf64f63c52b6cfed (/dev/oracleasm/disks/CRS03) [CRS]
Located 3 voting disk(s).
2023/10/30 17:23:38 CLSRSC-594: Executing installation step 17 of 19: 'StartCluster'.
2023/10/30 17:25:15 CLSRSC-343: Successfully started Oracle Clusterware stack
2023/10/30 17:25:15 CLSRSC-594: Executing installation step 18 of 19: 'ConfigNode'.
2023/10/30 17:26:25 CLSRSC-594: Executing installation step 19 of 19: 'PostConfig'.
2023/10/30 17:26:48 CLSRSC-325: Configure Oracle Grid Infrastructure for a Cluster ... succeeded

oraser02

[root@oraser02 ~]# /oracle/oraInventory/orainstRoot.sh
Changing permissions of /oracle/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /oracle/oraInventory to dba.
The execution of the script is complete.
[root@oraser02 ~]# /oracle/grid/19c/root.sh
Performing root user operation.

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /oracle/grid/19c

Enter the full pathname of the local bin directory: [/usr/local/bin]:
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Relinking oracle with rac_on option
Using configuration parameter file: /oracle/grid/19c/crs/install/crsconfig_params
The log of current session can be found at:
  /oracle/db/crsdata/oraser02/crsconfig/rootcrs_oraser02_2023-10-30_05-19-58PM.log
2023/10/30 17:20:02 CLSRSC-594: Executing installation step 1 of 19: 'SetupTFA'.
2023/10/30 17:20:02 CLSRSC-594: Executing installation step 2 of 19: 'ValidateEnv'.
2023/10/30 17:20:02 CLSRSC-363: User ignored prerequisites during installation
2023/10/30 17:20:02 CLSRSC-594: Executing installation step 3 of 19: 'CheckFirstNode'.
2023/10/30 17:20:09 CLSRSC-504: The root script cannot proceed on this node oraser02 until the current first-node operations have finished on the first node oraser01.
Died at /oracle/grid/19c/crs/install/crsutils.pm line 4605.
[root@oraser02 ~]# 2023/10/30 17:20:28 CLSRSC-4002: Successfully installed Oracle Trace File Analyzer (TFA) Collector.
/oracle/oraInventor^C
[root@oraser02 ~]# /oracle/grid/19c/root.sh
Performing root user operation.

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /oracle/grid/19c

Enter the full pathname of the local bin directory: [/usr/local/bin]:
The contents of "dbhome" have not changed. No need to overwrite.
The contents of "oraenv" have not changed. No need to overwrite.
The contents of "coraenv" have not changed. No need to overwrite.

Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Relinking oracle with rac_on option
Using configuration parameter file: /oracle/grid/19c/crs/install/crsconfig_params
The log of current session can be found at:
  /oracle/db/crsdata/oraser02/crsconfig/rootcrs_oraser02_2023-10-30_05-31-33PM.log
2023/10/30 17:31:37 CLSRSC-594: Executing installation step 1 of 19: 'SetupTFA'.
2023/10/30 17:31:37 CLSRSC-594: Executing installation step 2 of 19: 'ValidateEnv'.
2023/10/30 17:31:37 CLSRSC-363: User ignored prerequisites during installation
2023/10/30 17:31:37 CLSRSC-594: Executing installation step 3 of 19: 'CheckFirstNode'.
2023/10/30 17:31:38 CLSRSC-4002: Successfully installed Oracle Trace File Analyzer (TFA) Collector.
2023/10/30 17:31:38 CLSRSC-594: Executing installation step 4 of 19: 'GenSiteGUIDs'.
2023/10/30 17:31:38 CLSRSC-594: Executing installation step 5 of 19: 'SetupOSD'.
2023/10/30 17:31:38 CLSRSC-594: Executing installation step 6 of 19: 'CheckCRSConfig'.
2023/10/30 17:31:39 CLSRSC-594: Executing installation step 7 of 19: 'SetupLocalGPNP'.
2023/10/30 17:31:40 CLSRSC-594: Executing installation step 8 of 19: 'CreateRootCert'.
2023/10/30 17:31:40 CLSRSC-594: Executing installation step 9 of 19: 'ConfigOLR'.
2023/10/30 17:31:47 CLSRSC-594: Executing installation step 10 of 19: 'ConfigCHMOS'.
2023/10/30 17:32:18 CLSRSC-594: Executing installation step 11 of 19: 'CreateOHASD'.
2023/10/30 17:32:19 CLSRSC-594: Executing installation step 12 of 19: 'ConfigOHASD'.
2023/10/30 17:32:20 CLSRSC-330: Adding Clusterware entries to file 'oracle-ohasd.service'
2023/10/30 17:32:38 CLSRSC-594: Executing installation step 13 of 19: 'InstallAFD'.
2023/10/30 17:32:39 CLSRSC-594: Executing installation step 14 of 19: 'InstallACFS'.
2023/10/30 17:32:40 CLSRSC-594: Executing installation step 15 of 19: 'InstallKA'.
2023/10/30 17:32:41 CLSRSC-594: Executing installation step 16 of 19: 'InitConfig'.
2023/10/30 17:32:50 CLSRSC-594: Executing installation step 17 of 19: 'StartCluster'.
2023/10/30 17:33:43 CLSRSC-343: Successfully started Oracle Clusterware stack
2023/10/30 17:33:43 CLSRSC-594: Executing installation step 18 of 19: 'ConfigNode'.
2023/10/30 17:33:55 CLSRSC-594: Executing installation step 19 of 19: 'PostConfig'.
2023/10/30 17:34:01 CLSRSC-325: Configure Oracle Grid Infrastructure for a Cluster ... succeeded

4. 설치 재개

  • OK

오류발생

  • 최소 요구사항에 충족하지 않았던 부분으로 생긴 오류이기 때문에 무시해도 됨

위와 같은 이유로 아래 오류도 무시

5. 설치 완료

7. ASM 디스크 그룹 생성

  • 데이터를 저장할 디스크 그룹
  • 아카이브 로그를 저장할 디스크 그룹

1. 디스크 그룹 생성을 위한 ASMCA 실행

[ORCL1]/home/oracle> cd $GRID_HOME/bin
[ORCL1]/oracle/grid/19c/bin> asmca

ASMCA에서 확인할 수 있는 세가지 정보

  • ASM Instance: 각 서버에 기동되어 있는 ASM 인스턴스의 정보 확인
  • Disk Groups: 현재 구성된 디스크 그룹 및 새로운 디스크 그룹 생성 및 삭제
  • Setting: ASM 설정

2. 디스크 그룹 생성

1. 좌측 Disk Groups 선택 후 하단 Create 버튼 클릭

2. 데이터 저장을 위한 디스크 그룹 생성

profile
Dev Ops, "Git, Linux, Docker, Kubernetes, ansible, " .

0개의 댓글