All pages
1 of 1

Loading...

Openproxy ์‚ฌ์šฉ ์„ค๋ช…์„œ

OpenProxy ์‚ฌ์šฉ ์„ค๋ช…์„œ

๋ฒ„์ „: 1.1.3


1. Synopsis

openproxy [config_file]
openproxy show [--full] [--format toml|json] [--section <์„น์…˜๋ช…>]
openproxy edit [--set <key>=<value>]
openproxy encode [password]
openproxy --force-config-file [config_file]
openproxy [--log-target file|stdout|both] [--log-level trace|debug|info|warn|error]
          [--log-dir <๋””๋ ‰ํ† ๋ฆฌ>] [--max-logfile-num <๊ฐœ์ˆ˜>] [--log-format text|structured|debug]
openproxy --version
openproxy --help

2. ๊ฐœ์š”

OpenProxy๋Š” Rust๋กœ ์ž‘์„ฑ๋œ PostgreSQL ์ปค๋„ฅ์…˜ ํ’€๋Ÿฌ ๋ฐ ํ”„๋ก์‹œ์ž…๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ OpenProxy๋ฅผ PostgreSQL ์„œ๋ฒ„์ฒ˜๋Ÿผ ์—ฐ๊ฒฐํ•˜๋ฉฐ, OpenProxy๊ฐ€ ์‹ค์ œ ์„œ๋ฒ„ ์—ฐ๊ฒฐ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

  • ์ปค๋„ฅ์…˜ ํ’€๋ง: ์ƒˆ ์—ฐ๊ฒฐ ์ƒ์„ฑ ๋น„์šฉ์„ ์ค„์—ฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ถ„๋ฆฌ: ์ฟผ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ๋ถ„์„ํ•˜์—ฌ ์“ฐ๊ธฐ๋Š” primary, ์ฝ๊ธฐ๋Š” replica๋กœ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค.

  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ: ์—ฌ๋Ÿฌ replica ๊ฐ„์— ์ฝ๊ธฐ ์ฟผ๋ฆฌ๋ฅผ ๋ถ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

  • ์ž๋™ Failover: OpenSQL ์—์„œ primary๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜์—ฌ ์ƒˆ primary๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

  • etcd ์—ฐ๋™: etcd์— ์„ค์ •์„ ์ €์žฅํ•˜๊ณ  ์—ฌ๋Ÿฌ OpenProxy ์ธ์Šคํ„ด์Šค ๊ฐ„์— ์„ค์ •์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

  • VRRP / VIP: ์—ฌ๋Ÿฌ OpenProxy ์ธ์Šคํ„ด์Šค ์•ž๋‹จ์— ๊ฐ€์ƒ IP๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๊ณ ๊ฐ€์šฉ์„ฑ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.


OpenProxy๋Š” ๋‘ ๊ฐ€์ง€ ํ’€๋ง ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ํ’€๋ง (transaction) โ€” ๊ถŒ์žฅ

ํŠธ๋žœ์žญ์…˜์ด ์‹œ์ž‘๋  ๋•Œ ์„œ๋ฒ„ ์—ฐ๊ฒฐ์„ ํ• ๋‹นํ•˜๊ณ , ํŠธ๋žœ์žญ์…˜์ด ๋๋‚˜๋ฉด ์ฆ‰์‹œ ํ’€๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์„œ๋ฒ„ ์—ฐ๊ฒฐ์„ ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์žฌ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์—ฐ๊ฒฐ ์ˆ˜๋ฅผ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ, ํŠธ๋žœ์žญ์…˜ ์™ธ๋ถ€์—์„œ SET ๋ช…๋ น์–ด๋‚˜ ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์˜๋„ํ•˜์ง€ ์•Š์€ ๋™์ž‘์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ธ์…˜ ํ’€๋ง (session)

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ๋œ ๋™์•ˆ ์„œ๋ฒ„ ์—ฐ๊ฒฐ์ด ์ „์šฉ์œผ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. SET ๋ช…๋ น, ์ค€๋น„๋œ ๊ตฌ๋ฌธ, ์ž„์‹œ ํ…Œ์ด๋ธ” ๋“ฑ ์„ธ์…˜ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ์„œ๋ฒ„ ์—ฐ๊ฒฐ ์ˆ˜ ์ ˆ๊ฐ ํšจ๊ณผ๊ฐ€ ํŠธ๋žœ์žญ์…˜ ํ’€๋ง์— ๋น„ํ•ด ์ž‘์Šต๋‹ˆ๋‹ค.

