For the complete documentation index, see llms.txt. This page is also available as Markdown.

OpenProxy 설정 레퍼런스

버전: 1.1.3


1. 설정 파일 구조

OpenProxy는 TOML 형식의 설정 파일을 사용합니다. 기본 파일 이름은 openproxy.toml이며, 실행 시 경로를 지정할 수 있습니다.

설정 파일은 다음 섹션으로 구성됩니다.

섹션
설명

[general]

전역 설정 (네트워크, 타임아웃, 관리자 계정 등)

[general.etcd]

etcd 연동 설정 (선택)

[general.virtual_router]

VRRP / VIP 설정 (선택)

[general.default_pool]

글로벌 Pool (선택)

[pools.<name>]

풀 설정. <name>은 클라이언트가 접속할 데이터베이스 이름

[pools.<name>.users.<n>]

풀별 사용자 설정 (<n>은 0부터 시작하는 인덱스)

[pools.<name>.shards.<n>]

풀별 서버 연결 설정 (<n>은 0부터 시작하는 인덱스)


2. [general] 섹션

네트워크

파라미터
기본값
설명

host

"0.0.0.0"

수신 IP 주소. 0.0.0.0은 모든 인터페이스에서 수신

port

5432

수신 포트. PgBouncer와 동일하게 6432를 관례적으로 사용

관리자 계정

파라미터
기본값
설명

admin_username

"admin"

관리자 콘솔 접속 계정

admin_password

"admin"

관리자 콘솔 접속 패스워드. 운영 환경에서는 반드시 변경

커넥션 및 타임아웃

파라미터
기본값
설명

connect_timeout

1000 (ms)

서버 연결 수립 대기 시간. 초과 시 해당 서버를 일시 차단

idle_timeout

600000 (ms)

유휴 서버 연결 유지 시간. 초과 시 연결 종료

server_lifetime

3600000 (ms)

서버 연결 최대 유지 시간. 초과 시 유휴 연결 종료

idle_client_in_transaction_timeout

0 (ms)

트랜잭션 내 유휴 클라이언트 대기 시간. 0은 무제한

ban_time

60 (s)

오류 발생 서버를 일시 차단하는 시간

shutdown_timeout

60000 (ms)

종료 시 진행 중인 트랜잭션 완료 대기 시간

healthcheck_timeout

1000 (ms)

서버 헬스체크 타임아웃

healthcheck_delay

30000 (ms)

헬스체크 주기

성능

파라미터
기본값
설명

worker_threads

4

Tokio 비동기 워커 스레드 수. PostgreSQL과 같은 노드에서 실행하는 경우 CPU 코어 수의 절반 권장

server_round_robin

true

서버 선택 시 라운드로빈 사용 여부

TLS (클라이언트 연결)

파라미터
기본값
설명

tls_certificate

없음

TLS 인증서 파일 경로. 설정 시 클라이언트와의 TLS 연결 활성화

tls_private_key

없음

TLS 개인 키 파일 경로

TLS (서버 연결)

파라미터
기본값
설명

server_tls

false

PostgreSQL 서버와의 TLS 연결 사용 여부

verify_server_certificate

false

서버 TLS 인증서 검증 여부


3. [general.etcd] 섹션

etcd 연동을 설정합니다. etcd를 사용하지 않는 경우 이 섹션을 설정 파일에서 제거합니다.

파라미터
필수
기본값
설명

enabled

true

etcd 연동 활성화 여부

endpoints

etcd 엔드포인트 목록. 예: ["192.168.1.1:2379", "192.168.1.2:2379"]

patroni_scope

Patroni 클러스터 scope. Patroni의 PATRONI_SCOPE 환경변수와 일치해야 함

patroni_namespace

아니오

"/service"

Patroni DCS namespace. Patroni의 PATRONI_NAMESPACE 환경변수와 일치해야 함

username

아니오

없음

etcd 인증 사용자 이름

password

아니오

없음

etcd 인증 패스워드

⚠️ 주의: enabled 변경 시 프로세스 재시작 필요

