2026.02.04 - [OS&Server/WEB | WAS] - [WEB/WAS] Apache ↔ Tomcat ์ฐ๋(Reverse Proxy)
[WEB/WAS] Apache ↔ Tomcat ์ฐ๋(Reverse Proxy)
์ผ๊ฒฝํ ์ธํดํ์ ํ์ง๋ง ๋ฐ๋ก ์ ๋ฌด๋ฅผ ๋ฐ์ง๋ ์์์ ๊ต์ก๋ค๋๋ฉด์ ๋ ์๊ฐ์ ๋ฐํ์ผ๋ก ํด๋ณด๊ณ ์ถ์ ๊ฑธ ๊ธฐํํด์ ๊ฐ๋จํ ์ฅ์ ํ ์คํธ๋ฅผ ํ๋ ค๊ณ ํ๋ค. ๊ทธ๋์ ํ ์คํธ ํ๊ฒฝ์ ๋ง๋ค๊ธฐ ์ํด Apache, Tom
lucy-devblog.tistory.com
์ค๋์ ์ ๋ฒ์ WEBโก๏ธWASโก๏ธDB 3-Tier๋ก ๊ตฌ์ฑํ๋ ์๋ฒ์์ DB ์๋ฒ๋ฅผ ์ด์คํํด Failover ๋ฐ์ ์ ์๋ ๋ณต๊ตฌ๊ฐ ๋๋๋ก ๊ตฌ์ฑํ๊ณ ์ ํ๋ค. ์ฐธ๊ณ ๋ก ์ฌ์ฉํ๋ OS๋ Rocky Linux 9.7์ด๋ค.
1๏ธโฃ Primary DB ์๋ฒ ๊ตฌ์ฑ ํ์ธ

์์ํ๊ธฐ ์ ์ ๋จผ์ DB ๋ฒ์ ์ ํ์ธํ๋ค. ๋ฒ์ ์ ๋ณด๋ฉด 16์ธ ๊ฒ์ ์ ์ ์๋ค.
2๏ธโฃ์ธ๋ถ ์ ์ ๋ฐ ๋ณต์ ์ค์
postgresql.conf ์ค์
listen_addresses = '*' # ๋ชจ๋ IP์์ ์ ์ ํ์ฉ
wal_level = replica # ๋ณต์ ๋ก๊ทธ ํ์ฑํ
archive_mode = on # WAL ์์นด์ด๋ธ ํ์ฑํ
archive_command = 'cp %p /var/lib/pgsql/16/archive/%f' # WAL ํ์ผ ๋ณต์ฌ ๋ช
๋ น
max_wal_senders = 10 # WAL ์ก์ ํ๋ก์ธ์ค ์
wal_keep_size = 128MB # WAL ๋ณด์กด ํฌ๊ธฐ
hot_standby = on # ์คํ ๋ฐ์ด ์๋ฒ์์ ์ฝ๊ธฐ ํ์ฉ
pg_hba.conf ์ค์

๋ง์ง๋ง ์ค์ replicator ๋ง ์ถ๊ฐํ๊ณ ์ด๊ฑธ ์ ์ฅํ ํ์ postgresql์ ์ฌ์์ํ๋ค.
---2026.04.25 ์ถ๊ฐ---
์ผ๋ถ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ scram-sha-256์ผ๋ก ๋ ๊ฒ์ ๋ชจ๋ md5๋ก ๋ณ๊ฒฝํ์๋ค.
3๏ธโฃ๋ณต์ ์ฉ ์ฌ์ฉ์ ์์ฑ
sudo -u postgres psql
CREATE USER replicator REPLICATION LOGIN ENCRYPTED PASSWORD '๋น๋ฐ๋ฒํธ';
pg_hba.conf์ ์์ฑํ ๋ณต์ ์ฉ ์ฌ์ฉ์๋ฅผ ์์ฑํ๋ฉด ๋๋ค.
4๏ธโฃStandby ์๋ฒ ๊ตฌ์ฑ
๋ฐ์ดํฐ ๋๋ ํ ๋ฆฌ ์ด๊ธฐํ
# Standby ์๋ฒ ๋ฐ์ดํฐ ๋๋ ํ ๋ฆฌ ์ด๊ธฐํ
sudo systemctl stop postgresql-16
sudo rm -rf /var/lib/pgsql/16/data/
# Base Backup ์ํ
sudo systemctl start postgresql-16
sudo -u postgres psql
# PostgreSQL ์ ์ ์ดํ
SELECT pg_is_in_recovery(); # -- true๋ฉด Standby ์ํ์
๋๋ค.
SELECT * FROM pg_stat_wal_receiver; # -- WAL ์์ ์ํ ํ์ธ

5๏ธโฃPgpool-II ์ค์
๋จผ์ Pgpool์ primary ์๋ฒ์ ์ค์นํ๋ค.
sudo dnf install -y pgpool-II
Pgpool -II ๊ธฐ๋ณธ ์ค์
์ค์น๊ฐ ๋๋๋ฉด /etc/pgpool-II/pgpool.conf๋ฅผ ์์ ํ์ฌ pgpool-โ ก์ ๊ธฐ๋ณธ์ ์ธ ์ค์ ์ ํ๋ค.
listen_addresses = '*' # ์ธ๋ถ ์ ์ ํ์ฉ
port = 9999 # Pgpool ํฌํธ
backend_hostname0 = 'Master-IP' # Primary
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/var/lib/pgsql/16/data'
backend_flag0 = 'ALLOW_TO_FAILOVER'
backend_hostname1 = 'Stamdby-IP' # Standby
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/var/lib/pgsql/16/data'
backend_flag1 = 'ALLOW_TO_FAILOVER'
enable_pool_hba = on # ์์ฒด ์ธ์ฆ ์ฌ์ฉ
sr_check_period = 10 # ๋ณต์ ์ ๊ฒ ์ฃผ๊ธฐ
sr_check_user = 'replicator'
sr_check_password = 'replicatorpass'
health_check_period = 10 # ํฌ์ค์ฒดํฌ ์ฃผ๊ธฐ
health_check_user = 'replicator'
health_check_password = 'replicatorpass'
์ด๋ฒ์๋ /etc/pgpool-II/pool_hba.conf๋ฅผ ์ค์ ํ๋ค. ์ง๊ธ์ ์ฐ์ 0.0.0.0/0์ผ๋ก ์ค์ ํ์ง๋ง ์ด ๋ถ๋ถ์ ๋ณธ์ธ ํ๊ฒฝ์ ๋ง์ถฐ์ ๋ฐ๊พธ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.

์ค์ ํ pgpool-II๋ฅผ ์ฌ์์ํ๊ณ pool_passwd ํ์ผ์ ๊ตฌ์ฑํ๋ค. postgres, replicator์ ์ด์ธ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค.
sudo pg_md5 -m -u 'db์ฌ์ฉ์' '์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ' # ์ง์ ํ ์ฌ์ฉ์์ ๋ํ pool_passwd๊ฐ ์์ฑ๋จ
chmod 600 /etc/pgpool-II/pool_passwd
chown postgres:postgres /etc/pgpool-II/pool_passwd
pool_passwd ํ์ผ์ ๊ตฌ์ฑํ๋ค๊ฐ initializing pool password, failed to open file:"/etc/pgpool-II/pool_passwd" ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๊ถํ์ ๋จผ์ ๋ถ์ฌํ๊ณ ์๋ํด๋ด๋ ์ข์ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ /etc/pgpool-II/pgpool.conf์์ pool_passwd์ ์ฃผ์์ ํด์ ํ๊ณ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ๊ณ pgpool-II๋ฅผ ์ฌ์์ํ๋ค.

