Linux 5.11 64bit Oracle 10gR2 RAC 설치

업체들이 리눅스를 많이 사용하게 되면서 문제가 발생하고 있는데, 그중에 가장 큰 문제는 호환성이다.

서버 이전이나, 서버 업그레이드를 진행하면서 OS 버전을 올리는 업체가 많은데...

리눅스는 지원 버전을 많이 가린다.


OS는 업그레이드를 하는데, 오라클은 라이센스 구매라던가 개발툴, 혹은 연동 어플리케이션의 문제로,

기존 버전을 사용하고 싶어하는 업체가 많은데...

그런 업체 관계자분들한테 해주고 싶은 말은... 버전업 하고 개발 다시 하세요. 라고 해주고 싶다.

돈 좀 쓰라고...


오라클도 10g 지원 끊긴지가 언젠데... 9i 설치해달라고 하는 업체도 많고..

현실이 어려운건 알지만...

기업 상층부에서 얼마나 전산 분야에 투자를 안하는지도 알고 있지만... 이런 현실은 정말 노답...



작업 환경


CentOS 5.11 64bit (RHEL 대용)

Oracle 10gR2 64bit (10.2.0.1 -> 10.2.0.5 패치)


Oracle 10gR2는 Linux ES6 버전에서 공식적으로 지원되지 않는다. 문제 생겨도 오라클 측에서 전혀 지원해주지 않는다.

게다가 Oracle 10gR2는 64bit임에도, 32bit 라이브러리를 가져다 쓰는데, Linux 6버전 부터는 32bit 라이브러리를 수동으로 설치해야만 한다.

5.x 버전대 까지는 Yum으로 업데이트 할 경우 자동으로 32bit 패키지를 자동으로 설치해주는데, 6버전에서는 32bit는 지원하지 않는다.


리눅스 설치


GUI 설치


설치시 커스텀 패키지 옵션

개발              - 개발용 도구
                    - 개발용 라이브러리
기반시스템     - Java
                    - X윈도우 시스템
                    - 관리도구
                    - 기본
                    - 레거시 소프트웨어지원
                    - 시스템 도구  <- 옵션안에 sysstat 설치
데스크톱 환경 - GNOME
응용 프로그램 - 텍스트-기반인터넷
                    - 편집기


selinux 해제

ntpd 사용 체크 (인터넷에 연결이 안된 서버라면 체크 해줄 필요는 없지만, 두 노드간에 시간 동기화는 꼭 해주자)


그리고 재부팅 할때 오래 걸리니까 안쓰는 데몬들은 꺼버리자.


# chkconfig --level 123456 xinetd off
# chkconfig --level 123456 sendmail off
# chkconfig --level 123456 cups off
# chkconfig --level 123456 cups-config-daemon off
# chkconfig --level 123456 smartd off
# chkconfig --level 123456 iptables off

# chkconfig --level 123456 bluetooth off


설치해야하는 RPM 패키지 (64bit)


binutils
compat-libstdc++-33
elfutils-libelf
elfutils-libelf-devel
elfutils-libelf-devel-static
gcc
gcc-c++
glibc (32bit 추가설치 필수)
glibc-common
glibc-devel (32bit 추가설치 필수)
ksh
libaio (32bit 추가설치 필수)
libaio-devel
libgcc
libgomp
libstdc++
libstdc++-devel
libXp
libXp-devel
libXau
libxcb
libX11
libXext
libICE
libuuid
libSM
libXt
libXi
libXtst
make
sysstat
glibc-headers
unixODBC
unixODBC-devel


yum 되는 환경이라면 그냥 yum로 설치하면 되고, 안된다면 rpm 명령을 통해 수동으로 설치 해준다.

RPM으로 수동 설치 할 경우... 위 리스트에 없는 의존성이 걸리는 패키지는 반드시 찾아 설치 해준다.


ASM을 사용 할 경우 관련 패키지들을 설치해주고, (oracleasm, asmlib 등)