query_parser_enabled = true์™€ query_parser_read_write_splitting = true๋ฅผ ์„ค์ •ํ•˜๋ฉด OpenProxy๊ฐ€ SQL ์ฟผ๋ฆฌ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ์ž๋™์œผ๋กœ ์—ญํ• ์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

  • SELECT โ†’ replica๋กœ ๋ผ์šฐํŒ…

  • INSERT, UPDATE, DELETE, DDL โ†’ primary๋กœ ๋ผ์šฐํŒ…

primary_reads_enabled = true๋กœ ์„ค์ •ํ•˜๋ฉด replica๊ฐ€ ์—†๊ฑฐ๋‚˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ primary๋„ ์ฝ๊ธฐ ๋Œ€์ƒ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

OpenProxy๋Š” ๋‘ ๊ฐ€์ง€ ์šด์˜ ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ ๋‹จ๋… ๋ชจ๋“œ

์„ค์ • ํŒŒ์ผ(openproxy.toml)๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์„ค์ • ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋˜๋ฉด 5์ดˆ ์ฃผ๊ธฐ๋กœ ์ž๋™ ๊ฐ์ง€ํ•˜์—ฌ reloadํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ์„œ๋ฒ„ ํ™˜๊ฒฝ์ด๋‚˜ etcd ์—†์ด ์šด์˜ํ•˜๋Š” ๊ฒฝ์šฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

etcd ์—ฐ๋™ ๋ชจ๋“œ (HA)

์„ค์ •์„ etcd์— ์ €์žฅํ•˜๊ณ  ์—ฌ๋Ÿฌ ๋…ธ๋“œ๊ฐ€ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. etcd์˜ ์„ค์ •์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋ชจ๋“  OpenProxy ์ธ์Šคํ„ด์Šค์— ์ž๋™์œผ๋กœ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. Patroni์™€ ๋™์ผํ•œ etcd ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ primary/replica ์—ญํ• ์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์„ค์ •์ด ์—ฌ๋Ÿฌ ๊ณณ์— ์žˆ์„ ๊ฒฝ์šฐ ๋‹ค์Œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

--force-config-file ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด etcd๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์„ค์ • ํŒŒ์ผ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ OpenProxy ์ธ์Šคํ„ด์Šค๋ฅผ ์šด์˜ํ•  ๋•Œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ญ์ƒ ํ™œ์„ฑ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ€์ƒ IP(VIP)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. VRRP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค ๊ฐ„์— VIP ์†Œ์œ ๊ถŒ์„ ํ˜‘์ƒํ•˜๋ฉฐ, ํ™œ์„ฑ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹ค์šด๋˜๋ฉด ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๊ฐ€ VIP๋ฅผ ์ธ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

VRRP ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด CAP_NET_ADMIN, CAP_NET_RAW ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. OpenSQL ์—์„œ ์ œ๊ณตํ•˜๋Š” systemd ์„œ๋น„์Šค ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ๊ถŒํ•œ์ด ์ž๋™์œผ๋กœ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.


  1. ์„ค์ • ํŒŒ์ผ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

  1. OpenProxy๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ ‘์†์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  1. ์„ค์ • ํŒŒ์ผ์— etcd ์„น์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  1. OpenProxy๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

etcd์— ์—ฐ๊ฒฐ๋˜๋ฉด ์„ค์ •์ด etcd์— ์ €์žฅ๋˜๊ณ  ์ดํ›„๋ถ€ํ„ฐ๋Š” etcd๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.


์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” systemd ์„œ๋น„์Šค๋กœ ๋“ฑ๋กํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์žฌ๋ถ€ํŒ… ์‹œ ์ž๋™์œผ๋กœ ์‹œ์ž‘๋˜๊ณ , ๋น„์ •์ƒ ์ข…๋ฃŒ ์‹œ ์ž๋™์œผ๋กœ ์žฌ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค ํŒŒ์ผ ์œ„์น˜: /etc/systemd/system/openproxy.service

์„œ๋น„์Šค ๋“ฑ๋ก ๋ฐ ์‹œ์ž‘

์„œ๋น„์Šค ์ค‘์ง€ ๋ฐ ์žฌ์‹œ์ž‘


