Azure Database for PostgreSQL 소개

완료됨

Azure Database for PostgreSQL은 다중 서버 버전에서 사용할 수 있습니다.

온-프레미스 PostgreSQL 설치를 실행하고 관리하는 수년간의 경험을 가진 데이터베이스 개발자는 Azure Database for PostgreSQL이 해당 기능을 지원하고 크기를 조정하는 방법을 살펴보려고 합니다.

이 단원에서는 Azure Database for PostgreSQL의 가격 책정, 버전 지원, 복제 및 크기 조정 옵션을 살펴봅니다.

PostgreSQL용 Azure 데이터베이스

Azure Database for PostgreSQL 서비스는 커뮤니티 버전의 PostgreSQL 구현입니다. 이 서비스는 지역 공간 지원 및 전체 텍스트 검색을 포함하여 일반적인 PostgreSQL 시스템에서 사용하는 일반적인 기능을 제공합니다.

Microsoft는 Azure 플랫폼에 PostgreSQL을 적용했으며 많은 Azure 서비스와 긴밀하게 통합되어 있습니다. Azure Database for PostgreSQL 서비스는 Microsoft에서 완전히 관리합니다. Microsoft는 소프트웨어에 대한 업데이트 및 패치를 처리하고 99.99% 가용성의 SLA를 제공합니다. 즉, 서비스를 사용하여 실행 중인 데이터베이스 및 애플리케이션에만 집중할 수 있습니다.

이 서비스의 각 인스턴스에 여러 데이터베이스를 배포할 수 있습니다.

가격 책정 계층

Azure Database for PostgreSQL 서비스의 인스턴스를 만들 때 가격 책정 계층선택하여 할당하려는 컴퓨팅 및 스토리지 리소스를 지정합니다. 가격 책정 계층은 가상 프로세서 코어 수, 사용 가능한 스토리지 양 및 다양한 백업 옵션을 결합합니다. 할당하는 리소스가 많을수록 비용이 높아질 수 있습니다.

Azure Database for PostgreSQL 서비스는 스토리지를 사용하여 데이터베이스 파일, 임시 파일, 트랜잭션 로그 및 서버 로그를 저장합니다. 필요에 따라 현재 용량에 가까워지면 스토리지를 늘릴 수 있도록 지정할 수 있습니다. 이 옵션을 선택하지 않으면 스토리지가 부족한 서버는 계속 실행되지만 읽기 전용으로 작동합니다.

Azure Portal은 가격 책정 계층을 세 가지 광범위한 범위로 그룹화합니다.

  • 기본작은 시스템 및 개발 환경에 적합하지만 I/O 성능이 가변적입니다.
  • 범용프로세서 코어 수와 사용 가능한 스토리지 공간에 따라 최대 6,000 IOPS의 예측 가능한 성능을 제공합니다.
  • 최대 32개의 메모리 최적화 가상 프로세서 코어를 사용하고 최대 6,000 IOPS의 예측 가능한 성능을 제공하는 메모리 최적화.

Microsoft에는 최대 16TB의 스토리지를 프로비전하고 최대 20,000 IOPS를 지원할 수 있는 대규모 스토리지 옵션이 미리 보기로 제공됩니다.

필요한 프로세서 코어 및 스토리지 수를 미세 조정할 수 있습니다. 데이터베이스를 만든 후 필요에 따라 처리 리소스를 확대하거나 축소할 수 있지만, 스토리지는 확장만 가능하고 축소할 수 없습니다. 또한, 필요에 따라 범용 또는 메모리 최적화 가격 책정 계층 간에 전환할 수 있습니다. 당신은 당신이 필요로하는 것에 대해서만 지불합니다.

Azure 포털에서 가격 책정 계층을 보여주는 이미지

비고

프로세서 코어 수를 변경하면 Azure에서 이 컴퓨팅 할당을 사용하여 새 서버를 만듭니다. 서버가 실행되면 클라이언트 연결이 새 서버로 전환됩니다. 이 스위치는 최대 1분이 걸릴 수 있습니다. 이 간격 동안에는 새 연결을 만들 수 없으며 모든 기내 트랜잭션이 롤백됩니다.

백업 옵션의 스토리지 크기만 변경하는 경우 서비스가 중단되지 않습니다.