enabled 값을 변경하면 설정 파일 자동 reload가 변경을 감지하더라도 etcd 연동이 활성화되거나 비활성화되지 않습니다. 반드시 OpenProxy 프로세스를 재시작해야 합니다.


4. [general.virtual_router] 섹션

VRRP 기반 가상 IP(VIP)를 설정합니다. 여러 OpenProxy 인스턴스에 VIP를 적용할 때 사용합니다. VIP가 필요 없는 경우 이 섹션을 설정 파일에서 제거합니다.

파라미터
필수
설명

interface

네트워크 인터페이스 이름. 예: "eth0"

router_id

VRRP 라우터 ID (1~255). 동일 네트워크 내 다른 VRRP 그룹과 중복되지 않아야 함

priority

VRRP 우선순위 (1~255). 값이 높을수록 VIP를 우선 소유

advert_int

VRRP 광고 패킷 전송 주기 (초)

vip_addresses

가상 IP 목록. CIDR 표기법 사용. 예: ["192.168.1.100/24"]

pre_promote_script

아니오

MASTER 승격 직전 실행할 스크립트 경로

pre_demote_script

아니오

MASTER 강등 직전 실행할 스크립트 경로

unicast_peers

아니오

유니캐스트 VRRP를 사용하는 경우 상대 노드 IP 목록

참고: VRRP 기능은 CAP_NET_ADMIN, CAP_NET_RAW 권한을 필요로 합니다. systemd 서비스 파일의 AmbientCapabilities 설정을 확인하십시오.

참고: virtual_router 설정은 etcd에 동기화되지 않습니다. 각 노드의 설정 파일에서 개별적으로 관리해야 합니다.


5. [general.default_pool] 섹션

명시적으로 Pool로 등록되지 않은 사용자 이름 - DB 이름 쌍을 가진 사용자 요청을 처리할 글로벌 Connection Pool을 정의합니다. 사용자 이름과 비밀번호를 정의할 수 없으므로 PostgreSQL 에 정의된 사용자 정보를 가져와 클라이언트 요청을 인증하는 auth_passthrough 방식만을 지원합니다. 정의한 auth_query 는 이 Pool의 첫번째Shard에 정의한 데이터베이스에서 실행됩니다.

기타 Users, Shards 설정은 이름이 정의된 Explicit Pool 에서의 설정과 동일합니다. 사용자 정의는 첫번째 사용자 정의를 참조하며 pool_size, statement_timeout 정의만을 참조합니다.

인증

파라미터
기본값
설명

auth_query

사용자 이름과 패스워드 해시를 가져올 쿼리.

예: SELECT usename, password FROM pg_shadow WHERE usename = '$1'

auth_query_user

auth_query 를 실행할 사용자 이름

auth_query_password

auth_query 를 실행할 사용자 비밀번호


6. [pools.<name>] 섹션

풀을 정의합니다. <name>은 클라이언트가 -d 옵션으로 지정하는 데이터베이스 이름이 됩니다. 풀은 여러 개 정의할 수 있습니다.

풀링 모드

파라미터
기본값
설명

pool_mode

"transaction"

풀링 모드. "transaction" 또는 "session"

인증

파라미터
기본값
설명

auth_type

"md5"

클라이언트 인증 방식. "md5" 또는 "scram-sha-256"

읽기/쓰기 분리

파라미터
기본값
설명

query_parser_enabled

false

SQL 파싱을 통한 자동 역할 결정 활성화

query_parser_read_write_splitting

false

읽기/쓰기 분리 활성화. query_parser_enabled = true 필요

primary_reads_enabled

false

읽기 쿼리 대상에 primary 포함 여부

default_role

"any"

역할 결정 불가 시 기본 라우팅 대상. "primary", "replica", "any"

로드 밸런싱

파라미터
기본값
설명

load_balancing_mode

"random"

로드 밸런싱 방식. "random" 또는 "least_outstanding_connections"

prepared_statements_cache_size

0

풀 단위의 Prepared Statements를 저장할 Cache 크기. 0인 경우 클라이언트 별로 Prepared Statements를 관리함.

타임아웃 (풀별 오버라이드)

[general] 섹션의 값을 풀별로 오버라이드할 수 있습니다. 설정하지 않으면 [general]의 값을 따릅니다.

