2009. 6. 5. 12:26 IT가

Oracle RAC Load Balance.

반응형
아래와 같은 내용이 필요하던 차에 우연찮게 DBGuide.net 에서 아래 내용을 보게되었다.

Client-Side Connect-Time Load Balancing

 Client-Side Connect-Time Load Balancing의 특징은 이용 가능한 Listener 리스트 중에서 랜덤(random)하게 접속 요청을 하는 것이다. 이는 클라이언트의 tnsnames.ora에 “LOAD_ BALANCE=ON”을 설정함으로써 가능하다.

-- TNSNAMES.ORA<br /> ghlee =<br /> (DESCRIPTION =<br /> (LOAD_BALANCE=ON)<br /> (ADDRESS = (PROTOCOL = TCP)(HOST = 192.128.25.18)(PORT = 1521)) #ghlee1<br /> (ADDRESS = (PROTOCOL = TCP)(HOST = 192.128.25.19)(PORT = 1521)) #ghlee2<br /> (CONNECT_DATA =<br /> (SERVER = DEDICATED)<br /> (SERVICE_NAME = GHLEE)))<br /> -- 첫 번째 접속 시도<br /> [/oracle/product/10.2.0/network/admin&amp;gt; sqlplus scott/tiger@ghlee<br /> SCOTT@ghlee1 &amp;gt;@in.sql<br /> INSTANCE_NUMBER INSTANCE_NAME HOST_NAME<br /> -------------- -------------- --------------<br /> 1 ghlee1 ghlee1<br /> -- 두 번째 접속 시도<br /> [/oracle/product/10.2.0/network/admin&amp;gt; sqlplus scott/tiger@ghlee<br /> INSTANCE_NUMBER INSTANCE_NAME HOST_NAME<br /> --------------- --------------- --------------<br /> 1 ghlee1 ghlee1<br /> -- 세 번째 접속 시도<br /> [/oracle/product/10.2.0/network/admin&amp;gt; sqlplus scott/tiger@ghlee<br /> INSTANCE_NUMBER INSTANCE_NAME HOST_NAME<br /> --------------- --------------- --------------<br /> 1 ghlee1 ghlee1<br /> -- 네 번째 접속 시도<br /> [/oracle/product/10.2.0/network/admin&amp;gt; sqlplus scott/tiger@ghlee<br /> INSTANCE_NUMBER INSTANCE_NAME HOST_NAME<br /> --------------- --------------- --------------<br /> 2 ghlee2 ghlee2<br /> -- 다섯 번째 접속 시도<br /> [/oracle/product/10.2.0/network/admin&amp;gt; sqlplus scott/tiger@ghlee<br /> INSTANCE_NUMBER INSTANCE_NAME HOST_NAME<br /> --------------- --------------- --------------<br /> 1 ghlee2 ghlee2<br />

위의 결과에서 볼 수 있는 것처럼 랜덤하게 접속을 시도한다. 만약 “LOAD_BALANCE=OFF”로 설정되어 있다면 List에 명시된 처음 Address (HOST = 192.128.25.18)로 먼저 접속을 시도하고 응답이 없을 경우 TCP TIMEOUT까지 대기한 후 다음 Address list (HOST = 192.128.25.19 )로 접근을 시도한다.

 여기까지가 일반적 OCI driver 를 사용하여 Load Balancing 하는 것이다.

이 이하는 서버에서의 Load balance 와 Oracle Listener 쪽의  좀더 추가적인 사용안 인것 같다.


Server-Side Connect-Time Load Balancing


Server-Side Connect-Time Load Balancing이라는 것은 서버 측에 설정하는 것으로서 동작 방식은 다음과 같다.

(중략)

위의 정보에서 보면 지금 Listener에는 “GHLEE”와 “GHLEE1”이라는 두 개의 서비스가 등록되어 있고, 각 서비스는 “GHLEE1” Instance에 등록되어 있음을 확인할 수 있다. 그리고 “GHLEE” 서비스는 상태 정보가 “READY”인 반면, “GHLEE1” 서비스의 상태 정보는 “UNKNOWN”임을 확인할 수 있다. “GHLEE”라는 서비스는 동적으로 등록된 서비스이므로 PMON에 의해 상태를 지속적으로 Listener에게 업데이트해줌으로써 상태 정보를 확인할 수 있어 “READY”라고 보이며, GHLEE1이라는 서버는 위의 listener.ora 파일에서 기술한 정보이므로 동적으로 등록되지 않아 상태 정보를 확인할 수 없어 “UNKNOWN”이라고 보이는 것이다. Dynamic Register의 구성 방법은 다음과 같다.

 

● Service Registration 구성
이것은 초기화 파라미터 중 “SERVICE_NAMES” 파라미터에 값을 설정함으로써 가능하다. 이 이름이 바로 Listener에 등록하는 서비스 이름으로 Default 이름은 DB Install 시에 설정한 dbname.domain이다. 여기서는 SERIVCE_NAMES 파라미터를 설정하지 않았어도, dbname.domain에 의해 서비스 이름이 “GHLEE”가 되었다.

 

● Default Local Listener Registration 방법
Default 로 PMON process는 TCP/IP Port 1521을 사용하는 local Listener에 자동으로 서비스 정보를 등록한다. 위의 예제에서는 Default Port를 사용하고 dbname.domain에 의해서 “GHLEE”라는 서비스가 자동으로 등록되었다.

 

● NON-Default Listener Registration 방법
PMON에 의해 Local Listener에 등록을 원하고 TCP/IP가 Port 1521을 사용하지 않을 경우는 다음과 같이 LOCAL_ LISTENER PARAMETER를 설정하면 된다.

 

LOCAL_LISTENER = <listener_alias> → Parameter file 기술
Listener_alias =
(DESCRIPTION= (ADDRESS=(PROTOCOL=TCP_(HOST= node1_vip)(PORT=1524))
→ 서버의 tnsnames.ora 파일에 기술
or
LOCAL_LISTENER =“(ADDRESS=(PROTOCOL=TCP)(HOST =node1_vip)(PORT=1524))” → Parameter 변경

 

● Remote Listener Registration 방법
PMON process에 의해 remote Listener를 등록하고 싶다면, 다음과 같이 REMOTE_LISTENER 파라미터를 설정해야 한다.

 

REMOTE_LISTENER=< listener_alias> → Parameter file 기술
Listener_alias =
(DESCRIPTION= (ADDRESS=(PROTOCOL=TCP_(HOST =node2_vip)(PORT=1521))
or
REMOTE_LISTENER=“(ADDRESS=(PROTOCOL=TCP_(HOST =node2_vip)PORT=1521))”

 

위와 같이 등록했을 때 LISTENER SERVICES를 확인하면 다음과 같다.

-- PMON에 의해 자동으로 등록하는 방법을 이용하기 위해 listener.ora 파일에 SID 정보를<br /> 기술하지 않는다. GHLEE2에도 다음의 상황처럼 기술한다. <br /> LISTENER_GHLEE1 =<br /> (DESCRIPTION_LIST =<br /> (DESCRIPTION = <br /> (ADDRESS = (PROTOCOL = TCP)(HOST = 192.128.25.18)(PORT = 1521))#ghlee1_vip<br /> (ADDRESS = (PROTOCOL = TCP)(HOST = 192.128.25.30)(PORT = 1521))#ghlee1_real ip<br /> ))<br /> -- service_names에 ghlee, ghlee1 서비스를 설정한다.<br /> SQL&amp;gt; alter system set service_names='GHLEE', 'GHLEE1' <br /> scope=BOTH sid='GHLEE1';<br /> -- remote_listener에 ghlee2의 vip와 port 등을 설정한다. <br /> SQL&amp;gt; alter system set remote_listener='(address= (protocol=tcp)(host=192.128.25.19)(PORT=1521)' <br /> scope=BOTH sid='GHLEE1';<br /> -- Listener Service의 정보 확인. 위의 Parameter 값들의 설정으로 인해 PMON에<br /> 의해서 자동으로 등록된 것을 확인할 수 있다.<br /> [ghlee1@/oracle/product/10.2.0/network/admin&amp;gt; lsnrctl services<br /> Service "GHLEE" has 2 instance(s).<br /> Instance "GHLEE1", status READY, has 1 handler(s) for this service...<br /> Handler(s):<br /> "DEDICATED" established:0 refused:0 state:ready<br /> LOCAL SERVER<br /> Instance "GHLEE2", status READY, has 1 handler(s) for this service...<br /> Handler(s):<br /> "DEDICATED" established:0 refused:0 state:ready<br /> REMOTE SERVER<br /> (ADDRESS=(PROTOCOL=TCP)(HOST=GHLEE2-vip)(PORT=1521))<br /> Service "GHLEE1" has 1 instance(s).<br /> Instance "GHLEE1", status READY, has 1 handler(s) for this service...<br /> Handler(s):<br /> "DEDICATED" established:0 refused:0 state:ready<br /> LOCAL SERVER<br /> Service "GHLEE2" has 1 instance(s).<br /> Instance "GHLEE2", status READY, has 1 handler(s) for this service...<br /> Handler(s):<br /> "DEDICATED" established:0 refused:0 state:ready<br /> REMOTE SERVER<br /> (ADDRESS=(PROTOCOL=TCP)(HOST=GHLEE2-vip)(PORT=1521))

위와 같이 Server에 Dynamic Register 방식으로 구성하게 되면 각 Listener는 Server의 상태 정보를 가지고 있어 좀 더 Idle한 서버에서 클라이언트의 요청을 받을 수 있는 Load Balancing을 구현할 수 있다.

 

출처 : 한국 마이크로 소프트웨어 [2009년 5월호]

제공 : DB포탈사이트 DBguide.net


자세한건, DBGuide.net 혹은 마이크로 소프트웨어 사이트에서 확인하시기 바랍니다.

'IT가' 카테고리의 다른 글

row 를 column 으로 붙일경우 유용한 쿼리 한가지.  (1) 2009.06.17
with clause - 9i 기능.  (0) 2009.05.26
오라클의 Middleware 시장 투자.  (0) 2009.04.29
Posted by 상피리꿈

반응형
블로그 이미지
상피리꿈
Yesterday
Today
Total

달력

 « |  » 2024.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

최근에 올라온 글

최근에 달린 댓글

글 보관함