가격 책정 계층 및 할당된 처리 리소스는 서비스에서 지원할 최대 동시 연결 수를 결정합니다. 예를 들어 범용 가격 책정 계층을 선택하고 64개의 가상 코어를 할당하는 경우 서비스는 1900개의 동시 연결을 지원합니다. 두 개의 가상 코어가 있는 기본 계층은 최대 100개의 동시 연결을 처리합니다. Azure 자체에는 서버를 모니터링하기 위해 이러한 연결 중 5개가 필요합니다. 사용 가능한 연결 수를 초과하면 클라이언트는 심각한 오류가 발생합니다. 죄송합니다. 이미클라이언트가 너무 많습니다.

가격은 변경 될 수 있습니다. 최신 정보는 Azure Database for PostgreSQL 가격 책정 페이지를 방문하세요.

서버 매개 변수

PostgreSQL의 온-프레미스 설치에서 postgresql.conf 파일에 서버 구성 매개 변수를 설정합니다. Azure Database for PostgreSQL을 사용하여 Server 매개 변수 페이지를 통해 구성 매개 변수를 수정합니다. PostgreSQL의 온-프레미스 설치에 대한 모든 매개 변수가 Azure Database for PostgreSQL과 관련이 있는 것은 아니므로 서버 매개 변수 페이지에는 Azure에 적합한 매개 변수만 나열됩니다.

Azure Portal 서버 매개 변수 페이지를 보여 주는 이미지

동적 표시된 매개 변수에 대한 변경 내용은 즉시 적용됩니다. 정적 매개 변수를 사용하려면 서버를 다시 시작해야 합니다. 포털의 개요 페이지에서 다시 시작 단추를 사용하여 서버를 다시 시작합니다.

다시 시작 단추가 강조 표시된 Azure Portal의 개요 페이지를 보여 주는 이미지

고가용성

Azure Database for PostgreSQL은 가용성이 뛰어난 서비스입니다. 오류 검색 및 장애 조치(failover) 메커니즘이 기본적으로 포함되어 있습니다. 하드웨어 또는 소프트웨어 문제로 인해 처리 노드가 중단되면 새 노드를 교체하기 위해 전환됩니다. 현재 해당 노드를 사용하는 모든 연결은 삭제되지만 새 노드에 대해 자동으로 열립니다. 실패한 노드에서 수행되는 모든 트랜잭션은 롤백됩니다. 이러한 이유로 항상 클라이언트가 실패한 작업을 검색하고 다시 시도하도록 구성되어 있는지 확인해야 합니다.

지원되는 PostgreSQL 버전

Azure Database for PostgreSQL 서비스는 현재 PostgreSQL 버전 11을 버전 9.5로 다시 지원합니다. 서비스 인스턴스를 만들 때 사용할 PostgreSQL 버전을 지정합니다. Microsoft는 새 버전의 PostgreSQL을 사용할 수 있게 되면 서비스를 업데이트하는 것을 목표로 하며 이전 두 주 버전과의 호환성을 유지합니다.

Azure는 주 버전이 아닌 부 버전의 PostgreSQL 간에 데이터베이스에 대한 업그레이드를 자동으로 관리합니다. 예를 들어 PostgreSQL 버전 10을 사용하는 데이터베이스가 있는 경우 Azure는 데이터베이스를 자동으로 버전 10.1로 업그레이드할 수 있습니다. 버전 11로 전환하려면 현재 서비스 인스턴스의 데이터베이스에서 데이터를 내보내고, Azure Database for PostgreSQL 서비스의 새 인스턴스를 만들고, 데이터를 이 새 인스턴스로 가져와야 합니다.

코디네이터 및 작업자 노드

데이터는 작업자 노드 간에 분할되고 분산됩니다. 코디네이터의 쿼리 엔진은 복잡한 쿼리를 병렬 처리하여 적절한 작업자 노드로 처리를 지시할 수 있습니다. 작업자 노드는 처리되는 데이터를 포함하는 샤드에 따라 선택됩니다. 그런 다음 코디네이터는 작업자 노드의 결과를 누적한 후 클라이언트로 다시 보냅니다. 단일 작업자 노드만 사용하여 더 간단한 쿼리를 수행할 수 있습니다. 또한 클라이언트는 코디네이터에 연결하고 작업자 노드와 직접 통신하지 않습니다.

필요에 따라 서비스에서 작업자 노드 수를 확장 및 축소할 수 있습니다.

데이터 배포