์ฌ์์ํ ํ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ด์ฉํด ์ฐ๊ฒฐ์ด ๋๋์ง ํ์ธํ๋ค.
psql -h 127.0.0.1 -p 9999 -U 'pool_passwd์ ๋ฃ์ ์ฌ์ฉ์' -d 'ํด๋น ์ฌ์ฉ์ DB' -c "show pool_nodes;"

ํน์ ์ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅ ํ psql: ์ค๋ฅ: "127.0.0.1" ํฌํธ 9999 ์๋ฒ์ ์ ์ ํ ์ ์์: ERROR: failed to authenticate with backend using SCRAM์ด ๋ฌ๋ค๋ฉด db ์์ฒด์์๋ ์ธ์ฆ ๋ฐฉ์์ md5๋ก ๋ฐ๊ฟ๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
6๏ธโฃ์๋ Failover ์ค์
pgpool์ด ์ฐ๊ฒฐ์ด ๋์ด์์ผ๋ ์๋ failover๋ฅผ ์ค์ ํด๋ณด๊ฒ ๋ค. ์ด๋ฅผ ์ํด failover.sh๋ฅผ ๋ณต์ฌํ๋ค.
cp /etc/pgpool-II/sample_scripts/failover.sh.sample /etc/pgpool-II/failover.sh
chmod +x /etc/pgpool-II/failover.sh
๊ทธ๋ฆฌ๊ณ /etc/pgpool-II/pgpool.conf์ ๋ค์ ๋ด์ฉ์ ์ถ๊ฐํ๋ค.
failover_command = '/etc/pgpool-II/failover.sh %d %h %p %D %m %H %M %P %r %R %N %S'
follow_primary_command = '/etc/pgpool-II/follow_primary.sh %d %h %p %D %m %H %M %P %r %R'
์๋ ์ ํ์ด ๋ชฉํ์ด๊ธฐ ๋๋ฌธ์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋๋ฅด์ง ์๊ณ ์ ํ๋๋๋ก ํ๊ณ ์ ssh ํค๋ฅผ ์ค์ ํ๋ค.
cd ~/.ssh
ssh-keygen -t rsa -f id_rsa_pgpool
ssh-copy-id -i id_rsa_pgpool.pub postgres@master-IP
ssh-copy-id -i id_rsa_pgpool.pub root@master-IP
ssh-copy-id -i id_rsa_pgpool.pub postgres@slave-IP
ssh-copy-id -i id_rsa_pgpool.pub root@slave-IP
๊ฐ ์๋ฒ์ postgres ๋ฐ root ๊ณ์ ๋ชจ๋ ์ค์ ํด์ผ ํ๋ค.
7๏ธโฃFailover ํ ์คํธ
systemctl stop postgresql-16 #Primary DB ์ค์ง
psql -U postgres -p 9999 -h 127.0.0.1 -c "show pool_nodes;"

Primary DB๋ฅผ ์ค์ง ํ ์๋ ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ๋ฉด db2๋ก ๋์ด๊ฐ์์ ํ์ธํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ Primary DB๋ฅผ ๋ค์ ์คํํ ํ Pgpool๋ ์ฌ์์ ํ๋ฉด ๋ค์ Primary DB๋ก ๋ฐ๊ผ์์ ์ ์ ์๋ค.

์ฐธ๊ณ ์๋ฃ
'Architecture' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Infra] ๋ฐฐํฌ ์ ๋ต - Rolling, Blue/Green, Canary (1) | 2025.08.10 |
|---|---|
| [Infra] DR(Disaster Recovery, ์ฌํด๋ณต๊ตฌ) (0) | 2025.08.01 |
| [Infra] ๋ฐฑ์ (Backup) (0) | 2025.07.23 |
| [Infra] ์๋ฒ(Server) (3) | 2024.12.20 |
| [Infra] ์คํ ๋ฆฌ์ง ์ข ๋ฅ (0) | 2024.12.17 |