블로그 이미지
redkite

카테고리

분류 전체보기 (291)
00.SI프로젝트 산출물 (0)
00.센터 운영 문서 (0)
01.DBMS ============.. (0)
01.오라클 (117)
01.MS-SQL (15)
01.MySQL (30)
01.PostgreSql (0)
01.DB튜닝 (28)
====================.. (0)
02.SERVER ==========.. (0)
02.서버-공통 (11)
02.서버-Linux (58)
02.서버-Unix (12)
02.서버-Windows (2)
====================.. (0)
03.APPLICATION =====.. (11)
====================.. (0)
04.ETC =============.. (0)
04.보안 (5)
====================.. (0)
05.개인자료 (1)
06.캠핑관련 (0)
07.OA관련 (1)
Total
Today
Yesterday

달력

« » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

공지사항

최근에 올라온 글

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 설치합니다.

  1. "Oracle VM Server"라는 제목의 부팅 화면이 나타나면 <ENTER> 눌러 설치를 시작합니다.
  2. 그런 다음 설치하기 전에 CD 테스트하도록 선택할 있습니다. 손상되거나 잘못 구어진 CD 인해 설치가 중단되지 않도록 OK 눌러 CD 테스트하는 것이 좋습니다.
  3. 언어 선택 창에서 English 선택하고 OK 눌러 계속합니다. 그런 다음 키보드 모델을 선택하거나 기본 모델을 사용합니다.
  4. 원할 경우 파티셔닝 대화 상자에 액세스하여 기존의 파티션을 삭제할 있습니다. 기존의 파티션에 데이터가 들어 있을 있으므로 주의하십시오. 직접 만든 장비의 성능을 최대화하기 위해 개의 디스크로 구성된 RAID0 어레이를 만들 것입니다. GRUB 부트 로더는 RAID0에서 부팅할 없으므로 전용 부트 파티션을 만들어야 합니다.
    1. 모든 디스크에서 모든 파티션을 지웁니다.
    2. sda에서 ext3 파일 시스템을 포함하는 256MB/부트 파티션을 만듭니다( 번째 SATA 디스크). 여기에는 VM Server 하이퍼바이저를 부팅하는 필요한 initrd 이미지와 커널이 포함됩니다. 작성 "Force to be primary partition" 선택하여 x86 기본 파티션이 되도록 합니다. 이름을 sda1 지정합니다.
    3. sda 1GB 정도의 스왑 파티션을 만듭니다. (참고: Oracle VM dom0 기본적으로 최대 512MB 메모리를 사용하도록 구성되고 메모리를 많이 사용하는 애플리케이션이 없으므로 단지 스왑용으로 GB 스토리지를 할애할 필요는 없습니다. Dom0 기본적으로 실제 I/O 수행하고 하드웨어 작업을 처리하는 작업만 담당합니다. 하지만 domU[실제 VM] 필요에 따라 적절한 크기의 개별 스왑 공간이 필요합니다.)
    4. sda에서 Fill all available space 옵션 선택하여 "소프트웨어 RAID 파티션" 만들고, 이름을 sda3으로 지정합니다.
    5. sdb에서 Fill all available space 옵션 선택하여 "소프트웨어 RAID 파티션" 만들고, 이름을 sdb1 지정합니다.
    6. sdc에서 Fill all available space 옵션 선택하여 "소프트웨어 RAID 파티션" 만들고 이름을 sdc1 지정합니다. .
    7. 디스크가 여러 개일 경우 스토리지 성능이 극대화될 있도록 디스크에 RAID 파티션을 만듭니다.
    8. RAID 버튼을 클릭하여 소프트웨어 RAID 어레이를 만듭니다. RAID0 선택한 어레이에 포함시킬 모든 소프트웨어 RAID 파티션을 선택합니다( 시나리오의 경우: sda3, sdb1, sdc1). 파일 시스템이 "ext3"이고 마운트 지점이 "/"인지 확인합니다. (참고: 기본 RAID0 스트라이프는 256kB입니다.) Oracle VM 설치 프로그램을 사용하여 소프트웨어 RAID 어레이를 만드는 동안에는 값을 변경할 없습니다. 하지만 원할 경우 설치 전에 Alt-F2 눌러 번째 가상 콘솔로 전환하여 기존 어레이를 내리고 mdadm 사용하여 RAID 어레이를 다시 만들 있습니다. , 실제로 테스트해 보지는 않았습니다!)
    9. 변경 사항을 적용하고 OK 버튼을 눌러 파티션 변경을 저장합니다.
    10. 다음 화면에서는 부트 로더(GRUB) 설치할 위치를 선택해야 합니다. MBR(마스터 부트 레코드) 배치하십시오.
    11. 이제 관리 인터페이스로 사용할 이더넷 인터페이스를 결정해야 합니다. 예에서는 "eth0"(처음으로 검색된 이더넷 PCI 네트워크 카드) 사용합니다. 네트워크 카드를 선택했으면 올바른 IP 주소를 설정해야 합니다.
      1. "Enable IPv4 support" 옵션과 "Activate on boot" 옵션만 선택하십시오.
      2. "IPv4" 필드에 IP 주소를 입력하여 구성합니다. 시나리오에서는 "10.99.1.2" 사용합니다. 올바른 접두어/넷마스크(: "255.255.255.0" 경우 "24") 입력해야 합니다.
      3. OK 클릭하여 구성을 적용합니다.
      4. IPv4 게이트웨이와 DNS 네임 서버를 묻는 메시지가 표시됩니다(: "10.99.1.1").
      5. Hostname Configuration에서 manual 모드를 선택하고 해당 서버를 위한 알기 쉬운 호스트 이름(: "quadovm") 입력합니다.
    12. 네트워킹을 구성하면 다음을 선택하라는 메시지가 표시됩니다
      1. 시간대(해당 시간대 선택).
      2. Oracle VM Agent 암호 - Oracle VM Manager에서 Oracle VM Server 관리하는 사용할 암호이므로 신중하게 지정하고 공개되지 않도록 관리합니다.
      3. 루트 암호 - 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]

  1. Install Oracle VM Manager
  2. 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..]