분산 테이블을 만들어 작업자 노드 간에 데이터를 분산합니다. 분산 테이블은 분할된 데이터베이스로 분할되고 각 분할된 데이터베이스는 작업자 노드의 스토리지에 할당됩니다. 열을 분포 열로 정의하여 데이터를 분할하는 방법을 나타냅니다. 데이터는 이 열에 있는 데이터의 값에 따라 분할됩니다. 분산 테이블을 디자인할 때는 배포 열을 신중하게 선택해야 합니다. 일반적으로 관련 행을 그룹화하는 데 사용되는 고유 값이 많은 열을 사용해야 합니다. 예를 들어 고객의 주문에 대한 정보를 저장하는 전자 상거래 시스템의 테이블에서 고객 ID는 적절한 배포 열일 수 있습니다. 지정된 고객에 대한 모든 주문은 동일한 분할된 데이터베이스에 보관되지만 모든 고객에 대한 주문은 분할된 데이터베이스에 분산됩니다.

참조 테이블을 만들 수도 있습니다. 이러한 테이블에는 도시 이름 또는 상태 코드와 같은 조회 데이터가 포함됩니다. 참조 테이블은 모든 작업자 노드에 전체적으로 복제됩니다. 참조 테이블의 데이터는 상대적으로 정적이어야 합니다. 각 변경은 테이블의 모든 복사본을 업데이트해야 합니다.

마지막으로 로컬 테이블을 만들 수 있습니다. 로컬 테이블은 분할되지 않지만 코디네이터 노드에 저장됩니다. 조인에 필요하지 않은 데이터가 포함된 작은 테이블을 보관하려면 로컬 테이블을 사용합니다. 예를 들어 사용자 이름과 해당 로그인 세부 정보가 있습니다.

Azure Database for PostgreSQL에서 데이터 복제

읽기 전용 복제본은 읽기 집약적 워크로드를 처리하는 데 유용합니다. 클라이언트 연결은 복제본 간에 분산될 수 있으므로 서비스의 단일 인스턴스에 대한 부담을 덜어줍니다. 클라이언트가 전 세계의 다른 지역에 있는 경우 지역 간 복제를 사용하여 각 클라이언트 집합에 가까운 데이터를 배치하고 대기 시간을 줄입니다.

재해 복구를 위한 대체 계획의 일부로 복제본을 사용할 수도 있습니다. 주 서버를 사용할 수 없게 되면 복제본에 연결할 수 있습니다.

비고

주 복제본이 손실되거나 삭제되면 모든 읽기 전용 복제본이 대신 읽기-쓰기 서버가 됩니다. 그러나 이러한 서버는 서로 독립적이므로 한 서버의 데이터에 대한 변경 내용은 나머지 서버에 복사되지 않습니다.

복제본 설정

읽기 전용 복제본에는 주 서버라고 하는 원래 서버에 보관된 데이터베이스의 복사본이 포함되어 있습니다. Azure Portal 또는 CLI를 사용하여 원본의 복제본을 만듭니다.

Azure Database for PostgreSQL 서비스의 복제 페이지를 보여주는 이미지

읽기 전용 복제본을 만들 때 Azure는 Azure Database for PostgreSQL 서비스의 새 인스턴스를 만든 다음 주 서버에서 새 서버로 데이터베이스를 복사합니다. 복제본은 읽기 전용 모드에서 실행됩니다. 데이터 수정 시도는 실패합니다.

복제본 지연 시간

복제는 동기식이 아니며 주 서버의 데이터를 변경하면 복제본에 표시되는 데 다소 시간이 걸릴 수 있습니다. 복제본에 연결하는 클라이언트 애플리케이션은 이 수준의 최종 일관성에 대처할 수 있어야 합니다. Azure Monitor를 사용하면 복제본 간 최대 지연 복제본 지연 메트릭을 사용하여 복제 시 지연 시간을 추적할 수 있습니다.

관리 및 모니터링

pgAdmin 같은 친숙한 도구를 사용하여 Azure Database for PostgreSQL에 연결하여 데이터베이스를 관리하고 모니터링할 수 있습니다. 그러나 서버 백업 및 복원 수행과 같은 일부 서버 중심 기능은 Microsoft에서 관리하고 유지 관리하므로 사용할 수 없습니다.

Azure Database for PostgreSQL 연결된 pgAdmin 도구를 보여 주는 이미지

