ticketing.toml(선택)의 각 항목은 전부 환경변수로도 넣을 수 있습니다. 우선순위는 환경변수 > ticketing.toml > 기본값이고, 키·불리언 값은 대소문자를 구분하지 않습니다. Docker 이미지는 scratch 기반이라 설정은 환경변수로 주입하는 것이 기본입니다(설정 파일을 쓰려면 마운트 후 CONFIG로 경로 지정).
| 환경변수 | 기본값 | 설명 |
|---|---|---|
PORT (SERVER_PORT) | 5225 | TCP 리슨 포트. 클러스터 모드에서는 무시되고 CLUSTER_SELF의 포트를 씀 |
DEBUG (SERVER_DEBUG) | 빌드에 따름 | 1/true면 debug 로그 |
SOCKET_BIND | 0.0.0.0 | 리슨 주소 |
SOCKET_NODELAY | true | TCP_NODELAY |
SOCKET_READ_BUF_LEN | 4096 | 연결당 읽기 버퍼(바이트) |
SOCKET_REPLY_QUEUE | 1024 | 연결당 응답 큐 길이 |
SOCKET_REPLY_BATCH | 64 | 한 번의 write로 모아 보내는 최대 응답 수 |
SWEEP_INTERVAL_SECS | 5 | 만료 키 청소 주기(초) |
CLUSTER_SELF | (없음) | 이 노드의 광고 주소 host:port. 있으면 클러스터 모드 |
CLUSTER_PEERS | (없음) | 노드 주소 목록(콤마 구분). 순서 = 승격 우선순위, self 포함, 2개 이상 |
CONFIG | ./conf/ticketing.toml | 설정 파일 경로 |
[cluster](또는 CLUSTER_*)가 없으면 싱글 노드. 가장 빠르지만 재기동 시 짧은 순단이 있고 상태는 인메모리라 재기동하면 사라집니다(lease가 안전망).CLUSTER_PEERS(우선순위 순)와 자기 자신을 가리키는 CLUSTER_SELF를 갖습니다. 살아 있는 노드 중 우선순위가 가장 높은 하나가 액티브가 되고 나머지는 스탠바이로 실시간 복제를 받습니다. 자세한 원리는 동작 원리와 프로토콜 — 서버 ↔ 서버를 참고하세요.Kubernetes 클러스터 배포는 StatefulSet + 헤드리스 서비스를 씁니다. 각 파드가 안정적인 DNS 이름(
ticketing-0.ticketing…,ticketing-1.ticketing…)을 갖도록 해서, 그 이름들을 우선순위 순으로CLUSTER_PEERS에 넣고 각 파드의CLUSTER_SELF는 downward API(metadata.name)로 자동 주입합니다.
Ctrl+C)하면 핸드오프로 스탠바이가 승격하고 클라이언트가 넘어갑니다.sarolab/ticketing · Github: saro-lab/ticketing