위에서 다음과 같은 사실을 확인할 있습니다.

  1. OpenFiler에서 해당 시스템 디스크를 xvdaand 표시하고 디스크(아직 파티션으로 초기화하지 않음) xvdb 표시합니다.
  2. 번째 이더넷 인터페이스가 xenbr0 브릿지에 연결되고 번째 이더넷 인터페이스가 sanbr0 연결되도록 구성했습니다.
  3. 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 템플릿은 다음 자격 증명에 적합하게 구성되어 있습니다.

  • 사용자: root
  • 암호: ovsroot

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에서 수행한 변경을 번째 노드에서 있습니다.

[root@rac1 ~]# partprobe

후에 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 선택하고 NamPath 기본값인 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 손실되었습니다.)

  1. iscsi2 시스템의 전원을 켭니다(: /OVS/running_pool/64_iscsi2 xm create vm.cfg 실행).
  2. rac1 노드에서 iscsi2 대한 iSCSI 연결을 감지하도록 설정합니다. /var/log/messages에서 "iscsid: connection4:0 is operational after recovery (314 attempts)" 같은 메시지가 있는지 확인합니다.
  3. ALTER DISKGROUP DATA1 ONLINE ALLon +ASM1 인스턴스를 수행합니다
  4. 누락된 페일 그룹이 이제 동기화됩니다.

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

  1. 잠깐 후에 ASM 페일 그룹이 정상적으로 작동됩니다(MODE_STATUS=ONLINE).
  2. 보팅 디스크가 CSS 데몬에 의해 자동으로 온라인 상태로 됩니다.
  3. 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]#

  1. 이를 해결하려면 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]#

  1. 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/)
Posted by redkite
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함