Azure Database for PostgreSQL을 모니터링하기 위한 Azure 도구

Azure는 서버 및 데이터베이스 성능을 모니터링하고 문제를 해결하는 데 사용하는 광범위한 서비스 집합을 제공합니다. 이러한 서비스를 사용하면 PostgreSQL에서 할당한 Azure 리소스를 활용하는 방법을 볼 수 있습니다. 이 정보를 사용하여 시스템 크기를 조정하고, 데이터베이스의 테이블 및 인덱스 구조를 수정하고, 런타임 통계 및 기타 이벤트를 시각화해야 하는지 여부를 평가합니다. 사용 가능한 서비스는 다음과 같습니다.

  • Azure Monitor. Azure Database for PostgreSQL은 CPU 및 스토리지 사용률, I/O 속도, 메모리 점유율, 활성 연결 수 및 복제 지연 시간과 같은 항목을 추적할 수 있는 메트릭을 제공합니다.

    Azure Database for PostgreSQL에 대한 메트릭을 보여주는 Azure Monitor의 이미지

  • 서버 로그. Azure는 각 PostgreSQL 서버에 대해 로그를 사용할 수 있도록 합니다. Azure Portal에서 다운로드합니다.

    Azure Database for PostgreSQL 서비스 인스턴스에 대한 서버 로그를 보여 주는 이미지

  • 쿼리 저장소 및 쿼리 성능 인사이트. Azure Database for PostgreSQL은 서버의 데이터베이스에 대해 실행되는 쿼리에 대한 정보를 저장하고 query_store 스키마의 azure_sys데이터베이스에 저장합니다. query_store.qs_view 보기를 쿼리하여 이 정보를 확인합니다. 기본적으로 Azure Database for PostgreSQL은 약간의 오버헤드를 부과하므로 쿼리 정보를 캡처하지 않지만 pg_qs.query_capture_mode 서버 속성을 모든 또는 TOP 설정하여 추적을 사용하도록 설정할 수 있습니다.

    Azure Database for PostgreSQL 서버 매개 변수 페이지를 보여 주는 이미지

    또한 대기 시간을 소비하는 쿼리에 대한 정보를 캡처하도록 쿼리 저장소를 구성합니다. 다른 쿼리가 테이블에 대한 잠금을 해제하는 동안 또는 쿼리가 많은 I/O를 수행하거나 메모리가 부족하기 때문에 쿼리를 기다려야 할 수 있습니다. 이 정보는 query_store.runtime_stats_view 보기에 표시됩니다.

    SQL 문을 실행하는 대신 이러한 통계를 시각화하려면 Azure Portal에서 Query Performance Insight를 사용합니다.

    쿼리 성능 통찰 이미지를 표시하는 이미지

  • 성능 권장 사항. Azure Portal에서도 사용할 수 있는 성능 권장 사항 유틸리티는 애플리케이션이 실행 중인 쿼리를 검사합니다. 또한 데이터베이스의 구조를 살펴보고 데이터를 구성하는 방법과 인덱스 추가 또는 제거를 고려해야 하는지 여부를 권장합니다.

클라이언트 연결

Azure Database for PostgreSQL은 방화벽 뒤에서 실행됩니다. 서비스 및 데이터베이스에 액세스하려면 클라이언트가 연결하는 IP 주소 범위에 대한 방화벽 규칙을 추가해야 합니다. Azure App Services를 사용하여 실행되는 애플리케이션과 같이 Azure 내에서 서비스에 액세스해야 하는 경우 Azure 서비스에 대한 액세스도 사용하도록 설정해야 합니다.

방화벽 구성

방화벽을 구성하는 가장 간단한 방법은 Azure Portal에서 서비스에 대한 연결 보안 설정을 사용하는 것입니다. 각 클라이언트 IP 주소 범위에 대한 규칙을 추가합니다. 또한 이 페이지를 사용하여 서비스에 SSL 연결을 적용합니다.

Azure Database for PostgreSQL 대한 방화벽 구성을 보여 주는 이미지

도구 모음에서 클라이언트 IP 추가하여 데스크톱 컴퓨터의 IP 주소를 추가합니다.

읽기 전용 복제본을 구성한 경우 클라이언트에서 액세스할 수 있도록 방화벽 규칙을 각각에 추가해야 합니다.

클라이언트 연결 라이브러리