OpenProxy๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. config_file์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ openproxy.toml์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋กœ๋“œ๋œ ์„ค์ •์„ ์ถœ๋ ฅํ•˜๊ณ  ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์„ค์ • ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ, ๊ฒฝ๋กœ๋Š” ๋ฐ˜๋“œ์‹œ ์„œ๋ธŒ์ปค๋งจ๋“œ ์•ž์— ์œ„์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ค์ •์„ ํŽธ์ง‘ํ•˜๊ณ  ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์„ค์ • ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ, ๊ฒฝ๋กœ๋Š” ๋ฐ˜๋“œ์‹œ ์„œ๋ธŒ์ปค๋งจ๋“œ ์•ž์— ์œ„์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

etcd๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ, ๋ณ€๊ฒฝ ๋‚ด์šฉ์€ etcd์— ์ €์žฅ๋˜๋ฉฐ ์„ค์ • ํŒŒ์ผ์€ ์ˆ˜์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹จ, virtual_router ์„ค์ •์€ etcd์— ์ €์žฅ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์„ค์ • ํŒŒ์ผ์—์„œ ์ง์ ‘ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ SCRAM-SHA-256 ์„œ๋ฒ„์—์„œ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ถœ๋ ฅ๋˜๋Š” ๊ฒฐ๊ณผ๊ฐ’์€ openproxy.toml ํŒŒ์ผ์˜ ์‚ฌ์šฉ์ž Password๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. auth_type ๊ฐ’์ด scram-sha-256 ํ˜•ํƒœ๋กœ ์ง€์ •๋œ ๊ฒฝ์šฐ์—๋งŒ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

PostgreSQL์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ server_password ๊ฐ’์œผ๋กœ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

etcd๊ฐ€ ํ™œ์„ฑํ™”๋œ ํ™˜๊ฒฝ์—์„œ๋„ ์„ค์ • ํŒŒ์ผ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. etcd ์—ฐ๊ฒฐ ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ์ž„์‹œ ์šฐํšŒ ์ˆ˜๋‹จ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ต์…˜
๊ธฐ๋ณธ๊ฐ’
์„ค๋ช…

OpenProxy๋Š” ๊ด€๋ฆฌ์ž ์ฝ˜์†”์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. PostgreSQL ํด๋ผ์ด์–ธํŠธ๋กœ openproxy ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

admin_username๊ณผ admin_password๋Š” ์„ค์ • ํŒŒ์ผ์˜ general.admin_username, general.admin_password์— ์ •์˜๋œ ๊ฐ’์ž…๋‹ˆ๋‹ค.

๋ช…๋ น์–ด
์„ค๋ช…
๋ช…๋ น์–ด
์„ค๋ช…

์ผ๋ถ€ ์„ค์ • ๊ฐ’์„ ๋Ÿฐํƒ€์ž„์— ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.


general.etcd.enabled ๊ฐ’์„ false์—์„œ true๋กœ, ๋˜๋Š” true์—์„œ false๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ OpenProxy ํ”„๋กœ์„ธ์Šค๋ฅผ ์žฌ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ ๊ธฐ๋ฐ˜ ์„ค์ • ์ž๋™ reload๊ฐ€ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜๋”๋ผ๋„, etcd watch ํƒœ์Šคํฌ๋Š” ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘ ์‹œ ์ตœ์ดˆ 1ํšŒ๋งŒ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ์ค‘ enabled ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด๋„ etcd ์—ฐ๋™์ด ํ™œ์„ฑํ™”๋˜๊ฑฐ๋‚˜ ๋น„ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

etcd๊ฐ€ ํ™œ์„ฑํ™”๋œ ์ƒํƒœ(enabled = true)์—์„œ RELOAD ๋ช…๋ น ๋˜๋Š” SIGHUP ์‹œ๊ทธ๋„์„ ๋ณด๋‚ด๋ฉด ์„ค์ • ์ „์ฒด๋ฅผ ์žฌ๋กœ๋“œํ•˜๋Š” ๋Œ€์‹  Patroni ์—ญํ•  ์ •๋ณด๋งŒ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.

etcd ์—ฐ๋™ ํ™˜๊ฒฝ์—์„œ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด openproxy edit ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ etcd์— ์ง์ ‘ ๊ฐ’์„ ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

[general.virtual_router] ์„ค์ •์€ ๋…ธ๋“œ๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ(interface ์ด๋ฆ„, priority ๋“ฑ) etcd์— ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์„ค์ •์€ ๊ฐ ๋…ธ๋“œ์˜ ์„ค์ • ํŒŒ์ผ์—์„œ ์ง์ ‘ ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ๋‚ด๋ถ€ ์ฟผ๋ฆฌ โ†’ ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘ ์‹œ์ ์— ๊ฒฐ์ •๋œ ์—ญํ•  ์œ ์ง€

--log-dir

logs

๋กœ๊ทธ ํŒŒ์ผ ์ €์žฅ ๋””๋ ‰ํ† ๋ฆฌ. log-target์ด file ๋˜๋Š” both์ผ ๋•Œ ์‚ฌ์šฉ

--max-logfile-num

5

๋กœ๊ทธ ํŒŒ์ผ ์ตœ๋Œ€ ๋ณด๊ด€ ๊ฐœ์ˆ˜. ๋กœ๊ทธ ํŒŒ์ผ์€ ๋งค์ผ ์ž์ •์— ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ, ๋ณด๊ด€ ๊ฐœ์ˆ˜ ์ดˆ๊ณผ ์‹œ ์˜ค๋ž˜๋œ ํŒŒ์ผ๋ถ€ํ„ฐ ์‚ญ์ œ

--log-format

text

๋กœ๊ทธ ์ถœ๋ ฅ ํ˜•์‹. text (์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์‰ฌ์šด ํ˜•์‹), structured (JSON ๋“ฑ ๊ตฌ์กฐํ™” ํ˜•์‹), debug

SHOW STATS

์ฟผ๋ฆฌ ์ˆ˜, ๋ฐ”์ดํŠธ ์ˆ˜, ์‘๋‹ต ์‹œ๊ฐ„ ๋“ฑ ํ†ต๊ณ„

SHOW DATABASES

์„ค์ •๋œ ํ’€(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค) ๋ชฉ๋ก

SHOW USERS

์„ค์ •๋œ ์‚ฌ์šฉ์ž ๋ชฉ๋ก

SHOW CONFIG

ํ˜„์žฌ ๋กœ๋“œ๋œ ์„ค์ • ๊ฐ’

SHOW LISTS

๋‚ด๋ถ€ ์˜ค๋ธŒ์ ํŠธ ๊ฐœ์ˆ˜ ํ†ต๊ณ„

SHOW BANS

์ผ์‹œ ์ฐจ๋‹จ๋œ ์„œ๋ฒ„ ๋ชฉ๋ก

SHOW VERSION

OpenProxy ๋ฒ„์ „ ์ •๋ณด

SHOW HELP

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด ๋ชฉ๋ก

SHUTDOWN

OpenProxy๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

--log-target

both

๋กœ๊ทธ ์ถœ๋ ฅ ๋Œ€์ƒ. file (ํŒŒ์ผ๋งŒ), stdout (ํ‘œ์ค€์ถœ๋ ฅ๋งŒ), both (๋‘˜ ๋‹ค)

--log-level

info

๋กœ๊ทธ ๋ ˆ๋ฒจ. trace, debug, info, warn, error

SHOW POOLS

๊ฐ ํ’€์˜ ์ปค๋„ฅ์…˜ ์ˆ˜, ๋Œ€๊ธฐ ํด๋ผ์ด์–ธํŠธ ์ˆ˜ ๋“ฑ ํ’€ ์ƒํƒœ

SHOW CLIENTS

ํ˜„์žฌ ์—ฐ๊ฒฐ๋œ ํด๋ผ์ด์–ธํŠธ ๋ชฉ๋ก

SHOW SERVERS

ํ˜„์žฌ ์—ด๋ ค ์žˆ๋Š” ์„œ๋ฒ„ ์—ฐ๊ฒฐ ๋ชฉ๋ก

RELOAD

์„ค์ •์„ ๋‹ค์‹œ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. etcd ํ™œ์„ฑ ์‹œ Patroni ์—ญํ• ๋งŒ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.

PAUSE [db, user]

์ง€์ •ํ•œ ํ’€(๋˜๋Š” ์ „์ฒด)์˜ ์ƒˆ ์ฟผ๋ฆฌ ์ˆ˜์‹ ์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ง„ํ–‰ ์ค‘์ธ ํŠธ๋žœ์žญ์…˜์€ ์™„๋ฃŒ๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

RESUME [db, user]

PAUSE๋กœ ์ค‘์ง€๋œ ํ’€์„ ์žฌ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

3. ํ•ต์‹ฌ ๊ฐœ๋…

3.1 ์ปค๋„ฅ์…˜ ํ’€๋ง ๋ชจ๋“œ

3.2 ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ถ„๋ฆฌ (Query Router)

3.3 ์šด์˜ ๋ชจ๋“œ

3.4 ์„ค์ • ์šฐ์„ ์ˆœ์œ„

3.5 VRRP / VIP

4. ๋น ๋ฅธ ์‹œ์ž‘

ํŒŒ์ผ ๋‹จ๋… ๋ชจ๋“œ

etcd ์—ฐ๋™ ๋ชจ๋“œ (HA)

5. systemd ์„œ๋น„์Šค ๋“ฑ๋ก

6. ์‹คํ–‰ ์˜ต์…˜

openproxy [config_file]

openproxy show

openproxy edit

openproxy encode

--force-config-file

๋กœ๊ทธ ์˜ต์…˜

7. ๊ด€๋ฆฌ์ž ์ฝ˜์†”

์ ‘์† ๋ฐฉ๋ฒ•

SHOW ๋ช…๋ น์–ด

์ œ์–ด ๋ช…๋ น์–ด

SET ๋ช…๋ น์–ด

8. ์ œ์•ฝ์‚ฌํ•ญ

etcd.enabled ๋ณ€๊ฒฝ ์‹œ ํ”„๋กœ์„ธ์Šค ์žฌ์‹œ์ž‘ ํ•„์š”

etcd ํ™œ์„ฑ ์‹œ RELOAD ๋™์ž‘ ์ฐจ์ด

virtual_router๋Š” etcd ๋™๊ธฐํ™” ๋Œ€์ƒ์—์„œ ์ œ์™ธ

CLI ํ”Œ๋ž˜๊ทธ > etcd > ์„ค์ • ํŒŒ์ผ
[general]
host = "0.0.0.0"
port = 6432
admin_username = "admin"
admin_password = "adminpassword"

[pools.mydb]
pool_mode = "transaction"
auth_type = "scram-sha-256"

[pools.mydb.users.0]
username = "appuser"
password = "apppassword"
server_username = "appuser"
server_password = "apppassword"
pool_size = 20

[pools.mydb.shards.0]
servers = [
    ["192.168.1.10", 5432, "primary"],
    ["192.168.1.11", 5432, "replica"],
]
database = "mydb"
openproxy /etc/openproxy/openproxy.toml
psql -h 127.0.0.1 -p 6432 -U user mydb
[general]
host = "0.0.0.0"
port = 6432
admin_username = "admin"
admin_password = "adminpassword"

[general.etcd]
enabled = true
endpoints = ["192.168.1.1:2379", "192.168.1.2:2379", "192.168.1.3:2379"]
patroni_namespace = "/service"
patroni_scope = "opensql"

[pools.mydb]
pool_mode = "transaction"
auth_type = "scram-sha-256"
query_parser_enabled = true
query_parser_read_write_splitting = true

[pools.mydb.users.0]
username = "appuser"
password = "apppassword"
server_username = "appuser"
server_password = "apppassword"
pool_size = 20

[pools.mydb.shards.0]
servers = [
    ["192.168.1.10", 5432, "Auto"],
    ["192.168.1.11", 5432, "Auto"],
    ["192.168.1.12", 5432, "Auto"],
]
database = "mydb"
use_patroni = true
openproxy /etc/openproxy/openproxy.toml
[Unit]
Description=OpenProxy - PostgreSQL Connection Pooler (OpenSQL)
After=network.target etcd.service
StartLimitIntervalSec=0

[Service]
User=opensql
Type=simple
Restart=always
RestartSec=5
Environment=RUST_LOG=info
ExecStart=/usr/bin/openproxy /etc/openproxy/openproxy.toml
StandardOutput=journal
StandardError=journal
SyslogIdentifier=openproxy
LimitNOFILE=65536
# VRRP ์‚ฌ์šฉ ์‹œ ํ•„์š”. VRRP ๋ฏธ์‚ฌ์šฉ ์‹œ ์ œ๊ฑฐ ๊ฐ€๋Šฅ.
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW

[Install]
WantedBy=multi-user.target
# ์„œ๋น„์Šค ํŒŒ์ผ ๋ณต์‚ฌ ํ›„ daemon reload
sudo systemctl daemon-reload

# ๋ถ€ํŒ… ์‹œ ์ž๋™ ์‹œ์ž‘ ํ™œ์„ฑํ™”
sudo systemctl enable openproxy

# ์„œ๋น„์Šค ์‹œ์ž‘
sudo systemctl start openproxy

# ์ƒํƒœ ํ™•์ธ
sudo systemctl status openproxy

# ๋กœ๊ทธ ํ™•์ธ
sudo journalctl -u openproxy -f
sudo systemctl stop openproxy
sudo systemctl restart openproxy
openproxy
openproxy /etc/openproxy/openproxy.toml
# ๊ธฐ๋ณธ (TOML ํ˜•์‹, ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •๋œ ํ•ญ๋ชฉ๋งŒ)
openproxy show

# ๊ธฐ๋ณธ๊ฐ’ ํฌํ•จ ์ „์ฒด ์„ค์ • ์ถœ๋ ฅ
openproxy show --full

# JSON ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅ
openproxy show --format json

# ํŠน์ • ์„น์…˜๋งŒ ์ถœ๋ ฅ
openproxy show --section general
openproxy show --section pools.mydb
# OK: config_file์ด ์„œ๋ธŒ์ปค๋งจ๋“œ ์•ž์— ์œ„์น˜
openproxy /etc/openproxy/openproxy.toml show

# Fail: config_file์ด ์„œ๋ธŒ์ปค๋งจ๋“œ ๋’ค์— ์˜ค๋ฉด ์ธ์‹๋˜์ง€ ์•Š์Œ
openproxy show /etc/openproxy/openproxy.toml
# ๋Œ€ํ™”ํ˜•: $EDITOR๋กœ ์„ค์ • ํŒŒ์ผ ์—ด๊ธฐ
openproxy edit

# ๋น„๋Œ€ํ™”ํ˜•: ํŠน์ • ๊ฐ’ ๋ณ€๊ฒฝ
openproxy edit --set general.pool_size=20
openproxy edit --set general.connect_timeout=2000

# ์—ฌ๋Ÿฌ ๊ฐ’ ๋™์‹œ ๋ณ€๊ฒฝ
openproxy edit --set general.connect_timeout=2000 --set general.idle_timeout=300000
# OK: config_file์ด ์„œ๋ธŒ์ปค๋งจ๋“œ ์•ž์— ์œ„์น˜
openproxy /etc/openproxy/openproxy.toml edit --set general.pool_size=20

# Fail: config_file์ด ์„œ๋ธŒ์ปค๋งจ๋“œ ๋’ค์— ์˜ค๋ฉด ์ธ์‹๋˜์ง€ ์•Š์Œ
openproxy edit /etc/openproxy/openproxy.toml --set general.pool_size=20
openproxy encode 'mypassword!@#'
[pools.my_pool]
auth_type = "scram-sha-256"

[pools.my_pool.users.0]
username = "opensql_user"
password = "SCRAM-SHA-256$4096:..."
openproxy --force-config-file /etc/openproxy/openproxy.toml
# ๋กœ๊ทธ๋ฅผ ํŒŒ์ผ๋กœ๋งŒ ์ €์žฅ, ์ €์žฅ ๊ฒฝ๋กœ ๋ฐ ๋ณด๊ด€ ๊ฐœ์ˆ˜ ์ง€์ •
openproxy --log-target file --log-dir /var/log/openproxy --max-logfile-num 10 /etc/openproxy/openproxy.toml

# ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ debug๋กœ ์„ค์ •ํ•˜์—ฌ ํ‘œ์ค€์ถœ๋ ฅ์œผ๋กœ๋งŒ ์ถœ๋ ฅ
openproxy --log-target stdout --log-level debug /etc/openproxy/openproxy.toml
psql -h 127.0.0.1 -p 6432 -U <admin_username> openproxy
SET key = value
# ์„ค์ • ํŒŒ์ผ์—์„œ enabled ๋ณ€๊ฒฝ ํ›„ ๋ฐ˜๋“œ์‹œ ์žฌ์‹œ์ž‘
sudo systemctl restart openproxy