연계 포스팅
[RAC-1] Clustering 환경 구성
[RAC-2] Clusterware 설치 및 패치
[RAC-3] Oracle 엔진 설치 및 패치 & 리스너구성
[RAC-4] Database 생성
RAC 환경을 구성하기 위해서는 VMware 에서 Clustering을 지원해야 하지만 공식적으로 지원하지 않기 때문에 몇가지 설정이 필요하다.
구성도
과정
1. Red Hat Enterprise Linux 4 으로 생성한다.
2. Storage 폴더에 DISK 3개 추가.
3. network card 를 추가.
4. vmx 파일 수정
5. RHEL4 설치.
6. dba 그룹과 oracle 사용자 생성
7. RAC 1 네트워크를 설정.
8. hosts 파일 수정.
9. sysctl.conf 수정
10. /etc/security/limits.conf 수정
11. /etc/pam.d/login 수정
12. /etc/modprobe.conf 수정
13. modprobe 실행
14. /etc/rc.local 수정
15. 필수 RPM 설치
16. root .bash_profile 수정
17. oracle .bash_profile 수정
19. 3개 디스크 파티션
20. LVM 작업
21. rawdevices 작업
22. OS 종료후 rac2 폴더를 생성하고 rac1.vmdk를 복사
23. rac2 (node2) 시작
ORACLE_SID 변경
24. rac2 (node2) 네트워크 설정
Equivalence 설정
반드시 4번을 먼저하고 5번을 진행해야 한다.
과정 상세
DISK 추가
Add.. > Hard Disk 선택 > Next
새로운 Disk 생성 선택 > Next
SCSI 선택 > Independent 선택 > Next
10GB 입력 > Allocate All Disk space now 선택 > Next
경로를 storage 에 생성
DISK1 선택 > Advanced... 클릭
SCSI 1:0 선택 > Ok
나머지 Disk 2, Disk 3 동일한 과정 수행
작업 결과
disk1 SCSI 1:0
disk2 SCSI 1:1
disk3 SCSI 1:2
네트워크 카드 추가
private 으로 사용할 하드웨어를 추가하는 과정이다.
ADD > Network Adapter 선택 > Next
Host-only 선택 > Finish
vmx 파일 수정
이 과정을 통해 VMware에서 Clustering 이 가능해진다.
vmware/rac1/rac1.vmx 파일 선택 > Text editor 로 Open > 파일수정
생략...
virtualHW.productCompatibility = "hosted"
printers.enabled = "FALSE"
extendedConfigFile = "rac1.vmxf"
disk.locking = "FALSE"
diskLib.dataCacheMaxSize = "0"
scsi1.sharedBus = "virtual"
ethernet1.present = "TRUE"
생략...
tools.remindInstall = "TRUE"
scsi1.present = "TRUE"
scsi1.virtualDev = "lsilogic"
scsi1:0.present = "TRUE"
scsi1:0.fileName = "G:\vmware\storage\disk1.vmdk"
scsi1:0.mode = "independent-persistent"
scsi1:0.deviceType = "disk"
scsi1:1.present = "TRUE"
scsi1:1.fileName = "G:\vmware\storage\disk2.vmdk"
scsi1:1.mode = "independent-persistent"
scsi1:1.deviceType = "disk"
scsi1:2.present = "TRUE"
scsi1:2.fileName = "G:\vmware\storage\disk3.vmdk"
scsi1:2.mode = "independent-persistent"
scsi1:2.deviceType = "disk"생략..
Linux 설치
Linux 설치는 다른 포스팅에 설명이 잘 되어 있으므로 자세한 이미지는 생략하고 간단히 설명하도록 한다.
설치 진행 언어(이미지 생략)
한글 또는 영어 선택 > 다음
시스템 기본언어 (이미지 생략)
영어 선택 > 다음
파티션 설정
수동 파티션 설정 선택 > 다음
/ 5000
/boot 100
/var 1000
swap 2000
/home 나머지
다음
새로 생성을 누르면 추가된 디스크가 모두 표시되는데 체크 해제 하지 않아도 알아서 /dev/sda 에 파티션 설정이 되므로 신경쓰지 말자.
부트로더 설정 (이미지 생략)
다음
네트워크 설정
네트워크 장치 모두 체크 > 호스트명 "rac1" 수정 > 다음
방화벽 설정
방화벽 사용하지 않음 체크 > SELinux 사용하지 않음 선택 > 다음 > 계속 진행
추가 언어 설정
English 선택 > 영어 선택 > 다음
한글로 해도 관계없지만 Putty 등으로 붙을때 문자가 깨지면 골치아프다. 한글로 변경 가능하므로 일단 영어로 선택
시간대 설정(이미지 생략)
다음
루트 암호 설정
암호 설정 > 다음
패키지 그룹 선택
사용자 설정 선택 > 다음
응용프로그램
- 모두 체크 해제
서버
- 서버 설정 도구 체크 나머지 모두 체크 해제
개발용 도구
- 모두 설정
시스템
- 관리도구, 시스템 도구 체크
- Detail 클릭하여 sysstat 체크
다음
시스템 도구의 sysstat 만 설명하도록 한다.
RAC1 네트워크 설정(RAC1 & root & window)
# ifconfig
명령어를 치면 각 장치의 아이피가 표시된다.
eth0은 public 이고 eth1은 private 용으로 사용된다.
아이피를 잘 기억하도록 한다.
# netstat -nr
Gateway 주소를 출력한다. 잘 기억하자.
# neat
장치의 아이피를 위에 나온대로 설정한다. 꼭 똑같이 할 필요는 없다.
아래의 장치 명을 잘 보자 eth1이 첫번째로 표시되므로 주의하도록 한다.
eth0 장치 선택 > 더블클릭
Address 입력 > Subnet mask 입력 > Default Gatway Address 입력 > 창 닫기
eth1 선택 > Address 입력 > Subnet mask 입력 > 창 닫기
설정 적용
# /etc/init.d/network restart
Shutting down interface eth0: [ OK ]
Shutting down interface eth1: [ OK ]
Shutting down loopback interface: [ OK ]
Setting network parameters: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: [ OK ]
Bringing up interface eth1: [ OK ]
dba 그룹과 oracle 사용자 생성 (root & RAC1)
# groupadd -g 5000 dba
# useradd -g dba oracle
# passwd oracle
hosts 파일 수정 (root & RAC1)
# vi /etc/hosts
# public
192.168.159.135 rac1
192.168.159.136 rac2
# private
192.168.112.128 rac1-priv
192.168.112.129 rac2-priv
# vip
192.168.159.35 rac1-vip
192.168.159.36 rac2-vip
putty 로 붙어서 수정하는것이 편하다.
rac2 node 의 네트워크 환경까지 모두 설정을 해버리고 저장한다.(메모해 놓는다.) rac2 node 네트워크 설정시에 위의 설정대로 맞춰주면 된다. 위의 아이피 값은 OS에서 할당받으므로 어지간해서는 문제가 발생하지 않는다.
/etc/sysctl.conf 수정 (root)
# vi /etc/sysctl.conf
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144/etc/security/limits.conf 수정 (root)
# vi /etc/security/limits.conf
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
/etc/pam.d/login 수정 (root)
# vi /etc/pam.d/login
Session required pam_limits.so
/etc/modprobe.conf 수정 (root)
# vi /etc/modprobe.conf
options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
modprobe 실행 (root)
# modprobe -v hangcheck-timer
/etc/rc.local 수정 (root)
/sbin/modprobe hangcheck-timer
rdate -s 203.248.240.140
필수 RPM 설치(root)
검사 목록
binutils-2.15.92.0.2-21
compat-db-4.1.25-9
compat-gcc-32-3.2.3-47.3
compat-gcc-32-c++-3.2.3-47.3
compat-libstdc++-33-3.2.3-47.3
compat-libgcc-296-2.96-132.7.2
control-center-2.8.0-12.rhel4.5
cpp-3.4.6-3
gcc-3.4.6-3
gcc-c++-3.4.6-3
glibc-2.3.4-2.25
glibc-common-2.3.4-2.25
glibc-devel-2.3.4-2.25
glibc-headers-2.3.4-2.25
glibc-kernheaders-2.4-9.1.98.EL
gnome-libs-1.4.1.2.90-44.1
libaio-0.3.105-2
libstdc++-3.4.6-3
libstdc++-devel-3.4.6-3
make-3.80-6.EL4
openmotif-2.2.3-10.RHEL4.5
openmotif21-2.1.30-11.RHEL4.6
pdksh-5.2.14-30.3
setarch-1.6-1
sysstat-5.0.5-11.rhel4
xscreensaver-4.18-5.rhel4.11
검사 문장
# rpm -qa binutils compat-db compat-gcc compat-gcc-32-c++ compat-libstdc++ compat-libgcc control-center cpp gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers glibc-kernheaders gnome-libs libaio libstdc++ libstdc++-devel make openmotif openmotif21 pdksh setarch sysstat xscreensaver
glibc-headers-2.3.4-2.19
compat-gcc-32-c++-3.2.3-47.3
glibc-common-2.3.4-2.19
make-3.80-5
gnome-libs-1.4.1.2.90-44.1
control-center-2.8.0-12.rhel4.2
gcc-c++-3.4.5-2
libstdc++-3.4.5-2
binutils-2.15.92.0.2-18
pdksh-5.2.14-30.3
cpp-3.4.5-2
compat-db-4.1.25-9
libstdc++-devel-3.4.5-2
gcc-3.4.5-2
setarch-1.6-1
openmotif-2.2.3-9.RHEL4.1
glibc-devel-2.3.4-2.19
openmotif21-2.1.30-11.RHEL4.4
sysstat-5.0.5-7.rhel4
glibc-2.3.4-2.19
xscreensaver-4.18-5.rhel4.10
glibc-kernheaders-2.4-9.1.98.EL
libaio-0.3.105-2
root .bash_profile 수정 (root)
# vi .bash_profile
PATH=$PATH:$HOME/bin:/home/oracle/product/10g/crs/bin
oracle .bash_profile 수정 (root | oracle)
# vi /home/oracle/.bash_profile
export EDITOR=vi
export LD_ASSUME_KERNEL=2.4.19
export ORACLE_BASE=/home/oracle
export ORA_CRS_HOME=$ORACLE_BASE/product/10g/crs
export ORACLE_HOME=$ORACLE_BASE/product/10g/db
export ORACLE_SID=rac1
export LANG=ko_KR.eucKR
export ORACLE_TERM=xterm
export NLS_LANG=AMERICAN_AMERICA.KO16KSC5601
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib
export PATH=$PATH:$ORACLE_HOME/bin:$ORA_CRS_HOME/bin
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
디스크 파티션(root)
새로 추가한 디스크를 Linux LVM 으로 파티션을 만든다.
/dev/sdb, /dev/sdc, /dev/sdd 모두 아래와 같은 방법으로 파티션을 생성한다.
# fdisk /dev/sdb
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-391, default 1):엔터
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-391, default 391): 엔터
Using default value 391
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
LVM 작업
Physical Volumn 생성
# pvcreate /dev/sdb /dev/sdc /dev/sdd
Physical volume "/dev/sdb" successfully created
Physical volume "/dev/sdc" successfully created
Physical volume "/dev/sdd" successfully created
Volume Group 생성
# vgcreate rac /dev/sdb /dev/sdc /dev/sdd
Volume group "rac" successfully created
Logical Volume 생성
-L은 Logical Volumne Size 의 앞글자로 사이즈를 말한다.
# lvcreate -n ocr -L 200 rac
lvcreate -n vote -L 50 rac
lvcreate -n system -L 600 rac
lvcreate -n sysaux -L 1200 rac
lvcreate -n spfile -L 50 rac
lvcreate -n passwd -L 50 rac
lvcreate -n control1 -L 200 rac
lvcreate -n control2 -L 200 rac
lvcreate -n control3 -L 200 rac
lvcreate -n redo1_1 -L 200 rac
lvcreate -n redo1_2 -L 200 rac
lvcreate -n redo2_1 -L 200 rac
lvcreate -n redo2_2 -L 200 rac
lvcreate -n data -L 1000 rac
lvcreate -n users -L 250 rac
lvcreate -n example -L 200 rac
lvcreate -n undo1 -L 600 rac
lvcreate -n undo2 -L 600 rac
lvcreate -n temp -L 600 rac
rawdevices 작업
/etc/sysconfig/rawdevices 수정
# vi /etc/sysconfig/rawdevices
/dev/raw/raw1 /dev/rac/ocr
/dev/raw/raw2 /dev/rac/vote
/dev/raw/raw3 /dev/rac/system
/dev/raw/raw4 /dev/rac/sysaux
/dev/raw/raw5 /dev/rac/spfile
/dev/raw/raw6 /dev/rac/passwd
/dev/raw/raw7 /dev/rac/control1
/dev/raw/raw8 /dev/rac/control2
/dev/raw/raw9 /dev/rac/control3
/dev/raw/raw10 /dev/rac/redo1_1
/dev/raw/raw11 /dev/rac/redo1_2
/dev/raw/raw12 /dev/rac/redo2_1
/dev/raw/raw13 /dev/rac/redo2_2
/dev/raw/raw14 /dev/rac/data
/dev/raw/raw15 /dev/rac/users
/dev/raw/raw16 /dev/rac/example
/dev/raw/raw17 /dev/rac/undo1
/dev/raw/raw18 /dev/rac/undo2
/dev/raw/raw19 /dev/rac/temp
rawdevices 퍼미션 설정
113 Line 수정한다.
# vi /etc/udev/permissions.d/50-udev.permissions
생략
usb/dc2xx*:root:root:0600
usb/mdc800*:root:root:0600
# raw devices
ram*:root:disk:0660
# raw/*:root:disk:0660
raw/*:oracle:dba:0660
# disk devices
hd*:root:disk:0660
sd*:root:disk:0660
rawdevices 재시작
# /etc/init.d/rawdevices restart
Assigning devices:
/dev/raw/raw1 --> /dev/rac/ocr
/dev/raw/raw1: bound to major 253, minor 0
/dev/raw/raw2 --> /dev/rac/vote
/dev/raw/raw2: bound to major 253, minor 1
/dev/raw/raw3 --> /dev/rac/system
/dev/raw/raw3: bound to major 253, minor 2
/dev/raw/raw4 --> /dev/rac/sysaux
/dev/raw/raw4: bound to major 253, minor 3
/dev/raw/raw5 --> /dev/rac/spfile
/dev/raw/raw5: bound to major 253, minor 4
/dev/raw/raw6 --> /dev/rac/passwd
/dev/raw/raw6: bound to major 253, minor 5
/dev/raw/raw7 --> /dev/rac/control1
/dev/raw/raw7: bound to major 253, minor 6
/dev/raw/raw8 --> /dev/rac/control2
/dev/raw/raw8: bound to major 253, minor 7
/dev/raw/raw9 --> /dev/rac/control3
/dev/raw/raw9: bound to major 253, minor 8
/dev/raw/raw10 --> /dev/rac/redo1_1
/dev/raw/raw10: bound to major 253, minor 9
/dev/raw/raw11 --> /dev/rac/redo1_2
/dev/raw/raw11: bound to major 253, minor 10
/dev/raw/raw12 --> /dev/rac/redo2_1
/dev/raw/raw12: bound to major 253, minor 11
/dev/raw/raw13 --> /dev/rac/redo2_2
/dev/raw/raw13: bound to major 253, minor 12
/dev/raw/raw14 --> /dev/rac/data
/dev/raw/raw14: bound to major 253, minor 13
/dev/raw/raw15 --> /dev/rac/users
/dev/raw/raw15: bound to major 253, minor 14
/dev/raw/raw16 --> /dev/rac/example
/dev/raw/raw16: bound to major 253, minor 15
/dev/raw/raw17 --> /dev/rac/undo1
/dev/raw/raw17: bound to major 253, minor 16
/dev/raw/raw18 --> /dev/rac/undo2
/dev/raw/raw18: bound to major 253, minor 17
/dev/raw/raw19 --> /dev/rac/temp
/dev/raw/raw19: bound to major 253, minor 18
제대로 권한이 설정 되었는지 검사한다.
# ls -l /dev/raw
Node2 생성
파일 복사
rac1 전원을 내린다 .> rac1 폴더아래에 rac1.vmdk, rac1.vmx 파일을 rac2 폴더로 복사한다.
rac2 Virtual Machine 추가
File > Open > rac2 디렉토리의 rac1.vmdk 선택 > 확인
이름 변경
rac2 선택 > 설정창 오픈 > Options 탭 > rac2 입력 > 확인
하드 디스크 제거 후 추가
추가한 3개의 디스크 삭제 > Add 버튼 클릭 > 하드 디스크 추가 >
기존의 디스크를 찾아서 확인
Advanced. 버튼 클릭 > 0:1 으로 수정 > 확인
다른 디스크도 아래와 같이 한다.
disk1 SCSI 1:0
disk2 SCSI 1:1
disk3 SCSI 1:2
rac2 (node2) 시작
rac2 선택 > power on > I copied it 클릭
기존의 Network 장비의 설정을 지우고 다시 생성하는 과정이다.
두개가 있으므로 아래와 같은 화면을 한번더 볼 것이다.
configure 선택 > 스페이스바 > Remove configuration > 스페이스바 > DHCP 스페이스바 > OK
ORACLE_SID 변경 (oracle)
# vi .bash_profile
export ORACLE_SID = rac1 rac2
rac2 (node2) 네트워크 설정(root & window)
/etc/hosts 파일에서 입력했던 rac2의 설정값들을 입력한다.
eth0이 public 이고 eth1이 private 이다
터미널 Open > neat > eth0번 선택 > public rac1 의 IP 입력 > 확인
eth1 선택 > private 의 rac2-priv IP 입력 > 확인
DNS 탭 선택 > rac2 로 Hostname 변경 > Primary DNS 입력 > 닫기
Reboot 하고 rac1(Node1) 도 같이 Power On 한다.
Equivalence 설정 (oracle )
두개의 Node가 서로의 인증키를 보관하여 인증시 암호를 묻지 않도록 하는 과정이다. RAC 환경을 구성할 때 필수적이다. 이 과정은 oracle 계정으로 node1, 2 모두에서 실행한다.
암호 키 생성( node1 & node2)
$ mkdir .ssh
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_rsa):엔터
/home/oracle/.ssh/id_rsa already exists.
Enter passphrase (empty for no passphrase):엔터
Enter same passphrase again:엔터
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:
b8:13:c1:b1:21:89:0f:4d:76:45:0a:75:23:6d:8e:e6 oracle@rac2
$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_dsa): 엔터
Enter passphrase (empty for no passphrase): 엔터
Enter same passphrase again: 엔터
Your identification has been saved in /home/oracle/.ssh/id_dsa.
Your public key has been saved in /home/oracle/.ssh/id_dsa.pub.
The key fingerprint is:
7e:ac:b9:5a:97:51:a0:a2:91:ff:f6:94:8d:99:f6:8e oracle@rac1authorized_keys 교환( node1 )
node1과 node2가 서로의 인증키를 교환하는 작업이다.
node1과 node2에서 RSA 암호와 DSA 암호를 생성하여 node1의 authorized_keys 파일로 출력(합침)하여 두개의 노드가 같은 authorized_keys 공유하여 인증시 사용한다.
이 작업은 node 1에서만 하면된다.
// node1의 rsa 암호를 authorized_keys 파일로 출력
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
// node1의 dsa 암호를 authorized_keys 파일로 출력
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
// node2의 rsa 암호를 node1의 authorized_keys 파일로 출력
$ ssh rac2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
The authenticity of host 'rac2 (192.168.159.136)' can't be established.
RSA key fingerprint is 4e:d2:95:9d:a3:19:08:e0:c7:60:f3:b2:05:f6:c9:19.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'rac2,192.168.159.136' (RSA) to the list of known hosts.
oracle@rac2's password: 암호입력
// node2의 dsa 암호를 node1의 authorized_keys 파일로 출력
$ ssh rac2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
oracle@rac2's password: 암호입력
// node1의 authorized_keys 파일을 node2로 전송한다.
$ scp ~/.ssh/authorized_keys rac2:~/.ssh/authorized_keys
oracle@rac2's password: 암호입력
authorized_keys 100% 1644 1.6KB/s 00:00
테스트(node1 & node2)
node1과 node2에서 모두 실행한다. 아래의 과정중에 암호를 물어보는지 여부를 테스트를 하는 과정이다. 아래의 과정을 수행하는데 암호를 물어본다면 한번 더 실행해보고 또 물어본다면 이 과정을 처음부터 다시 한다.
$ ssh rac1 date
Tue Mar 6 12:55:39 KST 2012
$ ssh rac1-priv date
Tue Mar 6 12:55:39 KST 2012
$ ssh rac2 date
Tue Mar 6 12:55:39 KST 2012
$ ssh rac2-priv date
Tue Mar 6 12:55:39 KST 2012
다시 시도(node1 & node2)
생성된 키를 삭제하고 다시 처음으로 돌아간다.
$ rm -fr .ssh/authorized_keys
문서 작성 : 타울
'Oracle > [설치] 10g' 카테고리의 다른 글
[RAC-3] RHEL4 + oracle 10g + Raw Device (0) | 2012.03.09 |
---|---|
[RAC-2] RHEL4 + oracle 10g + Raw Device (0) | 2012.03.06 |
RHEL4 + ORACLE10g + ASM + DBCA (0) | 2012.02.28 |
(Silent 패치) Oracle10g Patchset 10.2.0.5.0 (0) | 2011.12.29 |
( Silent ) RHEL4 + Oracle10g + patchset 10.2.0.5.0 + dbca (0) | 2011.12.26 |