고유한 클라이언트 애플리케이션을 작성하는 경우 적절한 데이터베이스 드라이버를 사용하여 PostgreSQL 데이터베이스에 연결해야 합니다. 이러한 라이브러리의 대부분은 프로그래밍 언어에 따라 다릅니다. 그들은 독립적 인 제 3 자에 의해 유지됩니다. Azure Database for PostgreSQL은 Python, PHP, Node.js, Java, Ruby, Go, C#(.NET), ODBC, C 및 C++용 클라이언트 라이브러리를 지원합니다.

클라이언트 다시 시도 논리

앞에서 설명한 것처럼 고가용성 복구 중 장애 조치(failover) 및 CPU 리소스 확장과 같은 일부 이벤트는 연결이 잠시 손실될 수 있습니다. 진행 중인 모든 트랜잭션은 롤백됩니다. Azure Database for PostgreSQL은 연결된 클라이언트를 작업 노드로 자동으로 리디렉션하지만, 이때 클라이언트가 수행하는 모든 작업은 오류를 반환합니다. 이 발생을 일시적인 예외로 처리해야 합니다. 애플리케이션 코드는 이러한 예외를 catch하고 다시 시도하도록 준비해야 합니다.

Azure Database for PostgreSQL에서 지원되는 PostgreSQL 기능

Azure Database for PostgreSQL은 PostgreSQL 데이터베이스에서 일반적으로 사용하는 대부분의 기능을 지원하지만 몇 가지 예외가 있습니다. 지원되지 않는 기능이 필요한 경우 데이터베이스 및 애플리케이션 코드를 다시 작업하여 이 종속성을 제거하거나 가상 머신에서 PostgreSQL을 실행하는 것이 좋습니다. 후자의 경우 서버 관리 및 유지 관리에 대한 책임을 져야 합니다.

Azure Database for PostgreSQL에서 지원되는 확장

많은 PostgreSQL 기능은 확장에 캡슐화되어 있습니다. 확장은 서버에 저장된 SQL 개체 및 코드의 패키지로, CREATE EXTENSION 명령을 사용하여 데이터베이스에 로드할 수 있습니다. Azure Database for PostgreSQL은 현재 다음과 같이 일반적으로 사용되는 많은 확장을 제공합니다.

  • 데이터 형식
  • 기능
  • 전체 텍스트 검색
  • 인덱스(bloom, btree_gist 및 btree_gin)
  • plpgsql 언어
  • PostGIS
  • 많은 관리 기능

dblinkpostgres_fdw 패키지를 사용하여 한 PostgreSQL 서버를 다른 서버에 연결합니다. 이렇게 하면 한 서버의 코드가 다른 서버에 저장된 데이터에 액세스할 수 있습니다. Azure Database for PostgreSQL에서는 Azure Database for PostgreSQL을 사용하여 만든 서버 간에만 연결할 수 있습니다. 온-프레미스 또는 가상 머신과 같은 다른 곳에서 호스트되는 PostgreSQL 서버에 대한 아웃바운드 연결을 만들 수 없습니다.

비고

지원되는 확장 목록은 지속적으로 검토 중이며 변경할 수 있습니다. 다음 쿼리에서 지원되는 확장 목록을 생성합니다. 사용자 고유의 사용자 지정 확장을 만들고 Azure Database for PostgreSQL에 업로드할 수 없습니다.

SELECT * FROM pg_available_extensions;

Azure Database for PostgreSQL에는 TimescaleDB 데이터베이스가 선택적 확장으로 포함되어 있습니다. 이 데이터베이스에는 시계열 워크로드를 지원하는 시간 지향 분석 함수 및 기타 기능이 포함되어 있습니다. 이 데이터베이스를 사용하려면 shared_preload_libraries 서버 매개 변수에서 TIMESCALEDB 옵션을 선택한 다음 서버를 다시 시작합니다.

저장 프로시저 및 트리거에 대한 언어 지원

plpgsql 이외의 언어를 지원하려면 일반적으로 저장 프로시저를 컴파일하거나 코드를 별도로 트리거하고 컴파일된 라이브러리를 서버에 업로드해야 합니다. 주로 보안상의 이유로 인해 Azure Database for PostgreSQL에서는 이 작업을 수행할 수 없습니다. 다른 언어로 작성된 코드가 있는 경우 plpgsql로 포팅해야 합니다.