Oracle VM 및 Oracle Enterprise Linux에 Oracle 확장 RAC 클러스터
직접
구축하기
저자: Jakub Wartak
가상
환경에서
저렴한
비용으로
완벽하게
기능하는 Oracle 확장 RAC를
구현하는
방법
이
설명서의
정보는 Oracle의
검증을
받지
않았고 Oracle에서
지원하는
것이
아니므로
사용자
본인의
결정에
따라
사용해야
하며, 정보
습득을
위한
교육용
자료로만
참고해야
합니다.
업데이트일 : 2008년 10월
Contents
이
설명서는
저자의
승인을
받아 Oracle ACE Jeffrey Hunter의 "Build Your Own Oracle RAC 11g Cluster on Oracle Enterprise Linux and iSCSI" 설명서를
기초로
작성된
것입니다. Linux에 Oracle RAC를
설치하는
것이
궁금할
경우
그의
설명서를
읽어
보도록
하십시오. 본
설명서는
독자가 Oracle RAC에
어느
정도의
경험이
있음을
전제로
작성되었습니다. |
1. 소개
일반적인 Oracle RAC(Real Application Cluster) 구현은
하나
또는
여러
노드의
장애를
신속하게
복구하는
아키텍처입니다. 그러나
일반적인
시나리오에서 Oracle RAC의
모든
노드는
한
곳의
데이터
센터에
있으므로
치명적인
데이터
센터
장애로
이어지기
쉽습니다. 이
시나리오에서
재난
복구를
위한
솔루션은
로컬
데이터
센터와
일부
백업
데이터
센터
간에 Oracle DataGuard를
설치하여
대기
시스템(일반적으로
하나의 Oracle Database 또는
다른 RAC 클러스터)을
실행하는
것입니다.
DataGuard는
이
역할을
물론
잘
수행하지만
전체
대기
시스템과
어레이를
패시브
노드로
전환하므로
트랜잭션에
전산
능력을
사용할
수
없게
되며
이로
인해
솔루션
비용이
매우
높아집니다. (대기 Oracle DataGuard 시스템은
읽기
전용
쿼리를
수행하기
위해
열
수
있고 Active DataGuard in Oracle Database 11g를
사용할
경우
항상
읽기
전용
모드로
실행할
수도
있지만, 이
구성의
경우
애플리케이션이
일부
노드의
읽기
전용
특성을
알고
있어야
합니다.)
다행히도
부분적인
재난
복구를
위한
다른
솔루션이
있으며
그것이
바로
확장 RAC입니다. 이
아키텍처에서
일부 RAC 노드는 "알파
사이트"에서
작동하며
나머지
노드는 "베타
사이트"에서
작동합니다. 두
사이트의
노드는
액티브
모드이므로
모든
전산
리소스를
충분히
사용합니다. 그림 1에서
볼
수
있는
것처럼
각
사이트에는
전용 SAN(Storage Area Network)이
있고, 양쪽
데이터
센터(dcA와 dcB)에
있는
시스템은
동일한 RAC의
구성원이므로
데이터를
신속하게
상호
교환할
수
있고
다른
사이트의
스토리지에
액세스할
수
있습니다. 즉, dcA에
있는 RAC1 노드는 dcB에
있는 SAN 어레이에
데이터를
쓰고 dcB에
있는 RAC2 노드와도
통신합니다.
그림 1
이
설명서에서는
교육상의
목적으로
하나의 PC x86 64비트
시스템에 Oracle VM 2.1의
가상화
기술을
사용하여
저렴하면서도
완벽한
기능을
갖춘 Oracle 확장 RAC를
구현해
보겠습니다. 자세한
구성은
그림 2를
참조하십시오. IP 네트워크
설비를
위한 Linux의 QoS(Quality of Source)를
사용하는
스토리지
이더넷
트래픽과
상호
연결의
가장
큰
제약
요소는
지연
대기입니다. Oracle RAC는
상호
연결에서의
지연
대기와
읽기
또는
쓰기
중의 I/O 지연
대기에
민감합니다.
확장 RAC는
다음
요건
중
하나를
만족할
경우
비용을
절감시키며
기업
애플리케이션에
대한
가용성을
극대화합니다.
- 두
개의
데이터센터/건물/서버실이
지연
대기가
거의
없는
고속
네트워크를
통해
직접
연결되어
있는
경우(또는
해당
위치에
스토리지
인프라가
이미
있는
경우)
- 회사에서
시스템
가용성을
위해
투자할
계획인
경우(RAC는 Data Guard보다
장애
조치
시간이
짧음)
또한
이론상으로
확장 RAC에서
스토리지
어레이는
전력
공급이
중단되어도
클러스트에서
요청을
처리할
수
있기
때문에
최고의
안정성을
갖출
필요는
없습니다.
이
설명서에서
다룬
구성에서 Oracle Database 11g Release 1(RAC 구성)은
두
대의 Oracle Enterprise Linux 5.1 시스템
상위에서
실행됩니다. Oracle RAC 노드를
위한
스토리지는 OpenFiler에서
실행하는
두
개의 iSCSI 스토리지
서버에서
제공합니다. 또한
이
구성은 Oracle ASM(Automatic Storage Management)에서
제공하는
기능과 Oracle Database 10g 이상
버전에서
제공하는
호스트/데이터베이스
기반의
미러링
기능을
사용합니다.
그림 2
실제
하드웨어를
사용하여
확장 RAC를
구현함으로써
성능을
개선하는
것이
가장
이상적이지만
이
아키텍처는
연구
및
교육용이므로
이러한
절충이
허용됩니다. Oracle VM Server를
설치하는
데에는
한
대의
컴퓨터만
필요하지만
가상
시스템을
관리하기
위한
간편한
웹
콘솔인 Oracle VM Manager를
설치하기
위해
다른 PC가
필요합니다
현재까지도
선호되는
스토리지로 FCP(Fibre Channel Protocol)가
선택되고
있지만 Oracle에서는 Oracle Direct NFS와
같은
성능
개선과
함께 Oracle Database 11g의
데이터
파일에
대해 NFS 공유
스토리지를
지원하기
시작했습니다. 이러한
설치
특성으로
인해
스토리지
옵션으로
보다
단순한 iSCSI 접근
방식을
고수하여
실제 FCP 개념을
유지할
것입니다. 확장 RAC 시나리오에서
내결함성을
갖춘
완벽한
아키텍처를
구현하려면 dcA와 dcB가
아닌
다른
위치에
제3의
보팅
디스크를
갖춰야
합니다.
이
설명서에
나오는
디스크
미러링
구성은
실제
시나리오에는
부적합하며 I/O 멀티패칭
또는
리던던시형의
상호
연결도
지원하지
않습니다. 또한
이
설명서는 Oracle RAC 11g
평가
시스템을
성공적으로
설치하기
위한
자세한
지침을
제공하지만
이
지침이
공식적인 Oracle 설명서를
대신하는
것은
아닙니다. 이
설명서
외에도
다음과
같은 Oracle 설명서를
참조하여 Oracle RAC 11g의
다른
구성
옵션, 설치
및
관리에
대해
완벽하게
알아
두어야
합니다.
이 Oracle VM 설치는
다음에서
수행되었습니다.
- Intel QuadCore Q6600 2.4GHz(4개
코어)
- 8GB DDR2 RAM
- 3x160GB SATAII 7200 RPM 하드
디스크
- DVD 리더
Oracle VM Manager는 CentOS 5.0이
실행되는
워크스테이션에
설치되었습니다. Oracle Enterprise Linux 5를
설치해도
되지만
시간을
절약하기
위해
기존의 CentOS 설치
워크스테이션을
사용했습니다.
- AMD Sempron 3000+(단일
코어)
- 1.5GB DDR RAM
- 250GB SATA 하드
디스크
- DVD 라이터
시작하기
전에
다음
사항을
반드시
유의하도록
하시기
바랍니다: 이
설명서는
교육용으로
제작된
것이므로
실제
구축은
지원되지
않으며
고려되지도
않습니다. Oracle 지원
팀에서는
본
설명서를
참조하여
수행하는
과정에서
발생한
문제를
해결해
드리지
않습니다.
2. 필요한
소프트웨어
확장 RAC를
작성하려면
아래에서
설명한
대로
다음
소프트웨어를
다운로드해야
합니다.
Oracle VM Server 2.1 및 Oracle VM Manager 2.1
두
제품은
모두
무료로
제공됩니다. 등록
후
Select a Product Pack
에서
Oracle VM을
선택하고
Product architecture에서
x86 64 bit를
선택한
다음
Go를
선택해야
합니다. Oracle VM 2.1 Media Pack을
선택하고
Continue를
클릭합니다. 이제
다음
항목이
표시됩니다.
- Oracle VM server 2.1 (304MB)
- Oracle VM manager 2.1 (534MB)
이
두
항목을
미리
준비해
놓은
디렉토리로
다운로드합니다. 두
개의 *.zip 파일의
압축을
풀면
두
개의 ISO 파일이
생성되며, 평소에
사용하는 CD 굽기
소프트웨어를
사용하여
이
파일을 CD에
굽습니다.
- OracleVM-Server-2.1.iso
- OracleVM-Manager-2.1.iso
(힌트: ISO를
다운로드한
컴퓨터에서
설치할
경우에는 OracleVM-Manager-2.1.iso를
설치하기
위해 CD에
구울
필요가
없습니다. Linux에서
다음
명령을
사용하여 /mnt/cdrom에
루프백 CD를
마운팅할
수
있습니다.)
mount -o loop,ro OracleVM-Manager-2.1.iso /mnt/cdrom"
Oracle Enterprise Linux 5.1 Update 1 "Small" 템플릿(PV_x86_64)
여기에서는
설치 CD나 DVD를
사용하여
처음부터 Linux 시스템을
설치하지
않고 Oracle에서
제공한 VM Linux 템플릿을
사용합니다. VM Linux 템플릿은
바로
실행할
수
있는
전체
시스템의
디스크
이미지인
바이너리
파일입니다. Oracle VM에서
제공하는
환경은
일반적인
환경이기
때문에
시스템별로
설치를
수행하여
드라이버를
생성할
필요는
없고
대신
템플릿에서
모든 Linux 인스턴스를
복제하여
실행하면
됩니다. Oracle에서는 Oracle Database에
맞게
사전
구성된
템플릿을
제공합니다.
계약에
동의하고
서명한
후
Product Pack
선택
목록에서
Oracle VM Templates을
선택하고 from the Platform
선택
목록에서
x86_64를
선택한
후
Go를
클릭합니다. Oracle VM Templates for Oracle Enterprise Linux 5 Media Pack for x86_64 (64 bit)
링크를
클릭한
다음 Oracle Enterprise Linux 5 Update 2 템플릿 - PV Small x86_64(64bit)를
다운로드하도록
선택합니다.
PV(Paravirtualized) 시스템과 HVM(Hardware Virtualized) 시스템의
주요
차이점은 Linux의
커널과 Oracle VM Server의
커널(Xen 하이퍼바이저) 간의
상호
작용
특성입니다. HVM 시스템은
특별한
도구
없이 Xen 기능을
사용하는
표준 x86 또는 x86_64 시스템으로서
표준 PC에서 Xen 없이
실행할
수
있습니다. 반면에 PV 시스템은 Xen에서
실행하고
있다는
사실을
알고
있으므로
하드웨어와
통신하지
않고 Xen과
직접
통신하며, HVM의
경우와
달리
실제
하드웨어를
에뮬레이션할
필요가
없습니다
Oracle Database 11g
및 Clusterware for Linux x86 64-bit
다운로드해야
할
파일
이름은
다음과
같습니다:
- linux.x64_11gR1_database.zip
- linux.x64_11gR1_clusterware.zip
OpenFiler 2.2 for Xen 64-bit
다운로드
페이지로
이동한
후 openfiler-2.2-x86.img.gz (~160MB)를
찾습니다. 여기서는 2.2 버전을
사용하지만 2.3 버전이
있는지
확인해
봅니다. 2.3 버전에는 iSCSI 스냅샷에
대한 LUN 매핑
및 iSCSI 동적
볼륨
크기
조정
등과
같은
유요한
기능이
새로
추가되었습니다. 단, 2.3 버전은
이
설명서에
대해
테스트되지는
않았습니다.
3. Oracle VM Server 설치
Oracle VM Server 부팅 CD를
구운
후 PC에
넣습니다. 이 PC는
스와핑
없이
여러
개의 Linux 인스턴스를
실행하기에
충분한 CPU와 RAM을
갖추고
있어야
합니다. 다음
설명에
따라 Oracle VM을
설치합니다.
- "Oracle VM Server"라는
제목의
부팅
화면이
나타나면
<ENTER>를
눌러
설치를
시작합니다.
- 그런
다음
설치하기
전에 CD를
테스트하도록
선택할
수
있습니다. 손상되거나
잘못
구어진 CD로
인해
설치가
중단되지
않도록
OK를
눌러 CD를
테스트하는
것이
좋습니다.
- 언어
선택
창에서
English를
선택하고
OK를
눌러
계속합니다. 그런
다음
키보드
모델을
선택하거나
기본
모델을
사용합니다.
원할
경우
파티셔닝
대화
상자에
액세스하여
기존의
파티션을
삭제할
수
있습니다. 기존의
파티션에
데이터가
들어
있을
수
있으므로
주의하십시오. 직접
만든
장비의
성능을
최대화하기
위해
세
개의
디스크로
구성된 RAID0 어레이를
만들
것입니다. GRUB 부트
로더는 RAID0에서
부팅할
수
없으므로
전용
부트
파티션을
만들어야
합니다.
- 모든
디스크에서
모든
파티션을
지웁니다.
- sda에서 ext3 파일
시스템을
포함하는 256MB/부트
파티션을
만듭니다(첫
번째 SATA 디스크). 여기에는 VM Server 하이퍼바이저를
부팅하는
데
필요한 initrd 이미지와
커널이
포함됩니다. 작성
중 "Force to be primary partition"을
선택하여 x86 기본
파티션이
되도록
합니다. 이름을 sda1로
지정합니다.
- sda에 1GB 정도의
스왑
파티션을
만듭니다. (참고: Oracle VM dom0은
기본적으로
최대 512MB의
메모리를
사용하도록
구성되고
메모리를
많이
사용하는
애플리케이션이
없으므로
단지
스왑용으로
몇 GB의
스토리지를
할애할
필요는
없습니다. Dom0은
기본적으로
실제 I/O를
수행하고
하드웨어
작업을
처리하는
작업만
담당합니다. 하지만
각 domU[실제 VM]는
필요에
따라
적절한
크기의
개별
스왑
공간이
필요합니다.)
- sda에서
Fill all available space
옵션을
선택하여 "소프트웨어 RAID 파티션"을
만들고, 이름을 sda3으로
지정합니다.
- sdb에서
Fill all available space
옵션을
선택하여 "소프트웨어 RAID 파티션"을
만들고, 이름을 sdb1로
지정합니다.
- sdc에서
Fill all available space 옵션을
선택하여 "소프트웨어 RAID 파티션"을
만들고
이름을 sdc1로
지정합니다. .
- 디스크가
여러
개일
경우
스토리지
성능이
극대화될
수
있도록
디스크에 RAID 파티션을
만듭니다.
- RAID
버튼을
클릭하여
소프트웨어 RAID 어레이를
만듭니다. RAID0을
선택한
후
이
어레이에
포함시킬
모든
소프트웨어 RAID 파티션을
선택합니다(이
시나리오의
경우: sda3, sdb1, sdc1). 파일
시스템이 "ext3"이고
마운트
지점이 "/"인지
확인합니다. (참고: 기본 RAID0 스트라이프는 256kB입니다.) Oracle VM 설치
프로그램을
사용하여
소프트웨어 RAID 어레이를
만드는
동안에는
이
값을
변경할
수
없습니다. 하지만
원할
경우
설치
전에 Alt-F2를
눌러
두
번째
가상
콘솔로
전환하여
기존
어레이를
내리고 mdadm을
사용하여 RAID 어레이를
다시
만들
수
있습니다. 단, 실제로
테스트해
보지는
않았습니다!)
- 변경
사항을
적용하고
OK
버튼을
눌러
파티션
변경을
저장합니다.
- 다음
화면에서는
부트
로더(GRUB)를
설치할
위치를
선택해야
합니다. MBR(마스터
부트
레코드)에
배치하십시오.
이제
관리
인터페이스로
사용할
이더넷
인터페이스를
결정해야
합니다. 이
예에서는 "eth0"(처음으로
검색된
이더넷 PCI 네트워크
카드)을
사용합니다. 네트워크
카드를
선택했으면
올바른 IP 주소를
설정해야
합니다.
- "Enable IPv4 support" 옵션과 "Activate on boot" 옵션만
선택하십시오.
- "IPv4" 필드에 IP 주소를
입력하여
구성합니다. 이
시나리오에서는 "10.99.1.2"를
사용합니다. 올바른
접두어/넷마스크(예: "255.255.255.0"의
경우 "24")를
입력해야
합니다.
- OK를
클릭하여
구성을
적용합니다.
- IPv4 게이트웨이와 DNS 네임
서버를
묻는
메시지가
표시됩니다(예: "10.99.1.1").
- Hostname Configuration에서
manual
모드를
선택하고
해당
서버를
위한
알기
쉬운
호스트
이름(예: "quadovm")을
입력합니다.
네트워킹을
구성하면
다음을
선택하라는
메시지가
표시됩니다
- 시간대(해당
시간대
선택).
- Oracle VM Agent 암호 - Oracle VM Manager에서 Oracle VM Server를
관리하는
데
사용할
암호이므로
신중하게
지정하고
공개되지
않도록
관리합니다.
- 루트
암호 - Oracle VM Server에
대한
기본
관리
암호이므로
신중하게
지정해야
합니다. .
이제
설치가
완료될
때까지
기다립니다. CD 트레이가
자동으로
배출됩니다. 다시
부팅하면 Oracle VM Server가
표시됩니다. 다음
위치에서
루트
사용자로
로그인할
수
있습니다
- 직접
콘솔
또는 KVM에서
로그인
- 워크스테이션에서 ssh -l root 10.99.1.2를
사용하여 SSH를
통해
로그인. 참고: Oracle VM Server는 Xen의 dom0 도메인에
대해 512MB의 RAM만
제공합니다. 시스템에
설치된 RAM이
이보다
큰
경우에도
마찬가지입니다. 이는
정상적인
동작이며
나머지
메모리는
게스트 VM에
사용됩니다. 다음을
실행하여
실제
사용
가능한
메모리를
확인할
수
있습니다.
[root@quadovm ~]# xm info | grep mem total_memory : 8182 free_memory : 7537 [root@quadovm ~]# |
4. Oracle VM Manager 설치
Oracle VM Manager 설치는
비교적
간단합니다. Oracle VM Manager용 ISO CD를
넣으면
설치
프로그램이
시작됩니다.
[root@xeno ~]# cd /mnt/cdrom [root@xeno cdrom]# sh runInstaller.sh [..] Welcome to Oracle VM Manager
Please enter the choice: [1|2]
- Install Oracle VM Manager
- Uninstall Oracle VM Manager
|
"1"을
선택하면
설치가
계속
진행됩니다. 워크스테이션에 Oracle VM Manager만을
위한 2GB의
여유
공간이
있어야
합니다. 설치는
비교적
간단합니다.
Starting Oracle VM Manager installation ...
Checking the supported platforms ... Done
Checking the prerequisite packages are installed ... Done
Checking the available disk space ... Done
Installing the oracle-xe-univ package (rpm) ... Done
Oracle Database 10g Express Edition Configuration ------------------------------------------------- This will configure on-boot properties of Oracle Database 10g Express Edition. The following questions will determine whether the database should be starting upon system boot, the ports it will use, and the passwords that will be used for database accounts. Press <Enter> to accept the defaults. Ctrl-C will abort.
Specify the HTTP port that will be used for Oracle Application Express [8080]: We chose the default tomcat 8080 port, but you can always pick any other port in this case. Specify a port that will be used for the database listener [1521]: <ENTER>
Specify a password to be used for database accounts. Note that the same password will be used for SYS and SYSTEM. Oracle recommends the use of different passwords for each database account. This can be done after initial configuration: Confirm the password: Here we pick an unbreakable password. Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]: <ENTER>
Starting Oracle Net Listener...Done Configuring Database...Done Starting Oracle Database 10g Express Edition Instance...Done Installation Completed Successfully. To access the Database Home Page go to http://127.0.0.1:8080/apex
Installing the ovs-manager package (rpm) ... Done
Set default schema to 'OVS'. Please enter the password for OVS: <ENTER PASSWORD HERE> Please re-enter the password for OVS: <ENTER PASSWORD HERE> Again, we pick a secret password for the VM Manager schema. Creating the Oracle VM Manager database schema ...Done
Installing the oc4j package (rpm) ... Done The default password for oc4jadmin is oracle. You can change the default password after the installation completes. To access the OC4J Home Page and change the password go to http://127.0.0.1:8888/em Starting OC4J ... Done OC4J logfiles can be found in /var/log/ovm-manager/oc4j.log.
Deploying Oracle VM Manager application to OC4J container. Please enter the password for oc4jadmin: oracle Please enter the Oracle Net Listener Port , default is [1521] ? <ENTER> Creating connection pool ...
Deploying Oracle VM Manager application to OC4J container. Please enter the password for oc4jadmin: Please enter the Oracle Net Listener Port , default is [1521] ? <ENTER> Creating connection pool ... Done Creating data source ... Done Deploying application ... Done Deploying application help ... Done Configuring Oracle VM Manager DataCollector ... Done
Configuring SMTP server ... Please enter the outgoing mail server (SMTP) hostname: localhost Setting the SMTP hostname server to localhost ... Done
Configuring e-mail address for Oracle VM Manager account 'admin'... Please enter an e-mail address for the admin account : localuser
|
"localuser"를
메일
전송을
위한
본인의
로컬
사용자
이름으로
대체합니다. 지침에
따라 http://127.0.0.1:8888/OVS로
이동하여 Oracle VM Manager에
액세스합니다. 다시
부팅한
후 /etc/init.d/oracle-xe 스크립트와 /etc/init.d/oc4j 스크립트를
사용하여 Oracle VM Manager를
시작하고
중지할
수
있습니다.
5. VM(Virtual Machine) 설정
먼저 Oracle VM Server(quadvm)를 Oracle VM Manager에
새로운 "스풀"의
마스터로
등록해야
합니다. 스풀은
하나
이상의
물리적인
서버를
포함하는
논리적인
독립
영역입니다.
Servers Pools
탭으로
이동한
후
Create Server Pool에서 quadvm Oracle VM Server가
서버
풀
마스터, VM 서버, 유틸리티
마스터가
되도록
정보를
입력하고
스풀에
대해 spool1과
같은
알기
쉬운
이름을
지정합니다.
그림 3
다음
화면에서 "admin" 사용자를
선택합니다.
그림 4
모든
항목을
확인하여
새로운
스풀을
만듭니다.
그림 5
그림 6
VM(Virtual Machine) 만들기
앞에서도
말했듯이
가상화를
사용하면
템플릿
이미지를
복사하여
시스템을
복제할
수
있습니다. 다음은
이를
수행하는
방법입니다.
템플릿
업로드하기
먼저 VM 템플릿과 OpenFiler를 VM Server로
보내야
합니다.
[vnull@xeno OracleVM]$ scp -r OVM_EL5U1_X86_64_PVM_4GB root@10.99.1.2:/root/ root@10.99.1.2's password: vm.cfg 100% 318 0.3KB/s 00:00 system.img 100% 6144MB 8.8MB/s 11:41 README 100% 158 0.2KB/s 00:00 [vnull@xeno OracleVM]$ cd ~/ISO [vnull@xeno ISO]$ scp openfiler-2.2-x86_64.img.gz root@10.99.1.2:/root root@10.99.1.2's password: openfiler-2.2-x86_64.img.gz 100% 175MB 10.9MB/s 00:16 [vnull@xeno ISO]$ |
그런
다음
나중에 VM Server 서브에이전트에서
자동으로
검색할
수
있도록 VM 템플릿을
해당
디렉토리로
옮겨야
합니다.
[root@quadovm ~]# ls -al OVM_EL5U1_X86_64_PVM_4GB/ total 6297632 drwxr-xr-x 2 root root 4096 May 6 14:04 . drwxr-x--- 4 root root 4096 May 6 13:52 .. -rw-r--r-- 1 root root 158 May 6 14:04 README -rwxr-xr-x 1 root root 6442450945 May 6 14:04 system.img -rw-r--r-- 1 root root 318 May 6 13:52 vm.cfg [root@quadovm ~]# mv OVM_EL5U1_X86_64_PVM_4GB /OVS/seed_pool/ [root@quadovm ~]# |
Resources로
가서
Import를
누릅니다. Internal Virtual Machine Template을
선택합니다.
그림 7
템플릿
정보를
입력합니다. 템플릿
이름 OVM_EL5U1_X86_64_PVM_4GB가
자동으로
검색되어야
하며
자동으로
검색되지
않을
경우
로그아웃한
후
다시
로그온하십시오.
그림 8
가져오기
작업을
확인합니다.
그림 9
템플릿이
표시되어야
하며
이
템플릿을
선택하고
Approve
버튼을
클릭합니다.
그림 10
OEL 템플릿을
기반으로 RAC VM 만들기
로그아웃하고
다시
로그인하여
Virtual Machines -> Create Virtual Machine으로
이동한
후
Create Virtual Machine based on Virtual Machine template을
선택합니다.
그림 11
"spool1" 서버
풀을
선택합니다.
그림 12
Source탭에서
방금
추가한
템플릿을
선택합니다. 1개가
있어야
합니다.
그림 13
Virtual Machine Info
탭에서
원하는 VM 이름(예: rac1), 암호
및
하나의
인터페이스를
입력합니다.
그림 14
요약
화면에서
모든
항목을
다시
확인한
후
Confirm을
클릭합니다.
그림 15
기본 VM 화면에
새로
추가한 rac1 VM이
Creating
상태로
표시되어야
합니다. Oracle VM에서
템플릿을
새
시스템으로
복사하고
있습니다.
그림 16
"rac2" 노드에
대해
이
단계를
반복합니다. 이
단계에서 Oracle RAC 설치에
사용할
수
있는
두
대의 Linux 시스템이
있어야
합니다. 이
시스템을 Oracle 소프트웨어
설치를
위해
메모리와
공간을
늘리도록
다시
구성합니다.
Virtual Machines으로
가서 "rac1" 또는 "rac2"를
클릭합니다. General Information에서
Edit로
갑니다. RAM 크기를 1,024MB에서 2,048MB로
변경합니다.
그림 17
Virtual Disk
탭으로
가서
Create New Virtual Disk를
클릭합니다. 여기서
첫
번째
시스템에
대해
추가
디스크에서
필요한
공간을
지정합니다. 다음
값을
사용합니다.
가상
디스크
이름: oracle_software
가상
디스크
크기(MB): 8,192
작성을
마치면
Virtual Disks
화면에 8GB의
디스크가
생성되었다는
메시지가
나타납니다.
그림 18
OpenFiler VM 만들기
이제 iSCSI 스토리지
장치(OpenFiler)를
만들어
보겠습니다. 이
단계는 Oracle VM Manager 없이
수동으로
수행해야
하므로 OpenFilers는 VM Manager 콘솔에서
관리하지
않습니다
[root@quadovm ~]# cd /OVS/running_pool/ [root@quadovm running_pool]# ls 132_rac1 134_rac2 [root@quadovm running_pool]# mkdir 60_iscsi1 62_iscsi2 [root@quadovm running_pool]# gzip -d /root/openfiler-2.2-x86_64.img.gz [root@quadovm running_pool]# cp /root/openfiler-2.2-x86_64.img 60_iscsi1/ [root@quadovm running_pool]# cp /root/openfiler-2.2-x86_64.img 62_iscsi2/ |
앞에서도
보았듯이 OpenFiler Xen 장치는
하나의
이미지
파일로
다운로드할
수
있지만 Xen에서 VM을
부팅하려면
커널과 initrd 이미지가
필요하며
이들은
이미
파일
내에
있습니다. 이
문제를
해결하려면
제공된
이미지에서 initrd와
커널
이미지를
추출하여 dom0에서
처음 512바이트(MBR - Master Boot Record)를
건너뛰어야
합니다. 그런
다음
내부
파일
시스템을
루프백
마운트하고
필요한
부분을
복사합니다.
[root@quadovm running_pool]# losetup -o 512 /dev/loop4 /root/openfiler-2.2-x86_64.img [root@quadovm running_pool]# mount -o ro /dev/loop4 /mnt [root@quadovm running_pool]# cp /mnt/boot/initrd* /mnt/boot/vmlinuz* 60_iscsi1/ [root@quadovm running_pool]# cp /mnt/boot/initrd* /mnt/boot/vmlinuz* 62_iscsi2/ [root@quadovm running_pool]# umount /mnt [root@quadovm running_pool]# losetup -d /dev/loop4 |
시스템, 커널, initrd 이미지를
준비했으면
이제 iSCSI LUN을
저장할
전용
디스크가
필요합니다. 패딩이 0인
큰
파일을
작성하면
되며 OpenFiler VM에서
이
파일을
실제
디스크로
사용하게
됩니다.
[root@quadovm running_pool]# dd if=/dev/zero of=60_iscsi1/volume1.img bs=1M count=12000 12000+0 records in 12000+0 records out 12582912000 bytes (13 GB) copied, 83.3836 seconds, 151 MB/s [root@quadovm running_pool]# [root@quadovm running_pool]# dd if=/dev/zero of=62_iscsi2/volume1.img bs=1M count=12000 12000+0 records in 12000+0 records out 12582912000 bytes (13 GB) copied, 88.5499 seconds, 142 MB/s [root@quadovm running_pool]# |
이제 Xen 구성
파일을
만드는
한
단계만
남았습니다. 이
단계는
두
번째 SSH 세션에
대해 60_iscsi1을 62_iscsi2로
변경하여
또
한
번
수행해야
합니다.
[root@quadovm running_pool]# cd 60_iscsi1 [root@quadovm 60_iscsi1]# cat > vm.cfg
name = "iscsi1"
kernel = "/OVS/running_pool/60_iscsi1/vmlinuz-2.6.16.29-0.11.smp.gcc3.4.x86_64.xen.domU"
ramdisk = "/OVS/running_pool/60_iscsi1/initrd-2.6.16.29-0.11.smp.gcc3.4.x86_64.xen.domU.img"
disk = [
'tap:aio:/OVS/running_pool/60_iscsi1/openfiler-2.2-x86_64.img,xvda,w',
'tap:aio:/OVS/running_pool/60_iscsi1/volume1.img,xvdb,w'
]
root = "/dev/xvda1 ro"
vif = ['bridge=xenbr0','bridge=sanbr0']
memory = 768
<CTRL+D> [root@quadovm 60_iscsi1]# xm create -c vm.cfg Using config file "./vm.cfg". Started domain iscsi1 Bootdata ok (command line is root=/dev/xvda1 ro ) Linux version 2.6.16.29-0.11.smp.gcc3.4.x86_64.xen.domU (conary.rpath.com@rpl:1-xen) (gcc version 3.4.4) #1 SMP Wed Dec 6 02:05:30 EST 2006 [..] Registering block device major 202 xvda: xvda1 xvdb: unknown partition table [..] Welcome to Openfiler NAS/SAN Appliance 2.2 Press 'I' to enter interactive startup. [..many errors please ignore them..] |
위에서
다음과
같은
사실을
확인할
수
있습니다.
- OpenFiler에서
해당
시스템
디스크를 xvdaand로
표시하고
새
디스크(아직
파티션으로
초기화하지
않음)를 xvdb로
표시합니다.
- 첫
번째
이더넷
인터페이스가 xenbr0 브릿지에
연결되고
두
번째
이더넷
인터페이스가 sanbr0에
연결되도록
구성했습니다.
- OpenFiler에
최대 768MB의 RAM을
할당했습니다.
VM(Virtual Machine) 구성하기
제공된 Xen 이미지는
미리
구성되어
있지
않으므로
직접
구성해야
합니다. iscsi1에
루트로
로그인한
다음
새로운 OpenFiler iscsi1 VM 템플릿에
맞게
네트워킹을
다시
구성합니다. 먼저 /etc/hosts, /etc/resolv.conf 및 sysconfig 이더넷
구성
파일을
설정합니다. 마지막으로
모든
네트워킹을
다시
시작하여 VM 재시작
없이
새로운
설정을
적용합니다.
Openfiler NAS/SAN Appliance Powered by rPath Linux To administer this appliance, please use a web browser from another system to navigate to
For further information and commercial support, please visit http://www.openfiler.com
localhost login: root [root@localhost ~]# cd /etc [root@localhost etc]# echo -e "10.99.1.101\tiscsi1">> hosts [root@localhost sysconfig]# cd sysconfig [root@localhost sysconfig]# cat > network
NETWORKING=yes
GATEWAY=10.99.1.1
HOSTNAME=iscsi1
<CTRL+D> [root@localhost sysconfig]# cat >network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
NETMASK=255.255.255.0
IPADDR=10.99.1.101
<CTRL+D> [root@localhost sysconfig]# cat >network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
NETMASK=255.255.255.0
IPADDR=10.98.1.101
MTU=9000
<CTRL+D> [root@localhost sysconfig]# echo "nameserver10.99.1.1" > /etc/resolv.conf [root@localhost sysconfig]# service network restart Shutting down interface eth0: [ OK ] Shutting down interface eth1: [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface : [ OK ] Bringing up interface eth0: [ OK ] Bringing up interface eth1: [ OK ] [root@localhost sysconfig]# |
인터페이스의 IP 주소를
확인합니다.
[root@localhost sysconfig]# ip a ls 1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:16:3e:14:53:73 brd ff:ff:ff:ff:ff:ff inet 10.99.1.101/24 brd 10.99.1.255 scope global eth0 inet6 fe80::216:3eff:fe14:5373/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:16:3e:68:4f:c7 brd ff:ff:ff:ff:ff:ff inet 10.98.1.101/24 brd 10.98.1.255 scope global eth1 inet6 fe80::216:3eff:fe68:4fc7/64 scope link valid_lft forever preferred_lft forever 4: sit0: <NOARP> mtu 1480 qdisc noop link/sit 0.0.0.0 brd 0.0.0.0 [root@localhost sysconfig]# [root@localhost sysconfig]# ip ro ls | grep ^default default via 10.99.1.1 dev eth0 [root@localhost sysconfig]# [root@localhost sysconfig]# ping -c 1 iscsi1 PING iscsi1 (10.99.1.101) 56(84) bytes of data. 64 bytes from iscsi1 (10.99.1.101): icmp_seq=0 ttl=64 time=0.019 ms
--- iscsi1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.019/0.019/0.019/0.000 ms, pipe 2 [root@localhost sysconfig]# |
혼동을
피하기
위해 iscsi1에
다시
로그인하여
새로운
호스트
이름이
표시되도록
명령
프롬프트를
변경합니다.
OpenFiler는
암호가
설정되지
않은
상태로
제공되므로
이제
루트에
대한
암호를
변경합니다.
[root@iscsi1 ~]# passwd Changing password for user root. New UNIX password: BAD PASSWORD: it's WAY too short Retype new UNIX password: passwd: all authentication tokens updated successfully. [root@iscsi1 ~]# |
iscsi2 OpenFiler 템플릿에서
다른 SSH 세션
로그인을
루트로
사용하여, iscsi1에
대해
수행했던
것과
동일한
절차를
수행합니다.
[root@quadovm ~]# cd /OVS/running_pool/62_iscsi2/ [root@quadovm 62_iscsi2]# cat > vm.cfg
name = "iscsi2"
kernel = "/OVS/running_pool/62_iscsi2/vmlinuz-2.6.16.29-0.11.smp.gcc3.4.x86_64.xen.domU"
ramdisk = "/OVS/running_pool/62_iscsi2/initrd-2.6.16.29-0.11.smp.gcc3.4.x86_64.xen.domU.img"
disk = [
'tap:aio:/OVS/running_pool/62_iscsi2/openfiler-2.2-x86_64.img,xvda,w',
'tap:aio:/OVS/running_pool/62_iscsi2/volume1.img,xvdb,w'
]
root = "/dev/xvda1 ro"
vif = ['bridge=xenbr0','bridge=sanbr0']
<CTRL+D> [root@quadovm 62_iscsi2]# [root@quadovm 62_iscsi2]# xm create -c vm.cfg Using config file "./vm.cfg". Started domain iscsi2 Bootdata ok (command line is root=/dev/xvda1 ro ) Linux version 2.6.16.29-0.11.smp.gcc3.4.x86_64.xen.domU (conary.rpath.com@rpl:1-xen) (gcc version 3.4.4) #1 SMP Wed Dec 6 02:05:30 EST 2006 [..] INIT: version 2.85 booting Welcome to Openfiler NAS/SAN Appliance 2.2 Press 'I' to enter interactive startup. [..]
localhost login: root [root@localhost ~]# cd /etc [root@localhost etc]# echo -e "10.99.1.102\tiscsi2" >> hosts [root@localhost etc]# cd sysconfig/ [root@localhost sysconfig]# cat > network
NETWORKING=yes
GATEWAY=10.99.1.1
HOSTNAME=iscsi2
<CTRL+D> [root@localhost sysconfig]# cat > network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
NETMASK=255.255.255.0
IPADDR=10.99.1.102
<CTRL+D> [root@localhost sysconfig]# cat > network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
NETMASK=255.255.255.0
IPADDR=10.98.1.102
MTU=9000
<CTRL+D> [root@localhost sysconfig]# echo "nameserver 10.99.1.1" > /etc/resolv.conf [root@localhost sysconfig]# service network restart Shutting down interface eth0: [ OK ] Shutting down interface eth1: [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: [ OK ] Bringing up interface eth1: [ OK ] [root@localhost sysconfig]# |
IP 네트워킹을
확인합니다.
[root@localhost sysconfig]# ip a ls 1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:16:3e:3c:bd:4a brd ff:ff:ff:ff:ff:ff inet 10.99.1.102/24 brd 10.99.1.255 scope global eth0 inet6 fe80::216:3eff:fe3c:bd4a/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:16:3e:15:b7:51 brd ff:ff:ff:ff:ff:ff inet 10.98.1.102/24 brd 10.98.1.255 scope global eth1 inet6 fe80::216:3eff:fe15:b751/64 scope link valid_lft forever preferred_lft forever 4: sit0: <NOARP> mtu 1480 qdisc noop link/sit 0.0.0.0 brd 0.0.0.0 [root@localhost sysconfig]# ip ro ls | grep ^def default via 10.99.1.1 dev eth0 [root@localhost sysconfig]# passwd Changing password for user root. New UNIX password: BAD PASSWORD: it's WAY too short Retype new UNIX password: passwd: all authentication tokens updated successfully. |
이후에
혼동되지
않도록
다시
로그인합니다. 이제
네트워크
브라우저에서
다음으로
이동할
수
있습니다.
- http://10.99.1.101:446/ (iscsi1)
- http://10.99.1.102:446/ (iscsi2)
참고: 각 iSCSI 스토리지
장치에
대해
이
단계를
두
번씩
수행합니다.
먼저
라이센스에
동의하는지를
묻는
메시지가
표시되고
동의하면
다음
자격
증명을
사용하여
로그인할
수
있습니다
- 로그인: openfiler
- 암호: password
팁: OpenFiler의
루트
암호는
웹
인터페이스
암호와
동일하지
않지만
관리를
용이하게
하기
위해
동일하게
유지할
수
있습니다.
그림 19
Volumes
탭으로
간
후
Physical Storage Mgmt.에서
/dev/xvdb (사용자가
만든 12GB의
두
번째
이미지
데이터
파일)를
클릭합니다.
그림 20
Volume Group Mgmt.에서 "물리적
볼륨"(LVM용) 유형으로
하나의
큰 x86 파티션을
만듭니다.
그림 21
Volume Group Mgmt.로
다시
가서 /dev/xvdb1 물리적
볼륨(LVM 용어로 "PV")만
포함하는 "racdata1" / "racdata2"이라는
볼륨
그룹을
만듭니다.
그림 22
볼륨을
만들고
나면
하나의
볼륨
그룹이
나타납니다. Create New Volumes
탭으로
갑니다..
그림 23
이제
세
개의 iSCSI LUN을
만들어야
합니다.
- ocr (320MB)
- voting (320MB)
- asmdata1 (이
예에서는
최대 11GB의
여유
공간)
그림 24
이러한 LUN을
만들고
나면 "racdata1" / "racdata2"라는
이름의
스토리지
할당
볼륨
그룹을
나타내는
그래프를
볼
수
있습니다.
그림 25
Services -> Enable/disable로
간
후
iSCSI target을
활성화합니다.
그림 26
General -> Local Networks으로
가서
Network Access Configuration
아래에 "san1"을
만들어 10.98.1.0/24 네트워크(SAN 네트워크)로부터의 iSCSI 연결을
허용합니다.
그림 27
Volumes -> 기존
볼륨
목록에서 iSCSI LUN으로
전환한
후
모든 iSCSI LUN을
편집합니다. "iSCSI host access" 섹션
아래에서, san1 네트워크에서
이 iSCSI LUN을
액세스할
수
있도록
확인합니다. update를
클릭하여
저장합니다.
이제 Oracle RAC에서
사용하기
위한 LUN을
내보내는
두
개의 iSCSI 시스템이
만들어졌습니다.
확장 RAC에
맞게 RAC VM 다시
구성하기
eth0 외의
물리적
이더넷
어댑터가
없을
경우 Oracle VM은
물리적
인터페이스
없이
브릿지를
만들
수
없기
때문에
수동으로
어댑터를
에뮬레이션해야
합니다. 특히 iSCSI 트래픽을
위한 SAN 네트워크와 RAC의 Cache Fusion을
위한 Interconnect 네트워크를
추가할
수
있습니다.
이더넷
브릿지를
추가로
생성하기
위해서는 /etc/rc.d/rc.local에
간단히
다음을
추가하면
됩니다. Oracle VM을
다시
시작하지
않으려면
이러한
명령을
수동으로
실행해야
합니다
[root@quadovm ~]# cat >> /etc/rc.d/rc.local
brctl addbr sanbr0 brctl addbr ibr0 ip link set dev sanbr0 up ip link set dev ibr0 up
<CTRL+D> [root@quadovm ~]# |
이제
성능상의
이유로 SAN 브릿지와 Interconnect 브릿지의 MTU가
항상 9000이
되도록
해야
합니다. Xen에서 netfront 및 netback 네트워크
가상화
드라이버를
동기화할
때까지 MUT 설정을
연기해야
하기
때문에
이러한
방법으로
시도할
수
있습니다.
[root@quadovm ~]# cat > fixbrmtu.sh
#!/bin/sh
bridge=$1
if [ "$bridge" != "sanbr0" -a "$bridge" != "ibr0" ]; then
logger -t fixbrmtu -p syslog.notice Skipping MTU fix for bridge=$bridge
exit 0
fi
logger -t fixbrmtu -p syslog.notice Fixing MTU for bridge=$bridge
while : ; do
cd /sys/class/net/$bridge/brif || exit 1
err=0
for iface in *; do
ip link set dev $iface mtu 9000 > /dev/null 2>&1
if [ $? -ne 0 ]; then
err=$[err+1]
fi
done
if [ $err -eq 0 ]; then
break
fi
sleep 1
done
ip link set dev $bridge mtu 9000
exit 0
<CTRL+D> [root@quadovm ~]# chmod 700 fixbrmtu.sh |
다음에는 vi를
통해 /etc/xen/scripts/vif-bridge 파일을
수정하고 "success" 행
바로
다음
굵은체
행을
추가합니다.
log debug "Successful vif-bridge $command for $vif, bridge $bridge." if [ "$command" = "online" ] then success (/root/fixbrmtu.sh "$bridge") & fi |
Oracle VM에
루트로
로그온한
상태에서 /OVS/running_pool/로
전환한
후 rac1 및 rac2에
대해 vm.cfg를
편집하고 vif 행을
다음과
같이
변경합니다.
vif = ['bridge=xenbr0', 'bridge=ibr0', 'bridge=sanbr0'] |
즉, 다음과
같은
방법으로 RAC VM이
브릿지에
연결되도록
할
수
있습니다.
- xenbr0에 eth0 연결(Oracle VM 서버의
첫
번째
물리적
이더넷을
통해
연계. brctl show 명령을
사용하여
이를
확인할
수
있음) - Oracle VM 클라이언트를
위한
공용
인터페이스
- ibr0에 eth1 연결 - Cache Fusion을
위한 Interconnect 네트워크
- sanbr0에 eth2 연결 - iSCSI SAN 네트워크
참고: 추가
인터페이스는 Oracle VM Manager에서
표시되지
않습니다.
이제 rac1 및 rac2에
대해 VM을
시작합니다.
[root@quadovm 134_rac2]# xm create vm.cfg Using config file "./vm.cfg". Started domain 134_rac2 [root@quadovm 134_rac2]# |
실행되는
가상
시스템을
확인합니다. 문제가
없으면
다음과
비슷한
화면이
나타납니다.
[root@quadovm ~]# xm list Name ID Mem VCPUs State Time(s) 132_rac1 7 2048 1 -b---- 12.8 134_rac2 8 2048 1 r----- 7.2 Domain-0 0 512 4 r----- 287.6 iscsi1 5 768 1 -b---- 4.8 iscsi2 6 768 1 -b---- 4.8 [root@quadovm ~]# |
기본적으로 Oracle VM 템플릿은
다음
자격
증명에
적합하게
구성되어
있습니다.
rac1 노드를
다시
구성하여
시작한
후
로컬
콘솔을
통해
이
노드에
연결합니다.
[root@quadovm ~]# xm console 132_rac1 rtc: IRQ 8 is not free. i8042.c: No controller found.
Enterprise Linux Enterprise Linux Server release 5.1 (Carthage) Kernel 2.6.18-53.1.13.9.1.el5xen on an x86_64
localhost.localdomain login: root Password: <type "ovsroot"> Last login: Wed Feb 20 14:21:42 from ca-ostest246.us.oracle.com [root@localhost ~]# |
네트워크
구성
유틸리티를
실행합니다.
[root@localhost ~]# export TERM=linux [root@localhost ~]# system-config-network-tui |
system-config-network-tuiis를
사용하고
손쉽고도
간단하게
네트워킹을
구성할
수
있습니다. 공용
인터페이스(Oracle VM 외부에서
볼
수
있는 IP 네트워크에
대한
관리
인터페이스) 구성
작업은 "eth0"을
선택하고 IP 주소, 넷마스크, 게이트웨이
등을
설정하는
단계로
구성됩니다.
그림 28
그림 29
"eth0"을
성공적으로
구성했으면 "eth1"(Interconnect)을
구성할
수
있습니다. <New device>를
선택하여
새
인터페이스를
만든
다음
Ethernet과 IP 네트워킹을
설정하면
됩니다. eth2(SAN)에
대해
이
단계를
반복합니다.
그림 30
그림 31
그림 32
완료했으면
네트워크
구성(DNS 분석기, 호스트
이름
및 MTU 변경
설정)을
마칩니다.
[root@localhost ~]# echo 'nameserver 10.99.1.1' > /etc/resolv.conf [root@localhost ~]# cat > /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=rac1
<CTRL+D> [root@localhost ~]# echo "MTU=9000" >> /etc/sysconfig/network-scripts/ifcfg-eth1 [root@localhost ~]# echo "MTU=9000" >> /etc/sysconfig/network-scripts/ifcfg-eth2 [root@localhost ~]# service network restart Shutting down interface eth0: [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: [ OK ] Bringing up interface eth1: [ OK ] Bringing up interface eth2: [ OK ] [root@localhost ~]# |
/etc/hosts 파일을
다음과
같이
저장합니다.
127.0.0.1 localhost.localdomain localhost
# eth0: public network 10.99.1.91 rac1 10.99.1.92 rac2
# eth1: interconnect 10.97.1.1 rac1-priv 10.97.1.2 rac2-priv
# VIPs 10.99.1.201 rac1-vip 10.99.1.202 rac2-vip
# eth2: iSCSI SAN 10.98.1.101 iscsi1 10.98.1.102 iscsi2
# PUB for openfilers 10.99.1.101 iscsi1-pub 10.99.1.102 iscsi2-pub |
시스템에
적합한
시간대를
설정합니다(이
예의
경우
폴란드
시간대).
[root@localhost ~]# ln -sf /usr/share/zoneinfo/Europe/Warsaw /etc/localtime |
rac1에서
로그아웃한
후
다시
로그인하면
셸에 "root@rac1"라고
나타납니다. 또한
게이트웨이와의
연결을
확인합니다. rac2에
대해
적합한 IP 주소를
사용하여
동일한
작업을
수행해야
한다는
것을
잊지
마십시오.
기본적으로 Oracle VM 템플릿에는 iSCSI 이니시에이터
유틸리티의
사용자
공간
부분이
제공되지
않습니다. Oracle Enterprise Linux ISO 이미지(3~4GB)에서
이
부분을
얻을
수
있지만, 신속하게
진행하기
위해
대신
여기
에서
워크스테이션으로
다운로드할
수
있습니다.
그런
다음
워크스테이션에서 iSCSI 이니시에이터의
사본을
두 RAC 노드
모두에
업로드합니다.
[vnull@xeno RPMS_el51]$ scp iscsi-initiator-utils*.rpm root@10.99.1.91:. root@10.99.1.91's password: iscsi-initiator-utils-6.2.0.865-0.8.el5.x86_64.rpm 100% 528KB 528.2KB/s 00:00 [vnull@xeno RPMS_el51]$ scp iscsi-initiator-utils*.rpm root@10.99.1.92:. root@10.99.1.92's password: iscsi-initiator-utils-6.2.0.865-0.8.el5.x86_64.rpm 100% 528KB 528.2KB/s 00:00 [vnull@xeno RPMS_el51]$ |
이제 iSCSI 이니시에이터를
설치하고, 기본
구성으로
설정한
후
각 RAC 노드에서
활성화합니다. rac2에
대한 InitiatorAlias를
변경하는
것을
잊지
마십시오.
[root@rac1 ~]# rpm -Uhv iscsi-initiator-utils-6.2.0.865-0.8.el5.x86_64.rpm Preparing... ########################################### [100%] 1:iscsi-initiator-utils ########################################### [100%] [root@rac1 ~]# rm iscsi-initiator-utils-6.2.0.865-0.8.el5.x86_64.rpm rm: remove regular file `iscsi-initiator-utils-6.2.0.865-0.8.el5.x86_64.rpm'? y [root@rac1 ~]# [root@rac1 ~]# echo "InitiatorAlias=rac1" >> /etc/iscsi/initiatorname.iscsi [root@rac1 ~]# service iscsid start Turning off network shutdown. Starting iSCSI daemon: [ OK ] [ OK ] [root@rac1 ~]# chkconfig iscsid on [root@rac1 ~]# chkconfig iscsi on |
각 RAC 노드에서
필요
없는
서비스를
비활성화합니다
[root@rac1 ~]# chkconfig --level 0123456 bluetooth off [root@rac1 ~]# chkconfig --level 0123456 cups off [root@rac1 ~]# chkconfig --level 0123456 ip6tables off [root@rac1 ~]# chkconfig --level 0123456 iptables off [root@rac1 ~]# chkconfig --level 0123456 o2cb off [root@rac1 ~]# chkconfig --level 0123456 o2cb off [root@rac1 ~]# chkconfig --level 0123456 ocfs2 off [root@rac1 ~]# chkconfig --level 0123456 sendmail off [root@rac1 ~]# reboot |
두 RAC 노드에
대해
추가
로컬
하드
디스크에서 Oracle 소프트웨어
마운트
위치(/u01)를
위한
파티션을
준비합니다.
[root@rac1 ~]# fdisk /dev/hdd Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable.
The number of cylinders for this disk is set to 1044. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-1044, default 1): <ENTER> Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-1044, default 1044): <ENTER> Using default value 1044
Command (m for help): p
Disk /dev/hdd: 8589 MB, 8589934592 bytes 255 heads, 63 sectors/track, 1044 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System /dev/hdd1 1 1044 8385898+ 83 Linux
Command (m for help): w The partition table has been altered!
Calling ioctl() to re-read partition table. Syncing disks. [root@rac1 ~]# [root@rac1 ~]# mkfs.ext3 -j /dev/hdd1 mke2fs 1.39 (29-May-2006) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 1048576 inodes, 2096474 blocks 104823 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2147483648 64 block groups 32768 blocks per group, 32768 fragments per group 16384 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 29 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@rac1 ~]# [root@rac1 ~]# mkdir /u01 [root@rac1 ~]# echo -e '/dev/hdd1\t\t/u01\t\t\text3\tdefaults,noatime\t1 2' >> /etc/fstab [root@rac1 ~]# mount /u01 |
동적
장치
관리를
설정하여 iSCSI SAN을
위한
적절한
이름
지정
방식을
만듭니다. 먼저
각 RAC 노드에서
실행하여 /etc/udev/rules.d/55-openiscsi.rulesfile을
만듭니다.
[root@rac1 ~]# cat > /etc/udev/rules.d/55-openiscsi.rules
# /etc/udev/rules.d/55-openiscsi.rules
KERNEL=="sd*", BUS=="scsi", PROGRAM="/etc/udev/scripts/iscsidev.sh %b",
SYMLINK+="iscsi/%c{1}/lun%c{2}/part%n", OWNER="oracle", MODE="0640", GROUP="disk"
<CTRL+D> [root@rac1 ~]# |
udevd는
현재의
실제
장치에
대한
파일만
포함하는
동적
장치
디렉토리를
제공합니다. 또한 /dev 디렉토리에서
장치
노드
파일을
만들거나
제거하고, 시스템에
장착된
새로운
장치에
대해
커널로부터
이벤트를
받아
작동합니다. 각
이벤트가
발생할
때마다
새로운
장치
속성에
대해
규칙
파일이
점검됩니다. 이를
기준으로 symlink를
만들고, 소유권과
액세스
권한을
변경하며, 외부
프로그램을
실행할
수
있습니다.
이
규칙
파일은
새로운
모든 SCSI 장치에
대해
다음을
실행하여
작성된 iscsidev.sh 스크립트를
시작합니다.
[root@rac2 ~]# mkdir -p /etc/udev/scripts [root@rac2 ~]# cat > /etc/udev/scripts/iscsidev.sh
#!/bin/sh
#iscsidev.sh
BUS=${1}
HOST=${BUS%%:*}
LUN=`echo ${BUS} | cut -d":" -f4`
file="/sys/class/scsi_host/host${HOST}/device/session*/iscsi_session*/targetname"
target_name=`echo $(cat ${file}) | cut -d":" -f2`
if [ -z "${target_name}" ]; then
exit 1
fi
echo "${target_name} ${LUN}"
<CTRL+D> [root@rac2 ~]# chmod 755 /etc/udev/scripts/iscsidev.sh |
이
스크립트는
전달된 SCSI 장치가
실제 iSCSI이며
이에
대한
정보를 udev에
반환하는지를
결정합니다. iSCSI 이니시에이터를
구성하면 iSCSI 대상
검색을
수행하여
각 RAC에
실행되는
스토리지
어레이에
연결할
수
있습니다.
[root@rac1 ~]# iscsiadm -m discovery -t sendtargets -p 10.98.1.101 10.98.1.101:3260,1 iqn.2006-01.com.openfiler:racdata1.asm1 10.98.1.101:3260,1 iqn.2006-01.com.openfiler:racdata1.ocr 10.98.1.101:3260,1 iqn.2006-01.com.openfiler:racdata1.voting [root@rac1 ~]# iscsiadm -m discovery -t sendtargets -p 10.98.1.102 10.98.1.102:3260,1 iqn.2006-01.com.openfiler:racdata2.asm1 10.98.1.102:3260,1 iqn.2006-01.com.openfiler:racdata2.ocr 10.98.1.102:3260,1 iqn.2006-01.com.openfiler:racdata2.voting [root@rac1 ~]# iscsiadm -m discovery -l 10.98.1.101:3260 via sendtargets 10.98.1.102:3260 via sendtargets [root@rac2 ~]# iscsiadm -m node | sort 10.98.1.101:3260,1 iqn.2006-01.com.openfiler:racdata1.asm1 10.98.1.101:3260,1 iqn.2006-01.com.openfiler:racdata1.ocr 10.98.1.101:3260,1 iqn.2006-01.com.openfiler:racdata1.voting 10.98.1.102:3260,1 iqn.2006-01.com.openfiler:racdata2.asm1 10.98.1.102:3260,1 iqn.2006-01.com.openfiler:racdata2.ocr 10.98.1.102:3260,1 iqn.2006-01.com.openfiler:racdata2.voting [root@rac1 ~]# |
이제
두 RAC 노드에서
스토리지에
로그인합니다.
[root@rac1 ~]# iscsiadm -m node -L all Login session [iface: default, target: iqn.2006-01.com.openfiler:racdata2.asm1, portal: 10.98.1.102,3260] Login session [iface: default, target: iqn.2006-01.com.openfiler:racdata2.ocr, portal: 10.98.1.102,3260] Login session [iface: default, target: iqn.2006-01.com.openfiler:racdata1.voting, portal: 10.98.1.101,3260] Login session [iface: default, target: iqn.2006-01.com.openfiler:racdata1.ocr, portal: 10.98.1.101,3260] Login session [iface: default, target: iqn.2006-01.com.openfiler:racdata1.asm1, portal: 10.98.1.101,3260] Login session [iface: default, target: iqn.2006-01.com.openfiler:racdata2.voting, portal: 10.98.1.102,3260] [root@rac1 ~]# |
이제 iSCSI LUN을
분할해야
합니다. 검색된
모든 iSCSI 장치에서 LUN별로
큰
파티션을
하나
만들
것입니다. ((경고!
이
스크립트는
모든 iSCSI LUN의
파티션
테이블을
지우는
위험한
스크립트입니다!)
다음
스크립트를
저장하십시오.
#!/bin/sh
[ -d /dev/iscsi ] || exit 100
for LUN in `find /dev/iscsi -type l`; do
echo $LUN
dd if=/dev/zero of=$LUN bs=512 count=1
echo -en "0,\n;\n;\n;\n" | sfdisk -q $LUN
done |
한
노드에서만
실행
권한을
부여하고
실행합니다.
[root@rac2 ~]# chmod 700 partit.sh [root@rac2 ~]# ./partit.sh [..lots of partitioning output..] |
rac2에서
수행한
변경을
첫
번째
노드에서
볼
수
있습니다.
그
후에 fdisk -l를
사용하여
파티션을
검사할
수
있습니다.
iSCSI 조정
성능을
최적화하기
위해 iSCSI 스토리지를
조정해야
합니다. iSCSI 프로토콜이 TCP를
기반으로
하므로
이
작업은
주로 TCP/IP 스택
조정과
연관됩니다. OpenFilers(iscsi1 및 iscsi2)에서 /etc/init.d/iscsi-target을
편집하고 MEM_SIZE 변수를 1073741824로
설정합니다. 이렇게
하면 iscsi1 및 iscsi2에서 iSCSI 대상을
시작하기
전에 TCP 네트워크
버퍼를
올바르게
설정할
수
있습니다.
그런
다음
기존 /etc/ietd.conf to /etc/ietd.conf.old를
백업하고
여기에
다음을
추가합니다.
MaxConnections 1 InitialR2T No ImmediateData Yes MaxRecvDataSegmentLength 16776192 MaxXmitDataSegmentLength 16776192 MaxBurstLength 16776192 FirstBurstLength 16776192 MaxOutstandingR2T 16 Wthreads 16 DataDigest None HeaderDigest None |
변경을
마친
후 iscsi1과 iscsi2를
다시
부팅합니다.
참고: 이
파일은 iSCSI LUN이
새로
추가되거나, 다시
구성되거나, 삭제될
때마다
다시
생성됩니다.
이제 iSCSI 성능을
최적화하기
위해 RAC 노드를
다시
구성해야
합니다. rac1 및 rac2 노드에서 /etc/sysctl.conf를
편집하고
다음
매개
변수를
적절히
변경합니다.
net.core.rmem_max = 1073741824 net.core.wmem_max = 1073741824 net.ipv4.tcp_rmem = 1048576 16777216 1073741824 net.ipv4.tcp_wmem = 1048576 16770216 1073741824 net.ipv4.tcp_mem = 1048576 16770216 1073741824 |
두 RAC에서 /etc/iscsi/iscsid.conf(iSCSI 이니시에이터
구성)를
변경하고
마지막으로
다시
부팅하여
변경을
적용합니다. iSCSI 클라이언트
재시작과
함께 sysctl -p를
수행할
수
있습니다.
[root@rac2 ~]# cat > /etc/iscsi/iscsid.conf
node.startup = automatic
node.session.timeo.replacement_timeout = 120
node.conn[0].timeo.login_timeout = 15
node.conn[0].timeo.logout_timeout = 15
node.conn[0].timeo.noop_out_interval = 10
node.conn[0].timeo.noop_out_timeout = 15
node.session.initial_login_retry_max = 4
node.session.cmds_max = 128
node.session.queue_depth = 128
node.session.iscsi.InitialR2T = No
node.session.iscsi.ImmediateData = Yes
node.session.iscsi.FirstBurstLength = 16776192
node.session.iscsi.MaxBurstLength = 16776192
# the default is 131072
node.conn[0].iscsi.MaxRecvDataSegmentLength = 16776192
# the default is 32768
discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 16776192
node.conn[0].iscsi.HeaderDigest = None
node.session.iscsi.FastAbort = No
<CTRL+D> [root@rac2 ~]# reboot |
참고: OpenFiler에
대한
이번
변경과
앞의
변경을
통해
기본
순차
쓰기(sequential-write) iSCSI 성능이
극대화되었으며
이는
블록
크기를 1MB로
지정한 dd 명령을
통해 iSCSI LUN에서
직접
테스트했습니다. 이
성능은
사용하는
하드웨어, 소프트웨어
버전
및
기타
요소에
따라
시스템마다
다를
수
있습니다.
6. Oracle 소프트웨어
설치
준비하기
Oracle Database와 Oracle Clusterware를 rac1 VM에서
압축을
풉니다.
[root@rac1 ~]# cd /u01/install/ [root@rac1 install]# unzip linux.x64_11gR1_database.zip [root@rac1 install]# unzip linux.x64_11gR1_clusterware.zip |
각 RAC 노드에서 oracle 계정의
암호를
변경하고 Database 및 Clusterware를
위한
디렉토리를
설정합니다
[root@rac1 ~]# passwd oracle Changing password for user oracle. New UNIX password: BAD PASSWORD: it is WAY too short Retype new UNIX password: passwd: all authentication tokens updated successfully. [root@rac1 ~]# mkdir -p /u01/app/oracle [root@rac1 ~]# chown -R oracle:oinstall /u01/app [root@rac1 ~]# chmod -R 775 /u01/app [root@rac1 ~]# [root@rac1 ~]# mkdir -p /u01/app/crs [root@rac1 ~]# chown -R oracle:oinstall /u01/app/crs [root@rac1 ~]# chmod -R 775 /u01/app/crs |
rac1 및 rac2에서 oracle 사용자 .bash_profile 스크립트를
다음과
같이
편집합니다. 단, 각 RAC 노드에서 ORACLE_SID를
개별적으로
설정해야
합니다.
# ~oracle .bash_profile
# Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi
alias ls="ls -FA"
# User specific environment and startup programs export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.1.0/db_1 export ORA_CRS_HOME=/u01/app/crs export ORACLE_PATH=$ORACLE_BASE/common/oracle/sql:.:$ORACLE_HOME/rdbms/admin
# Each RAC node must have a unique ORACLE_SID.
export ORACLE_SID=erac1
export PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin export PATH=${PATH}:$ORACLE_BASE/common/oracle/bin export ORACLE_TERM=xterm export TNS_ADMIN=$ORACLE_HOME/network/admin export ORA_NLS10=$ORACLE_HOME/nls/data export LD_LIBRARY_PATH=$ORACLE_HOME/lib export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib export CLASSPATH=$ORACLE_HOME/JRE export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib export THREADS_FLAG=native export TEMP=/tmp export TMPDIR=/tmp |
Oracle SSH 사용자
동격
설정
"사용자
동격"은 RSH/SSH를
사용하여
로컬
사용자
계정이
암호
없이
클러스터의
다른
모든
노드에
액세스할
수
있도록
하는
방법입니다. 사용자
동격은
주로 Oracle의
설치
프로그램에서
암호를
묻지
않고
나머지
노드에
설치를
수행하기
위해
사용됩니다. 이
명령줄은
예는 SSH 키
기반의
인증을
사용하여
간편하게
사용자
동격을
설정하는
방법을
설명합니다.
[root@rac1 ~]# su - oracle [oracle@rac1 ~]$ mkdir -p ~/.ssh [oracle@rac1 ~]$ chmod 700 ~/.ssh [oracle@rac1 ~]$ /usr/bin/ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/oracle/.ssh/id_rsa): <ENTER> Enter passphrase (empty for no passphrase): <ENTER> Enter same passphrase again: <ENTER> Your identification has been saved in /home/oracle/.ssh/id_rsa. Your public key has been saved in /home/oracle/.ssh/id_rsa.pub. The key fingerprint is: cb:a6:d0:4a:cc:39:9d:78:70:24:f7:5b:99:14:7e:53 oracle@rac1 [oracle@rac1 ~]$ [oracle@rac1 ~]$ ssh rac1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys The authenticity of host 'rac1 (10.99.1.91)' can't be established. RSA key fingerprint is 1e:8c:1f:f7:dc:2e:10:75:0f:08:01:13:a8:49:31:0c. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'rac1,10.99.1.91' (RSA) to the list of known hosts. oracle@rac1's password: [oracle@rac1 ~]$ ssh rac2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys The authenticity of host 'rac2 (10.99.1.92)' can't be established. RSA key fingerprint is 1e:8c:1f:f7:dc:2e:10:75:0f:08:01:13:a8:49:31:0c. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'rac2,10.99.1.92' (RSA) to the list of known hosts. oracle@rac2's password: [oracle@rac1 ~]$ scp .ssh/authorized_keys rac2:.ssh/ oracle@rac2's password: authorized_keys 100% 786 0.8KB/s 00:00 [oracle@rac1 ~]$ chmod 600 ~/.ssh/authorized_keys |
그래픽
인터페이스의
설치
프로그램에
대한 X11 워크스테이션
주소와
함께
키
암호를
묻지
않도록
셸을
설정합니다.
[oracle@rac1 ~]$ exec /usr/bin/ssh-agent $SHELL [oracle@rac1 ~]$ /usr/bin/ssh-add Identity added: /home/oracle/.ssh/id_rsa (/home/oracle/.ssh/id_rsa) [oracle@rac1 ~]$ [oracle@rac1 ~]$ export DISPLAY=10.99.1.1:0 |
동일한
셸
세션에서 SSH 사용자
동격이
예상한
대로
작동하는지
확인해
봅니다.
[oracle@rac1 ~]$ ssh rac1 date Sat May 10 13:16:43 CEST 2008 [oracle@rac1 ~]$ ssh rac2 date Sat May 10 13:16:45 CEST 2008 [oracle@rac1 ~]$ |
워크스테이션에서
그래픽
인터페이스의
설치
및
구성
유틸리티에
대해 RAC 노드로부터의
원격 X11 연결을
허용하도록 X11 환경을
구성해야
합니다.
[vnull@xeno ~]$ xhost +10.99.1.91 10.99.1.91 being added to access control list [vnull@xeno ~]$ xhost +10.99.1.92 10.99.1.92 being added to access control list [vnull@xeno ~]$ |
사용자와
해당
노드
간의
모든
방화벽을
통해 rac1 및 rac2 시스템에서
트래픽을
전달할
수
있어야
합니다(일반적으로 TCP 포트 6000).
ASMLib 구성
ASMLIB는 I/O 작업
및
스토리지
관리를
위한
효율적인
메커니즘으로서
선택
사항입니다. Linux에서 ASMLIB는
주로, 표준 UNIX I/O 호출을
생략하고
해당
작업을
수행하는
전용
커널
부분을
제공함으로써
컨텍스트
전환과
이에
따른 CPU 사용량을
최소화하도록
도와
줍니다. 그러나
이
시나리오에서의
주
역할은
장치
관리를
용이하게
하는
것입니다.
각
노드에서 ASMLib 구성을
수행합니다.
[root@rac1 ~]# /etc/init.d/oracleasm configure 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 []: oinstall 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 Initializing the Oracle ASMLib driver: [ OK ] Scanning the system for Oracle ASMLib disks: [ OK ] [root@rac1 ~]# |
ASMLIB 관리에
두
개의 iSCSI LUN을
추가합니다. rac1에서만
수행하십시오
[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL1ASM1 /dev/iscsi/racdata1.asm1/lun0/part1 Marking disk "VOL1ASM1" as an ASM disk: [ OK ] [root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL2ASM1 /dev/iscsi/racdata2.asm1/lun0/part1 Marking disk "VOL2ASM1" as an ASM disk: [ OK ] [root@rac1 ~]# [root@rac1 ~]# /etc/init.d/oracleasm listdisks VOL1ASM1 VOL2ASM1 [root@rac1 ~]# |
rac2에서
새로운 ASM 디스크를
다시
검사합니다.
[root@rac2 ~]# /etc/init.d/oracleasm scandisks Scanning the system for Oracle ASMLib disks: [ OK ] [root@rac2 ~]# /etc/init.d/oracleasm listdisks VOL1ASM1 VOL2ASM1 [root@rac2 ~]# |
7. Oracle Clusterware 설치
Oracle Clusterware는
데이터베이스와 RAC 관련
헬퍼
애플리케이션을
포함하는
핵심
구성
요소입니다. 이를
통해 DBA는
하나
또는
여러
개의 Oracle 인스턴스를
클러스터에
등록하고
호출할
수
있습니다. 일상적인
작업을
수행하는
동안 Oracle Clusterware는
클러스터에
구성된
모든
노드에
특별한 ping 작업을
통해 "하트비트"라는
메시지를
보냅니다. 어떤
노드에
대해
하트비트가
실패하면
공유
디스크에
있는 Oracle Clusterware 구성
파일을
검사하여
실제
노드
실패인지
네트워크
실패인지를
식별합니다.
Oracle Clusterware를
설치하면 Oracle Database 소프트웨어(다음
단원
참조)를
설치하는
데
사용되는 Oracle Universal Installer(OUI)가
자동으로
이러한
노드를
인식합니다. 이
단원에서
수행할 Oracle Clusterware 설치와
마찬가지로 Oracle Database 소프트웨어
또한
한
노드에서만
실행해야
합니다. OUI는 RAC 클러스터에
구성된
모든
노드에
소프트웨어
패키지를
복사합니다.
세
번째
노드를 NFS 서버로
보팅
디스크를
위한
세
번째
위치를
주
데이터
센터와
지리적으로
독립시킬
것이므로 RAC 노드에서
이
세
번째
위치에
연결하는
데
어떤
스토리지
프로토콜을
어떻게
사용할지를
고려해야
합니다. 세
번째 iSCSI 어레이/서버를
사용할
수
있지만, 실제로
보팅
디스크용으로
스토리지의
몇 MB만
사용하기
위해 iSCSI 스토리지를
구입하는
것은
비용
낭비입니다. 다행히도 Oracle Clusterware는
원격 UNIX/Linux 서버에
설치할
수
있는 NFS 스토리지에
보팅
디스크를
설정할
수
있는
옵션을
제공합니다
여기서는
자신의
관리
워크스테이션을
보팅
디스크
파일을
포함하는
제3의 NFS 위치로
사용합니다. 이
파일은
하나의
디스크로
사용됩니다
해당
워크스테이션에 CRS 보팅
의사(pseudo) 디스크
파일을
포함하는 NFS 내보내기를
만드십시오.
[root@xeno ~]# mkdir /votedisk [root@xeno ~]# echo '/votedisk *(rw,sync,all_squash,anonuid=500,anongid=500)' >> /etc/exports [root@xeno ~]# service portmap start Starting portmap: [ OK ] [root@xeno ~]# service nfs start Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS daemon: [ OK ] Starting NFS mountd: [ OK ] [root@xeno ~]# chkconfig --level 0123456 nfs on [root@xeno ~]# chkconfig --level 0123456 portmap on [root@xeno ~]# dd if=/dev/zero of=/votedisk/third_votedisk.crs bs=1M count=320 320+0 records in 320+0 records out 335544320 bytes (336 MB) copied, 1.32737 seconds, 253 MB/s [root@xeno ~]# |
각 RAC 노드에서
다음을
수행합니다. 한 bash 명령에 fstab 행을
입력합니다
[root@rac1 ~]# echo -e '10.99.1.1:/votedisk\t/votedisk\tnfs\t rw,bg,hard,intr,rsize=32768,wsize=32768,tcp,noac,vers=3,timeo=600\t0\t0' >> /etc/fstab [root@rac1 ~]# service portmap start Starting portmap: [ OK ] [root@rac1 ~]# service nfs start Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS daemon: [ OK ] Starting NFS mountd: [ OK ] [root@rac1 ~]# chkconfig --level 0123456 nfs on [root@rac1 ~]# mkdir /votedisk [root@rac1 ~]# mount /votedisk [root@rac1 ~]# ls -al /votedisk total 328024 drwxr-xr-x 2 oracle dba 4096 May 27 19:36 . drwxr-xr-x 26 root root 4096 May 27 20:40 .. -rw-r--r-- 1 oracle dba 335544320 May 27 19:36 third_votedisk.crs [root@rac1 ~]# |
기본
설치
우선
시스템의
비호환성을
검토해야
합니다. 전체
시스템에서
누락된
라이브러리, 커널
매개
변수
등이
있는지
확인할
수
있도록 Oracle에서는 runcluvfy.sh라는
특별한
도구를 Clusterware와
함께
제공합니다. 자세한
내용은 Jeff Hunter의 "Build Your Own Oracle RAC Cluster on Oracle Enterprise Linux and iSCSI"에서 20 단원을
참조하십시오. 이제
다음과
같이
설치해야
합니다.
[root@rac1 clusterware]# cd /u01/install/clusterware/rpm/ [root@rac1 rpm]# rpm -Uhv cvuqdisk-1.0.1-1.rpm Preparing... ########################################### [100%] 1:cvuqdisk ########################################### [100%] [root@rac1 rpm]# |
그런
다음 rac2 노드로
이를
전송해야
합니다.
[root@rac1 rpm]# scp cvuqdisk-1.0.1-1.rpm root@10.99.1.92:. The authenticity of host '10.99.1.92 (10.99.1.92)' can't be established. RSA key fingerprint is 1e:8c:1f:f7:dc:2e:10:75:0f:08:01:13:a8:49:31:0c. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '10.99.1.92' (RSA) to the list of known hosts. root@10.99.1.92's password: cvuqdisk-1.0.1-1.rpm 100% 7273 7.1KB/s 00:00 [root@rac1 rpm]# |
... and install it on rac2 too:
[root@rac2 ~]# rpm -Uhv cvuqdisk-1.0.1-1.rpm Preparing... ########################################### [100%] 1:cvuqdisk ########################################### [100%] [root@rac2 ~]# |
다음을
사용하여 Clusterware를
위한
사전
요구
사항
보고서를
작성할
수
있습니다.
[oracle@rac1 clusterware]$ ./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose |
보고서를
검토합니다
Check: Membership of user "oracle" in group "oinstall" [as Primary] Node Name User Exists Group Exists User in Group Primary Comment ---------------- ------------ ------------ ------------ ------------ ------------ rac2 yes yes yes no failed rac1 yes yes yes no failed Result: Membership check for user "oracle" in group "oinstall" [as Primary] failed.
Administrative privileges check failed.
[..]
Check: Package existence for "glibc-2.5-12" Node Name Status Comment ------------------------------ ------------------------------ ---------------- rac2 failed rac1 failed Result: Package existence check failed for "glibc-2.5-12".
Check: Package existence for "glibc-2.5-12" Node Name Status Comment ------------------------------ ------------------------------ ---------------- rac2 glibc-2.5-18 passed rac1 glibc-2.5-18 passed Result: Package existence check passed for "glibc-2.5-12". |
oinstall 그룹의
누락된 oracle과 "glibc-2.5-12"에
대한
첫
번째
오류는
무시해도
됩니다. runclvfy.sh에서
생성하는
모든
알림과
오류를
해결하도록
하십시오. 이러한
오류가
나중에
심각한
문제로
이어질
수
있습니다.
다음의 CVU 실행
검사는
하드웨어
및
운영
체제
설정을
확인합니다
[oracle@rac1 clusterware]$ ./runcluvfy.sh stage -post hwos -n rac1,rac2 -verbose |
"No errors"라는
메시지가
나타나야
합니다.
이제 Clusterware 설치
프로그램을
실행합니다.
[oracle@rac1 clusterware]$ export DISPLAY=10.99.1.1:0
[oracle@rac1 clusterware]$ ./runInstaller |
그림 33
Clusterware 설치
프로그램이
실행됩니다.
그림 34
대상
디렉토리로 /u01/app/oraInventory를
설정했는지
확인합니다.
그림 35
Clusterware 홈을 /u01/app/crs로
설정합니다. CRS 설치와 Database 소프트웨어어
설치를
독립적으로
수행할
것입니다
그림 36
Clusterware는
시스템에
문제나
비호환
요소가
있는지
확인합니다. 모두
문제가
없어야
합니다.
그림 37
Edit
버튼을
클릭한
후
다음과
같이
네트워크
어댑터를
지정합니다.
- eth0을
공용으로
지정합니다.
- eth1을
전용(RAC Cache Fusion/Interconnect)으로
지정합니다
- eth2는 CRS에서
사용할
수
없어야
합니다. iSCSI를
위한 SAN 인터페이스입니다
그림 38
OCR을
미러하도록
지정합니다. 두
개의 iSCSI 스토리지
장치
간에 OCR을
미러할
수
있습니다. 기본 OCR 위치로 /dev/iscsi/racdata1.ocr/lun0/part1을
입력합니다. 백업 OCR 위치로 /dev/iscsi/racdata2.ocr/lun0/part1을
입력합니다
그림 39
보팅
디스크에
대해 "Normal redundancy"를
선택합니다. 쿼럼
요구
사항을
만족하기
위해
세
개의
보팅
디스크가
필요합니다.
- /dev/iscsi/racdata1.voting/lun0/part1
- /dev/iscsi/racdata2.voting/lun0/part1
- /votedisk/voting_disk_file.crs ("xeno" 워크스테이션에서 NFS 마운트
위치의
파일)
참고:
여기서
보팅
디스크를
하나만
설정했을
경우
이
설명서의
뒷부분에서
나머지
디스크를
수동으로
추가하는
방법을
보여
드리겠습니다.
그림 40
보팅
디스크를
구성하고
나면
요약
창이
나타납니다. 설정을
검토하고
Install을
누릅니다.
그림 41
설치하는
데
어느
정도의
시간이
걸립니다.
그림 42
설치가
성공적으로
완료되면
설치
후
마무리
스크립트를
실행하라는
메시지가
표시됩니다
Clusterware 설치
확인
몇
가지
유틸리티를
사용하여 Clusterware가
성공적으로
설치되었는지
확인할
수
있습니다. 여기서는 crs_stat와 crsctl을
사용하여
설치를
확인합니다:
[oracle@rac1 clusterware]$ $ORA_CRS_HOME/bin/crs_stat -t -v Name Type R/RA F/FT Target State Host ---------------------------------------------------------------------- ora.rac1.gsd application 0/5 0/0 ONLINE ONLINE rac1 ora.rac1.ons application 0/3 0/0 ONLINE ONLINE rac1 ora.rac1.vip application 0/0 0/0 ONLINE ONLINE rac1 ora.rac2.gsd application 0/5 0/0 ONLINE ONLINE rac2 ora.rac2.ons application 0/3 0/0 ONLINE ONLINE rac2 ora.rac2.vip application 0/0 0/0 ONLINE ONLINE rac2 [oracle@rac1 clusterware]$ $ORA_CRS_HOME/bin/crsctl check crs Cluster Synchronization Services appears healthy Cluster Ready Services appears healthy Event Manager appears healthy [oracle@rac1 clusterware]$ |
두
노드에서
모두
온라인
상태이면 Oracle Database 11g
설치로
진행해도
됩니다
8. Oracle Database 소프트웨어
설치
먼저
시스템을
확인해야
합니다.
[oracle@rac1 clusterware]$ ./runcluvfy.sh stage -pre dbinst -n rac1,rac2 -r 11gR1 |
Clusterware에서처럼 glibc에
대한
메시지가
나타나지만
최신
버전이므로
이
경고를
무시해도
됩니다.
설치
프로그램의
압축을
풉니다.
[root@rac1 ~]# cd /u01/install/ [root@rac1 install]# ls clusterware linux.x64_11gR1_clusterware.zip linux.x64_11gR1_database.zip [root@rac1 install]# rm -rf clusterware linux.x64_11gR1_clusterware.zip [root@rac1 install]# unzip linux.x64_11gR1_database.zip [root@rac1 install]# rm linux.x64_11gR1_database.zip |
Run it:
[oracle@rac1 ~]$ cd /u01/install/database/
[oracle@rac1 database]$ ./runInstaller |
설치
창이
나타나면
Custom을
선택하여 RAC 데이터베이스를
위한
개별
구성
요소를
선택합니다.
그림 43
Oracle 베이스에
대해 /u01/app/oracle을
선택하고
Nam과Path를
기본값인
Software Location으로
둡니다.
그림 44
Cluster Installation을
선택하고 rac1(이미
선택되어
있음) 노드와 rac2 노드를
활성화합니다.
그림 45
설치
프로그램에서
해당
환경을
확인합니다. 현재
구성에서
스왑
공간이
충분하지
않을
수
있으나
문제가
되지는
않으므로
넘어가도
됩니다. 또한
커널 rmem_default 매개
변수
공지도
무시해도
됩니다.
그림 46
In Product Components에서
필요한
구성
요소를
선택합니다. 구성
요소를
적게
선택할수록
설치
시간이
적게
걸립니다. 이
예에서는 Enterprise Edition에서 "Real Application Testing"과 "Partitioning"만을
선택했습니다.
그림 47
Privileged Operating Systems Groups
프롬프트에서
모두 "dba" 그룹을
선택했는지
확인합니다. 정식
구현에서는
보안상의
이유로
이러한
그룹을
분리해야
합니다.
그림 48
나중에
데이터베이스를
만들
것이므로
Install database software only를
선택합니다.
그림 49
모든
항목을
다시
확인한
후
Install을
클릭합니다.
그림 50
설치가
수행됩니다. iSCSI와
스토리지
최적화를
아직
수행하지
않았으므로
하드웨어에
따라
최대 1시간
정도
걸릴
수
있습니다.
그림 51
설치가
끝나면
각
노드에서
설치
후
스크립트를
실행하라는
메시지가
나타납니다
NetCA: RAC에
맞게 Oracle TNS 서비스
구성하기
netca를
실행합니다.
[oracle@rac1 ~]$ cd /u01/app/oracle/product/11.1.0/db_1/bin/ [oracle@rac1 bin]$ ./netca |
Cluster를
선택합니다.
그림 52
리스너를
구성할
것입니다.
그림 53
Add를
선택합니다.
그림 54
기본
이름인 "LISTENER"를
사용합니다.
그림 55
"TCP" 프로토콜만
선택합니다.
그림 56
이
리스너는 Oracle 기본
설정인 TCP 포트 1521에서
실행되어야
합니다.
그림 57
리스너는
하나면
충분합니다.
그림 58
종료합니다.
이제
리스너가
데이터를
제대로
수신하는지
확인합니다.
[root@rac2 ~]# ps -ef | grep lsnr | grep -v 'grep' | awk '{print $9}' LISTENER_RAC2 [root@rac2 ~]# /u01/app/crs/bin/crs_stat ora.rac2.LISTENER_RAC2.lsnr NAME=ora.rac2.LISTENER_RAC2.lsnr TYPE=application TARGET=ONLINE STATE=ONLINE on rac2
[root@rac2 ~]# |
DBCA: Database Creation
[oracle@rac1 ~]$ cd /u01/app/oracle/product/11.1.0/db_1/bin/ [oracle@rac1 bin]$ ./dbca |
Real Application Clusters를
선택합니다.
그림 59
Create a Database를
선택합니다.
그림 60
두
노드가
모두
선택되었는지
확인합니다.
그림 61
Custom Database를
선택하여
데이터베이스
생성
프로세스의
유연성을
높입니다.
그림 62
데이터베이스
이름을
지정합니다. 이
설명서의
목적에
따라 "erac.world"라고
이름을
지정하겠습니다. "erac"에 SID 접두어가
자동으로
붙습니다. SID는
각각 "erac1" .. "eracN" 형식으로
추가됩니다.
그림 63
Oracle Enterprise Manager를
설치할
것인지를
결정합니다. 설치하려면
적절히
구성합니다.
그림 64
테스트를
위해
중요한
모든 Oracle 계정에
대해
간단한
암호를
선택할
수
있습니다.
그림 65
확장 RAC 구성을
하려면
스토리지
옵션으로
ASM을
선택해야
합니다.
그림 66
모든 ASM 인스턴스에
대해
공유하지
않는 PFILE를
사영할
것입니다. 공유 SPFILE을
사용하도록
선택하여
중앙에서 ASM을
구성할
수
있지만
이
경우
이
중요한
파일을
어느
스토리지
어레이에
저장해야
하는지와
같은
문제가
발생합니다
그림 67
Create Diskgroup Window
창에서
Change Disk Discovery Path를
클릭하면
새
팝업
창이
열립니다. iSCSI LUN만
찾도록 Disk Discovery Path를
다시
구성해야
합니다. "/dev/iscsi/*/*/part1"을
입력합니다. 이렇게
하면 ASM에서
모든 iSCSI LUN의
첫
번째
파티션만
고려합니다.
그림 68
이제
서로
다른
스토리지
노드에
있는
두
개의 iSCSI LUN에서 NORMAL 리던던시(미러링)로 "DATA1" ASM 디스크
그룹을
만듭니다. 각 LUN은
서로
다른
스토리지
노드에
있고
이들을
미러링할
것이므로
두
개의
페일
그룹을
갖는 DISKGROUP을
만들
수
있습니다. 나중에
배울
것이지만
이
구성은
하나의
전체
스토리지
어레이가
손실되어도
안전합니다.
그림 69
새로운 +DATA1 디스크
그룹에서
Oracle-Managed Files을
선택합니다.
그림 70
개발을
위해 Flashbacks and Archiving을
비활성화해도
됩니다.
그림 71
필요
없는
모든
데이터베이스
구성
요소(예: Oracle Text, Oracle XML DB)를
비활성화합니다. 이렇게
하면
데이터베이스
작성
시간을
상당히
단축할
수
있습니다.
Initialization Parameters에서
이
인스턴스에서
사용할
메모리
크기(총
크기)를
구성할
수
있습니다. 이
값은
나중에 memory_target 매개
변수를
변경하여
수정할
수
있습니다. 필요에
따라
다른
데이터베이스
매개
변수를
사용자
정의합니다.
그림 72
Oracle Database 11g는
새로운
보안
옵션을
많이
제공하며
이들은
기본적으로
활성화됩니다. 이러한
옵션을
모두
사용하도록
합니다.
그림 73
Enable automatic maintenance tasks를
선택했는지
확인합니다.
그림 74
Database Storage에서 REDO 로그
및
컨트롤
파일
등과
관련된
매개
변수를
조정할
수
있습니다. 첫
테스트에는
기본값이
적합합니다.
그림 75
새로운
실험을
위해
기존 DB를
삭제한
후 DB를
새로
작성하는
속도를
높이는
데이터베이스
스크립트를
생성하려면
Create Database;만
선택합니다.
그림 76
어떤
옵션이
설치되는지를
보여
주는
요약
화면이
나타납니다. 데이터베이스를
작성하는
시간은
설치한
옵션과
사용하는
스토리지에
따라
어느
정도
시간이
걸릴
수
있습니다. 마지막으로
작성한
데이터베이스에
대한
간단한
요약
화면이
나타납니다.
그림 77
시작
후
두
인스턴스 {erac1, erac2}에서
데이터베이스를
사용할
수
있습니다.
그림 78
확장 Oracle RAC에
맞게
데이터베이스
조정
Oracle Database 11g는
확장 RAC 클러스터를
위해
유용한
두
개의
솔루션을
제공합니다. ASM 11g
기능을
사용한
확장 RAC에
대한
자세한
내용은 Nitin Vengurlekar 등이
쓴
Oracle Automatic Storage Management, Under-the-Hood & Practical Deployment Guide(Oracle Press 2008) 또는
Oracle Storage Administrators Guide를
참조하십시오.
선호
읽기(Preferred reads)
Oracle Database 11g는 "선호
읽기(preferred reads)"라는
새로운
기능을
제공합니다. 이
기능을
사용하여 DBA는
로컬
읽기에
대해
페일
그룹을
지정할
수
있습니다. 일반적으로
페일
그룹은
지리적으로
데이터베이스
인스턴스에
가까이
있습니다. 선호
읽기
기능은 ASM 인스턴스
전용인 ASM_PREFERRED_READ_FAILURE_GROUPS 매개
변수를
설정하여
활성화할
수
있습니다.
먼저
어떤
페일
그룹과
디스크
그룹을
사용할
수
있는지
확인해야
합니다
[oracle@rac1 ~]$ ORACLE_SID=+ASM1 sqlplus / as sysdba [..] SQL> col inst format 9 SQL> col path format a36 SQL> col diskgroup format a8 SQL> col diskname format a10 SQL> col failgroup format a10 SQL> col PR format a2
SQL> SELECT inst_id inst, path, g.name diskgroup,d.name diskname, failgroup, preferred_read PR 2 FROM v$asm_disk d JOIN gv$asm_diskgroup g ON(d.group_number=g.group_number) 3 WHERE mount_status='CACHED' ORDER BY 1;
inst PATH DISKGROU DISKNAME FAILGROUP PR ---- ------------------------------------ -------- ---------- ---------- -- 1 /dev/iscsi/racdata1.asm1/lun0/part1 DATA1 DATA1_0000 DATA1_0000 U 1 /dev/iscsi/racdata2.asm1/lun0/part1 DATA1 DATA1_0002 DATA1_0001 U 2 /dev/iscsi/racdata2.asm1/lun0/part1 DATA1 DATA1_0002 DATA1_0001 U 2 /dev/iscsi/racdata1.asm1/lun0/part1 DATA1 DATA1_0000 DATA1_0000 U
4 rows selected.
SQL> |
PR 열의 "U"는
디스크
그룹에
정의된
읽기
페일
그룹이
없음을
의미합니다. 따라서
특정
페일
그룹에
대해 ASM 선호
읽기를
지정할
수
있습니다. ASM_PREFERRED_READ_FAILURE_GROUPS 구문은 diskgroup_name.failure_group_name,...'입니다.
SQL> ALTER SYSTEM SET ASM_PREFERRED_READ_FAILURE_GROUPS='DATA1.DATA1_0000' SID='+ASM1';
System altered.
SQL> ALTER SYSTEM SET ASM_PREFERRED_READ_FAILURE_GROUPS='DATA1.DATA1_0001' SID='+ASM2';
System altered.
SQL> |
erac1 노드의 ASM의
경우 DATA1_0000(/dev/iscsi/racdata1.asm1/lun0/*의 LUN을
포함하는 iscsi1)으로부터
읽고 erac2 노드의
경우 DATA1_0001 페일
그룹으로부터
읽는다고
했습니다. ASM 인스턴스에서 GV$ASM_DISK 쿼리를
수행하여
매개
변수가
적용되었는지
확인할
수
있습니다.
SQL> SELECT path, g.name diskgroup, d.name diskname, failgroup, mode_status
2 FROM v$asm_disk d JOIN v$asm_diskgroup g ON(d.group_number=g.group_number)
3 WHERE mount_status='CACHED';
INST PATH DISKGROU DISKNAME FAILGROUP PR ---- ------------------------------------ -------- ---------- ---------- -- 1 /dev/iscsi/racdata1.asm1/lun0/part1 DATA1 DATA1_0000 DATA1_0000 N 1 /dev/iscsi/racdata2.asm1/lun0/part1 DATA1 DATA1_0002 DATA1_0001 Y 2 /dev/iscsi/racdata2.asm1/lun0/part1 DATA1 DATA1_0002 DATA1_0001 Y 2 /dev/iscsi/racdata1.asm1/lun0/part1 DATA1 DATA1_0000 DATA1_0000 N
4 rows selected.
SQL> |
읽기
집중
트래픽이
생성된
후
다음
쿼리를
사용하여
시스템이
올바른
스토리지
어레이에서
읽는지를
확인할
수
있습니다.
SQL> SELECT inst_id, failgroup, sum(reads), sum(writes) FROM GV$ASM_DISK GROUP BY inst_id, failgroup;
INST_ID FAILGROUP SUM(READS) SUM(WRITES) ---------- ---------- ---------- ----------- 1 1 DATA1_0000 16976 3778 1 DATA1_0001 3800 2344 2 2 DATA1_0000 2865 2217 2 DATA1_0001 17401 2217
6 rows selected.
SQL> |
Oracle이 erac1 노드의
경우 DATA1_0000 페일
그룹에서
읽고, erac2 노드의
경우 DATA1_0001 페일
그룹에서
읽는
것을
확인할
수
있습니다.
참고: ASM 인스턴스에서 SPFILE 대신 IFILE을
사용하여 ASM_PREFERRED_READ_FAILURE_GROUPS를
설정할
경우(예: 클러스터로
연결된
파일
시스템이
없는 RAC 클러스터) 이
설정을 /u01/app/oracle/admin/+ASM/pfile/init.ora 파일에도
추가하여
이
설정을
영구적으로
적용합니다.
빠른
디스크
재동기화
Oracle Database 11g는
페일
그룹
동기화를
수행하는
데
필요한
시간을
상당히
단축시킵니다. 여기서 11g와 10g의
주요
차이점은 10g에서는
오류가
발생한
디스크가
디스크
그룹에서
완전히
삭제되는
반면, 11g에서는 Oracle이
수정되거나
쓰여진
범위만
업데이트하는
동기화
방식을
구현한다는
것입니다. 빠른
디스크
재동기화(빠른
미러
재동기화) 기능을
사용하려면 ASM 디스크
그룹이 11.1 수준의
호환성을
갖춰야
합니다. 빠른
디스크
재동기화
기능을
사용하는
방법에
대한
자세한
내용은 Oracle Database Storage Administrator's Guide 11g Release 1의 4장을
참조하십시오.
확장 RAC를
위한 OCR 미러
및
보팅(Voting) 디스크
확인
설치가
끝났으면
클러스터에
문제가
없는지
확인해야
합니다.
[root@rac1 ~]# cd /u01/app/crs/bin [root@rac1 bin]# ./crs_stat -t Name Type Target State Host ------------------------------------------------------------ ora.erac.db application ONLINE ONLINE rac1 ora....c1.inst application ONLINE ONLINE rac1 ora....c2.inst application ONLINE ONLINE rac2 ora....SM1.asm application ONLINE ONLINE rac1 ora....C1.lsnr application ONLINE ONLINE rac1 ora.rac1.gsd application ONLINE ONLINE rac1 ora.rac1.ons application ONLINE ONLINE rac1 ora.rac1.vip application ONLINE ONLINE rac1 ora....SM2.asm application ONLINE ONLINE rac2 ora....C2.lsnr application ONLINE ONLINE rac2 ora.rac2.gsd application ONLINE ONLINE rac2 ora.rac2.ons application ONLINE ONLINE rac2 ora.rac2.vip application ONLINE ONLINE rac2 [root@rac1 bin]# |
11g에서는
보팅
디스크를
온라인으로
관리할
수
있습니다. Clusterware를
설치할
때
보팅
디스크를
추가하지
않았을
경우
여기서
그
중 iSCSI 스토리지 #2 및 NFS 보팅
디스크
두
개를
수동으로
추가해
보겠습니다.
[root@rac1 bin]# ./crsctl query css votedisk 0. 0 /dev/iscsi/racdata1.voting/lun0/part1 Located 1 voting disk(s). [root@rac1 bin]# ./crsctl add css votedisk /dev/iscsi/racdata2.voting/lun0/part1 Now formatting voting disk: /dev/iscsi/racdata2.voting/lun0/part1. Successful addition of voting disk /dev/iscsi/racdata2.voting/lun0/part1. [root@rac1 bin]# ./crsctl add css votedisk /votedisk/third_votedisk.crs Now formatting voting disk: /votedisk/third_votedisk.crs. Successful addition of voting disk /votedisk/third_votedisk.crs. [root@rac1 bin]# |
보팅
디스크
구성을
확인합니다.
[root@rac1 bin]# ./crsctl query css votedisk 0. 0 /dev/iscsi/racdata1.voting/lun0/part1 1. 0 /dev/iscsi/racdata2.voting/lun0/part1 2. 0 /votedisk/third_votedisk.crs Located 3 voting disk(s). [root@rac1 bin]# ./crsctl check crs Cluster Synchronization Services appears healthy Cluster Ready Services appears healthy Event Manager appears healthy [root@rac1 bin]# |
Oracle Clusterware 로그(/u01/app/crs/log/rac1/alertrac1.log)에
다음과
비슷한
내용이
기록됩니다.
2008-05-31 17:07:32.302 [cssd(4506)]CRS-1605:CSSD voting file is online: /dev/iscsi/racdata2.voting/lun0/part1. Details in /u01/app/crs/ log/rac1/cssd/ocssd.log. [cssd(4506)]CRS-1601:CSSD Reconfiguration complete. Active nodes are rac1 rac2 . 2008-05-31 17:08:07.341 [cssd(4506)]CRS-1605:CSSD voting file is online: /votedisk/third_votedisk.crs. Details in /u01/app/crs/log/rac1/ cssd/ocssd.log. [cssd(4506)]CRS-1601:CSSD Reconfiguration complete. Active nodes are rac1 rac2. |
또한 OCR이 OCRmirror를
통해
보호되고
있는지
확인합니다.
[root@rac1 bin]# ./ocrcheck Status of Oracle Cluster Registry is as follows : Version : 2 Total space (kbytes) : 327188 Used space (kbytes) : 3848 Available space (kbytes) : 323340 ID : 2120916034 Device/File Name : /dev/iscsi/racdata1.ocr/lun0/part1 Device/File integrity check succeeded Device/File Name : /dev/iscsi/racdata2.ocr/lun0/part1 Device/File integrity check succeeded
Cluster registry integrity check succeeded
[root@rac1 bin]# |
아무런
문제가
없으면
이제 Oracle RAC의
장애
조치
기능을
중점적으로
테스트해
볼
수
있습니다.
9. 장애
조치(Failover) 기능
테스트
이
설명서에서
베타
버전을
사용한
orajdbcstat는
무료 GPL-d Java 애플리케이션으로서, 이를
통해
여러분은
장애
발생
시
클라이언트에서
인스턴스
간에
어떻게
전환하는지를
간편하게
살펴볼
수
있으며
성능을
측정할
수도
있습니다.
ERAC1에서의
인스턴스
실패
우선
유휴
데이터베이스에서 orajdbcstat를
실행합니다.
[vnull@xeno orajdbcstat]$ ./orajdbcstat.sh -d ERAC -i ERAC1 -i ERAC2 1 ------ ------conntime------ -----------stmt------------------- tns rac# tcpping jdbc rac# ins sel upd del plsql 15:35:22 ERAC 2 0 49 1 3 0 2 2 0 15:35:22 +ERAC1 1 0 45 1 19 0 2 2 0 15:35:22 +ERAC2 2 0 60 2 4 0 2 14 0 15:35:23 ERAC 1 0 44 1 3 0 2 3 0 15:35:23 +ERAC1 1 0 65 1 2 0 2 3 0 15:35:23 +ERAC2 2 0 46 2 3 0 3 2 0 [..utility still running, output trimmed for clarity..] |
출력에서
주
스레드("ERAC" TNS 설명자)가 1번으로
인스턴스에
연결되었음을
볼
수
있습니다. "conntime"에는
장애
조치
기능을
통해 RAC 인스턴스
및
주 TNS 설명자에
새로
연결되는
시간
측정이
표시됩니다. "tcpping"은
현재
구현되지
않았습니다. "stmt" 아래에서는 FCF(Fast Connection Failover) 풀의
연결(현재 RAC 인스턴스
번호
및
간단한 SQL 문
시간
측정)을
모니터링할
수
있습니다. 명령줄의
마지막 "1"은 orajdbcstat이 1초마다
통계를
출력하도록
지정합니다.
다음
명령을
수행하여 RAC 인스턴스 #1 제거를
시뮬레이션합니다
[oracle@rac1 ~]$ srvctl stop instance -d erac -i erac1 -o abort [oracle@rac1 ~]$ |
orajdbcstat를
사용하는 SSH 세션에서
다음과
같은
출력이
나타납니다. 자세한
설명은
예제
밑에
나와
있습니다.
15:36:55 ERAC 1 0 45 1 3 0 1 3 0 15:36:55 +ERAC1 1 0 42 1 43 0 2 2 0 15:36:55 +ERAC2 2 0 49 2 3 0 4 2 0 ------ ------conntime------ -----------stmt--------------- tns rac# tcpping jdbc rac# ins sel upd del plsql 15:36:56 ERAC 2 0 49 1->X [ E!17008 ] 15:36:56 +ERAC1 -1 E!01092 E!01092 1->X [ E!17008 ] 15:36:56 +ERAC2 2 0 67 2 17 0 4 2 0 15:36:57 ERAC 2 0 46 X->2 [ E!17008 ] 15:36:57 +ERAC1 -1 E!12521 E!12521 X [ E!17008 ] 15:36:57 +ERAC2 2 0 67 2 17 0 4 2 0 15:36:58 ERAC 2 0 46 X->2 [ E!17008 ] 15:36:58 +ERAC1 -1 E!12521 E!12521 X [ E!17008 ] 15:36:58 +ERAC2 2 0 67 2 17 0 4 2 0 15:36:59 ERAC 2 0 46 X->2 [ E!17008 ] 15:36:59 +ERAC1 -1 E!12521 E!12521 X [ E!17008 ] 15:36:59 +ERAC2 2 0 67 2 17 0 4 2 0 15:37:00 ERAC 2 0 46 X->2 [ E!17008 ] 15:37:00 +ERAC1 -1 E!12521 E!12521 X [ E!17008 ] 15:37:00 +ERAC2 2 0 67 2 17 0 4 2 0 15:37:01 ERAC 2 0 56 2 12 0 7 3 0 15:37:01 +ERAC1 -1 E!12521 E!12521 X [ E!17008 ] 15:37:01 +ERAC2 2 0 51 2 131 0 5 3 0 15:37:02 ERAC 2 0 59 2 178 0 17 29 0 15:37:02 +ERAC1 -1 E!12521 E!12521 X [ E!17008 ] 15:37:02 +ERAC2 2 0 73 2 121 0 203 36 0 ------ ------conntime------ -----------stmt--------------- tns rac# tcpping jdbc rac# ins sel upd del plsql 15:37:03 ERAC 2 0 68 2 2 0 3 2 0 15:37:03 +ERAC1 -1 E!12521 E!12521 X [ E!17008 ] 15:37:03 +ERAC2 2 0 45 2 3 0 2 3 0 15:37:04 ERAC 2 0 48 2 7 0 3 2 0 15:37:04 +ERAC1 -1 E!12521 E!12521 X [ E!17008 ] 15:37:04 +ERAC2 2 0 86 2 2 0 3 4 0 15:37:05 ERAC 2 0 47 2 2 0 3 2 0 15:37:05 +ERAC1 -1 E!12521 E!12521 X [ E!17008 ] 15:37:05 +ERAC2 2 0 53 2 3 0 3 3 0 15:37:06 ERAC 2 0 48 2 3 0 2 2 0 15:37:06 +ERAC1 -1 E!12521 E!12521 X [ E!17008 ] 15:37:06 +ERAC2 2 0 46 2 10 0 2 10 0 15:37:07 ERAC 2 0 48 2 2 0 3 3 0 15:37:07 +ERAC1 -1 E!12521 E!12521 X [ E!17008 ] 15:37:07 +ERAC2 2 0 83 2 10 0 3 2 0 15:37:08 ERAC 2 0 48 2 3 0 2 2 0 15:37:08 +ERAC1 -z E!12521 E!12521 X [ E!17008 ] 15:37:08 +ERAC2 2 0 50 2 2 0 3 2 0 15:37:09 ERAC 2 0 48 2 2 0 2 2 0 15:37:09 +ERAC1 -1 E!12521 E!12521 X [ E!17008 ] 15:37:09 +ERAC2 2 0 44 2 3 0 2 3 0 [..utility still running, output trimmed for clarity..] |
다음과
같은
상황이
발생했습니다.
- 15:36:56에 ERAC1에
대한
모든
새
연결이
오류를
반환하기
시작하고 ERAC1의 FCF 풀의
모든
연결이
정상적으로
작동하지
않습니다. 주
데이터베이스의 FCF 풀(ERAC TNS 설명자)에서
오류가
감지되어
장애
조치가
시작됩니다.
- 15:36:57(장애
발생
후 1초)에
주 FCF 풀이 RAC#2 인스턴스("X->2")에
재연결을
시작합니다.
- 15:37:00부터 15:37:01 사이에(장애
발생
후 4~5초) FCF 풀
연결이
활성화된 ERAC2 인스턴스로
다시
설정됩니다
"E!NNNNN" 문자열은 SQL 연결
시 ORA-NNNNN 오류가
발생했음을
나타냅니다. 오류를
판독하려면 oerrutility를
사용하십시오. 복구
후(ERAC1 인스턴스
시작) 다음과
같이
출력됩니다.
15:47:37 ERAC 2 0 64 2 3 0 2 3 0 15:47:37 +ERAC1 -1 E!01033 E!01033 X [ E!17008 ] 15:47:37 +ERAC2 2 0 57 2 8 0 13 1 0 15:47:38 ERAC 2 0 54 2 3 0 3 2 0 15:47:38 +ERAC1 1 0 481 X->1 [ E!17008 ] 15:47:38 +ERAC2 2 0 52 2 3 0 2 4 0 ------ ------conntime------ -----------stmt--------------- tns rac# tcpping jdbc rac# ins sel upd del plsql 15:47:39 ERAC 2 0 54 2 3 0 3 2 0 15:47:39 +ERAC1 1 0 167 1 14 0 4 2 0 15:47:39 +ERAC2 2 0 56 2 8 0 27 3 0 |
수동적인
개입
없이 ERAC1의 FCF 풀에서
인스턴스가
실행되어
다시
작동되기
시작했음을
감지한
것을
볼
수
있습니다.
치명적인
사이트
오류
확장 RAC 클러스터를
구축하는
주
목적은
치명적인
사이트
오류(RAC 노드
및 SAN 제거)에
대처하는
것입니다. 워크스테이션에서 orajdbcstat를
다시
실행합니다.
------ ------conntime------ -----------stmt--------------- tns rac# tcpping jdbc rac# ins sel upd del plsql 17:24:18 ERAC 1 0 46 2 11 0 2 2 0 17:24:18 +ERAC1 1 0 45 1 4 0 3 2 0 17:24:18 +ERAC2 2 0 46 2 4 0 3 3 0 17:24:19 ERAC 1 0 45 2 2 0 4 3 0 17:24:19 +ERAC1 1 0 44 1 15 0 3 2 0 17:24:19 +ERAC2 2 0 44 2 3 0 3 3 0 |
주 FCF 풀이 RAC#2 인스턴스를
사용하는
것을
확인할
수
있으므로 #2 사이트(iscsi2 및 rac2 노드) 전체를
제거합니다.
[root@quadovm ~]# xm list
Name ID Mem VCPUs State Time(s) 132_rac1 1 2048 1 -b---- 1845.0 134_rac2 6 2048 1 r----- 152.2 Domain-0 0 512 4 r----- 665.3 iscsi1 3 768 1 -b---- 194.0 iscsi2 5 768 1 -b---- 44.3 [root@quadovm ~]# xm destroy 134_rac2 && date && xm destroy iscsi2 && date Sat May 31 17:25:55 CEST 2008 Sat May 31 17:25:56 CEST 2008 [root@quadovm ~]# |
이제 orajdbcstat 세션으로
돌아갑니다.
17:25:56 ERAC 2 0 44 2 3 0 3 2 0 17:25:56 +ERAC1 1 0 79 1 8 0 3 2 0 17:25:56 +ERAC2 2 0 44 2 11 0 3 2 0 17:25:57 ERAC 2 0 44 2 3 0 3 2 0 17:25:57 +ERAC1 1 0 79 1 8 0 3 2 0 17:25:57 +ERAC2 2 0 44 2 11 0 3 2 0 17:25:58 ERAC 2 0 44 2 3 0 3 2 0 17:25:58 +ERAC1 1 0 79 1 8 0 3 2 0 17:25:58 +ERAC2 -1 E!12170 E!12170 2 11 0 3 2 0 17:25:59 ERAC 2 0 44 2 3 0 3 2 0 17:25:59 +ERAC1 1 0 79 1 8 0 3 2 0 17:25:59 +ERAC2 -1 E!12170 E!12170 2 11 0 3 2 0 ------ ------conntime------ -----------stmt--------------- tns rac# tcpping jdbc rac# ins sel upd del plsql 17:26:00 ERAC 2 0 44 2 3 0 3 2 0 17:26:00 +ERAC1 1 0 79 1 8 0 3 2 0 17:26:00 +ERAC2 -1 E!12170 E!12170 2 11 0 3 2 0 17:26:01 ERAC 2 0 44 2 3 0 3 2 0 17:26:01 +ERAC1 1 0 79 1 8 0 3 2 0 17:26:01 +ERAC2 -1 E!12170 E!12170 2 11 0 3 2 0 17:26:02 ERAC 2 0 44 2 3 0 3 2 0 17:26:02 +ERAC1 1 0 79 1 8 0 3 2 0 17:26:02 +ERAC2 -1 E!12170 E!12170 2 11 0 3 2 0 17:26:03 ERAC 2 0 44 2 3 0 3 2 0 17:26:03 +ERAC1 1 0 79 1 8 0 3 2 0 17:26:03 +ERAC2 -1 E!12170 E!12170 2->X [ E!03113 ] 17:26:04 ERAC -1 E!12170 E!12170 2 3 0 3 2 0 17:26:04 +ERAC1 1 0 43 X [ E!03113 ] 17:26:04 +ERAC2 -1 E!12170 E!12170 2->X [ E!03113 ] 17:26:05 ERAC -1 E!12170 E!12170 2 3 0 3 2 0 17:26:05 +ERAC1 1 0 43 X->1 [ E!03113 ] 17:26:05 +ERAC2 -1 E!12170 E!12170 2->X [ E!03113 ] 17:26:06 ERAC -1 E!12170 E!12170 2 3 0 3 2 0 17:26:06 +ERAC1 1 0 43 X->1 [ E!03113 ] 17:26:06 +ERAC2 -1 E!12170 E!12170 2->X [ E!03113 ] |
ERAC1 인스턴스를
포함하여
확장 RAC 전체가
차단되고
있음을
확실하게
볼
수
있습니다. ERAC1 인스턴스(주로 DBWR 및 LGWR)가
현재
사용할
수
없는 iscsi2의 iSCSI 스토리지에
쓰기를
계속
재시도하고
있기
때문입니다. TCP iSCSI 연결에서 iSCSI 시간이
초과되면 Oracle 소프트웨어(Clusterware, ASM, Database)에 I/O 오류가
발생합니다.
rac1 및 rac2에서 iSCSI 스택이 120초
동안
재시도하도록
앞에서
구성했습니다(/etc/iscsi/iscsid.conf의 node.session.timeo.replacement_timeout 매개
변수). 지정한 120초
동안
커널은 I/O 작업을
재시도하고
스토리지에서 filedescriptor(fd)를
사용하는
모든
애플리케이션은
중단된
상태로
나타납니다. 자세한
내용은 dmesg 명령의
출력
및 ASM 경고
로그
파일에서
확인할
수
있습니다
시간
경과
후:
17:28:17 ERAC -1 E!12571 E!12571 X [ E!03113 ] 17:28:17 +ERAC1 1 0 43 X->1 [ E!03113 ] 17:28:17 +ERAC2 -1 E!12571 E!12571 X [ E!03113 ] 17:28:18 ERAC -1 E!12571 E!12571 X [ E!03113 ] 17:28:18 +ERAC1 1 0 75 X [ E!03113 ] 17:28:18 +ERAC2 -1 E!12571 E!12571 X [ E!03113 ] 17:28:19 ERAC -1 E!12571 E!12571 X [ E!03113 ] 17:28:19 +ERAC1 1 0 91 X->1 29 0 23 23 0 17:28:19 +ERAC2 -1 E!12571 E!12571 X [ E!03113 ] 17:28:20 ERAC -1 E!12571 E!12571 X [ E!03113 ] 17:28:20 +ERAC1 1 0 43 1 8 0 4 1 0 17:28:20 +ERAC2 -1 E!12571 E!12571 X [ E!03113 ] 17:28:21 ERAC -1 E!12571 E!12571 X [ E!03113 ] 17:28:21 +ERAC1 1 0 42 1 8 0 4 2 0 17:28:21 +ERAC2 -1 E!12571 E!12571 X [ E!03113 ] 17:28:22 ERAC -1 E!12571 E!12571 X->1 4 0 8 9 0 17:28:22 +ERAC1 1 0 42 1 7 0 2 2 0 17:28:22 +ERAC2 -1 E!12571 E!12571 X [ E!03113 ] ------------conntime------ -----------stmt--------------- tns rac# tcpping jdbc rac# ins sel upd del plsql 17:28:23 ERAC 1 0 45 1 3 0 3 3 0 17:28:23 +ERAC1 1 0 43 1 2 0 3 2 0 17:28:23 +ERAC2 -1 E!12571 E!12571 X [ E!03113 ] 17:28:24 ERAC 1 0 43 1 2 0 2 2 0 17:28:24 +ERAC1 1 0 43 1 2 0 2 2 0 17:28:24 +ERAC2 -1 E!12571 E!12571 X [ E!03113 ] 17:28:25 ERAC 1 0 44 1 19 0 3 2 0 17:28:25 +ERAC1 1 0 43 1 2 0 3 2 0 17:28:25 +ERAC2 -1 E!12571 E!12571 X [ E!03113 ] 17:28:26 ERAC 1 0 44 1 3 0 2 3 0 17:28:26 +ERAC1 1 0 43 1 2 0 1 2 0 17:28:26 +ERAC2 -1 E!12571 E!12571 X [ E!03113 ] 17:28:27 ERAC 1 0 43 1 3 0 1 2 0 17:28:27 +ERAC1 1 0 42 1 2 0 3 2 0 17:28:27 +ERAC2 -1 E!12571 E!12571 X [ E!03113 ] 17:28:28 ERAC 1 0 43 1 8 0 3 2 0 17:28:28 +ERAC1 1 0 43 1 4 0 3 2 0 17:28:28 +ERAC2 -1 E!12571 E!12571 X [ E!03113 ] |
다음과
같은
상황이
이루어집니다.
- 17:28:17부터 17:28:19 사이(장애
발생
후 2분 14초
후)에 ERAC1 TNS에서
새로운
연결을
재설정할
수
있게
됩니다.
- 17:28:19(장애
발생
후 2분 16초
후)에 ERAC1 FCF 풀이
정상적으로
작동합니다.
- 17:28:19부터 17:28:22까지(장애
발생
후 2분 16초
후) 마스터 ERAC FCF 풀이 ERAC1로
장애
조치
전환을
시도합니다.
- 17:28:22(장애
발생
후 2분 19초
후)에
마스터 ERAC FCF 풀이 ERAC1로
성공적으로
장애
조치를
전환합니다. 이제
모든
연결이
정상적으로
작동합니다. DATA1_0001 페일
그룹에서
디스크
마운트
상태를 CACHED에서 MISSING으로
변경합니다.
SQL> col path format a36 SQL> col diskgroup format a10 SQL> col failgroup format a10 SQL> SELECT path, dg.name diskgroup, failgroup, mount_status, mode_status FROM v$asm_disk d JOIN v$asm_diskgroup dg ON (d.group_number=dg.group_number) ORDER BY 1;
PATH DISKGROUP FAILGROUP MOUNT_S MODE_ST ------------------------------------ ---------- ---------- ------- ------- /dev/iscsi/racdata1.asm1/lun0/part1 DATA1 DATA1_0000 CACHED ONLINE DATA1 DATA1_0001 MISSING OFFLINE SQL> |
지연
대기의
영향
및
성능
저하
경고:
이러한
테스트는
본
설명서를
위한
것이며
실제
상황을
위한
테스트가
아니므로
확장 RAC 클러스터
성능을
실제로
측정하기
위한
테스트로
사용할
수
없습니다. .
확장 RAC 구성의
가장
중요한
요소는 RAC 노드와
스토리지
어레이
간의
거리입니다. 비용이
많이
드는
하드웨어
없이
대기
지연
시뮬레이션과
관련된
문제를
해결하기
위해 Linux에서
기본적으로
제공하는
네트워크
트래픽
형성
기능(QoS-Quality of Source)을
사용할
것입니다. SAN은 iSCSI를
기반으로
하므로
이더넷
레이어에서
간단하게
대기
지연, 패킷
순서
재지정
및
패킷
삭제를
시험해
볼
수
있습니다. 이는 NFS 및
현재
개발되고
있는 FcoE에도
적용됩니다. 목표는 RAC 노드
간의
상호
연결을
위한
것입니다.
이
시나리오에서는 dom0의
내부 Xen 네트워크
장치가 VM 간에
지연을
발생하도록
구성할
것입니다. Linux 트래픽을
형성하는
주
유틸리티는 "tc"(Traffic Control)입니다. 세부적으로
들어가기
시작하면
문제가
발생합니다. 표준 Oracle VM Server dom0 커널은 250HZ로
실행되며
이는 dom0 커널에서
시간과
관련된
모든
작업이 4ms 간격으로
수행됨을
의미합니다. Linux netem 대기열
관리
원칙에
따라
발생하는
대기
지연은
커널의
속도(HZ)에
따라
결정되므로 1ms 대기
지연을
시뮬레이션하려면
속도(HZ) 설정을
변경해야
합니다. 적어도 1,000HZ로
변경해야 1ms 대기
지연을
시뮬레이션할
수
있습니다.
커널을
구성하는
것은
다소
까다로운
작업이
될
수
있으므로
여기에서
실행
준비가
완료된 dom0 커널 RPM을
다운로드하여
사용하는
것이
좋습니다. dom0 Xen 커널을
빌드하는
절차는 "Oracle VM Server 2.1 Xen dom0을
위한
커널
작성하기" 섹션
뒷부분에
간단하게
설명되어
있으며, 커널을
새로
설치하는
절차도
나와
있습니다.
Xen 네트워크
인터페이스에서
대기
지연이
발생하도록
구성하는
간단한
스크립트의
이름은 qosracinit.pl이며 dom0에서
실행되었습니다. 이
스크립트는
여기에서
다운로드할
수
있습니다.
여러분의
환경에
따라
변수를
변경한
후
실행합니다.
[root@quadovm ~]# ./qosracinit.pl > /tmp/qos && bash /tmp/qos [root@quadovm ~]# |
대기
지연을
피하기
위해 QoS 규칙을
삭제하려면
다음을
실행하면
됩니다
[root@quadovm ~]# ./qosracinit.pl clear > /tmp/qos && bash /tmp/qos [root@quadovm ~]# |
이
테스트는 Dominic Giles의
Swingbench 2.3 Order Entry 벤치마크를
사용하여
수행되었습니다. Swingbench는 RAC 환경을
손쉽게
설치할
수
있는
방법입니다. "Min Think"와 "Max Think" 시간은
이
설치의
가능한
총
트랜잭션
처리
능력을
사용하기
위해 0으로
설정되었습니다. "Think" 시간은
다음
트랜잭션을
지연하는
데
필요한
시간입니다.
15개의 JDBC 연결로
구성된
두
개의
부하
생성자(minibench)는
개별 RAC 노드에서
부하를
생성했습니다. 부하
생성자는 "xeno" 워크스테이션에서
실행되었습니다. SOE 사용자에
대해
보고된
실제
데이터베이스
크기는
다음과
같습니다
SQL> conn soe/soe Connected. SQL> select sum(bytes)/1024/1024 mb from user_segments;
MB ---------- 2250.72656 SQL> |
주요
매개
변수는
다음과
같은
값으로
설정되었습니다.
- sga_target=1G
- db_cache_size = 512M
- pga_aggregate_target=256M
- memory_target = 0 (disabled)
하한 db_cache_size 설정은 Oracle 데이터베이스에서
상호
연결
및 SAN에
부하를
발생시켜
대기
지연되도록
설정되었습니다.
지연
대기
없음
우선 Vm 간의
실제
지연
대기를
측정합니다. (참고: 모든 ping 테스트는 Swingbench 완전
부하
상태에서
수집되었습니다.)
[oracle@rac2 ~]$ ping -c 10 -i 0.2 -q -s 1200 10.97.1.1; ping -c 10 -i 0.2 -q -s 1200 10.98.1.101; ping -c 10 -i 0.2 -q -s 1200 10.98.1.102 PING 10.97.1.1 (10.97.1.1) 1200(1228) bytes of data.
--- 10.97.1.1 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 1816ms rtt min/avg/max/mdev = 0.067/0.091/0.113/0.018 ms PING 10.98.1.101 (10.98.1.101) 1200(1228) bytes of data.
--- 10.98.1.101 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 1804ms rtt min/avg/max/mdev = 0.083/0.106/0.132/0.020 ms PING 10.98.1.102 (10.98.1.102) 1200(1228) bytes of data.
--- 10.98.1.102 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 1799ms rtt min/avg/max/mdev = 0.079/0.108/0.193/0.034 ms [oracle@rac2 ~]$ |
이
테스트는 RAC2 노드와
다음
간의
지연
대기를
보여
줍니다.
- 10.97.1.1(상호
연결을
통한 RAC1)
- 10.98.1.101(SAN을
통한 iscsi1 openfiler)
- 10.98.1.102(SAN을
통한 iscsi2 openfiler)
1,200바이트 ICMP 에코
패킷을
사용합니다. 확장 RAC에
대해
평균
왕복
시간이
중요한
요소이므로
이를
확인할
것입니다. 아래에서
볼
수
있듯이
벤치마킹
결과는 ~5460TPM입니다.
[oracle@rac1 ~]$ sqlplus -s / as sysdba @tpm 6356 5425 4924 5162 5430 Average = 5459.4
PL/SQL procedure successfully completed.
[oracle@rac1 ~]$ |
그런
다음
지연
대기를
발생시키고
테스트
시스템에
대한
영향을
살펴
봅니다. 이에
사용되는 tpm.sql 스크립트의
내용은
다음과
같습니다.
set termout on set echo off set serveroutput on DECLARE val1 NUMBER; val2 NUMBER; diff NUMBER; average NUMBER := 0; runs NUMBER := 5; BEGIN FOR V IN 1..runs LOOP SELECT SUM(value) INTO val1 FROM gv$sysstat WHERE name IN ('user commits','transaction rollbacks');
DBMS_LOCK.SLEEP(60);
SELECT SUM(value) INTO val2 FROM gv$sysstat WHERE name IN ('user commits','transaction rollbacks');
diff := val2-val1; average := average + diff; DBMS_OUTPUT.PUT_LINE(diff); END LOOP; DBMS_OUTPUT.PUT_LINE('Average = ' || average/runs); END; /
exit |
1ms의
지연
대기
앞에서
한
것처럼
우선
실제
평균
왕복
시간을
측정합니다
[oracle@rac2 ~]$ ping -c 10 -i 0.2 -q -s 1200 10.97.1.1; ping -c 10 -i 0.2 -q -s 1200 10.98.1.101; ping
-c 10 -i 0.2 -q -s 1200 10.98.1.102 PING 10.97.1.1 (10.97.1.1) 1200(1228) bytes of data.
--- 10.97.1.1 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 1809ms rtt min/avg/max/mdev = 2.693/3.482/3.863/0.389 ms PING 10.98.1.101 (10.98.1.101) 1200(1228) bytes of data.
--- 10.98.1.101 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 1854ms rtt min/avg/max/mdev = 2.481/3.850/6.621/1.026 ms PING 10.98.1.102 (10.98.1.102) 1200(1228) bytes of data.
--- 10.98.1.102 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 1812ms rtt min/avg/max/mdev = 0.080/0.135/0.233/0.051 ms [oracle@rac2 ~]$ |
위의
출력을
봤을
때, Linux 출력
네트워크
대기열에 1ms가
추가된
후
실제
평균
왕복
시간이 3.5 – 3.8ms 정도
증가했음을
알
수
있습니다. 이는
발신되는 ICMP 에코
요청
패킷이
약 1ms 동안
지연되고
그에
따라
응답측으로부터의
응답도 1ms만큼
지연되기
때문입니다.나머지 2초는
시스템
부하가
꽉
찼을
때
과부하
시스템에서 Xen 일정
예약
컨텍스트
전환으로
인해
발생합니다. (참고: 현재 4개의 VM을
시뮬레이션하고
있으며
실제로는 IO 작업이 dom0에서
수행되며 5번째 VM이 4x CPU 시스템에서
실행됩니다.)
[oracle@rac1 ~]$ sqlplus -s / as sysdba @tpm 5173 5610 5412 5094 5624 Average = 5382.6
PL/SQL procedure successfully completed. [oracle@rac1 ~]$ |
3ms의
지연
대기
[oracle@rac2 ~]$ ping -c 10 -i 0.2 -q -s 1200 10.97.1.1; ping -c 10 -i 0.2 -q -s 1200 10.98.1.101; ping
-c 10 -i 0.2 -q -s 1200 10.98.1.102
PING 10.97.1.1 (10.97.1.1) 1200(1228) bytes of data.
--- 10.97.1.1 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 1819ms rtt min/avg/max/mdev = 6.326/7.631/9.839/0.881 ms PING 10.98.1.101 (10.98.1.101) 1200(1228) bytes of data.
--- 10.98.1.101 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 1806ms rtt min/avg/max/mdev = 6.837/7.643/8.544/0.426 ms PING 10.98.1.102 (10.98.1.102) 1200(1228) bytes of data.
--- 10.98.1.102 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 1801ms rtt min/avg/max/mdev = 0.076/0.149/0.666/0.172 ms [oracle@rac2 ~]$ |
위에서
볼
수
있듯이
시스템에
대한 Xen 일정
예약
및
과부하로
인해 1.5-2ms가
추가되었습니다(7.5[ms] – 2x3[ms] = 1.5[ms]).
[oracle@rac1 ~]$ sqlplus -s / as sysdba @tpm 5489 4883 5122 5512 4965 Average = 5194.2
PL/SQL procedure successfully completed.
[oracle@rac1 ~]$ |
이
테스트에서
지연
대기
없이 5200TPM 및 5460TPM의
성능
저하를
볼
수
있습니다
10. 문제
해결
및
기타
정보
이
섹션에서는
확장 RAC 구조를
구현하는
동안
발생할
수
있는
다양한
문제에
대해
다룹니다.
RAC에
연결
시 ORA-12545 오류
방지하기
경우에
따라
새로
구성한 RAC 클라이언트에
연결할
때 ORA-12545 오류("Connect failed because target host or object does not exist")가
발생합니다. 이
문제를
해결하려면
각
인스턴스에
대해
개별적으로 LOCAL_LISTENER 매개
변수를
변경하십시오
SQL> ALTER SYSTEM SET local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=10.99.1.91)(PORT=1521))' SID='erac1';
System altered.
SQL> ALTER SYSTEM SET local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=10.99.1.92)(PORT=1521))' SID='erac2'; System altered. |
또는 DNS를
설정하고
여기에 RAC 노드를
등록하거나, RAC 호스트
이름을 IP 주소로
변환하도록
클라이언트를
다시
구성할
수도
있습니다. 예를
들어, UNIX 유사 JDBC 클라이언트에서 /etc/hosts에
이
주소를
추가합니다.
10.99.1.191 vmrac1-vip vmrac1 10.99.1.192 vmrac2-vip vmrac2 |
Oracle VM Server 2.1 Xen dom0용
커널
빌드하기
dom0 커널을
직접
컴파일하려면 Oracle VM에
다음 RPM을
업로드해야
합니다
[vnull@xeno Downloads]$ scp -r RPMS_OVM21_kernel_compile root@10.99.1.2:. root@10.99.1.2's password: m4-1.4.5-3.el5.1.i386.rpm 100% 133KB 133.2KB/s 00:00 rpm-build-4.4.2-37.el5.0.1.i386.rpm 100% 547KB 547.5KB/s 00:00 kernel-2.6.18-8.1.6.0.18.el5.src.rpm 100% 48MB 9.6MB/s 00:05 kernel-headers-2.6.18-8.el5.i386.rpm 100% 723KB 723.5KB/s 00:00 glibc-devel-2.5-12.i386.rpm 100% 2034KB 2.0MB/s 00:00 elfutils-0.125-3.el5.i386.rpm 100% 164KB 163.7KB/s 00:00 glibc-headers-2.5-12.i386.rpm 100% 605KB 604.6KB/s 00:00 patch-2.5.4-29.2.2.i386.rpm 100% 64KB 64.0KB/s 00:00 redhat-rpm-config-8.0.45-17.el5.0.1.noarch.rpm 100% 52KB 52.5KB/s 00:00 libgomp-4.1.1-52.el5.i386.rpm 100% 69KB 69.3KB/s 00:00 cpp-4.1.1-52.el5.i386.rpm 100% 2673KB 2.6MB/s 00:01 gcc-4.1.1-52.el5.i386.rpm 100% 5067KB 5.0MB/s 00:00 elfutils-libs-0.125-3.el5.i386.rpm 100% 105KB 105.2KB/s 00:00 [vnull@xeno Downloads]$ |
그런
다음
설치
패키지를
복사하여 OracleVM Server에
설치합니다.
[root@quadovm RPMS_OVM21_kernel_compile]# rpm -Uhv *.rpm
[..] [root@quadovm ~]# cd /usr/src/redhat/SPECS/ [root@quadovm SPECS]# vi kernel-2.6.spec |
kernel-2.6.spec에
다음
변수를
설정해야
합니다.
- %define buildboot 0
- %define buildxenovs 1
[root@quadovm SPECS]# rpmbuild -bp --target=`uname -m` kernel-2.6.spec Building target platforms: i686 Building for target i686 Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.29959 + umask 022 [..] [root@quadovm SPECS]# cd ../BUILD/kernel-2.6.18/linux-2.6.18.i686/ [root@quadovm linux-2.6.18.i686]# grep HZ .config # CONFIG_HZ_100 is not set CONFIG_HZ_250=y
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250 CONFIG_MACHZ_WDT=m CONFIG_NO_IDLE_HZ=y [root@quadovm linux-2.6.18.i686]# vi .config |
.config를
다음과
같이
편집하여 HZ가 1,000Hz로
설정되었는지
확인합니다.
# CONFIG_HZ_100 설정하지
않음
# CONFIG_HZ_250 설정하지
않음
CONFIG_HZ_1000=y
CONFIG_HZ=1000
Makefile을
편집하여
새
커널을
차별화한
후
다시
빌드합니다
[root@quadovm linux-2.6.18.i686]# vi Makefile
change EXTRAVERSION to e.g.: -8.1.6.0.18.el5xen_vnull03 [root@quadovm linux-2.6.18.i686]# make oldconfig [..] [root@quadovm linux-2.6.18.i686]# make config [..disable KERNEL DEBUG!...] [root@quadovm linux-2.6.18.i686]# make rpm scripts/kconfig/conf -s arch/i386/Kconfig [..] |
새로
빌드한
커널은 /usr/src/redhat/RPMS/i386 디렉토리에
있어야
합니다
새로운
커널
설치하기
새로운
커널을
설치하는
절차는
대부분
동일하지만
여기서
컴파일한
커널은
설치
프로그램을
사용하지
않으므로
일부
커널
설치
절차를
수동으로
수행해야
합니다.
[root@quadovm ~]# rpm -ihv kernel-2.6.188.1.6.0.18.el5xen_vnull03-1.i386.rpm Preparing... ########################################### [100%] 1:kernel ########################################### [100%] [root@quadovm ~]# depmod -a 2.6.18-8.1.6.0.18.el5xen_vnull03 [root@quadovm ~]# mkinitrd /boot/initrd-2.6.18-8.1.6.0.18.el5xen_vnull03.img 2.6.18-8.1.6.0.18.el5xen_vnull03 |
이제
새로운
커널에서
부팅하도록 GRUB 부트
로더를
변경해야
합니다.
[root@quadovm ~]# cd /boot/grub [root@quadovm grub]# vi menu.lst |
먼저 menu.lst file: default=0에서
기본값이 "0"으로
설정되어
있는지
확인합니다. 이
설정은
기본적으로 menu.lst에서
첫
번째
커널
항목을
부팅합니다. 다음 GRUB 커널
구성
항목을
맨
앞에
첫
항목으로
넣습니다.
title Oracle VM Server vnull03 root (hd0,0) kernel /xen.gz console=ttyS0,57600n8 console=tty dom0_mem=512M module /vmlinuz-2.6.18-8.1.6.0.18.el5xen_vnull03 ro root=/dev/md0 module /initrd-2.6.18-8.1.6.0.18.el5xen_vnull03.img |
치명적인
사이트
오류
신속
복구
여기에서는
장애
시뮬레이션
후 iscsi2 어레이와 rac2 노드를
정상적으로
작동시키는
간단한
절차를
설명합니다 (참고: 이
시나리오에서는 iscsi2의 LUN에
있는 OCRmirror가
손실되었습니다.)
- iscsi2 시스템의
전원을
켭니다(예: /OVS/running_pool/64_iscsi2의 xm create vm.cfg 실행).
- rac1 노드에서 iscsi2에
대한 iSCSI 연결을
감지하도록
설정합니다. /var/log/messages에서 "iscsid: connection4:0 is operational after recovery (314 attempts)"와
같은
메시지가
있는지
확인합니다.
- ALTER DISKGROUP DATA1 ONLINE ALLon +ASM1 인스턴스를
수행합니다
- 누락된
페일
그룹이
이제
동기화됩니다.
PATH DISKGROUP FAILGROUP MOUNT_S MODE_ST ------------------------------------ ---------- ---------- ------- ------- /dev/iscsi/racdata1.asm1/lun0/part1 DATA1 DATA1_0000 CACHED ONLINE /dev/iscsi/racdata2.asm1/lun0/part1 DATA1 DATA1_0001 CACHED SYNCING |
- 잠깐
후에 ASM 페일
그룹이
정상적으로
작동됩니다(MODE_STATUS=ONLINE).
- 보팅
디스크가 CSS 데몬에
의해
자동으로
온라인
상태로
됩니다.
- Ocrcheck에서 OCR mirror 중
하나가
동기화되지
않았다고
나타냅니다
[root@rac1 bin]# ./ocrcheck Status of Oracle Cluster Registry is as follows : Version : 2 Total space (kbytes) : 327188 Used space (kbytes) : 3848 Available space (kbytes) : 323340 ID : 2120916034 Device/File Name : /dev/iscsi/racdata1.ocr/lun0/part1 Device/File integrity check succeeded Device/File Name : /dev/iscsi/racdata2.ocr/lun0/part1 Device/File needs to be synchronized with the other device
Cluster registry integrity check succeeded [root@rac1 bin]# |
- 이를
해결하려면 ocrconfig를
실행한
다음 /u01/app/crs/log/rac1/crsd/crsd.log에서
새로운 OCR 미러에
대한
정보(대체
중
수행된
작업)를
확인합니다
[root@rac1 bin]# ./ocrconfig -replace ocrmirror /dev/iscsi/racdata2.ocr/lun0/part1 [root@rac1 bin]# |
- rac2의
전원을
켜고
확장
클러스터에
대해
정상적으로
작동하도록
합니다.
11. 다음
단계
RAC 클러스터의
장애
복구
기능을
강화하는
방법에는
여러
가지가
있습니다. 먼저 Linux 결합
드라이버를
사용하여
리던던시형의
상호
연결을
설정할
수
있습니다. iSCSI를
통해 IO 멀티
패칭에도
동일하게
적용합니다. 더
많은
디스크와 iSCSI OpenFiler 시스템
전용
디스크를
사용하면
성능과
테스트가
향상됩니다
12. 감사의
말
다음
분들에게
감사의
말씀을
드립니다:
- racle에
대해
가르쳐
주시고
관심을
갖게
만들어
주신 Radosław Mańkowski
- Poznan University of Technology에서
프로젝트로
확장 RAC에
대한
내용을
작성할
수
있도록
허가해
주신 Mariusz Masewicz와 Robert Wrembel.
- 이
설명서의
기반이
된 RAC 설치에
대한
우수한
자료를
작성하신 Jeffrey Hunter.
- 확장 RAC를
통한 (직접) NFS에
대한
기술적
설명을
제공해
주신 Kevin Closson (http://kevinclosson.wordpress.com/) 과 Dan Norris (http://www.dannorris.com/)