OCFS를 사용 할 경우 ocfs2 관련 패키지를 추가해준다.


라이브러리 링크 생성


ln -s /usr/lib/libgdbm.so.2.0.0 /usr/lib/libdb.so.2


Hosts 파일 설정


# vi /etc/hosts


#Public
192.168.118.128 rac1
192.168.118.129 rac2

192.168.118.130 rac3

#VIP
192.168.118.131 rac1-vip
192.168.118.132 rac2-vip

192.168.118.133 rac3-vip
#Priv
192.168.184.128 rac1-priv
192.168.184.129 rac2-priv

192.168.184.130 rac3-priv


커널 파라미터 설정


# vi /etc/sysctl.conf


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

(최근 서버들이 하드웨어 사양이 좋아졌기 때문에 kernel.shmall, kernel.shmmax 는 오라클 권장값을 사용하지않고 OS기본값을 사용)


# vi /etc/security/limits.conf

oracle soft nproc 16384
oracle hard nproc 16384
oracle soft nofile 65536
oracle hard nofile 65536


# vi /etc/pam.d/login

session    required     pam_limits.so


Root 계정에서 CRS의 패스 잡아주기


# vi ~/.bash_profile

PATH=$PATH:$HOME/bin:/oracle/base/product/10.2.0/crs/bin


계정 추가


# groupadd dba

# useradd -g dba oracle

# passwd oracle

 (패스워드 입력)


# su - oracle

$ vi .bash_profile


export ORACLE_BASE=/oracle/base
export ORA_CRS_HOME=$ORACLE_BASE/product/10.2.0/crs
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db
export ORACLE_SID=rac1
export LANG=C
export ORACLE_TERM=xterm
export NLS_LANG=AMERICAN_AMERICA.KO16MSWIN949
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/lib64:/usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64
export PATH=$PATH:$ORACLE_HOME/bin:/$ORA_CRS_HOME/bin:.:$ORACLE_HOME/OPatch:/sbin
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib


노드간 ssh 암호 동기화 설정


node1, 2,3 에서 모두 실행


oracle 계정에서 작업


$ mkdir .ssh
$ ssh-keygen -t rsa
  입력값 없이 엔터 -> 엔터 -> 엔터
$ ssh-keygen -t dsa
  입력값 없이 엔터 -> 엔터 -> 엔터


node1 에서만 실행

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ ssh rac2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

$ ssh rac3 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ ssh rac2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

$ ssh rac3 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ scp ~/.ssh/authorized_keys rac2:~/.ssh/authorized_keys

$ scp ~/.ssh/authorized_keys rac3:~/.ssh/authorized_keys


# vi /etc/redhat-release

Red Hat Enterprise Linux ES release 4 (Nahant)


설정하고 나서 rac를 설치한다.


물론 오라클 10g는 RAC 설치시 rawdevice를 사용하는데, 기타 OS의 클러스터링을 사용한다면 파일시스템으로 만들수 있다.

참고로 해당 작업은 raw로 진행했다.


crs를 먼저 설치한다.


./runInstaller


중간에 prof 에러 화면 그냥 yes 누르고 지나가자.


root.sh 를 실행하기 전에 각각의 노드에서 LD_ASSUME_KERNEL 관련 부분을 주석 처리해주고 srvctl쪽은 unset 을 추가 해준다.


# vi $ORA_CRS_HOME/bin/vipca


#       if [ "$arch" = "i686" -o "$arch" = "ia64" -o "$arch" = "x86_64" ]
#       then
#            LD_ASSUME_KERNEL=2.4.19
#            export LD_ASSUME_KERNEL
#       fi


# vi $ORA_CRS_HOME/bin/srvctl

#LD_ASSUME_KERNEL=2.4.19
#export LD_ASSUME_KERNEL
unset LD_ASSUME_KERNEL

변경을 해주고 root.sh 각각의 노드에서 실행 시켜 준다.


그러면 마지막 노드의 root.sh에서 아래와 같이 에러가 떨어진다.


