Background Image
조회 수 10660 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄


CUBRID HA 환경(Broker 이중화 포함)에서 Master Broker를 담당하고 있는 장비가 Shutdown 되거나 네트워크에서 제거된 경우, 아래와 같은 설정을 하지 않았을 때 서비스 지연이 발생할 수 있다.

 

들어가기 앞서, Login_timeout이라는 것에 대한 기본적인 이해가 필요하다.

Login_timeout이란 Connection String에서 첫 번째로 설정된 연결 시도에 대한 응답이 없는 경우, 특정 시간 동안 요청한 연결에 대한 응답을 기다리게 된다. 이때 지정된 대기 시간이 login_timeout을 의미한다.

장비가 종료되지 않았을 경우(Process만 종료된 경우) 운영체제/커널의 TCP 스택 단에서 바로 오류 처리가 되어 응답을 받는데 지연 시간이 발생하지 않지만, 장비가 종료된 경우, 연결 불가능 오류를 반환할 주체(운영체제/커널의 TCP Stack)가 없어 연결에 대한 즉각적인 응답이 올 수 없기 때문에 Login_timeout 동안의 대기가 필요한 것이다.

 

1. Apache 설치 시, MPM Modeworker로 설정.

(1) MPM Mode

MPM Mode는 멀티 프로세스에 관련된 모듈(MPM)Apache가 받아들인 요청을 처리하기 위해 ‘Child Process’에게 작업을 분배하는 방식을 의미한다. 대표적으로는 WorkerPrefork 방식이 있다.

(2) 이유

Worker 방식은 한 자식 프로세스 당 여러 개의 쓰레드를 사용하는 방법이며, Prefork 방식은 각 프로세스가 직접 처리하는 방법이다.

MPM Modeworker로 설정된 경우, 최초 접속 실패 이후에는 사용자가 임의로 apache를 재 구동하기 전까지는 자동으로 프로세스가 재 구동되지 않기 때문에 지연 없이 연결이 가능하다.

prefork로 설정된 경우, apache가 재 구동되지 않아도 주기적으로 프로세스가 재 구동된다. 그렇기 때문에 위와 같은 상황이 발생하였을 때 재 구동 된 프로세스는 실패한 이력 등에 대한 정보를 가지고 있지 않아, Login_timeout 만큼 대기 시간이 필요하다. 참고로, 해당 프로세스가 재 구동되지 않고 유지되는 경우에는 Login_timeout 시간 동안의 대기가 필요 없다.

(3) 설정 방법

$./configure --enable-mods-shared=most --enable-mules=so --with=mpm=worker --enable-so-prefix=/home/apc/apache2

(4) 확인 방법

$ ./apache2/bin/httpd -V

Server version: Apache/2.4.4 (Unix)

Server built:   Mar 18 2015 10:51:34

Server's Module Magic Number: 20120211:11

Server loaded:  APR 1.4.6, APR-UTIL 1.5.1

Compiled using: APR 1.4.6, APR-UTIL 1.5.1

Architecture:   64-bit

Server MPM:     worker

  threaded:     yes (fixed thread count)

    forked:     yes (variable process count)

$ ./apache2/bin/httpd -V

Server version: Apache/2.4.4 (Unix)

Server built:   Mar 18 2015 10:49:47

Server's Module Magic Number: 20120211:11

Server loaded:  APR 1.4.6, APR-UTIL 1.5.1

Compiled using: APR 1.4.6, APR-UTIL 1.5.1

Architecture:   64-bit

Server MPM:     prefork

  threaded:     no

    forked:     yes (variable process count)

 

2. PHP에서 Connection Pool을 사용하도록 설정.

(1) Connection Pool이란

DB와 응용간의 Connection 및 인증에 사용되는 시간을 줄이기 위해 미리 연결을 생성해 놓고 필요 시 이미 생성된 Connection을 사용하는 방식이다.

(2) 이유

매번 새로운 연결을 생성하여야 하는 경우, MPM ModePrefork 방식과 같이 연결 실패에 대한 이력이 없기 때문에 연결 후 연결 실패를 판단해야 하는 과정이 필요하다. 이 또한 매번 연결 시, Login_timeout 동안의 대기가 필요함을 의미한다.

Connection Pool을 사용하는 경우, Master Broker로의 연결 실패 이력을 가지고 있고, 이미 정상적으로 운영되고 있는 Broker와 연결을 가지고 있는 상태이기 때문에 새로운 요청이 들어와도 서비스 지연 등이 발생하지 않는다.

(3) 설정 방법