파라미터
설명

connect_timeout

서버 연결 수립 대기 시간 (ms)

idle_timeout

유휴 서버 연결 유지 시간 (ms)

server_lifetime

서버 연결 최대 유지 시간 (ms)


7. [pools.<name>.users.<n>] 섹션

풀에 접속할 수 있는 사용자를 정의합니다. <n>은 0부터 시작합니다. 사용자는 여러 명 정의할 수 있습니다.

파라미터
필수
기본값
설명

username

클라이언트가 사용하는 계정 이름. 지정되지 않은 사용자 이름에 대한 연결을 허용하고자 하는 경우 와일드카드 문자열 * 을 지정한 사용자 정의를 생성합니다.

password

클라이언트 인증 패스워드

pool_size

이 사용자를 위해 유지할 서버 연결 최대 수

server_username

아니오

username과 동일

PostgreSQL 서버에 접속하는 계정 이름. 클라이언트 계정과 다를 수 있음

server_password

아니오

PostgreSQL 서버 접속 패스워드

min_pool_size

아니오

0

유지할 서버 연결 최소 수

statement_timeout

아니오

0 (ms)

쿼리 실행 제한 시간. 0은 무제한

pool_mode

아니오

풀의 pool_mode

사용자별 풀링 모드 오버라이드

pool_size 계산 방법

(PostgreSQL max_connections - 슈퍼유저 연결 수) / 풀 수

예: max_connections = 100, 풀 2개인 경우 → pool_size = 45


8. [pools.<name>.shards.<n>] 섹션 — 서버 연결 설정

OpenProxy가 연결할 PostgreSQL 서버 목록을 정의합니다. <n>은 0부터 시작합니다. 샤딩을 사용하지 않는 일반 환경에서는 shards.0 하나만 정의합니다.

파라미터
필수
설명

servers

PostgreSQL 서버 목록. 각 항목은 ["호스트", 포트, "역할"] 형식

database

접속할 PostgreSQL 데이터베이스 이름

use_patroni

아니오

Patroni 연동 활성화 여부. true로 설정하면 역할을 Patroni가 관리

patroni_port

아니오

Patroni REST API 포트. 기본값: 8008

servers 역할 값

설명

"primary"

쓰기 서버로 고정

"replica"

읽기 서버로 고정

"Auto"

Patroni 연동 시 사용. Patroni가 역할을 자동으로 결정

Patroni 연동 없이 직접 역할 지정

Patroni 연동 (역할 자동 감지)


9. 설정 예시

파일 단독 모드 (standalone)

읽기/쓰기 분리 없이 단일 primary에만 연결하는 가장 단순한 구성입니다.

etcd 연동 모드 (HA)

Patroni HA 클러스터와 연동하여 읽기/쓰기 분리 및 자동 Failover를 사용하는 구성입니다.

Global Pool 예시

[pools.{pool_name}] 형태로 정의되지 않은 사용자 요청을 처리할 Global 레벨의 Default Pool을 정의하는 예시입니다. Default Pool의 경우 임의 사용자에 대한 비밀번호를 설정할 수 없어 인증을 PostgreSQL로 위임하므로 auth_query 관련 설정이 반드시 필요합니다.

또한 scram-sha-256 타입 인증을 사용하면서 auth_query 를 함께 사용하는 경우는 OpenProxy에서 PostgreSQL로 접속하기 위한 패스워드를 알 수 없으므로 PostgreSQL 로의 연결이 반드시 trust 레벨로 설정되어야 합니다.

Wildcard User 예시

정의된 Pool 밑에 모든 사용자 요청을 처리할 Wildcard * 사용자를 생성하는 예시입니다. 마찬가지로 auth_query 정의가 필요하며 해당 쿼리는 첫번째 shards 의 데이터베이스에서 실행됩니다.

또한 scram-sha-256 타입 인증을 사용하면서 auth_query 를 함께 사용하는 경우는 OpenProxy에서 PostgreSQL로 접속하기 위한 패스워드를 알 수 없으므로 PostgreSQL 로의 연결이 반드시 trust 레벨로 설정되어야 합니다.

Last updated