| DBA: Linux
Linux / FireWire 환경에 Oracle RAC 10g
Release 2 Cluster 설치하기
저자 Jeffrey Hunter
($1800 이하의) 저렴한 비용으로 개발용 Oracle RAC 10g
Release 2 클러스터를 셋업하고 설정하는 방법을 배워 보십시오.
업데이트일: 2007년 3월
목차
- 서론
- Oracle RAC 10g
개요
- Shared-Storage 개요
- FireWire 테크놀로지
- 하드웨어 및 비용
- Linux 운영체제의 설치
- 네트워크 설정
- FireWire 모듈 다운로드 및 설치
- "oracle" 계정과 디렉토리의 생성
- FireWire 공유 스토리지 디바이스에 파티션 생성하기
- Linux서버의 Oracle 관련 설정
- hangcheck-timer 커널 모듈의 설정
- 원격 액세스를 위한 RAC 노드 설정
- RAC 노드를위한 Startup
명령
- Oracle 10g
Release 2의 RPM 패키지 확인
- Oracle Cluster
File System (OCFS2)의 설치 및 설정
- Automatic Storage
Management (ASMLib 2.0)의 설치 및 설정
- Oracle 10g
RAC 소프트웨어 다운로드하기
- Oracle 10g
Clusterware 소프트웨어 설치
- Oracle 10g
Database 소프트웨어 설치
- TNS Listener
프로세스 생성
- Oracle10g
Companion CD 소프트웨어 설치
- Oracle Cluster
Database 생성
- TNS 네트워킹 파일 검증
- 테이블스페이스의 생성 및
변경
- RAC Cluster /
데이터베이스 설정의 검증
- 클러스터의 시작 및 중단
- Transparent Application
Failover - (TAF)
- 결론
- 도와주신 분들
1. 서론 Oracle
Real Application Clusters (RAC) 10g 테크놀로지를 이해하는 가장 쉽고 빠른 방법은
Oracle RAC 10g 클러스터를 직접 설치해 보는 것입니다. Oracle RAC 10g가
제공하는 혜택(폴트 톨러런스, 보안, 로드 밸런싱, 확장성 등)을 이해하는 데 이보다 효과적인 방법은 없습니다.
하지만 운영 시스템에 RAC를 구성하는데 드는 비용이 지나치게 높다는 문제가 걸림돌이 됩니다.
소규모 2-노드 클러스터를 구성하는 비용은 적게는 1만 불에서 많게는 2만 불에 이를 수도 있습니다. 또 RAC 환경의 중심이라
할 수 있는 SAN(storage area network)을 구축하려면 최소 8천불이 요구됩니다.
이 가이드는 많은 비용을 들이지 않고 Oracle RAC 10g에 친숙해지고자
하는 사용자를 위해, 상용 소프트웨어 컴포넌트와 무료 다운로드 가능한 소프트웨어를 이용하여 1,200~1,800 불의 저렴한
비용으로 Oracle RAC 10g 시스템을 구축하는 방법을 설명합니다. 시스템은 Linux (White Box
Enterprise Linux 3.0 Respin 1 또는 Red Hat Enterprise Linux 3) 환경의 듀얼-노드
클러스터로 구성되며, IEEE1394 (FireWire)
드라이브 테크놀로지에 기반한 공유 디스크 스토리지가 사용됩니다. (물론 VMware Virtual Machine에 가상
클러스터를 구현하는 방안도 고려해 볼 수 있을 것입니다. 하지만 그 효과는 분명히 다릅니다
이 문서에서 설명된 내용이, 저렴한 비용으로 Oracle RAC 10g
시스템을 구축하는 유일한 방법은 아니라는 점을 참고하시기 바랍니다. FireWire 대신 SCSI를 사용하여 공유 스토리지를
구현한 솔루션도 있습니다. 일반적으로 SCSI는 FireWire 솔루션보다 많은 비용을 수반합니다. (SCSI 카드는 약 $70,
80GB 외장형 SCSI 드라이브는 $700~$1,000의 비용이 듭니다.) 일부 마더보드의 경우 SCSI 컨트롤러가 내장되어
있는 경우도 있습니다.
이 가이드에서 설명된 구성은 운영 환경에서 사용되어서는 안되며,
오라클 또는 다른 벤더가 이러한 구성에 대해 기술지원을 제공하지 않음을 명심하시기 바랍니다. 운영환경에서는
파이버 채널(Fiber Channel – 시스템과 스토리지를 포인트-투-포인트 또는 스위치 토폴로지 형태로 연결하는 고속 시리얼
전송 인터페이스)이 유일한 선택이 됩니다. FireWire는 테스트 및 개발 환경에 적합한 저렴한 대안을 제공하고 있지만, 아직
운영 환경에 사용할 수 있을 만큼 성숙된 기술이 아닙니다.
Oracle9i 및 Oracle 10g Release
1을 위한 가이드에서는 공유 스토리지에 파일을 저장하기 위해 로우 파티션(row partition)을 사용하였습니다. 하지만
여기에서는 Oracle Cluster File System Release 2 (OCFS2)와 Oracle Automatic Storage
Management (ASM)를 활용하는 것으로 합니다. 두 대의 Linux 서버는 아래와 같이 구성됩니다:
| Oracle Database
파일 |
| RAC Node Name |
Instance Name |
Database Name |
$ORACLE_BASE |
File System /
Volume Manager for DB Files |
| linux1 |
orcl1 |
orcl |
/u01/app/oracle |
ASM |
| linux2 |
orcl2 |
orcl |
/u01/app/oracle |
ASM |
| Oracle Clusterware
Shared 파일 |
| File Type |
File Name |
Partition |
Mount Point |
File System |
| Oracle Cluster Registry |
/u02/oradata/orcl/OCRFile |
/dev/sda1 |
/u02/oradata/orcl |
OCFS2 |
| CRS Voting Disk |
/u02/oradata/orcl/CSSFile |
/dev/sda1 |
/u02/oradata/orcl |
OCFS2 |
Oracle Database 10g Release 2 (10.2)에서부터
Cluster Ready Service(CRS)의 명칭이 Oracle Clusterware로 변경되었음을 참고하시기 바랍니다.
Oracle Clusterware 소프트웨어는 RAC 클러스터를 구성하는 각 노드의 /u01/app/oracle/product/crs
경로에 설치됩니다. Oracle Clusterware 소프트웨어는 두 종류의 파일 – Oracle Cluster Registry
(OCR) 파일과 CRS Voting Disk 파일 – 이 클러스터의 모든 노드에 의해 공유될 것을 요구합니다. 이 두 가지
파일은 OCFS2를 사용한 공유 스토리지에 설치됩니다. 이 파일을 로우 디바이스(raw device)를 설치하는 것도 가능하지만,
오라클은 이러한 구성을 권장하지 않으며 이렇게 구성된 Clusterware 파일을 ASM이 사용할 수 없다는 문제가 따릅니다.
Oracle Database 10g Release 2 소프트웨어는 RAC 클러스터를
구성하는 각 노드의 별도 Oracle Home 경로(/u01/app/oracle/product/10.2.0/db_1)에 설치됩니다.
모든 물리적 데이터베이스 파일(데이터, 온라인 리두 로그, 컨트롤 파일, 아카이브 리두 로그)은 공유 드라이브의 다른 파티션에
설치되며 ASM에 의해 관리됩니다. (물론 오라클 데이터베이스 파일을 그냥 OCFS2에 저장하는 것도 가능합니다.)
참고: 본 문서는 아래에 기술된 환경을 그대로 사용하는 것을 가정하여 작성되었습니다. Oracle
RAC 10g Release 1과 RHEL 3을 이용한 설치 방법을 확인하시려면 이
곳을 클릭하십시오. Oracle9i RAC 버전을 위한 가이드를 확인하시려면, 이
곳을 클릭하십시오.
2. Oracle RAC 10g 개요
Oracle9i에서 처음 소개된 Oracle RAC는 Oracle
Parallel Server (OPS)의 다음 세대 솔루션입니다. RAC는 여러 개의 인스턴스가 동일한 데이터베이스(스토리지)에
동시 액세스할 수 있게 합니다. 모든 노드가 동일한 데이터에 액세스하고 특정 인스턴스에 장애가 발생해도 데이터베이스의 가용성이
희생되지 않으므로, 폴트 톨러런스, 로드 밸런싱, 수평적 확장을 통한 가용성 및 성능 개선이 가능합니다.
Oracle RAC의 중심에는 공유 디스크 서브시스템이 있습니다. 클러스터의 모든 노드는 데이터,
리두 로그 파일, 컨트롤 파일, 매개변수 파일에 동시 접근할 수 있어야 합니다. 각각의 노드는 리두 로그 파일과 컨트롤 파일을
개별적으로 저장하고 관리하지만, 다른 노드에 시스템 장애가 발생한 경우 복구를 위해 이 파일에 접근할 수 있어야 합니다.
Oracle RAC와 OPS의 가장 큰 차이점의 하나로 Cache Fusion 테크놀로지를
들 수 있습니다. OPS에서 노드 간의 데이터 요청을 처리하려면, 요청 노드가 데이터를 읽기 전에 먼저 데이터를 디스크에 저장해야
합니다. Cache Fusion을 사용하는 RAC에서는 데이터가 락(lock) 알고리즘을 기반으로 고속 네트워크를 통해 다른
노드에 직접 전달됩니다.
모든 클러스터링 솔루션이 공유 스토리지를 사용하는 것은 아닙니다. 일부 벤더는 "federated
cluster”라 불리는 방법을 사용합니다. 이 환경에서는 데이터가 여러 대의 서버에 분산되어 저장된 형태로 공유됩니다. 이와
달리, Oracle RAC 10g에서는 모든 노드가 동일한 저장 공간을 공유합니다. 데이터 파일, 리두 로그 파일, 컨트롤 파일,
아카이브 로그 파일은 로우 디스크(raw disk) 디바이스, NAS, SAN, ASM, 또는 클러스터 파일 시스템(clustered
file system) 기반의 공유 스토리지에 저장됩니다. 오라클의 솔루션은 모든 노드의 프로세싱 파워의 활용도를 극대화하는
동시에 페일오버 작업의 안정성을 보장한다는 이점을 제공합니다.
Oracle RAC에 관련한 자세한 정보는 OTN의 Oracle
RAC Product Center 에서 확인하실 수 있습니다.
3. Shared-Storage 개요
파이버 채널(Fiber Channel)은 공유 스토리지 환경에서 가장 널리 사용되는
기술입니다. 앞에서 설명한 것처럼 파이버 채널은 시스템과 스토리지 디바이스를 포인트-투-포인트 또는 스위치 토폴로지 형태로 연결하기
위한 고속 시리얼 전송 인터페이스입니다. 파이버 채널은 SCSI 프로토콜과 IP 프로토콜을 지원합니다.
파이버 채널 구성은 최대 127 개의 노드와 초당 2.12 기가바이트의 전송률을 지원합니다.
하지만 파이버 채널은 매우 높은 비용을 수반한다는 문제가 있습니다. 스위치 하드웨어에만 1,000불 가량이 필요하며, 하이-엔드
드라이브의 가격은 300 불에 이릅니다. 전형적인 파이버 채널 구성(서버 어댑터 포함)에는 약 5,000 불의 비용이 필요합니다.
파이버 채널보다 저렴한 대안으로 SCSI가 있습니다. SCSI 테크놀로지는 공유 스토리지 환경에서
적정한 수준의 성능을 제공하지만, Linux의 가격 체계에 익숙한 관리자와 개발자에게는 이것도 비싸게 느껴질 수 있습니다. SCSI를
이용하여 2-노드 클러스터를 구성하는 데에는 대략 1,000~2,000 불이 듭니다.
그 밖에 대중적인 솔루션으로 NAS 기반의 Sun NFS (Network File System)가
있습니다. Sun NFS 역시 공유 스토리지 환경에 응용될 수 있지만, Network Appliance 장비(또는 호환 장비)가
필요하다는 제약 사항이 있습니다. 또 NFS를 통한 direct I/O가 가능해야 하며, TCP를 전송 프로토콜을 사용해야 합니다.
읽기/쓰기 블록 사이즈는 32K입니다.
4. FireWire 테크놀로지 Apple
Computer와 Texas Instruments가 공동으로 개발한 FireWire는 플랫폼 독립적인 형태로 구현된 고속 시리얼
데이터 버스입니다. FireWire는 넓은 대역폭과 긴 거리(최대 100 미터), 고속 버스를 지원하며, 디지털 비디오, 전문가
오디오, 하드 드라이브, 하이엔드 디지털 카메라, 홈 엔터테인먼트 디바이스 등에 활용됩니다. FireWire는 초당 800 메가바이트의
최대 전송률을 제공하며, FireWire의 다음 버전은 1,600 Mbps (그리고 그 다음 버전은 3,200 Mbps)를 지원할
예정입니다. FireWire는 비압축 HD(high-definition) 비디오대용량 또는 SD(standard-definition)
비디오 스트림과 같은 대용량 데이터 파일의 전송을 위한 핵심 테크놀로지로 활용될 것입니다.
아래 표는 디스크 인터페이스의 유형별 속도를 비교한 것입니다. 최대 전송률을 기준으로
보았을 때, IEEE 1394가 다른 디스크 인터페이스 테크놀로지와 비교하여 매우 우수한 성능을 제공하고 있음을 확인하실 수
있습니다.
| 디스크 인터페이스e |
속도 |
| Kb |
KB |
Mb |
MB |
Gb |
| Serial |
115 |
14.375 |
0.115 |
0.014 |
|
| Parallel (standard) |
920 |
115 |
0.92 |
0.115 |
|
| USB 1.1 |
|
|
12 |
1.5 |
|
| Parallel (ECP/EPP) |
|
|
24 |
3 |
|
| SCSI-1 |
|
|
40 |
5 |
|
| SCSI-2 (Fast SCSI / Fast Narrow SCSI) |
|
|
80 |
10 |
|
| ATA/100 (parallel) |
|
|
100 |
12.5 |
|
| IDE |
|
|
133.6 |
16.7 |
|
| Fast Wide SCSI (Wide SCSI) |
|
|
160 |
20 |
|
| Ultra SCSI (SCSI-3 / Fast-20 / Ultra Narrow) |
|
|
160 |
20 |
|
| Ultra IDE |
|
|
264 |
33 |
|
| Wide Ultra SCSI (Fast Wide 20) |
|
|
320 |
40 |
|
| Ultra2 SCSI |
|
|
320 |
40 |
|
| FireWire 400 - IEEE1394(a) |
|
|
400 |
50 |
|
| USB 2.0 |
|
|
480 |
60 |
|
| Wide Ultra2 SCSI |
|
|
640 |
80 |
|
| Ultra3 SCSI |
|
|
640 |
80 |
|
| FireWire 800 - IEEE1394(b) |
|
|
800 |
100 |
|
| Serial ATA - (SATA) |
|
|
1200 |
150 |
1.2 |
| Wide Ultra3 SCSI |
|
|
1280 |
160 |
1.28 |
| Ultra160 SCSI |
|
|
1280 |
160 |
1.28 |
| Ultra Serial ATA 1500 |
|
|
1500 |
187.5 |
1.5 |
| Ultra320 SCSI |
|
|
2560 |
320 |
2.56 |
| FC-AL Fibre Channel |
|
|
3200 |
400 |
3.2 |
5. 하드웨어 및 비용
Oracle RAC 10g 환경을 구현하기 위해, 두 대의 Linux 서버와 일반 컴퓨터 매장에서 쉽게 구입
가능한 컴포넌트들을 사용합니다.
| Server 1 - (linux1) |
Dimension 2400 Series
Intel Pentium 4 프로세서 at 2.80GHz
1GB DDR SDRAM (at 333MHz)
40GB 7200 RPM 내장 하드 드라이브
Intel 3D AGP 그래픽 카드
10/100 Ethernet 카드
CDROM (48배속)
3.5" 플로피
모니터 별도 구매하지 않음 (기존 장비 활용)
USB 마우스/키보드 |
US$620 |
1 - Ethernet LAN 카드
| |
각 Linux 서버는 두 개의 NIC 어댑터를 탑재하고 있습니다. Dell Dimension
서버는 퍼블릭 네트워크와의 연결을 위한 10/100 이더넷 카드를 내장하고 있습니다. 두 번째 NIC 어댑터는
두 서버를 직접 연결하는데 사용됩니다. |
|
US$20 |
1 - FireWire 카드
|
US$30 |
| Server 2 - (linux2) |
Dimension 2400 Series
Intel Pentium 4 프로세서 at 2.80GHz
1GB DDR SDRAM (at 333MHz)
40GB 7200 RPM 내장 하드 드라이브
I Intel 3D AGP 그래픽 카드
10/100 카드
CDROM (48배속)
3.5" 플로피
모니터 별도 구매하지 않음 (기존 장비 활용)
USB 마우스/키보드 |
US$620 |
1 - Ethernet LAN 카드
| |
Dell Dimension 서버는 퍼블릭 네트워크와의 연결을 위한 10/100 이더넷 카드를
내장하고 있습니다. 두 번째 NIC 어댑터는 두 서버를 직접 연결하는데 사용됩니다. |
|
US$20 |
1 - FireWire 카드
|
US$30 |
| Miscellaneous Components |
FireWire 하드 드라이브
| |
구입한 FireWire가 멀티 로그인을 지원하는지 확인하시기 바랍니다. 드라이브의 칩셋이
하나 이상의 서버로부터의 동시 접근을 허용하지 않으면, 여러 대의 서버가 디스크와 파티션을 동시에 사용할 수
없습니다. Oxford 911 칩셋을 장착한 디스크는 이러한 문제가 없는 것으로 알려져 있습니다. 필자가 테스트를
위해 구입한 디스크의 상세 내역이 다음과 같습니다:
벤더: Maxtor
모델: OneTouch II
Mfg. Part No. or KIT No.: E01G300
용량: 300 GB
캐시 버퍼: 16 MB
Spin Rate: 7200 RPM
인터페이스 전송 속도: 400 Mbits/s
"Combo" 인터페이스 IEEE 1394 / USB 2.0 및 USB 1.1 호환
호환 가능한 칩셋을 내장하고 멀티 로그인을 지원하는 FireWire 드라이브의 목록이 아래와 같습니다.
아래 드라이브 중 하나를 사용하시면 테스트에 문제가 없을 것입니다 (하지만 보장은 드리기 어렵습니다):
|
|
US$280 |
1 - Extra FireWire 케이블
|
US$20 |
1 - Ethernet 허브/스위치
(Used for interconnect int-linux1 / int-linux2) |
US$25 |
| 4 - 네트워크 케이블
|
US$5 US$5 US$5 US$5 |
| Total |
US$1,685 |
Maxtor OneTouch 외장형 드라이브가 두 개의 IEE 1394 (FireWire)
포트를 지원한다는 점을 참고하시기 바랍니다. 필자는 이더넷 스위치 대신 크로스오버 CAT5 케이블을 사용하는 방법을 권장하지 않습니다.
서버 간의 직접 연결을 위해 크로스오버 CAT5 케이블을 사용하는 경우, PC 중 하나가 다운될 때 다른 PC가 “cable unplugged”
에러를 감지하고 따라서 Cache Fusion 네트워크를 사용할 수 없게 됩니다.
지금까지 하드웨어 구성에 대해 설명하였습니다. 지금부터 전체 환경을 개념적으로 이해해보도록 합시다:
그림 1 아키텍쳐
앞으로 설명되는 대부분의 작업은 두 대의 서버에 대해 동시 수행되어야 함에 주의하시기 바랍니다.
6. Linux 운영체제의 설치 이
섹션에서는 Linux 운영체제를 설치하는 과정을 단계별로 설명합니다. 본 문서에서 설명된 내용은 Red Hat Enterprise
Linux 4 AS/ES (RHEL4) 운영체제가 설치된 환경을 지원합니다. 본 문서에서는 RHEL4의 안정적인 무료 버전인
CentOS 4.2를 사용하기로 합니다.
좀 더 자세한 설치과정은 Red Hat Linux의 매뉴얼을
참고하되, 아래에 제시된 설명을 기반으로 시스템을 구성해야 합니다.
두 노드에 Linux 운영체제를 설치하기 전에, 먼저 FireWire 카드와 NIC 카드(2조)를
설치해야 합니다.
또 설치를 시작하기 전에 FireWire 드라이브가 두 서버에 연결되어 있지 않음을
꼭 확인하시기 바랍니다. 또 두 서버를 FireWire 드라이브에 연결하고 드라이브의 전원을 끈 상태로 두어야 합니다.
먼저 CentOS 4.2의 ISO 이미지를 다운로드합니다:
CentOS 이미지를 다운로드하여
CD로 구운 다음, CentOS Disk #1을 첫 번째 서버(이 예에서는 linux1)에 삽입하고 전원을 켭니다. 아래 설명된
것처럼 설치 스크린에서 답변을 입력합니다. 첫 번째 노드의 Linux 설치 작업이 완료되었다면, 두 번째 노드에서 동일한 작업을
반복하되, 노드명을 linux1에서 linux2로 변경하고 다른 IP 주소를 적용합니다.
Boot Screen
첫 번째 설치 화면(CentOS Enterprise Linux 부트 스크린)의 프롬프트에서 [Enter]를 입력하여 설치 프로세스를
시작합니다.
Media Test
CD 미디어를 테스트할 것인지 묻는 질문에 대해 [Skip]을 선택하고 [Enter]를 입력합니다. (미디어에 에러가 있다면
CD 버닝 소프트웨어에서 이미 에러가 확인되었을 것입니다.) 몇 초 동안 비디오 카드, 모니터, 마우스 등의 인식 작업이 수행되고,
인스톨러는 GUI 모드로 전환됩니다.
Welcome to CentOS Enterprise Linux
[Next]를 클릭하여 다음 단계로 넘어갑니다.
Language / Keyboard Selection
언어, 키보드, 마우스 설정을 위한 화면입니다. 적절한 구성을 선택합니다.
Installation Type
[Custom] 옵션을 선택하고 [Next]를 클릭합니다.
Disk Partitioning Setup
[Automatically partition]을 선택하고 [Next]를 클릭합니다.
해당 서버에 이전에 설치한 Linux 운영체제가 존재하는 경우, 오래된 파티션을 “제거(remove)”
또는 “보존(keep)”할 것인지 묻는 스크린이 표시됩니다. [Remove all partitions on this system]
옵션을 선택합니다. 또 설치 대상에 [hda] 드라이브가 선택되었는지 확인합니다. [Review (and modify if needed)
the partitions created] 옵션도 함께 체크하도록 합니다. [Next]를 클릭하여 다음 단계로 넘어갑니다.
정말로 모든 파티션을 삭제할 것인지 묻는 대화 창이 표시됩니다. [Yes]를 클릭합니다.
Partitioning
이 단계에서 인스톨러가 자동으로 선택한 디스크 파티션을 조회하고, 필요한 경우 수정할 수 있습니다. 대부분의 경우, 인스톨러는
/boot를 위해 100MB, swap 공간을 위해 메모리 용량의 두 배(여기에서는 1GB의 RAM이 사용되므로 swap 공간에는
2GB가 할당됩니다), 그리고 나머지를 root(/) 파티션에 할당합니다. 여기에서는 자동으로 선택된 설정을 그대로 사용하기로
합니다
RHEL 4에서부터, 인스톨러는 LVM(Logical Volume Manager)를 사용하여
디스크 설정 작업을 수행합니다. 예를 들어, 첫 번째 하드 드라이브(예의 경우 /dev/hda)를 두 개의 파티션으로 나눌 때,
먼저 boot 파티션(/dev/hda1)을 할당하고 디스크의 나머지 영역을 VolGroup00(/dev/hda2)이라는 이름의
LVM에 할당합니다. LVM Volume Group(VolGroup 00)은 다시 두 개의 LVM 파티션(root 파일 시스템과
swap)으로 파티셔닝 됩니다.
Boot Loader Configuration
인스톨러는 디폴트로 GRUB 부트 로더를 사용합니다. 디폴트 값을 선택하여 GRUB 부트 로더를 사용하도록 하고 [Next]를
클릭합니다.
Network Configuration
앞에서 설명한 것처럼, 각 서버에 두 조의 NIC 카드가 설치되어야 합니다. 두 조의 NIC 카드가 모두 정상적으로 인식되어
있어야 합니다.
먼저, 각 NIC 카드에 대해 [Active on boot] 항목이 체크되어 있는지 확인합니다.
(인스톨러가 eth1을 활성화하지 않았을 수도 있습니다.)
두 번째로, eth0과 eth1에 대해 [Edit] 작업을 수행합니다. eth0과 eth1에
서로 다른 IP 주소를 할당하고, 가능하다면 eth1 (직접 연결)과 eth0(퍼블릭 네트워크)에 서로 다른 서브넷을 할당합니다:
eth0:
- [Configure using DHCP]옵션의 체크를 해제합니다
- [Activate on boot]를 체크합니다
- IP Address: 192.168.1.100
- Netmask: 255.255.255.0
eth1:
- [Configure using DHCP]옵션의 체크를 해제합니다
- [Activate on boot]를 체크합니다
- IP Address: 192.168.2.100
- Netmask: 255.255.255.0
hostname은 수동 설정합니다. 첫 번째 노드는 “linux1”으로, 두 번째 노드는 “linux2”로
설정합니다. 게이트웨이와 DNS 서버를 설정하고 다음 단계로 넘어갑니다.
Firewall
[No firewall]을 선택하고 [Next]를 클릭합니다. 방화벽을 설정하지 않았다는 경고 메시지가 뜰 수도 있습니다. 이
경우, [Proceed]를 클릭하여 다음 단계로 진행합니다.
Additional Language Support/Time Zone
추가 언어 지원 및 시간대 설정을 위한 화면이 표시됩니다. 대부분의 경우, 디폴트 설정을 그대로 사용하는 것이 권장됩니다.
Set Root Password
root 패스워드를 선택하고 [Next]를 클릭합니다.
Package Group Selection
스크린 하단으로 스크롤한 뒤 “Miscellaneous” 항목에서 [Everything]을 선택합니다. [Next]를 클릭하여
다음 단계로 진행합니다.
오라클을 설치하기 전에 모든 Linux 패키지를 미리 설치해 두어야 하는 것은 아니라는 점을 참고하시기 바랍니다. Oracle을
성공적으로 설치하기 위해 필요한 패키지에 대한 상세한 정보는 섹션
15 ("Oracle 10g Release 2를 위한 RPM 패키지 점검")에서 확인하실 수 있습니다.
일부 RHEL4 배포판의 경우, 디폴트로 “Package Group Selection” 스크린이
뜨게 됩니다. 이 화면에서는 “Install default software packages” 또는 “Customize software
packages to be installed” 중 하나를 선택해야 합니다. "Customize software packages
to be installed" 옵션을 선택하고 [Next]를 클릭하여 다음 단계로 진행하면 "Package
Group Selection" 스크린이 표시됩니다. 여기에서 스크린 하단으로 스크롤한 후 “Miscellaneous”
항목에서 [Everything]을 선택합니다. [Next]를 클릭하여 다음 단계로 진행합니다.
About to Install
[Next]를 클릭하여 설치 작업을 시작합니다. 설치 과정에서 Disk #2, Disk #3, Disk #4를 바꿔 넣으라는
프롬프트가 뜨게 됩니다. [Continue]를 클릭하여 설치 과정을 계속합니다.
CentOS 4.2의 경우, Disk #2, Disk #3, Disk #4, Disk #1,
그리고 다시 Disk #4의 순서로 디스크를 교환해 주어야 합니다.
Graphical Interface (X) Configuration
(CentOS 4.2를 제외한) 대부분의 RHEL4 배포판의 경우, 설치가 완료된 후 인스톨러에 의해 비디오 하드웨어의 인식이
시도됩니다. 인스톨러가 비디오 하드웨어(그래픽 카드와 모니터)를 올바르게 인식했는지 확인합니다. 다음의 3 단계 스크린에서는
X Window 설정을 수행합니다.
Congratulations
이제 첫 번째 노드(linux1)에 대한 CentOS Enterprise Linux 운영체제의 설치 작업이 성공적으로 완료되었습니다.
CD-ROM 드라이브에서 CD를 꺼내고 [Exit]를 클릭하여 시스템을 리부팅 합니다.
시스템이 처음 부팅되면, 다시 Welcome 스크린이 표시됩니다. 마법사를 통해 날짜와 시간을
설정하고, 사용자 계정을 추가하고, 사운드 카드를 테스트하고, CD를 이용한 추가 설치 작업을 수행할 수 있습니다. 여기에서는
시간과 날짜만을 확인하고, 다른 작업은 수행하지 않는 것으로 합니다 (단 CentOS 4.x의 경우에는 모니터/디스플레이 설정도
확인해 주어야 합니다). 모든 작업이 성공적으로 완료되었다면 로그인 스크린이 표시되는 것을 확인하실 수 있을 것입니다.
Perform the same installation on the second
node
첫 번째 노드에서 Linux 운영체제의 설치를 완료한 후, 두 번째 노드(linux2)에서 같은 작업을 반복합니다. 서버명과
네트워크 설정이 달라지는 점에 주의하시기 바랍니다. linux2의 설정 예가 아래와 같습니다:
먼저, 각 NIC 카드에 대해 [Active on boot] 항목이 체크되어 있는지 확인합니다.
(인스톨러가 eth1을 활성화하지 않았을 수도 있습니다.)
두 번째로, eth0과 eth1에 대해 [Edit] 작업을 수행합니다:
eth0:
- [Configure using DHCP] 옵션의 체크를 해제합니다.
- [Activate on boot]를 체크합니다.
- IP Address: 192.168.1.101
- Netmask: 255.255.255.0
eth1:
- [Configure using DHCP] 옵션의 체크를 해제합니다.
- Activate on boot]를 체크합니다.
- IP Address: 192.168.2.101
- Netmask: 255.255.255.0
hostname은 수동 설정합니다. 두 번째 노드는 “linux2”로 설정합니다. 게이트웨이와
DNS 서버를 설정하고 다음 단계로 넘어갑니다.
7. 네트워크 설정
클러스터의 모든 노드에 대해 아래 네트워크 설정 작업을 수행해야 합니다!
참고: 이 섹션에서는 RAC 환경에 필수적인 설정
작업을 설명하고 있습니다. Linux 설치 과정에서 기본적인 네트워크 설정을 완료한 상태라 해도, 이 단계를 생략해서는 안됩니다.
네트워크 설정 개요
Linux O/S의 설치과정에서 각 노드의 IP 주소와 호스트네임 설정을 이미 완료한 상태입니다.
이제 /etc/hosts 파일을 설정하고 서버간 직접 연결을 위한 네트워크 설정 작업을 수행할 차례입니다. 또 Telnet과
FTP 서비스를 위한 설정 방법도 함께 설명하고 있습니다.
각 노드는 퍼블릭 네트워크를 위한 정적 IP 주소와 노드 간의 직접 연결을 위한 정적 IP
주소를 갖습니다. 직접 연결을 위한 사설 IP 주소는 오라클 데이터베이스가 Cluster Manager 및 Cache Fusion
데이터를 전송하는 용도로만 사용됩니다. 서버간 직접 연결을 위해 퍼블릭 네트워크를 사용하는 것도 가능하지만, 데이터베이스 성능이
저하될 수 있으므로 권장되지 않습니다 (Cache Fusion과 Cluster Manager 트래픽을 위한 대역폭이 제약될 수
있습니다). 운영 환경에서는 서버간 직접 연결을 위해 최소한 기가바이트 급의 네트워크를 이용한 전용 네트워크를 구성해야 합니다.
Configuring Public and Private Network
퍼블릭 네트워크와 서버간 직접 연결을 위한 네트워크에 동시 접근하기 위한 설정입니다.
RHEL 4의 Network Configuration 프로그램을 사용하면 네트워크 설정을 쉽게
완료할 수 있습니다. Network Configuration 프로그램을 시작하려면 root 계정으로 로그인한 뒤 커맨드 라인에서
다음과 같이 실행합니다:
# su -
# /usr/bin/system-config-network &
네트워크 설정 과정에서 DHCP는 사용하지 않으며, 정적 IP 주소만을 사용합니다!
Network Configuration 프로그램을 통해 NIC 디바이스와 /etc/hosts/
파일을 설정을 변경합니다. 두 노드의 /etc/hosts/ 설정은 동일합니다.
아래와 같이 설정 작업을 수행합니다:
| Server 1 (linux1) |
| Device |
IP Address |
Subnet |
용도 |
| eth0 |
192.168.1.100 |
255.255.255.0 |
linux1을 퍼블릭 네트워크에 연결 |
| eth1 |
192.168.2.100 |
255.255.255.0 |
linux1(interconnect)과 linux2(int-linux2)의 직접연결 |
| /etc/hosts |
127.0.0.1 localhost loopback
# Public Network - (eth0)
192.168.1.100 linux1
192.168.1.101 linux2
# Private Interconnect - (eth1)
192.168.2.100 int-linux1
192.168.2.101 int-linux2
# Public Virtual IP (VIP) addresses for - (eth0)
192.168.1.200 vip-linux1
192.168.1.201 vip-linux2
|
| Server 2 (linux2) |
| Device |
IP Address |
Subnet |
용도 |
| eth0 |
192.168.1.101 |
255.255.255.0 |
linux2를 퍼블릭 네트워크에 연결 |
| eth1 |
192.168.2.101 |
255.255.255.0 |
linux2(interconnect)와 linux1(int-linux1)을 직접연결 |
| /etc/hosts |
127.0.0.1 localhost loopback
# Public Network - (eth0)
192.168.1.100 linux1
192.168.1.101 linux2
# Private Interconnect - (eth1)
192.168.2.100 int-linux1
192.168.2.101 int-linux2
# Public Virtual IP (VIP) addresses for - (eth0)
192.168.1.200 vip-linux1
192.168.1.201 vip-linux2
|
가상 IP 주소는 두 노드의 /etc/hosts 파일에만 정의됩니다. 퍼블릭 가상 IP
주소는 Oracle Universal Installer 실행 과정에서 Virtual Internet Protocol Configuration
Assistant (VIPCA)에 의해 자동으로 설정됩니다. 모든 가상 IP 주소는 “srvctl start nodeapps -n
<node_name>” 커맨드가 실행될 때 활성화됩니다. 바로 이 주소가 클라이언트 tnsnames.ora 파일에 Host
Name/IP Address로 설정되게 됩니다 (자세한 내용은 뒤에서 설명합니다).
첫 번째 노드(linux1)를 위한 설정 화면이 아래와 같습니다. 양쪽 노드에 네트워크 설정을 해 주는 것을 잊지 마시지 바랍니다.
그림 2 Network Configuration 스크린
– Node 1 (linux1)
그림 3 Ethernet Device 스크린 – eth0
(linux1)
그림 4 Ethernet Device 스크린 – eth1
(linux1)
그림 5: Network Configuration 스크린
– /etc/hosts (linux1)
ifconfig 커맨드를 이용하여 네트워크 설정 상태를 확인할 수 있습니다.
linux1서버에서의 실행 예가 아래와 같습니다:
$ /sbin/ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:0D:56:FC:39:EC
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20d:56ff:fefc:39ec/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:835 errors:0 dropped:0 overruns:0 frame:0
TX packets:1983 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:705714 (689.1 KiB) TX bytes:176892 (172.7 KiB)
Interrupt:3
eth1 Link encap:Ethernet HWaddr 00:0C:41:E8:05:37
inet addr:192.168.2.100 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::20c:41ff:fee8:537/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:546 (546.0 b)
Interrupt:11 Base address:0xe400
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:5110 errors:0 dropped:0 overruns:0 frame:0
TX packets:5110 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:8276758 (7.8 MiB) TX bytes:8276758 (7.8 MiB)
sit0 Link encap:IPv6-in-IPv4
NOARP MTU:1480 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
가상 IP에 대해
왜 10g에서 가상 IP(VIP, Virtual IP)가 필요한 것일까요??
노드에 장애가 발생하면, 노드에 할당된 VIP는 자동으로 다른 노드에 페일오버 됩니다. 이
과정에서 두 가지 작업이 진행됩니다.
- 1. 새로운 노드가 arp 시그널을 브로드캐스트하고 IP 주소에 연관된 MAC 주소를 공개합니다.
서버가 직접 연결된 상황에서는, 이 과정에서 이전의 주소로의 연결에 장애가 발생하게 됩니다.
- 2. 가상 IP를 주소로 하는 패킷은 새로운 노드로 전달되고, 새로운 노드는 클라이언트에
RST 패킷을 회신합니다. 따라서 클라이언트는 즉각적으로 에러를 수신하게 됩니다.
다시 말해, 클라이언트가 다운된 노드에 대해 SQL 구문을 실행한 경우, TCP/IP 타임아웃이 발생할
때까지 오랜 시간 대기하지 않고 클라이언트가 TCP 리셋 신호를 즉각적으로 수신하게 됩니다. SQL 구문을 실행한 경우에는 ORA-3113에러가
발생하며, tnsnames.ora에 정의된 다른 주소가 사용됩니다.
Transparent Application Failover(TAF)를 사용하는 경우에는 상황이 달라집니다. TAF가 성공적으로
설정된 경우에는 ORA-3113 에러를 완벽하게 방지할 수 있습니다! TAF에 대해서는 섹션
28 ("Transparent Application Failover - (TAF)")에서 상세하게 설명합니다.
VIP를 사용하지 않은 경우에는, 다운된 노드에 연결된 클라이언트는 10분의 TCP 타임아웃
기간이 완료된 후에야 에러를 확인하게 됩니다. 따라서 VIP를 이용하지 않고는 효과적인 HA 솔루션을 구현할 수 없습니다. (출처
- Metalink Note 220970.1).
RAC Node Name이 Loopback Address로 등록되지 않았음을
확인s
노드명 (linux1 또는linux2)이 /etc/hosts
파일에 루프백 주소로 포함되지 않았음을 확인합니다. 루프백 주소 엔트리에 아래와 같이 서버명이 등록되어 있는 경우:
127.0.0.1 linux1 localhost.localdomain localhost
아래와 같이 삭제되어야 합니다:
127.0.0.1 localhost.localdomain localhost
RAC node name이 루프백 주소에 포함된 경우, RAC 설치 과정에서 다음과 같은 에러가
발생하게 됩니다:
ORA-00603: ORACLE server session terminated by fatal error
또는
ORA-29702: error occurred in Cluster Group Service operation
네트워크 설정의 변경
Oracle 9.2.0.1 및 이후 버전의 경우, Linux의 IPC(inter-process
communication, Cache Fusion, Cluster Manager의 RAC 클러스터 인스턴스 간 버퍼 전송 등)에는
UDP가 디폴트 프로토콜로 사용됩니다.
오라클은 default/maximum send buffer size(SO_SNDBUF socket
option)와 default/maximum receive buffer size(SO_RCVBUF socket option)를
256KB로 설정할 것을 강력하게 권장하고 있습니다.
receive buffer는 TCP/UDP에서 수신된 데이터를 (애플리케이션이 read 작업을
수행하기 전까지) 임시로 저장하는데 사용됩니다. TCP/UDP 프로토콜은 receive buffer의 오버플로우를 방지하기 위해
버퍼 사이즈 윈도우를 초과하는 전송을 허용하지 않습니다. 따라서 receive buffer의 용량을 초과하는 데이터그램은 버려지게
됩니다.
default/maximum window size는 /proc 파일 시스템에서 변경 가능하며
리부팅하지 않고도 적용이 가능합니다:
# su - root
# sysctl -w net.core.rmem_default=262144
net.core.rmem_default = 262144
# sysctl -w net.core.wmem_default=262144
net.core.wmem_default = 262144
# sysctl -w net.core.rmem_max=262144
net.core.rmem_max = 262144
# sysctl -w net.core.wmem_max=262144
net.core.wmem_max = 262144
위는 온라인 상태에서 변경 내용을 적용한 예입니다. 영구적으로 변경사항을 적용하려면 모든 RAC
클러스터 노드의 /etc/sysctl.conf 파일에 다음 라인을 추가해야 합니다:
# Default setting in bytes of the socket receive buffer
net.core.rmem_default=262144
# Default setting in bytes of the socket send buffer
net.core.wmem_default=262144
# Maximum socket receive buffer size which may be set by using
# the SO_RCVBUF socket option
net.core.rmem_max=262144
# Maximum socket send buffer size which may be set by using
# the SO_SNDBUF socket option
net.core.wmem_max=262144
Telnet/FTP 서비스의 활성화
Linux는 Telnet/FTP 서비스를 지원하지만, 디폴트 설정에서는 이 서비스들이 비활성화되어
있습니다. 서비스를 활성화하려면 root 계정으로 서버에 로그인한 후 아래 명령을 실행합니다:
# chkconfig telnet on
# service xinetd reload
Reloading configuration: [ OK ]
Red Hat Enterprise Linux 3.0 이후 버전과 CentOS에서는 xinetd를
통한 FTP 서버(wu-ftpd)의 실행이 더 이상 지원되지 않습니다. 그 대신 /etc/init.d/vsftpd의 vsftp를
이용하여 다음과 같이 실행해야 합니다:
# /etc/init.d/vsftpd start
Starting vsftpd for vsftpd: [ OK ]
서버가 리부팅될 때마다 vsftpd 서비스가 실행되도록 하려면 아래와 같이
심볼릭 링크를 생성해야 합니다:
# ln -s /etc/init.d/vsftpd /etc/rc3.d/S56vsftpd
# ln -s /etc/init.d/vsftpd /etc/rc4.d/S56vsftpd
# ln -s /etc/init.d/vsftpd /etc/rc5.d/S56vsftpd
8. FireWire 모듈의 다운로드 및 설치
아래에 설명된 FireWire 모듈 설치 및 구성 작업을 클러스터의 모든
노드에 대해 수행하시기 바랍니다!
다음에는 IEEE1394 디바이스의 멀티로그인을 지원하는 FireWire 모듈을 다운로드하여 설치할
차례입니다.
본 가이드의 이전 버전에서는 새로운 Linux 커널(예: 오라클 제공 2.6.9-11.0.0.10.3.EL #1 Linux
커널)과 FireWire 모듈을 함께 다운로드하여 설치해야 했습니다. 2005년 11월부로, oss.oracle.com에서는
2.6.9-22.EL 및 2.6.9-22.0.1.EL Linux
커널을 위한 사전 컴파일된 FireWire 모듈을 제공하고 있습니다. 따라서 새로운 Linux 커널을 설치하는 작업은 더 이상
필요하지 않으며, 여기에서는 FireWire 모듈만을 설치하고 구성하면 됩니다!!
또 이전 버전의 가이드에서는 Linux 커널(소스 코드)의 패치 버전을 다운로드하고 컴파일하는
과정이 포함되어 있었습니다. 오라클의 Linux 프로젝트 개발 팀의 노력 덕분에, 이러한 작업은 더
이상 필요하지 않게 되었습니다. 이제 오라클은 FireWire 드라이브의 공유를 지원하는 사전 컴파일된 모듈을 제공하고 있습니다.
FireWire 모듈을 다운로드하고 설치하는 방법에 대한 설명은 본 섹션에 자세히 설명되어 있습니다. 이러한 작업에 대한 설명을
확인하기 전에, 잠시 시간을 내어 새로운 FireWire 커널 드라이버에 요구되는 변경사항을 알아보기로 합시다.
FireWire 드라이버는 Linux의 이전 버전에서도 지원되고 있었지만, 공유
스토리지를 지원하지 않는다는 문제가 있었습니다. 이 경우 운영체제는 FireWire 드라이버를 서버의 특정 드라이브에 독점적으로
할당하며, 따라서 RAC 구성에서는 사용할 수 없습니다. RAC 구성에서는 하나 이상의 노드가 공유 스토리지에 동시 접근할 수
있어야 합니다. 그러므로 (클러스터를 구성하는) 여러 대의 서버에 대해 동시 접근이 가능하도록 FireWire 드라이브를 설정해야
합니다. 이를 위해서는 소스 코드에서 서버의 식별자로 사용되는 비트 마스크(bit mask)를 제거해야 합니다. 이렇게 함으로써
모든 드라이브가 수정된 드라이버를 이용하여 동일 드라이브에 로그온하도록 할 수 있습니다.
이 문서에서는 CentOS 4.2 Enterprise Linux를 설치한 듀얼 노드 클러스터 구성을
예로 들어 설명합니다. Linux 커널 패치의 설치 작업이 두 노드에서 모두 수행되어야 함을 명심하시기 바랍니다. CentOS
4.2 Enterprise Linux는 기본적으로 커널 버전 2.6.9-22.EL #1을 포함하고 있습니다. 따라서 이 커널
버전에 맞는 FireWire 모듈을 “Oracle
Technet Supplied FireWire Modules” 페이지에서 다운로드해야 합니다:
아래 FireWire 모듈 중 하나를
다운로드합니다:
oracle-firewire-modules-2.6.9-22.EL-1286-1.i686.rpm
- (단일 프로세서 용)
또는
oracle-firewire-modules-2.6.9-22.ELsmp-1286-1.i686.rpm
- (멀티 프로세서 용)
FireWire 모듈을 root 권한으로 설치:
아래 명령 중 하나를 실행하여 FireWire 모듈 패키지를 설치합니다:
# rpm -ivh oracle-firewire-modules-2.6.9-22.EL-1286-1.i686.rpm - (단일 프로세서 용)
- OR -
# rpm -ivh oracle-firewire-modules-2.6.9-22.ELsmp-1286-1.i686.rpm - (멀티 프로세서 용)
모듈 옵션의 추가:
/etc/modprobe.conf파일에 아래 라인을 추가합니다:
options sbp2 exclusive_login=0
여러 대의 호스트가 FireWire 디스크에 동시 로그인 및 접근할 수 있게 하려면 Serial
Bus Protocol 모듈 (sbp2)의 sbp2 exclusive_login 매개변수를 0으로 설정하는 것이
필수입니다. 위에 설명된 작업을 두 번째 Linux 서버에서
실행:
첫 번째 Linux t서버에 FireWire 모듈을 설치하는 작업을 완료했다면, 두 번째 Linux
서버에서 같은 작업을 반복합니다.
FireWire 드라이브를 각 머신에 연결하고, 새로 설치된 FireWire
모듈을 통해 부팅 수행:
작업을 완료한 후 두 대의 Linux 서버를 셧다운 합니다:
===============================
# hostname
linux1
# init 0
===============================
# hostname
linux2
# init 0
===============================
두 서버를 셧다운 한 후, 서버를 FireWire 드라이브에 연결하고 FireWire
드라이브의 전원을 켭니다. 마지막으로, Linux 서버의 전원을 (한 번에 하나씩) 켜고 부팅 과정에서 “Probing for New
Hardware” 메시지가 나타나는지 확인합니다 .
ckarhe: RHEL 4 사용자의 경우 양쪽 노드에서
"Probing for New Hardware" 메시지와 함께 대화상자를 확인하게 될 것입니다. 이때 “Configure”
옵션을 선택하고 부팅 프로세스를 계속 진행하도록 합니다.
“Probing for New Hardware” 메시지와 함께 대화상자가 표시되지 않았따면, 아래 명령을 실행한 후 머신을
리부팅해야 합니다. 아래 명령을 스크립트로 실행하지 말고, 한 번에 하나씩 커맨드 라인에서 실행하시기 바랍니다:
# modprobe -r sbp2
# modprobe -r sd_mod
# modprobe -r ohci1394
# modprobe ohci1394
# modprobe sd_mod
# modprobe sbp2
# /usr/sbin/kudzu
# init 6
/usr/sbin/kudzu 명령을 실행하고 나면 새로운 드라이브를 “Configure”하라는 프롬프트가 뜨게 됩니다. 이 작업이
한 번에 성공하지 못하는 경우도 있었음을 참고하시기 바랍니다. 만일 성공하지 못했다면, 모든 장비를 끄고 다시 전원을 넣은 다음,
위의 modprobe작업을 다시 실행해야 합.
FireWire 스택의 로딩:
대부분의 경우, FireWire 스택이 자동으로 로드 되도록 /etc/rc.sysinit파일에
설정되어 있습니다. FireWire 스택의 로드 작업에 관련한 /etc/rc.sysinit파일의 명령이 다음과 같습니다:
# modprobe sbp2
# modprobe ohci1394
Red Hat의 구 버전에서는 이 커맨드를 직접 실행하거나 스타트업 파일에 수동으로 입력해
주어야만 했습니다. Red Hat Enterprise Linux 3 및 이후 버전에서는 이 명령이 /etc/rc.sysinit
파일에 기본 포함되며 부팅 시마다 자동으로 실행됩니다. SCSI
디바이스의 점검:
서버가 리부팅되면 커널이 새로운 FireWire 디스크를 SCSI 디바이스(/dev/sdXX)로
자동 인식합니다. 이 섹션에서는 FireWire 드라이브가 성공적으로 인식되고 공유되고 있는지 확인하기 위한 작업을 설명하고
있습니다.
필자는 위에 설명된 작업을 양쪽 노드에서 동시에 실행하였습니다. 아래 명령 및 결과 화면은
linux2 머신에서 확인된 것입니다. 다시 한 번 강조하거니와, 두 서버가 공유 드라이브에 동시에 로그인할 수 있게 하려면
아래 작업을 모든 노드에 실행해 주어야 합니다.
먼저 FireWire 어댑터가 올바르게 인식되고 있는지 확인하기 위한 명령이 아래와 같습니다:
# lspci
00:00.0 Host bridge: Intel Corporation 82845G/GL[Brookdale-G]/GE/PE DRAM Controller/Host-Hub Interface (rev 01)
00:02.0 VGA compatible controller: Intel Corporation 82845G/GL[Brookdale-G]/GE Chipset Integrated Graphics Device (rev 01)
00:1d.0 USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 01)
00:1d.1 USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 (rev 01)
00:1d.2 USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 01)
00:1d.7 USB Controller: Intel Corporation 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller (rev 01)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 81)
00:1f.0 ISA bridge: Intel Corporation 82801DB/DBL (ICH4/ICH4-L) LPC Interface Bridge (rev 01)
00:1f.1 IDE interface: Intel Corporation 82801DB (ICH4) IDE Controller (rev 01)
00:1f.3 SMBus: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller (rev 01)
00:1f.5 Multimedia audio controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller (rev 01)
01:04.0 Ethernet controller: Linksys NC100 Network Everywhere Fast Ethernet 10/100 (rev 11)
01:06.0 FireWire (IEEE 1394): Texas Instruments TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link)
01:09.0 Ethernet controller: Broadcom Corporation BCM4401 100Base-T (rev 01)
두 번째로 모듈이 정상적으로 로드되었는지 확인해 봅시다:
# lsmod |egrep "ohci1394|sbp2|ieee1394|sd_mod|scsi_mod"
sd_mod 17217 0
ohci1394 35784 0
sbp2 23948 0
scsi_mod 121293 2 sd_mod,sbp2
ieee1394 298228 2 ohci1394,sbp2
세 번째로, 디스크가 정상적으로 커널에 의해 인식되었는지 확인합니다l:
# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 01 Lun: 00
Vendor: Maxtor Model: OneTouch II Rev: 023g
Type: Direct-Access ANSI SCSI revision: 06
다음으로, FireWire 드라이브가 멀티 로그인을 정상적으로 지원하는지 확인합니다:
# dmesg | grep sbp2
sbp2: $Rev: 1265 $ Ben Collins <bcollins@debian.org>
ieee1394: sbp2: Maximum concurrent logins supported: 2
ieee1394: sbp2: Number of active logins: 1
ieee1394: sbp2: Logged into SBP-2 device
위의 실행 결과에서 FireWire 드라이브가 최대 3대 서버의 동시 로그인을 지원하고
있음을 확인할 수 있습니다. 드라이브가 RAC 클러스터에 구성된 전체 노드의 동시 로그인을 지원하는지 반드시 확인하시기 바랍니다.
또 클러스터의 각 노드에서fdisk -l 을 실행하여 디스크가
OS에 의해 정상적으로 인식되고 있는지 마지막으로 확인합니다. 디바이스에 파티션 테이블이 존재하지 않는다는 경고 메시지가 출력되겠지만,
아직 RAC 설정 작업을 수행하지 않은 상태이므로 무시해도 무방합니다.
# fdisk -l
Disk /dev/hda: 40.0 GB, 40000000000 bytes
255 heads, 63 sectors/track, 4863 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 4863 38957625 8e Linux LVM
Disk /dev/sda: 300.0 GB, 300090728448 bytes
255 heads, 63 sectors/track, 36483 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 36483 293049666 c W95 FAT32 (LBA)
SCSI 버스의 스캔 작업은 불필요:
이전 버전의 커널에서는 FireWire 드라이브를 인식하려면 rescan-scsi-bus.sh
스크립트의 실행이 필수적이었습니다. 이 스크립트는 아래 명령을 통해 각 노드를 위한 SCSI 엔트리를 생성하는 역할을 담당합니다:
echo "scsi add-single-device 0 0 0 0" > /proc/scsi/scsi
RHEL3와 RHEL4에서는 이러한 작업이 불필요하며 디스크는 자동으로 인식됩니다.
SCSI 디바이스 인식 과정의 문제 해결:
위에서 설명된 SCSI 디바이스 인식 과정에서 문제가 발생하는 경우, 아래 명령을 수행해 봅니다:
# modprobe -r sbp2
# modprobe -r sd_mod
# modprobe -r ohci1394
# modprobe ohci1394
# modprobe sd_mod
# modprobe sbp2
# /usr/sbin/kudzu
또 서버에 연결된 USB 디바이스를 제거해 볼 필요가 있습니다. USB 디바이스가 연결된
상태에서 시스템이 FireWire 드라이버를 정상적으로 인식하지 못할 수도 있습니다!
9. "oracle" 계정 및 디렉토리의
생성 (두 노드에서 동시 수행) 아래 설명된 작업을 클러스터의 모든 노드에서 실행하시기
바랍니다
이 문서에서 설명되는 구성에서는, Oracle Clusterware가 공유하는 모든 파일을 OCFS2에
저장합니다. OCFS2를 사용하는 경우 모든 클러스터 노드의 oracle UNIX 계정 및 dba UNIX 그룹은 동일한 UID/GID를
가져야 합니다. UID 또는 GID가 다른 경우 OCFS2 파일 시스템의 파일이 “unowned” 상태로 표시되거나 다른 사용자에
의해 소유된 것으로 표시될 수 있습니다. 이 문서에서는 oracle UID로 175를, dba GID로 115를 사용하는 것으로
합니다.
오라클 그룹 및 사용자의 생성
dba 그룹, oracle 계정 및 관련 디렉토리를 아래와 같이 생성합니다.
# mkdir -p /u01/app
# groupadd -g 115 dba
# useradd -u 175 -g 115 -d /u01/app/oracle -s /bin/bash -c "Oracle Software Owner" -p oracle oracle
# chown -R oracle:dba /u01
# passwd oracle
# su - oracle
참고: 각 RAC 노드에 Oracle 환경 변수를 설정할 때, 노드 별로 서로 다른 Oracle
SID를 할당해야 합니다. 이 문서에서 사용된 설정은 다음과 같습니다:
- linux1 : ORACLE_SID=orcl1
- linux2 : ORACLE_SID=orcl2
두 노드에서 "oracle" UNIX 사용자 계정을 생성한 뒤,.bash_profile
을 실행하여 환경 변수가 올바르게 설정되었는지 확인합니다:
....................................
# .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/10.2.0/db_1
export ORA_CRS_HOME=$ORACLE_BASE/product/crs
export ORACLE_PATH=$ORACLE_BASE/common/oracle/sql:.:$ORACLE_HOME/rdbms/admin
# Each RAC node must have a unique ORACLE_SID. (i.e. orcl1, orcl2,...)
export ORACLE_SID=orcl1
export PATH=.:${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
....................................
OCFS2
/ Clusterware를 위한 마운트 포인트 생성
이제 Oracle Clusterware 공유 파일이 저장되는 OCFS2 파일 시스템의 마운트
포인트(mount point)를 생성할 차례입니다. root 계정에서 아래와 같이 명령을 실행합니다:
$ su -
# mkdir -p /u02/oradata/orcl
# chown -R oracle:dba /u02
OUI를 위한 temp 공간 확인
참고: Oracle Universal Installer
(OUI)는 /tmp 디렉토리에 최대 400MB의 공간을 필요로 합니다.
/tmp의 여유 공간은 아래와 같이 확인할 수 있습니다:
# cat /proc/swaps
Filename Type Size Used Priority
/dev/mapper/VolGroup00-LogVol01 partition 2031608 0 -1
-OR-
# cat /proc/meminfo | grep SwapTotal
SwapTotal: 2031608 kB
/tmp에 충분한 여유 공간이 없다면, 다른 파일 시스템에 임시로 공간을 할당하고,
설치 과정에서 TEMP, TMPDIR 환경 변수의 설정을 변경하는 방법을 사용할 수도 있습니다.
그 방법이 아래와 같습니다:
# su -
# mkdir /<AnotherFilesystem>/tmp
# chown root.root /<AnotherFilesystem>/tmp
# chmod 1777 /<AnotherFilesystem>/tmp
# export TEMP=/<AnotherFilesystem>/tmp # used by Oracle
# export TMPDIR=/<AnotherFilesystem>/tmp # used by Linux programs
# like the linker "ld"
오라클 설치작업이 완료된 후에는, 아래와 같이 실행하여 임시 디렉토리를 제거할 수 있습니다:
# su -
# rmdir /<AnotherFilesystem>/tmp
# unset TEMP
# unset TMPDIR
10. 공유 FireWire 스토리지 디바이스에 파티션
생성하기
아래에 설명된 작업은 클러스터 노드 중 단 하나에서만
실행합니다!
다음으로 FireWire 드라이브에 파티션을 생성하는 방법을 설명합니다. 앞에서 설명한 것처럼, Oracle
Clusterware 소프트웨어를 위한 공유 파일의 저장에 OCFS2가 사용되며, 물리적 데이터베이스(데이터/인덱스 파일, 온라인
리두 로그 파일, 컨트롤 파일, SPFILE, 아카이브 리두 로그 파일 등)를 위해서는 ASM이 사용됩니다.
아래 표는 FireWire 드라이브에 생성되는 파티션과 각 파티션에 포함되는 파일을 요약하고
있습니다.
| Oracle 공유 드라이브 구성 |
| File System Type |
Partition |
Size |
Mount Point |
ASM Diskgroup Name |
File Types |
| OCFS2 |
/dev/sda1 |
1GB |
/u02/oradata/orcl |
|
Oracle Cluster Registry File - (~100MB)
CRS Voting Disk - (~20MB) |
| ASM |
/dev/sda2 |
50GB |
ORCL:VOL1 |
+ORCL_DATA1 |
Oracle Database Files |
| ASM |
/dev/sda3 |
50GB |
ORCL:VOL2 |
+ORCL_DATA1 |
Oracle Database Files |
| ASM |
/dev/sda4 |
100GB |
ORCL:VOL3 |
+FLASH_RECOVERY_AREA |
Oracle Flash Recovery Area |
| Total |
|
201GB |
|
|
|
FireWire 공유 스토리지에 파티션 생성하기
A위 표에서 확인할 수 있듯, FireWire 드라이브는 SCSI 디바이스(/dev/sda)로
인식됩니다. 파티션의 생성(또는 제거)을 위해서는 fdisk 명령이 사용됩니다. 여기에서는 4 개의 파티션(Oracle Clusterware
공유 파일를 위해 1개, ASM을 위해 3 개)을 생성합니다. 새로운 파티션을 생성하기 전에, FireWire의 기존 파티션을
삭제하는 작업을 먼저 수행해야 함을 잊지 마시기 바랍니다:
# fdisk /dev/sda
Command (m for help): p
Disk /dev/sda: 300.0 GB, 300090728448 bytes
255 heads, 63 sectors/track, 36483 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 36483 293049666 c W95 FAT32 (LBA)
Command (m for help): d
Selected partition 1
Command (m for help): p
Disk /dev/sda: 300.0 GB, 300090728448 bytes
255 heads, 63 sectors/track, 36483 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-36483, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-36483, default 36483): +1G
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (124-36483, default 124): 124
Last cylinder or +size or +sizeM or +sizeK (124-36483, default 36483): +50G
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (6204-36483, default 6204): 6204
Last cylinder or +size or +sizeM or +sizeK (6204-36483, default 36483): +50G
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Selected partition 4
First cylinder (12284-36483, default 12284): 12284
Last cylinder or +size or +sizeM or +sizeK (12284-36483, default 36483): +100G
Command (m for help): p
Disk /dev/sda: 300.0 GB, 300090728448 bytes
255 heads, 63 sectors/track, 36483 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 123 987966 83 Linux
/dev/sda2 124 6203 48837600 83 Linux
/dev/sda3 6204 12283 48837600 83 Linux
/dev/sda4 12284 24442 97667167+ 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
파티션 생성을 완료했다면, root 계정으로 아래 명령을 수행하여 커널에 파티션 변경 내역을
통보합니다:
# partprobe
# fdisk -l /dev/sda
Disk /dev/sda: 300.0 GB, 300090728448 bytes
255 heads, 63 sectors/track, 36483 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 123 987966 83 Linux
/dev/sda2 124 6203 48837600 83 Linux
/dev/sda3 6204 12283 48837600 83 Linux
/dev/sda4 12284 24442 97667167+ 83 Linux
(참고: FireWire 드라이브/파티션은 SCSI 디바이스로 인식됩니다.)
Page 1 Page 2 Page 3
|