응용에서 DB 연결 시, cubrid_pconnect_with_url 함수를 사용하도록 설정한다.

(4) 추가 사항

connection 설정 시, CUBRID2008 R4.4 버전부터 disconnectOnQueryTimeout=ture로 추가하는 것을 권장하고 있다.

 

3. Login_timeout을 작은 값으로 설정

근본적인 대책 방안은 아니지만, 1, 2번과 같은 작업이 불가능할 때, 미리 Login_timeout 값을 줄여놓아 예측 불가능한 FailOver가 발생하였을 때 다른 추가 작업 없이 대기 시간이 발생하여도 서비스에 지연이 발생하지 않도록 한다.

다만, Mater Broker의 문제가 아닌 다른 이유로 연결 응답 대기가 발생하는 경우, 실제 FailOver가 발생하지 않았을 때에도 동작할 가능성이 있으므로 Login_timeout을 너무 작은 값으로 변경하는 것은 권장하지 않는 방안이다.

참고로 Login_timeout 값의 경우, CUBRID2008 R4.4 Patch4 부터 30,000(30)으로 설정되었으며, 그 미만의 버전에서는 Default 값이 0으로 무한정 대기를 의미한다.

 

4. Shutdown이 필요한 작업이라면 작업 전 Connection URL의 브로커 순서를 변경.

해당 방안 역시 근본적인 대책 방안은 아니다. 다만 1, 2번 작업이 불가능하고, Login_timeout 값을 작게 설정하지 못할 때 사용 가능한 임시 대책 방안이다.

Master Broker 장비가 종료된 경우 수동으로 Connection URL의 브로커 순서를 변경하여 최초 연결을 현재 사용 가능한 Broker 장비로 연결시켜주는 방안이다. 해당 방안은 HA FailOver가 발생하더라도 서비스 단에서는 HA 기능을 사용할 수 없는 것이나 마찬가지이므로 해당 방법은 권장하지 않는다


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
146 기타 CUBRID Migration방법(by unloaddb & loaddb) 주현 2015.07.01 21807
145 기타 콘솔에서 마이그레이션 하기. file 권호일 2015.06.19 13426
» PHP CUBRID HA 환경에서 Apache-PHP 설정 가이드 이용미 2015.06.16 10660
143 기타 CUBRID isolation level & Dirty Read 정만영 2015.05.29 11306
142 Windows Windows 에 설치 된 JRE 설치 위치 확인 하기. file 성진 2015.05.28 12564
141 Java CUBRID와 MyBATIS 빠르게 연동하기 file 김승훈 2015.05.07 19107
140 Linux CUBRID Linux 부팅시 자동시작 서비스 설정 방법 정만영 2013.09.16 25441
139 PHP phpize를 이용한 PHP 모듈 연동 방법(CUBRID2008 R4.3 버전) file 이용미 2013.05.16 20852
138 PHP Apache, PHP 설치 방법 file 이용미 2013.05.16 41246
137 기타 HA 환경 구성 시 데이터 복제 지연이 발생하는 경우 ECHO(7) port를 확인하자. 손승일 2012.11.29 26440
136 ODBC/OLEDB VB에서 CUBRID ODBC/OLEDB 사용하는 방법 및 샘플코드. file seongjoon 2012.06.30 26914
135 Java CUBRID와 Oracle의 Clob 타입 사용 방법 비교. seongjoon 2012.06.30 54542
134 Install CUBRID기반으로 XE 운영하기 – 설치가이드 file cubebridge 2012.04.13 30928
133 기타 select .. for update 처리를 위한 Stored Procudure 등록 및 사용법 남재우 2011.12.10 24870
132 Install LINUX CUBRID 4.0 매니저 설치방법 file 정만영 2011.07.19 23653
131 Install CUBRID Ubuntu Launchpad Installation 방법 file 정만영 2011.07.19 29603
130 기타 자주 발생하는 큐브리드(cubrid) 에러 메시지 정리 admin 2011.07.14 81344
129 기타 [주의사항] CUBRID에서의 BLOB/CLOB 사용시 백업 및 복구에 대한 주의 점 admin 2011.07.14 52504
128 기타 CUBRID 매니저 R3.1에서 웹호스팅 서버의 CUBRID R2.1 접속하는 방법 (큐브리드 매니저에서 다른 버전의 큐브리드 서버 접속 방법) file admin 2011.07.14 31507
127 기타 동시 접속자에 따른 파라미터 설정 admin 2011.07.14 25674
Board Pagination Prev 1 2 3 4 5 6 7 8 9 Next
/ 9

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales