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 ์๋น์ค ํ์ผ์ ์ฌ์ฉํ๋ฉด ํด๋น ๊ถํ์ด ์๋์ผ๋ก ๋ถ์ฌ๋ฉ๋๋ค.
์ค์ ํ์ผ์ ์์ฑํฉ๋๋ค.
OpenProxy๋ฅผ ์คํํฉ๋๋ค.
์ ์์ ํ์ธํฉ๋๋ค.
์ค์ ํ์ผ์ etcd ์น์
์ ์ถ๊ฐํฉ๋๋ค.
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์ ์ ์ฅ๋์ง ์์ต๋๋ค. ํด๋น ์ค์ ์ ๊ฐ ๋
ธ๋์ ์ค์ ํ์ผ์์ ์ง์ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.