RAC환경하에서 CTF 및 TAF 설정 및 테스트

1. 테스트 환경 < 공통 > DB : Oracle 10g RAC 2노드 OS : RHEL 4 db_name : rac
< 노드 1 > Hostname : rac1 oracle_sid : rac1 Public IP : 192.168.126.131 Praivate IP : 192.168.121.129 Vitual IP : 192.168.126.31
LISTENER_RAC1 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521)(IP = FIRST)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.126.131)(PORT = 1521)(IP = FIRST)) ) ) SID_LIST_LISTENER_RAC1 = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /home/oracle/product/10g/db) (PROGRAM = extproc) ) )
listener.ora 설정파일 < 노드 2 > Hostname : rac2 oracle_sid : rac2 Public IP : 192.168.126.132 Praivate IP : 192.168.121.130 Vitual IP : 192.168.126.32
LISTENER_RAC2 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521)(IP = FIRST)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.126.132)(PORT = 1521)(IP = FIRST)) ) ) SID_LIST_LISTENER_RAC2 = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /home/oracle/product/10g/db) (PROGRAM = extproc) ) )
listener.ora 설정파일 < client > OS : Win 7 IP : 192.168.126.128 oracle clinet : 11g
192.168.126.31 rac1 192.168.126.32 rac2
hosts 파일 2. 테스트 과정요약 가. 서버에 oltp 서비스 추가
나. 클라이언트에서 select 실행
다. 장애발생
라. 클라인언트 상태 및 서버 상태확인 3. CTF(Connection Time Fail-over) 테스트 가. 서버에 oltp 서비스 추가
$ srvctl add service -d RAC -s oltp_service -r RAC1 -a RAC2 $ srvctl start service -d RAC -s oltp_service $ srvctl status service -d RAC -s oltp_service $ crs_stat -t
나. 클라이언트 쪽에서 select 수행
CTF = (DESCRIPTION = (LOAD_BALANCE=OFF) (FAILOVER=ON) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = rac1)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = rac2)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = rac) ) )
클라이언트 tnsnames.ora 설정상태 c:\> sqlplus system/oracle@ctf
-- 접속 노드 확인
SQL> select userenv('instance') from dual;

USERENV('INSTANCE')
-------------------
                  1

-- select 문 실행
SQL> select * from dict;
다. 장애발생(위 클라이언트의 select문이 실행하는 도중에 장애를 발생시킨다.)
shutdown abort;
라. 클라이언트 결과 확인
Description of LOBs contained in tables accessible to the user

ERROR:
ORA-03113: 통신 채널에 EOF 가 있습니다
프로세스 ID: 0
세션 ID: 148 일련 번호: 12



135 개의 행이 선택되었습니다.

-- 현재 세션이 끊어짐
SQL> select userenv('instance') from dual;
ERROR:
ORA-03114: ORACLE에 연결되어 있지 않습니다

SQL> exit
C:\>sqlplus system/oracle@ctf
-- select 문 재실행(정상적으로 결과가 나온다)
SQL> select * from dict;

-- 노드 2로 failover 됨을 확인
SQL> select userenv('instance') from dual;

USERENV('INSTANCE')
-------------------
                 2

마. 서버쪽 상태 확인 $ crs_stat -t
Name Type Target State Host ———————————————————— ora.rac.db application ONLINE ONLINE rac2 ora….vice.cs application ONLINE ONLINE rac1 ora….ac1.srv application ONLINE ONLINE rac1 ora….c1.inst application OFFLINE ONLINE rac1 ora….c2.inst application ONLINE ONLINE rac2 ora….SM1.asm application ONLINE ONLINE rac1 ora….C1.lsnr application ONLINE ONLINE rac1 ora.rac1.gsd application ONLINE ONLINE rac1 ora.rac1.ons application ONLINE ONLINE rac1 ora.rac1.vip application ONLINE ONLINE rac1 ora….SM2.asm application ONLINE ONLINE rac2 ora….C2.lsnr application ONLINE ONLINE rac2 ora.rac2.gsd application ONLINE ONLINE rac2 ora.rac2.ons application ONLINE ONLINE rac2 ora.rac2.vip application ONLINE ONLINE rac2
4. TAF(Transaction Application Fail-over) 테스트
가. 서버에 oltp 서비스 추가(위에서 추가했으면 생략)
$ srvctl add service -d RAC -s oltp_service -r RAC1 -a RAC2 $ srvctl start service -d RAC -s oltp_service $ srvctl status service -d RAC -s oltp_service $ crs_stat -t
나. 클라이언트 쪽에서 select 접속
TAF = (DESCRIPTION = (LOAD_BALANCE=OFF) (FAILOVER=ON) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = rac1)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = rac2)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = rac) (FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC)) ) )
클라이언트 tnsnames.ora 설정상태 c:\> sqlplus system/oracle@taf
-- 접속 노드 확인
SQL> select userenv('instance') from dual;

