공유 스토리지와 ASM 준비
노드별 공유 디스크 확인과 udev 준비, VirtualBox 공유 디스크, ASMLib 레이블과 ASMCA의 DATA, FRA 디스크 그룹 생성
#핵심 요약
실습에서는 세 VM에 같은 파일과 같은 medium UUID의 공유 디스크를 연결하는 설계임
공유 디스크 초기화와 디스크 그룹 생성은 한 노드에서 한 번 하고 다른 노드에서는 검색, 마운트를 확인함
런북의 DATA, FRA는 EXTERNAL이므로 ASM 미러가 없고 디스크 손실 보호를 제공한다고 표시할 수 없음
#개념과 동작 원리
| 구분 | 실습 설계 |
|---|---|
| 공유 방식 | Fixed-size shareable 가상 디스크, VM별 쓰기를 분리하는 multiattach와 구분 |
| 디스크 식별 | 매체 UUID와 게스트 장치 식별자를 대조하며 장치 발견 순서만 사용하지 않음 |
| 준비 방식 | 한 노드에서 GPT, 파티션 준비 후 다른 노드에서 재검색 |
| 지속 경로 | 확인된 고유 식별자 또는 PARTUUID를 사용한 동일 udev 규칙 |
| ASM 검색 | /dev/asm/* 경로를 사용하는 실습 설계 |
| DATA, FRA | 런북은 각 두 디스크와 EXTERNAL, 설계 문서는 NORMAL 대안도 구분 |
같은 물리 디스크 위의 가상 디스크는 물리 디스크 장애를 함께 겪음
실제 가용량은 설계값과 별도로 확인해야 함
실습에서는 USABLE_FILE_MB와 REQUIRED_MIRROR_FREE_MB를 실제 용량 판단 기준으로 둠
ASMCA에서 DATA와 FRA를 한 번 생성한 뒤 모든 노드의 그룹 상태를 확인함
#필수 명령어 또는 SQL
SELECT name, type, total_mb, free_mb, required_mirror_free_mb, usable_file_mb
FROM v$asm_diskgroup
WHERE name IN ('OCR','DATA','FRA');
SELECT group_number, name, path, failgroup, mount_status, header_status, mode_status
FROM v$asm_disk
ORDER BY group_number, name;결과 해석: 실습의 판정 대상은 redundancy, 실제 여유, 디스크 수와 failgroup 및 디스크 상태이며 조회 결과 행은 기재 없음
#수업 2노드 실습: 공유 디스크와 ASMLib
RAC는 여러 인스턴스가 같은 데이터 파일, 컨트롤 파일, 리두에 동시에 접근하므로, 노드별 로컬 디스크를 쓰면 데이터가 갈라져 일관성이 깨짐
공유 저장소를 ASM과 Clusterware가 함께 관리해 노드 장애에도 서비스가 이어지고 노드를 늘릴 수 있음
vboxmanage createmedium --filename CRS1.vdi --size 1024 --format VDI --variant Fixed
vboxmanage createmedium --filename CRS2.vdi --size 1024 --format VDI --variant Fixed
vboxmanage createmedium --filename CRS3.vdi --size 1024 --format VDI --variant Fixed
vboxmanage createmedium --filename DATA.vdi --size 40960 --format VDI --variant Fixed
vboxmanage createmedium --filename FRA.vdi --size 30720 --format VDI --variant Fixed
vboxmanage modifymedium CRS1.vdi --type shareable
vboxmanage modifymedium DATA.vdi --type shareable결과 해석:
공유 디스크는 반드시 고정 크기(Fixed)로 만들고 다섯 개 모두 shareable로 바꾼 뒤, VM을 끄고 두 노드의 SATA 컨트롤러에 같은 디스크를 붙임vboxmanage를 못 찾으면 시스템 Path에 VirtualBox 설치 경로를 넣음
잘못 만든 디스크는 vboxmanage closemedium disk <파일> --delete로 지움
oracleasm configure -i # 소유자 oracle, 그룹 dba, 부팅 시 로드 y, 스캔 y
oracleasm init
oracleasm configure
oracleasm statusfor disk in sdb sdc sdd sde sdf; do
echo -e "n\np\n1\n\n\nw" | fdisk /dev/$disk
done
partprobe
oracleasm createdisk CRS1 /dev/sdb1
oracleasm createdisk CRS2 /dev/sdc1
oracleasm createdisk CRS3 /dev/sdd1
oracleasm createdisk DATA1 /dev/sde1
oracleasm createdisk FRA1 /dev/sdf1
oracleasm listdiskslsblk -o NAME,SIZE,TYPE,FSTYPE /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
oracleasm scandisks
oracleasm listdisks결과 해석:
파티션과 ASM 레이블은 아무 노드에서도 만들지 않은 경우에만 한 노드에서 한 번 만들고, 다른 노드는 oracleasm scandisks로 기존 레이블을 찾음
공유 디스크라 2번 노드에서 다시 fdisk하지 않음
두 노드 모두 CRS1 CRS2 CRS3 DATA1 FRA1이 보이면 정상임
실습에서는 UEK 커널에서 oracleasm init이 Loading module "oracleasm": failed로 실패해, kmod-oracleasm을 설치하고(rpm -qa | grep oracleasm로 패키지 3개 확인) grubby --set-default로 기본 커널을 RHCK(4.18)로 바꾼 뒤 grub2-mkconfig, 재부팅하고 다시 초기화했음
#DATA와 FRA 디스크 그룹 (ASMCA)
crsctl check cluster -all
crsctl status resource -t"$GRID_HOME/bin/asmca"$GRID_HOME/bin/asmcmd lsdg
srvctl status diskgroup -diskgroup DATA -detail
srvctl status diskgroup -diskgroup FRA -detail
crsctl status resource ora.DATA.dg -t결과 해석:
Grid 설치 때 만든 CRS 디스크 그룹(CRS1~3, Normal) 외에 ASMCA로 DATA(DATA1)와 FRA(FRA1)를 만들며, Disk Discovery String은 ORCL:*, 디스크 하나짜리 실습이라 External Redundancy를 고름
External Redundancy는 ASM이 미러링하지 않고 스토리지의 RAID 같은 보호에 기대므로, 보호 장치가 없는 운영 환경이면 Normal과 Failure Group 두 개 이상을 검토함
이미 다른 디스크 그룹에 속한 디스크를 다시 고르지 않음
정상 기준: ASMCA에 CRS, DATA, FRA가 보이고, lsdg에서 DATA와 FRA가 MOUNTED, ora.DATA.dg, ora.FRA.dg가 두 노드에서 ONLINE
X 화면이 안 뜨면 who로 디스플레이 번호를 보고 export DISPLAY=:<번호>.0, xhost +local:을 실행함
#사용 조건과 주의사항
실습의 udev 준비에 ASMLib, ASMFD 레이블 명령을 섞지 않으며 ASM 호환성 속성 상향은 되돌리기 어려워 버전 확정 후 선택함 shareable 디스크는 VM 스냅샷에 포함되지 않으므로 로컬 OS 스냅샷을 공유 디스크 백업으로 간주하지 않음