1. VirtualBox Guest Addition 설치
1번 노드가 부팅이 됩니다.
"root" 유저로 접속합니다.
root 유저의 암호(“oracle”)를 입력합니다.
VirtualBox로 구축된 환경에서는 편의를 위해 VBOXADDITIONS (이하 Guest Addition)를 설치합니다.
호스트 머신의 VirtualBox 메뉴에서 '장치' > '게스트 확장 CD 이미지 삽입'을 클릭하여, Guest Addition CD를 mount 시켜줍니다.
Guest Addition 이미지를 mount하면 자동으로 폴더가 열립니다.
VBoxLinuxAdditions.run을 더블 클릭합니다.
실행 여부를 뭍는 창이 나오면 <실행>을 클릭합니다.
자동으로 설치가 진행되며, 설치가 완료되면 "엔터"를 입력하여 창을 닫아줍니다.
Guest Addition을 적용하기 위해서 재부팅이 필요합니다.
화면 상단의 메뉴바에서 '시스템' > '끄기'를 순서대로 클릭합니다.
<다시 시작> 버튼을 클릭하여 재부팅합니다.
2. 서비스 정리 및 패키지 확인
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 ip6tables off chkconfig --level 123456 bluetooth off chkconfig --level 123456 yum-updatesd off
[root@rac1 ~]# chkconfig --level 123456 xinetd off [root@rac1 ~]# chkconfig --level 123456 sendmail off [root@rac1 ~]# chkconfig --level 123456 cups off [root@rac1 ~]# chkconfig --level 123456 cups-config-daemon off [root@rac1 ~]# chkconfig --level 123456 smartd off [root@rac1 ~]# chkconfig --level 123456 iptables off [root@rac1 ~]# chkconfig --level 123456 ip6tables off [root@rac1 ~]# chkconfig --level 123456 bluetooth off [root@rac1 ~]# chkconfig --level 123456 yum-updatesd off
리소스 낭비를 줄이기 위해 불필요한 서비스를 끕니다.
rpm -q binutils-2.* rpm -q compat-libstdc++-33-* rpm -q elfutils-libelf-0.* rpm -q elfutils-libelf-devel-* rpm -q gcc-4.* rpm -q gcc-c++-4.* rpm -q glibc-2.* rpm -q glibc-common-2.* rpm -q glibc-devel-2.* rpm -q glibc-headers-2.* rpm -q ksh-2* rpm -q libaio-0.* rpm -q libaio-devel-0.* rpm -q libgcc-4.* rpm -q libstdc++-4.* rpm -q libstdc++-devel-4.* rpm -q make-3.* rpm -q sysstat-7.* rpm -q unixODBC-2.* rpm -q unixODBC-devel-2.*
[root@rac1 ~]# rpm -q binutils-2.* binutils-2.17.50.0.6-26.el5 [root@rac1 ~]# rpm -q compat-libstdc++-33-* compat-libstdc++-33-3.2.3-61 [root@rac1 ~]# rpm -q elfutils-libelf-0.* elfutils-libelf-0.137-3.el5 [root@rac1 ~]# rpm -q elfutils-libelf-devel-* elfutils-libelf-devel-0.137-3.el5 [root@rac1 ~]# rpm -q gcc-4.* gcc-4.1.2-55.el5 [root@rac1 ~]# rpm -q gcc-c++-4.* gcc-c++-4.1.2-55.el5 [root@rac1 ~]# rpm -q glibc-2.* glibc-2.5-123.0.1 [root@rac1 ~]# rpm -q glibc-common-2.* glibc-common-2.5-123.0.1 [root@rac1 ~]# rpm -q glibc-devel-2.* glibc-devel-2.5-123.0.1 [root@rac1 ~]# rpm -q glibc-headers-2.* glibc-headers-2.5-123.0.1 [root@rac1 ~]# rpm -q ksh-2* ksh-20100621-20.el5 [root@rac1 ~]# rpm -q libaio-0.* libaio-0.3.106-5 [root@rac1 ~]# rpm -q libaio-devel-0.* libaio-devel-0.3.106-5 [root@rac1 ~]# rpm -q libgcc-4.* libgcc-4.1.2-55.el5 [root@rac1 ~]# rpm -q libstdc++-4.* libstdc++-4.1.2-55.el5 [root@rac1 ~]# rpm -q libstdc++-devel-4.* libstdc++-devel-4.1.2-55.el5 [root@rac1 ~]# rpm -q make-3.* make-3.81-3.el5 [root@rac1 ~]# rpm -q sysstat-7.* sysstat-7.0.2-13.0.1.el5 [root@rac1 ~]# rpm -q unixODBC-2.* unixODBC-2.2.11-10.el5 [root@rac1 ~]# rpm -q unixODBC-devel-2.* unixODBC-devel-2.2.11-10.el5
오라클 설치를 위해 필요한 OS 패키지가 제대로 설치되어 있는지 확인합니다.
만약 이전에 설치 과정을 잘 따라왔다면 모든 패키지가 제대로 설치되어 있을 것입니다.
3. host 파일 수정
### Public 10.0.1.101 rac1.localdomain rac1 10.0.1.102 rac2.localdomain rac2 ### Private 10.0.5.101 rac1-priv.localdomain rac1-priv 10.0.5.102 rac2-priv.localdomain rac2-priv ### Virtual 10.0.1.111 rac1-vip.localdomain rac1-vip 10.0.1.112 rac2-vip.localdomain rac2-vip ### SCAN 10.0.1.110 rac-scan.localdomain rac-scan
/etc/hosts 파일에 서버 정보를 추가합니다.
오라클 소프트웨어 설치를 정상적으로 진행하기 위해 정확한 정보를 입력해야 합니다.
4. OS 환경 설정 변경
tmpfs /dev/shm tmpfs size=1500m 0 0
오라클의 MEMORY_TARGET 파라미터를 사용하기 위해서 tmpfs를 변경해야 합니다.
기존에 설정된 tmpfs 값은 #로 주석 처리하거나 삭제합니다.
mount -o remount /dev/shm df -h
[root@rac1 ~]# mount -o remount /dev/shm [root@rac1 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 26G 2.7G 22G 12% / /dev/sda1 99M 22M 73M 23% /boot oracle 233G 123G 111G 53% /media/sf_oracle shmfs 1.5G 0 1.5G 0% /dev/shm
remount하여 바로 시스템에 적용시킵니다.
fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmmni = 4096 # semaphores: semmsl, semmns, semopm, semmni kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048586
커널 변수를 추가하는 작업입니다.
/sbin/sysctl -p
[root@rac1 ~]# /sbin/sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 4294967295
kernel.shmall = 268435456
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
루트 유저로 /sbin/sysctl -p 명령을 수행하면 바로 시스템에 적용할 수 있습니다.
session required pam_limits.so
사용자 인증에 관한 설정을 추가합니다.
options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
클러스터 상태 모니터링을 위한 hangcheck-timer 설정을 추가합니다.
hangcheck_tick은 모니터링 주기(초)를 나타내며, hangcheck_margin은 최대 지연시간(초)를 의미합니다.
/sbin/modprobe hangcheck-timer
재기동시에 hangcheck-timer 모듈을 사용할 수 있도록 /etc/rc.local을 수정합니다.
mv /etc/sysconfig/ntpd /etc/sysconfig/ntpd.original mv /etc/ntp /etc/ntp.original mv /etc/ntp.conf /etc/ntp.conf.original
[root@rac1 ~]# mv /etc/sysconfig/ntpd /etc/sysconfig/ntpd.original [root@rac1 ~]# mv /etc/ntp /etc/ntp.original [root@rac1 ~]# mv /etc/ntp.conf /etc/ntp.conf.original
실습을 위한 환경이므로 CTSS 사용을 위해 기존 NTP 관련 설정 파일들을 사용하지 못하도록 변경(백업)합니다.
실제 운영환경에서는 반드시 NTP를 사용해 시간을 동기화할 것을 강력히 권합니다
5. SCAN 관련 설정
nameserver 127.0.0.1
dnsmasq를 사용해 /etc/hosts 파일의 내용을 DNS처럼 사용할 것이므로 loopback IP를 nameserver로 등록합니다.
chkconfig dnsmasq on service dnsmasq start nslookup rac-scan
[root@rac1 ~]# chkconfig dnsmasq on [root@rac1 ~]# service dnsmasq start Starting dnsmasq: [ OK ] [root@rac1 ~]# nslookup rac-scan Server: 127.0.0.1 Address: 127.0.0.1#53 Name: rac-scan Address: 10.0.1.110
dnsmasq 서비스를 등록하고 실행하면, SCAN IP 검색이 가능합니다.
6. 그룹, 사용자 환경 수정
groupadd oper groupadd asmdba groupadd asmoper groupadd asmadmin usermod -g oinstall -G dba,oper,asmdba,asmadmin,vboxsf oracle useradd -g oinstall -G dba,asmdba,asmoper,asmadmin,vboxsf grid id oracle id grid passwd oracle passwd grid
[root@rac1 ~]# groupadd oper [root@rac1 ~]# groupadd asmdba [root@rac1 ~]# groupadd asmoper [root@rac1 ~]# groupadd asmadmin [root@rac1 ~]# usermod -g oinstall -G dba,oper,asmdba,asmadmin,vboxsf oracle [root@rac1 ~]# useradd -g oinstall -G dba,asmdba,asmoper,asmadmin,vboxsf grid [root@rac1 ~]# id oracle uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),160(vboxsf),54323(oper),54324(asmdba),54326(asmadmin) [root@rac1 ~]# id grid uid=54322(grid) gid=54321(oinstall) groups=54321(oinstall),54322(dba),160(vboxsf),54324(asmdba),54325(asmoper),54326(asmadmin) [root@rac1 ~]# passwd oracle Changing password for user oracle. New UNIX password: BAD PASSWORD: it is based on a dictionary word Retype new UNIX password: passwd: all authentication tokens updated successfully. [root@rac1 ~]# passwd grid Changing password for user grid. New UNIX password: BAD PASSWORD: it is based on a dictionary word Retype new UNIX password: passwd: all authentication tokens updated successfully.
리눅스 설치시 포함된 oracle-validated 패키지에 반영된 설치 유저에 관한 구성을 실습 환경에 맞게 수정해야 합니다.
Guest Addition을 설치했으므로 관련 그룹인 vboxsf를 oracle과 grid 유저에 추가합니다.
passwd로 유저 암호를 반드시 지정해야 합니다.
oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 grid hard nproc 16384 grid hard nofile 65536
리소스 제한을 위한 사용자별 설정값을 입력합니다.
오라클을 설치하는 OS 계정에 맞게 제한값을 입력합니다.
mkdir -p /u01/app/11.2.0/grid mkdir -p /u01/app/oracle/product/11.2.0/db_1 chown -R grid:oinstall /u01 chown -R oracle:oinstall /u01/app/oracle/product chmod -R 755 /u01
[root@rac1 ~]# mkdir -p /u01/app/11.2.0/grid [root@rac1 ~]# mkdir -p /u01/app/oracle/product/11.2.0/db_1 [root@rac1 ~]# chown -R grid:oinstall /u01 [root@rac1 ~]# chown -R oracle:oinstall /u01/app/oracle/product [root@rac1 ~]# chmod -R 755 /u01
오라클 소프트웨어 설치를 위한 경로를 생성하고, 해당 경로에 대한 권한과 소유권을 수정합니다.
export ORACLE_BASE=/u01/app/oracle export GRID_HOME=/u01/app/11.2.0/grid export DB_HOME=$ORACLE_BASE/product/11.2.0/db_1 export PATH=$PATH:$GRID_HOME/bin
[root@rac1 ~]# cat ~/.bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH unset USERNAME export ORACLE_BASE=/u01/app/oracle export GRID_HOME=/u01/app/11.2.0/grid export DB_HOME=$ORACLE_BASE/product/11.2.0/db_1 export PATH=$PATH:$GRID_HOME/bin
root 계정의 .bash_profile을 수정합니다.
export TMP=/tmp export TMPDIR=$TMP export EDITOR=vi export ORACLE_HOSTNAME=rac1 # rac2 export ORACLE_BASE=/u01/app/oracle export GRID_HOME=/u01/app/11.2.0/grid export DB_HOME=$ORACLE_BASE/product/11.2.0/db_1 export ORACLE_HOME=$GRID_HOME export ORACLE_SID=+ASM1 # +ASM2 export ORACLE_TERM=xterm export BASE_PATH=/usr/sbin:$PATH export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$GRID_HOME/bin:$BASE_PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib export NLS_LANG=AMERICAN_KOREA.AL32UTF8 export PS1='[\u@$ORACLE_SID \W]$ ' if [ $USER = "grid" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi
[root@rac1 ~]# cat ~grid/.bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH export TMP=/tmp export TMPDIR=$TMP export EDITOR=vi export ORACLE_HOSTNAME=rac1 # rac2 export ORACLE_UNQNAME=racdb # instance_name export ORACLE_BASE=/u01/app/oracle export GRID_HOME=/u01/app/11.2.0/grid export DB_HOME=$ORACLE_BASE/product/11.2.0/db_1 export ORACLE_HOME=$GRID_HOME export ORACLE_SID=+ASM1 # +ASM2 export ORACLE_TERM=xterm export BASE_PATH=/usr/sbin:$PATH export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$GRID_HOME/bin:$BASE_PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib export NLS_LANG=AMERICAN_KOREA.AL32UTF8 export PS1='[\u@$ORACLE_SID \W]$ ' if [ $USER = "grid" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi
grid 계정으로 접속하여 .bash_profile을 수정합니다.
export PATH export TMP=/tmp export TMPDIR=$TMP export EDITOR=vi export ORACLE_HOSTNAME=rac1 # rac2 export ORACLE_UNQNAME=racdb # instance_name export ORACLE_BASE=/u01/app/oracle export GRID_HOME=/u01/app/11.2.0/grid export DB_HOME=$ORACLE_BASE/product/11.2.0/db_1 export ORACLE_HOME=$DB_HOME export ORACLE_SID=racdb1 # racdb2 export ORACLE_TERM=xterm export BASE_PATH=/usr/sbin:$PATH export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$GRID_HOME/bin:$BASE_PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib export NLS_LANG=AMERICAN_KOREA.AL32UTF8 export PS1='[\u@$ORACLE_SID \W]$ ' if [ $USER = "oracle" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi
[root@rac1 ~]# cat ~oracle/.bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH export TMP=/tmp export TMPDIR=$TMP export EDITOR=vi export ORACLE_HOSTNAME=rac1 # rac2 export ORACLE_UNQNAME=racdb # instance_name export ORACLE_BASE=/u01/app/oracle export GRID_HOME=/u01/app/11.2.0/grid export DB_HOME=$ORACLE_BASE/product/11.2.0/db_1 export ORACLE_HOME=$DB_HOME export ORACLE_SID=racdb1 # racdb2 export ORACLE_TERM=xterm export BASE_PATH=/usr/sbin:$PATH export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$GRID_HOME/bin:$BASE_PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib export NLS_LANG=AMERICAN_KOREA.AL32UTF8 export PS1='[\u@$ORACLE_SID \W]$ ' if [ $USER = "oracle" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi
마지막으로 oracle 계정으로 접속하여 .bash_profile을 수정합니다.