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
번호 분류 제목 글쓴이 날짜 조회 수
166 Install [linux] wget으로 제품 다운로드 시 "wget: unable to resolve host address ‘ftp.cubrid.org’" 해결방 큐브리드_김주현 2021.07.02 2183
165 기타 [10.2 path] - 생성된 view구문을 'show create view' 수행 시 정상적으로 출력되지 않던 이슈 patch 큐브리드_김주현 2020.11.09 855
164 기타 ERwin을 이용한 CUBRID 포워드 엔지니어링 file 민순 2020.07.14 2267
163 기타 ERwin을 이용한 CUBRID 리버스 엔지니어링 file 민순 2020.07.13 3413
162 Linux <주의> 생성한 DB볼륨을 절대! 삭제하지 말자 큐브리드_김주현 2019.09.30 1557
161 기타 큐브리드10.1 에서 윤초 지원 옵션 사용하기 최광일 2017.09.13 1390
160 기타 따라하면 쉬운 compactdb 사용법 file 허서진 2017.07.01 2499
159 Linux 리눅스에서 top 명령어를 통한 CPU 점유율 확인 및 측정하기 file 정훈 2017.06.02 79897
158 Java JDBC를 사용한 다중화 구성 SELECT Query 부하 분산 가이드 file 윤준수 2017.03.30 3918
157 튜닝 다중컬럼 조건에 대한 인라인뷰 처리방안 2 박동윤 2016.12.27 5983
156 Java tomcat8.0(DBCP2)과 CUBRID 연동하기 손승일 2016.07.01 15525
155 튜닝 LIMIT절을 사용하여 SQL문을 간결하게 작성하고, 부분범위 처리를 유도하자. 권호일 2016.06.29 15441
154 Java CUBRID에서 Java AddBatch 사용 엄기호 2016.06.28 8339
153 기타 PyCharm을 이용한 CUBRID, Django 연동 가이드 file 진우진 2016.04.11 8131
152 기타 CSQL 인터프리터 사용방법 정만영 2016.03.03 16513
151 기타 데이터 확인에 정규표현식을 사용 해 보자. 성진 2016.03.01 12688
150 Linux 리소스를 제한(limits.conf) 하여 DB서버를 관리하자 1 주현 2015.12.31 26551
149 기타 CUBRID Migration Toolkit을 이용한 단계별 마이그레이션 진행 방법 file 진우진 2015.12.15 9494
148 기타 알고 보면 쉬운 cubrid lockdb 유틸리티 file 김승훈 2015.12.08 12018
147 Linux 가상머신 환경에서 리눅스 및 큐브리드 설치 가이드 file 이경오 2015.07.14 13367
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