USERENV('INSTANCE')
-------------------
                  1

-- select 문 실행
SQL> select * from dict;
다. 노드 1 장애발생(위 클라이언트의 select문이 실행하는 도중에 장애를 발생시킨다.)
shutdown abort;
라. 클라이언트 결과 확인
USER_SQLSET_DEFINITIONS
Synonym for USER_SQLSET

EXT_TO_OBJ
Synonym for EXT_TO_OBJ_VIEW


1819 개의 행이 선택되었습니다.

-- 서버에 장애가 발생하는 시점에 일시적인 멈춤이 발생하였으나 쿼리는 정상적으로 실행됨
-- 노드 2로 failover 됨을 확인
SQL> select userenv('instance') from dual;

USERENV('INSTANCE')
-------------------
                  2
마. 서버쪽 상태 확인 $ crs_stat -t
Name Type Target State Host ———————————————————— ora.rac.db application ONLINE ONLINE rac2 ora….vice.cs application ONLINE ONLINE rac1 ora….ac1.srv application ONLINE ONLINE rac2 ora….c1.inst application OFFLINE OFFLINE ora….c2.inst application ONLINE ONLINE rac2 ora….SM1.asm application ONLINE ONLINE rac1 ora….C1.lsnr application ONLINE ONLINE rac1 ora.rac1.gsd application ONLINE ONLINE rac1 ora.rac1.ons application ONLINE ONLINE rac1 ora.rac1.vip application ONLINE ONLINE rac1 ora….SM2.asm application ONLINE ONLINE rac2 ora….C2.lsnr application ONLINE ONLINE rac2 ora.rac2.gsd application ONLINE ONLINE rac2 ora.rac2.ons application ONLINE ONLINE rac2 ora.rac2.vip application ONLINE ONLINE rac2
참고 : TAF Preconnect Fail-over가 이루어질 노드(아래에서는 RAC2)에 미리 Server Process를 기동시켜 실제 Failover가 발생 시 오버헤드를 줄이는 방식. 단, 자원의 낭비 발생 클라이언트를 아래와 같이 설정한다.
TAF_PRE = (DESCRIPTION = (LOAD_BALANCE=OFF) (FAILOVER=ON) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = rac1)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = rac2)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = massdb) (FAILOVER_MODE=(TYPE=SELECT)(METHOD=PRECONNECT)(BACKUP=RAC2)) ) ) RAC2 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rac2)(PORT = 1521)) (CONNECT_DATA =(SERVICE_NAME = massdb)) )
참고 : 클라이언트 로드밸런싱 vs 리스너로드밸런싱 – 클라이언트 로드밸런싱(노드별 1/n개씩 할당) 클라이언트를 노드의 수로 나누어 각 노드에 클라이언트를 할당해 준다. 사용방법 : tnsnames.ora 파일의 LOAD_BALANCE=ON 설정 – 리스너로드밸런싱(부하량에 따라 할당) 리스너에 각 인스턴스의 부하에 대한정보를 가지고 있어 부하가 덜 걸린 인스턴스로 클라이언트를 할당한다. 사용방법 : 각 노드의 tnsnames.ora, init.ora 에 아래 예처럼 항목 추가 후 remote_listener 파라미터 값 수정 < 노드 1 > tnsnames.ora 및 init.ora
LISTENER_RAC1 = (DESCRIPTION = ADDRESS=(PROTOCOL=TCP)(HOST=rac1)(PORT=1521)) )
alter system set remote_listener=’LISTENER_RAC1′; < 노드 2 > tnsnames.ora 및 init.ora
LISTENER_RAC2 = (DESCRIPTION = ADDRESS=(PROTOCOL=TCP)(HOST=rac2)(PORT=1521)) )
alter system set remote_listener=’LISTENER_RAC2′;

5. 테스트 결과요약 가. Oracle RAC 구성에서는 기본으로 CTF환경이며, 필요 시 TAF(또는 TAF Preconnect) 방식으로 구성하여 사용할 수 있다. 나. CTF 방식으로 RAC 운영 중 장애발생 시, 현재 session에서 수행되던 작업들은 중단되고, 신규접속 이후 다른 노드로 Failover 된다. 다. TAF(또는 TAF Preconnect) 방식으로 운영 중 장애발생 시, 현재 session도 Failover 되어 정상적으로 작업이 완료되는 것을 확인 할 수 있다.

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다