Background Image
조회 수 10018 추천 수 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
번호 분류 제목 글쓴이 날짜 조회 수
164 기타 큐브리드10.1 에서 윤초 지원 옵션 사용하기 최광일 2017.09.13 14
163 기타 따라하면 쉬운 compactdb 사용법 file 허서진 2017.07.01 517
162 리눅스에서 top 명령어를 통한 CPU 점유율 확인 및 측정하기 file 정훈 2017.06.02 920
161 Java JDBC를 사용한 다중화 구성 SELECT Query 부하 분산 가이드 file 윤준수 2017.03.30 1464
160 튜닝 다중컬럼 조건에 대한 인라인뷰 처리방안 2 박동윤 2016.12.27 2335
159 Java tomcat8.0(DBCP2)과 CUBRID 연동하기 손승일 2016.07.01 7962
158 튜닝 LIMIT절을 사용하여 SQL문을 간결하게 작성하고, 부분범위 처리를 유도하자. 권호일 2016.06.29 5129
157 Java CUBRID에서 Java AddBatch 사용 엄기호 2016.06.28 5437
156 기타 PyCharm을 이용한 CUBRID, Django 연동 가이드 file 진우진 2016.04.11 6886
155 기타 CSQL 인터프리터 사용방법 정만영 2016.03.03 7164
154 기타 데이터 확인에 정규표현식을 사용 해 보자. 성진 2016.03.01 7213
153 Linux 리소스를 제한(limits.conf) 하여 DB서버를 관리하자 1 주현 2015.12.31 9671
152 기타 CUBRID Migration Toolkit을 이용한 단계별 마이그레이션 진행 방법 file 진우진 2015.12.15 6451
151 기타 알고 보면 쉬운 cubrid lockdb 유틸리티 file 김승훈 2015.12.08 7548
150 Linux 가상머신 환경에서 리눅스 및 큐브리드 설치 가이드 file 이경오 2015.07.14 11643
149 CUBRID Migration방법(by unloaddb & loaddb) 주현 2015.07.01 8958
148 기타 콘솔에서 마이그레이션 하기. file 권호일 2015.06.19 12100
» PHP CUBRID HA 환경에서 Apache-PHP 설정 가이드 이용미 2015.06.16 10018
146 기타 CUBRID isolation level & Dirty Read 정만영 2015.05.29 9509
145 Windows Windows 에 설치 된 JRE 설치 위치 확인 하기. file 성진 2015.05.28 10398
Board Pagination Prev 1 2 3 4 5 6 7 8 9 Next
/ 9

Contact Cubrid

Tel. 070-4077-2110 / Email. contact_at_cubrid.com
Contact Sales