1. 2번 노드 VM 복제
vboxmanage clonemedium rac1.vdi ..\rac2.vdi --format VDI
> vboxmanage clonemedium rac1.vdi ..\rac2.vdi --format VDI 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Clone medium created in format 'VDI'. UUID: b7d052cb-63c9-4f92-b81c-b429163680d4
RAC1 VM을 RAC2 VM으로 사용하기 위해 VBoxManage 툴을 사용해 디스크 복제합니다.
작업을 위해서 1번 노드는 정상적으로 shutdown 시켜야 하며, 일반 OS 복제 방식을 사용할 경우 UUID가 충돌하게 되므로 반드시 VBoxManage를 사용해야 합니다.
VirtualBox에서 ‘새로 만들기’를 클릭합니다.
운영체제는 ‘Linux’ 버전은 ‘Oracle (32-bit)’을 선택하고 <다음>을 클릭합니다.
메모리는 “2048”MB로 입력하고 <다음>을 클릭합니다.
복제된 디스크 이미지를 사용할 것이므로 ‘기존 하드 디스크 사용하기’를 선택하고 폴더 아이콘을 클릭합니다.
탐색창에서 복제된 RAC2.vdi 파일을 찾아서 선택한 후 <열기>를 클릭합니다.
<만들기>를 클릭하면 2번째 노드의 구성이 완료됩니다.
초기값으로 구성된 내용을 수정할 것이므로 해당 VM을 선택하고 <설정>을 클릭합니다.
첫번째 노드와 마찬가지로 ‘플로피 디스크’를 해제합니다.
첫번째 노드와 똑같은 순서로 모든 공유 디스크를 연결합니다.
첫번째 노드와 마찬가지로 ‘오디오 사용하기’를 해제합니다.
네트워크 어댑터 1은 ‘브리지 어댑터’로 설정합니다.
네트워크 어댑터 2를 사용하기 위해 ‘네트워크 어댑터 사용하기’를 체크하고 연결 속성을 ‘호스트 전용 어댑터’로 선택합니다.
설정 사항을 모두 변경했으면 <OK>를 클릭합니다.
2. 재기동 및 네트워크 정보 수정
1번 노드와의 설정값이 충돌할 수 있으므로, 우선 2번 노드만 부팅합니다.
처음 부팅하면 네트워크 인터페이스가 변경된 것을 자동으로 감지하고 하드웨어 설정 안내 메시지가 출력됩니다.
설정을 진행하기 위해 아무 키나 입력합니다.
기존의 설정을 삭제해야 하므로 <설정 삭제>를 선택하고 엔터를 입력합니다.
네트워크 인터페이스 2개가 변경된 것이므로, 한번 더 확인하게 됩니다.
마찬가지로 <설정 삭제>를 선택하고 엔터를 입력합니다.
새로운 하드웨어 추가를 위해 <설정>을 클릭합니다.
맨 먼저 전용망 인터페이스를 추가하게 됩니다.
2번 노드 전용망의 정보를 입력하고, <확인>을 선택한 후 엔터를 입력합니다.
- IP 주소 : 10.0.5.102
- 넷마스크 : 255.255.255.0
두번째로 공용망의 인터페이스를 추가하기 위해 <설정>을 선택하고 엔터를 입력합니다.
1번 노드 전용망의 정보를 입력하고, <확인>을 선택한 후 엔터를 입력합니다.
- IP 주소 : 10.0.1.102
- 넷마스크 : 255.255.255.0
- 기본 게이트웨이 : 10.0.1.1
- 1차 DNS : 127.0.0.1
이후 정상적으로 부팅이 완료되면 root로 접속해서 호스트명을 변경해줍니다.
데스크탑 좌측 상단의 '프로그램' > '시스템 설정' > '네트워크'를 클릭합니다.
DNS 탭으로 이동해서 호스트명을 “rac2”로 수정하고 기본 DNS에 “127.0.0.1”을 입력합니다.
파일' > '저장'을 눌러 변경된 내용을 저장합니다.
재시작에 관한 안내창이 나오면 <확인>을 클릭합니다.
변경 작업이 완료되었으면 네트워크 설정 창을 닫습니다.
### 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
호스트 파일이 1번 노드와 동일한지 확인합니다.
export ORACLE_SID=racdb2
oracle 유저의 ORACLE_SID 파라미터 값을 2번 노드에 맞게 수정합니다.
reboot
변경된 내용을 적용하기 위해 재부팅합니다.
또한 1번 노드도 기동합니다.
3. 패스워드 없는 SSH 접속 설정
mkdir ~/.ssh
1번 노드
[oracle@rac1 ~]$ mkdir ~/.ssh
2번 노드
[oracle@rac2 ~]$ mkdir ~/.ssh
1번과 2번 노드 같의 패스워드 없는 ssh 접속 설정을 oracle 계정에서 수행합니다.
/usr/bin/ssh-keygen -t rsa /usr/bin/ssh-keygen -t dsa cd ~/.ssh/ cat id_rsa.pub >> authorized_keys cat id_dsa.pub >> authorized_keys scp authorized_keys rac2:/home/oracle/.ssh/
[oracle@rac1 ~]$ /usr/bin/ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/oracle/.ssh/id_rsa): 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: bb:c6:a1:fb:30:d5:58:13:27:6f:c1:48:1e:4b:51:48 oracle@rac1 [oracle@rac1 ~]$ /usr/bin/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: 60:10:9c:ee:e7:99:e6:54:78:2d:fa:6d:bd:86:9c:2b oracle@rac1 [oracle@rac1 ~]$ cd ~/.ssh/ [oracle@rac1 .ssh]$ cat id_rsa.pub >> authorized_keys [oracle@rac1 .ssh]$ cat id_dsa.pub >> authorized_keys [oracle@rac1 .ssh]$ scp authorized_keys rac2:/home/oracle/.ssh/ The authenticity of host 'rac2 (10.0.1.102)' can't be established. RSA key fingerprint is 97:39:97:13:c9:8b:a8:49:7c:9a:5d:d6:1c:65:67:8d. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'rac2,10.0.1.102' (RSA) to the list of known hosts. oracle@rac2's password: authorized_keys 100% 822 0.8KB/s 00:00
먼저 1번 노드에서 접속 인증을 위한 키 파일을 생성하고, 2번 노드로 복제합니다.
키 생성시에는 암호없는 접속을 설정해야 하므로, 아무런 값을 입력하지 않고 "엔터"키만 입력하면 됩니다.
/usr/bin/ssh-keygen -t rsa /usr/bin/ssh-keygen -t dsa cd ~/.ssh/ cat id_rsa.pub >> authorized_keys cat id_dsa.pub >> authorized_keys scp authorized_keys rac1:/home/oracle/.ssh/
[oracle@rac2 ~]$ /usr/bin/ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/oracle/.ssh/id_rsa): 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: 2f:0b:fc:51:cd:f4:b6:cc:c9:c3:78:e2:31:04:ce:55 oracle@rac2 [oracle@rac2 ~]$ /usr/bin/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: 7d:a7:85:4c:cb:0f:07:d3:d7:ca:0f:e1:0b:a6:3a:f9 oracle@rac2 [oracle@rac2 ~]$ cd .ssh [oracle@rac2 .ssh]$ cat id_rsa.pub >> authorized_keys [oracle@rac2 .ssh]$ cat id_dsa.pub >> authorized_keys [oracle@rac2 .ssh]$ scp authorized_keys rac1:/home/oracle/.ssh/ The authenticity of host 'rac1 (10.0.1.101)' can't be established. RSA key fingerprint is 97:39:97:13:c9:8b:a8:49:7c:9a:5d:d6:1c:65:67:8d. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'rac1,10.0.1.101' (RSA) to the list of known hosts. oracle@rac1's password: authorized_keys 100% 1644 1.6KB/s 00:00
2번 노드의 인증 키 정보를 1번 노드에서 보내온 파일에 추가하고 다시 1번 노드로 전송합니다.
2번 노드의 키 생성시에도 1번과 마찬가지로 키 값 없이 "엔터"만 입력합니다.
ssh rac1 date ssh rac2 date ssh rac1-priv date ssh rac2-priv date
1번 노드
[oracle@rac1 ~]$ ssh rac1 date The authenticity of host 'rac1 (10.0.1.101)' can't be established. RSA key fingerprint is 97:39:97:13:c9:8b:a8:49:7c:9a:5d:d6:1c:65:67:8d. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'rac1,10.0.1.101' (RSA) to the list of known hosts. 2017. 07. 11. (화) 09:31:45 KST [oracle@rac1 ~]$ ssh rac2 date 2017. 07. 11. (화) 09:31:48 KST [oracle@rac1 ~]$ ssh rac1-priv date The authenticity of host 'rac1-priv (10.0.5.101)' can't be established. RSA key fingerprint is 97:39:97:13:c9:8b:a8:49:7c:9a:5d:d6:1c:65:67:8d. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'rac1-priv,10.0.5.101' (RSA) to the list of known hosts. 2017. 07. 11. (화) 09:32:09 KST [oracle@rac1 ~]$ ssh rac2-priv date The authenticity of host 'rac2-priv (10.0.5.102)' can't be established. RSA key fingerprint is 97:39:97:13:c9:8b:a8:49:7c:9a:5d:d6:1c:65:67:8d. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'rac2-priv,10.0.5.102' (RSA) to the list of known hosts. 2017. 07. 11. (화) 09:32:15 KST
2번 노드
[oracle@rac2 ~]$ ssh rac1 date 2017. 07. 11. (화) 09:32:41 KST [oracle@rac2 ~]$ ssh rac2 date The authenticity of host 'rac2 (10.0.1.102)' can't be established. RSA key fingerprint is 97:39:97:13:c9:8b:a8:49:7c:9a:5d:d6:1c:65:67:8d. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'rac2,10.0.1.102' (RSA) to the list of known hosts. 2017. 07. 11. (화) 09:32:44 KST [oracle@rac2 ~]$ ssh rac1-priv date The authenticity of host 'rac1-priv (10.0.5.101)' can't be established. RSA key fingerprint is 97:39:97:13:c9:8b:a8:49:7c:9a:5d:d6:1c:65:67:8d. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'rac1-priv,10.0.5.101' (RSA) to the list of known hosts. 2017. 07. 11. (화) 09:32:52 KST [oracle@rac2 ~]$ ssh rac2-priv date The authenticity of host 'rac2-priv (10.0.5.102)' can't be established. RSA key fingerprint is 97:39:97:13:c9:8b:a8:49:7c:9a:5d:d6:1c:65:67:8d. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'rac2-priv,10.0.5.102' (RSA) to the list of known hosts. 2017. 07. 11. (화) 09:32:58 KST
양쪽에 저장된 인증 키를 기반으로 정상적으로 암호 없이 정보를 가져올 수 있는지 테스트합니다.
exec /usr/bin/ssh-agent $SHELL /usr/bin/ssh-add
1번 노드
[oracle@rac1 ~]$ exec /usr/bin/ssh-agent $SHELL [oracle@rac1 ~]$ /usr/bin/ssh-add Identity added: /home/oracle/.ssh/id_rsa (/home/oracle/.ssh/id_rsa) Identity added: /home/oracle/.ssh/id_dsa (/home/oracle/.ssh/id_dsa)
2번 노드
[oracle@rac2 ~]$ exec /usr/bin/ssh-agent $SHELL [oracle@rac2 ~]$ /usr/bin/ssh-add Identity added: /home/oracle/.ssh/id_rsa (/home/oracle/.ssh/id_rsa) Identity added: /home/oracle/.ssh/id_dsa (/home/oracle/.ssh/id_dsa)
ssh 서비스가 각 노드에서 생성된 인증 키를 사용할 수 있도록, 키 정보를 추가합니다.
4. 클러스터 사전 검증
cd <클러스터웨어 파일 압축 해제 경로>/clusterware/cluvfy ./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose
[oracle@racdb1 ~]cd /media/sf_oracle/clusterware/cluvfy [oracle@rac1 cluvfy]$ ./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose 클러스터 서비스 설정에 대한 사전 확인 수행 노드 연결 가능성을 검사하는 중... 검사: "rac1" 노드에서의 노드 연결 가능성 대상 노드 연결 가능? ------------------------------------ ------------------------ rac2 예 rac1 예 결과: "rac1" 노드에서 노드 연결 가능성 검사를 성공했습니다. 사용자 equivalence를 검사하는 중... 검사: 사용자 "oracle"에 대한 사용자 equivalence 노드 이름 설명 ------------------------------------ ------------------------ rac2 성공 rac1 성공 결과: 사용자 "oracle"에 대한 사용자 equivalence 검사를 성공했습니다. 관리 권한을 검사하는 중... 검사: 사용자 "oracle" 존재 여부 노드 이름 사용자가 존재함 설명 ------------ ------------------------ ------------------------ rac2 예 성공 rac1 예 성공 결과: "oracle"에 대한 사용자 존재 여부 검사를 성공했습니다. 검사: "oinstall" 그룹 존재 여부 노드 이름 상태 그룹 ID ------------ ------------------------ ------------------------ rac2 존재함 501 rac1 존재함 501 결과: "oinstall"에 대한 그룹 존재 여부 검사를 성공했습니다. 검사: "oinstall" 그룹[기본]의 사용자 "oracle"에 대한 멤버쉽 노드 이름 사용자가 존재함 그룹이 존재함 그룹의 사용자 기본 설명 ---------------- ------------ ------------ ------------ ------------ ------------ rac2 예 예 예 예 성공 rac1 예 예 예 예 성공 결과: "oinstall" 그룹[기본]의 사용자 "oracle"에 대한 멤버쉽 검사를 성공했습니다. 관리 권한 검사를 성공했습니다. 노드 연결을 검사하는 중... "rac2" 노드에 대한 인터페이스 정보 인터페이스 이름 IP 주소 서브넷 ------------------------------ ------------------------------ ---------------- eth0 10.0.1.102 10.0.1.0 eth1 10.0.5.102 10.0.5.0 "rac1" 노드에 대한 인터페이스 정보 인터페이스 이름 IP 주소 서브넷 ------------------------------ ------------------------------ ---------------- eth0 10.0.1.101 10.0.1.0 eth1 10.0.5.101 10.0.5.0 검사: "10.0.1.0" 서브넷에 대한 노드 연결 소스 대상 접속됨? ------------------------------ ------------------------------ ---------------- rac2:eth0 rac1:eth0 예 결과: rac2,rac1개의 노드를 사용하는 "10.0.1.0" 서브넷에 대한 노드 연결 검사를 성공했습니다. 검사: "10.0.5.0" 서브넷에 대한 노드 연결 소스 대상 접속됨? ------------------------------ ------------------------------ ---------------- rac2:eth1 rac1:eth1 예 결과: rac2,rac1개의 노드를 사용하는 "10.0.5.0" 서브넷에 대한 노드 연결 검사를 성공했습니다. "10.0.1.0" 서브넷에서 전용 상호 접속에 대해 적합한 인터페이스: rac2 eth0:10.0.1.102 rac1 eth0:10.0.1.101 "10.0.5.0" 서브넷에서 전용 상호 접속에 대해 적합한 인터페이스: rac2 eth1:10.0.5.102 rac1 eth1:10.0.5.101 ERROR: VIP에 대해 적합한 인터페이스 집합을 찾을 수 없습니다. 결과: 노드 연결 검사를 실패했습니다. 시스템 요구 사항을 검사하는 중 'crs'... 검사: 총 메모리 노드 이름 사용 가능 필수 설명 ------------ ------------------------ ------------------------ ---------- rac2 1.98GB (2075896KB) 512MB (524288KB) 성공 rac1 1.98GB (2075896KB) 512MB (524288KB) 성공 결과: 총 메모리 검사를 성공했습니다. 검사: "/tmp" 디렉토리의 사용 가능한 디스크 공간 노드 이름 사용 가능 필수 설명 ------------ ------------------------ ------------------------ ---------- rac2 40.48GB (42444900KB) 400MB (409600KB) 성공 rac1 40.39GB (42354180KB) 400MB (409600KB) 성공 결과: 사용 가능한 디스크 공간 검사를 성공했습니다. 검사: 교체 공간 노드 이름 사용 가능 필수 설명 ------------ ------------------------ ------------------------ ---------- rac2 4GB (4192956KB) 1GB (1048576KB) 성공 rac1 4GB (4192956KB) 1GB (1048576KB) 성공 결과: 교체 공간 검사를 성공했습니다. 검사: 시스템 구조 노드 이름 사용 가능 필수 설명 ------------ ------------------------ ------------------------ ---------- rac2 i686 i686 성공 rac1 i686 i686 성공 결과: 시스템 구조 검사를 성공했습니다. 검사: 커널 버전 노드 이름 사용 가능 필수 설명 ------------ ------------------------ ------------------------ ---------- rac2 2.6.9-89.0.0.0.1.EL 2.4.21-15EL 성공 rac1 2.6.9-89.0.0.0.1.EL 2.4.21-15EL 성공 결과: 커널 버전 검사를 성공했습니다. 검사: "make-3.79"에 대한 패키지 존재 여부 노드 이름 상태 설명 ------------------------------ ------------------------------ ---------------- rac2 make-3.80-7.EL4 성공 rac1 make-3.80-7.EL4 성공 결과: "make-3.79"에 대한 패키지 존재 여부 검사를 성공했습니다. 검사: "binutils-2.14"에 대한 패키지 존재 여부 노드 이름 상태 설명 ------------------------------ ------------------------------ ---------------- rac2 binutils-2.15.92.0.2-25 성공 rac1 binutils-2.15.92.0.2-25 성공 결과: "binutils-2.14"에 대한 패키지 존재 여부 검사를 성공했습니다. 검사: "gcc-3.2"에 대한 패키지 존재 여부 노드 이름 상태 설명 ------------------------------ ------------------------------ ---------------- rac2 gcc-3.4.6-11.0.1 성공 rac1 gcc-3.4.6-11.0.1 성공 결과: "gcc-3.2"에 대한 패키지 존재 여부 검사를 성공했습니다. 검사: "glibc-2.3.2-95.27"에 대한 패키지 존재 여부 노드 이름 상태 설명 ------------------------------ ------------------------------ ---------------- rac2 glibc-2.3.4-2.43 성공 rac1 glibc-2.3.4-2.43 성공 결과: "glibc-2.3.2-95.27"에 대한 패키지 존재 여부 검사를 성공했습니다. 검사: "compat-db-4.0.14-5"에 대한 패키지 존재 여부 노드 이름 상태 설명 ------------------------------ ------------------------------ ---------------- rac2 compat-db-4.1.25-9 성공 rac1 compat-db-4.1.25-9 성공 결과: "compat-db-4.0.14-5"에 대한 패키지 존재 여부 검사를 성공했습니다. 검사: "compat-gcc-7.3-2.96.128"에 대한 패키지 존재 여부 노드 이름 상태 설명 ------------------------------ ------------------------------ ---------------- rac2 누락됨 실패 rac1 누락됨 실패 결과: "compat-gcc-7.3-2.96.128"에 대한 패키지 존재 여부 검사를 실패했습니다. 검사: "compat-gcc-c++-7.3-2.96.128"에 대한 패키지 존재 여부 노드 이름 상태 설명 ------------------------------ ------------------------------ ---------------- rac2 누락됨 실패 rac1 누락됨 실패 결과: "compat-gcc-c++-7.3-2.96.128"에 대한 패키지 존재 여부 검사를 실패했습니다. 검사: "compat-libstdc++-7.3-2.96.128"에 대한 패키지 존재 여부 노드 이름 상태 설명 ------------------------------ ------------------------------ ---------------- rac2 누락됨 실패 rac1 누락됨 실패 결과: "compat-libstdc++-7.3-2.96.128"에 대한 패키지 존재 여부 검사를 실패했습니다. 검사: "compat-libstdc++-devel-7.3-2.96.128"에 대한 패키지 존재 여부 노드 이름 상태 설명 ------------------------------ ------------------------------ ---------------- rac2 누락됨 실패 rac1 누락됨 실패 결과: "compat-libstdc++-devel-7.3-2.96.128"에 대한 패키지 존재 여부 검사를 실패했습니다. 검사: "openmotif-2.2.3"에 대한 패키지 존재 여부 노드 이름 상태 설명 ------------------------------ ------------------------------ ---------------- rac2 openmotif-2.2.3-10.5.el4 성공 rac1 openmotif-2.2.3-10.5.el4 성공 결과: "openmotif-2.2.3"에 대한 패키지 존재 여부 검사를 성공했습니다. 검사: "setarch-1.3-1"에 대한 패키지 존재 여부 노드 이름 상태 설명 ------------------------------ ------------------------------ ---------------- rac2 setarch-1.6-1 성공 rac1 setarch-1.6-1 성공 결과: "setarch-1.3-1"에 대한 패키지 존재 여부 검사를 성공했습니다. 검사: "dba"에 대한 그룹 존재 여부 노드 이름 상태 설명 ------------ ------------------------ ------------------------ rac2 존재함 성공 rac1 존재함 성공 결과: "dba"에 대한 그룹 존재 여부 검사를 성공했습니다. 검사: "oinstall"에 대한 그룹 존재 여부 노드 이름 상태 설명 ------------ ------------------------ ------------------------ rac2 존재함 성공 rac1 존재함 성공 결과: "oinstall"에 대한 그룹 존재 여부 검사를 성공했습니다. 검사: "nobody"에 대한 사용자 존재 여부 노드 이름 상태 설명 ------------ ------------------------ ------------------------ rac2 존재함 성공 rac1 존재함 성공 결과: "nobody"에 대한 사용자 존재 여부 검사를 성공했습니다. 시스템 요구 사항 검사를 실패했습니다. 'crs' 모든 노드에서 클러스터 서비스 설정에 대한 사전 확인을 실패했습니다.
오라클 클러스터를 설치하기에 앞서 사전 환경 구성이 완료되어 있는지를 먼저 검증합니다.
{}