Background Image
조회 수 10661 추천 수 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
번호 분류 제목 글쓴이 날짜 조회 수
106 Linux CUBRID DB와 Broker 분리방안 정만영 2010.04.28 28411
105 기타 데이터 저장 구조와 테이블 재구성 file 손승일 2010.04.21 37489
104 기타 CUBRID 복제 구성하기 - 단일 서버에 구성 방법 포함 남재우 2010.03.08 30002
103 Windows 윈도우즈 환경에서 배치화일을 이용하여 백업 또는 데이터베이스 정리 수행하기 남재우 2010.03.03 27479
102 Linux CUBRID 복제 설계 가이드 file 정만영 2010.03.03 25138
101 Linux CUBRID 사용 포트와 iptables(방화벽) 설정 정만영 2010.03.01 38341
100 기타 자동증가 속성 사용 방법 및 주의 사항 남재우 2010.02.26 35661
99 기타 CUBRID 관련 유용한 기술 자료... 정병주 2010.02.19 33460
98 기타 Server HA 구성 시 CUBRID 설정과 방법 정만영 2010.02.03 21184
97 ODBC/OLEDB Vista_IIS_CUBRID_ASP연동 janus 2010.01.31 24553
96 Install CUBRID2008 R2.1 업그레이드시 serial 관련 문제 해결 방법 남재우 2010.01.28 27347
95 기타 CUBRID 데이터베이스와 연동하여 Qt어플리케이션 개발하기 - 2 3 김대진 2010.01.27 24541
94 기타 CUBRID 데이터베이스와 연동하여 Qt어플리케이션 개발하기 - 1 김대진 2010.01.14 32877
93 기타 CUBRID인덱스 구성 전략 웁쓰 2009.12.31 22193
92 기타 조인 방법(Join Method) 설명 file 웁쓰 2009.12.31 27989
91 기타 스칼라 서브쿼리 사용 가이드 웁쓰 2009.12.31 28268
90 Install CUBRID 에 텍스트큐브 설치하기 file inureyes 2009.12.31 29852
89 기타 예제로 배우는 CUBRID 스터디 문학청년 2009.12.29 18546
88 기타 독자적 테이블 사용되는 복제 재구성 file 손승일 2009.12.30 24173
87 Java SELECT ~ FOR UPDATE 대체 방법 손승일 2009.12.30 32366
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