WARNING: directory '/oracle/base/product/10.2.0' is not owned by root
WARNING: directory '/oracle/base/product' is not owned by root
WARNING: directory '/oracle/base' is not owned by root
WARNING: directory '/oracle' is not owned by root
Checking to see if Oracle CRS stack is already configured
/etc/oracle does not exist. Creating it now.

Setting the permissions on OCR backup directory
Setting up NS directories
Oracle Cluster Registry configuration upgraded successfully
WARNING: directory '/oracle/base/product/10.2.0' is not owned by root
WARNING: directory '/oracle/base/product' is not owned by root
WARNING: directory '/oracle/base' is not owned by root
WARNING: directory '/oracle' is not owned by root
clscfg: EXISTING configuration version 3 detected.
clscfg: version 3 is 10G Release 2.
Successfully accumulated necessary OCR keys.
Using ports: CSS=49895 CRS=49896 EVMC=49898 and EVMR=49897.
node <nodenumber>: <nodename> <private interconnect name> <hostname>
node 1: rac1 rac1-priv rac1
node 2: rac2 rac2-priv rac2
node 3: rac3 rac3-priv rac3
clscfg: Arguments check out successfully.

NO KEYS WERE WRITTEN. Supply -force parameter to override.
-force is destructive and will destroy any previous cluster
configuration.
Oracle Cluster Registry for cluster has already been initialized
Startup will be queued to init within 90 seconds.
Adding daemons to inittab
Expecting the CRS daemons to be up within 600 seconds.
CSS is active on these nodes.
        rac1
        rac2
        rac3
CSS is active on all nodes.
Waiting for the Oracle CRSD and EVMD to start
Oracle CRS stack installed and running under init(1M)
Running vipca(silent) for configuring nodeapps
Error 0(Native: listNetInterfaces:[3])
  [Error 0(Native: listNetInterfaces:[3])]


이것은 ocr 정보에 ip에 대한 정보가 안들어가서 발생 하는 건데, 강제로 ip 정보를 입력해줘야 한다.


마지막 노드에서


# oifcfg setif -global eth0/192.168.118.0:public

# oifcfg setif -global eth1/192.168.184.0:cluster_interconnect

# oifcfg getif
eth0  192.168.118.0  global  public
eth1  192.168.184.0  global  cluster_interconnect


그리고나서 마지막 노드의 xwindow로 접속해서 gui 화면서 터미널을 연후에


# vipca

해당 부분을 설정하고 다음으로 넘어간다.

그럼 이렇게 각 노드에 리소스를 설치한다.

이렇게 나오면 crs 설치가 완료 된것이니, 1번 노드의 root.sh 실행하라고 했던 창으로 돌아가서 OK를 누르고 진행한다.

다음은 DB설치


./runInstaller


DB는 패치가 완료 된 후에 생성할 예정이니 install database software only 옵션으로 설치한다.

엔진을 설치하는데는 특별한 문제는 없다. 클러스터 설치떄처럼 OPatch 부분에서 prof 에러가 뜬다면 yes 누르고 진행.



10.2.0.5  패치


각 노드에서 아래의 명령을 실행한다. ($ORA_CRS_HOME 밑의 inventory/Templates/* 의 권한 변경)


# chmod -R +w /oracle/base/product/10.2.0/crs/inventory/Templates/*


패치 하기전에서 각노드에서 crs를 종료.

# crsctl stop crs 


./runInstaller  -ignoreSysPrereqs


 -ignoreSysPrereqs 옵션을 주고 설치 한다.


그럼 별무리 없이 crs가 패치 된다.

이미 패치전에 crs를 종료 시켰기 때문에 crsctl stop crs 명령은 또 넣지 않아도 된다.

root102.sh를 실행시켜 패치를 마무리 한다.


실행이 완료 되면 crs가 자동으로 구동 된다.


DB 엔진 패치


./runInstaller  -ignoreSysPrereqs


역시 같은 옵션을 주고 실행

$ORACLE_HOME 을 패치한다.



티스토리 툴바