PostgreSQL 확장 기능 및 클러스터링
1️⃣ PostgreSQL 확장 기능 (Extensions)
PostgreSQL은 기본적으로 강력한 기능을 제공하지만, 여러 확장 기능을 통해 데이터베이스의 기능을 확장할 수 있습니다. 이들은 PostgreSQL의 기능을 개선하거나 특정 요구 사항을 충족하는 데 유용합니다. 주요 확장 기능에 대해 알아보겠습니다.
1.1 pg_stat_statements
pg_stat_statements
는 쿼리 성능을 모니터링하는 데 유용한 확장 기능입니다. 이 확장을 사용하면 SQL 쿼리의 실행 계획과 성능 통계를 기록할 수 있습니다.
설치 방법:
CREATE EXTENSION pg_stat_statements;
사용 예시:
SELECT * FROM pg_stat_statements WHERE query LIKE 'SELECT%';
이 쿼리는 실행된 SQL 쿼리들의 성능 통계를 출력합니다. pg_stat_statements
는 성능 문제를 식별하고 최적화가 필요한 쿼리를 찾는 데 도움을 줍니다.
1.2 pgcrypto
pgcrypto
는 암호화 기능을 PostgreSQL에 추가하는 확장입니다. 이 확장을 통해 데이터베이스 내에서 데이터를 암호화하거나 복호화할 수 있습니다.
설치 방법:
CREATE EXTENSION pgcrypto;
사용 예시:
-- 데이터를 암호화하여 저장
SELECT pgp_sym_encrypt('Hello World', 'secret_key');
이 예시는 pgcrypto
를 사용하여 문자열을 대칭 키로 암호화하는 방법을 보여줍니다.
1.3 pg_trgm
pg_trgm
확장은 텍스트 데이터를 빠르게 검색하고 유사성을 비교하는 데 사용됩니다. 이 확장은 LIKE
연산자보다 더 효율적인 텍스트 검색을 제공합니다.
설치 방법:
CREATE EXTENSION pg_trgm;
사용 예시:
SELECT * FROM my_table WHERE my_column % 'search_term';
이 쿼리는 pg_trgm
확장을 사용하여 search_term
과 유사한 값을 검색합니다. %
연산자는 pg_trgm
에서 유사성 검색을 위해 제공됩니다.
1.4 PostGIS
PostGIS
는 PostgreSQL에서 공간 데이터를 다룰 수 있게 해주는 확장입니다. 이를 통해 위치 기반 데이터나 GIS(Geographic Information System) 데이터를 효율적으로 저장하고 쿼리할 수 있습니다.
설치 방법:
CREATE EXTENSION postgis;
사용 예시:
SELECT ST_AsText(ST_GeomFromText('POINT(10 20)', 4326));
이 예시는 PostGIS
를 사용하여 공간 데이터를 처리하는 방법을 보여줍니다.
2️⃣ 고가용성 및 클러스터링
PostgreSQL은 고가용성과 확장성을 위한 여러 기능을 제공합니다. 이 절에서는 클러스터링과 장애 조치를 위한 주요 기술을 살펴보겠습니다.
2.1 Streaming Replication 및 Failover 설정
Streaming Replication은 PostgreSQL에서 데이터를 실시간으로 복제하는 기능입니다. 이는 주 서버와 복제 서버 간에 데이터를 동기화하여 고가용성을 제공합니다.
설정 예시:
-
마스터 서버 설정 (
postgresql.conf
)wal_level = replica max_wal_senders = 3 hot_standby = on
-
슬레이브 서버 설정 (
postgresql.conf
)hot_standby = on
-
슬레이브 서버 복제
restore_command = 'cp /var/lib/postgresql/wal_archive/%f %p' primary_conninfo = 'host=master_host port=5432 user=replicator password=replica_pass'
2.2 Patroni를 이용한 자동 Failover 구성
Patroni는 PostgreSQL 클러스터의 고가용성을 관리하는 오픈소스 도구입니다. Patroni는 자동 장애 조치를 지원하고, 복제 및 클러스터 관리를 자동화합니다.
설치 방법:
pip install patroni
구성 예시:
scope: postgres
namespace: /db/
name: postgresql0
restapi:
listen: 0.0.0.0:8008
connect_address: 127.0.0.1:8008
etcd:
hosts: 127.0.0.1:2379
postgresql:
listen: 0.0.0.0:5432
connect_address: 127.0.0.1:5432
data_dir: /var/lib/postgresql/data
bin_dir: /usr/pgsql-12/bin
Patroni는 이와 같은 설정을 통해 클러스터 내에서 자동으로 장애를 감지하고, 새로운 마스터를 선출하여 서비스를 계속 제공할 수 있습니다.
2.3 Pgpool-II 및 HAProxy를 활용한 로드밸런싱
Pgpool-II와 HAProxy는 PostgreSQL의 고가용성 및 로드밸런싱을 위한 유용한 도구입니다. 이 도구들은 읽기 및 쓰기 작업을 여러 서버에 분배하여 데이터베이스의 성능을 향상시킵니다.
Pgpool-II 설정 예시:
backend_hostname0 = 'localhost'
backend_port0 = 5432
backend_weight0 = 1
HAProxy 설정 예시:
frontend pgsql_front
bind *:5432
default_backend pgsql_back
backend pgsql_back
balance roundrobin
server pg1 192.168.1.10:5432 check
server pg2 192.168.1.11:5432 check
이 설정을 통해 Pgpool-II와 HAProxy를 활용하여 여러 PostgreSQL 서버로의 트래픽 분배 및 고가용성을 실현할 수 있습니다.