[RAC-1] RHEL4 + oracle 10g + Raw Device


 Clustering 환경 구성
[RAC-1]  

연계 포스팅

 RAC 환경을 구성하기 위해서는 VMware 에서 Clustering을 지원해야 하지만 공식적으로 지원하지 않기 때문에 몇가지 설정이 필요하다.


구성도




과정

 반드시 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@rac1 


authorized_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 



문서 작성 : 타울