2017-10-25 1 views
2

서로 다른 가용 영역의 AWS EC2 인스턴스에 설치된 여러 포스트그레스 데이터베이스 (동기화가 보장됨)가있는 애플리케이션이 있습니다. EC2 인스턴스 중 하나가 충돌하면 클라이언트가 여전히 db에 액세스 할 수 있도록 단일 DNS 뒤에 추상화하고 싶습니다. 내 데이터베이스의로드 균형을 위해 AWS 네트워크로드 밸런서를 사용할 수 있는지 궁금합니다. 그 이유는 무엇? 그렇지 않다면 사용할 수있는 다른 표준의 구현하기 쉬운 솔루션이 있습니까? (예를 들어, http://www.pgpool.net/mediawiki/index.php/Main_Page을 알고 있습니다. 그러나, 내가 pgpool 인스턴스도 복제해야하기 때문에 자신을 설정해야하는 것을 사용하는 것에 신경이 쓰이지 않습니다 ...)aws 네트워크 밸런서를 통해로드 밸런싱 postgres 인스턴스가 가능합니까?

+1

데이터베이스가 읽기 전용입니까, 아니면 읽기/쓰기입니까? 전자는 쉬워 야하고 후자는 몇 가지 문제를 제기 할 수있다. 원시 TCP를 지원하므로 ELB를 클래식 또는 네트워크 모드 (응용 프로그램 아님)에서 사용할 수 있어야합니다. 인증 및 기타 보안 문제에주의를 기울이면 모든 사람에게 데이터베이스 액세스 권한을 부여하고 싶지는 않습니다. – jcaron

+0

@jcaron dbs는 읽기/쓰기 (사용 권한과 관련)하지만 액세스하는 응용 프로그램 서버 (다중 인스턴스 응용 프로그램)는 읽기만 수행합니다. 어떤 보안 문제를 언급하고 있습니까 (응용 프로그램 서버의 보안 그룹 만 db로 허용한다고 가정)? – istrau2

+0

웹 서버 상태 검사를 구성하여 데이터베이스에 액세스 할 수 있는지 확인하는 방법은 무엇입니까? 서버에 DB 액세스 권한이없는 경우 상태 확인에 실패하고 웹 서버의로드 밸런서가 서비스 인 경우로드 밸런서가이를 제거합니다. –

답변

2

직접 해보았을 때 데이터베이스 부하 분산을 위해 네트워크 부하 분산 장치를 설정할 수있는 것처럼 보입니다. 내 프로덕션 설치에서는 patroni을 사용하여 장애 조치를 관리하고 Patroni는 상태 확인을 위해 HTTP API를 제공합니다. 복제본이 503을 반환하는 동안 마스터는 200 응답을 반환합니다. 복제본은 장애 조치 용으로, 복제 된 읽기 용으로는 사용하지 않는 유스 케이스에서는 정상적으로 작동합니다. 여러분의 필요에 따라 건강 검진을위한 성공적인 응답을 리턴하는 코드를 생각해 낼 수 있다고 가정합니다.

부하 분산 장치를 구성하여 포트 5432를 수신하고 상태 검사를 통해 포트 8008에 연결하도록 구성했습니다. NLB에 보안이 없으므로 postgres 인스턴스의 보안 그룹을 수정하여 내 VPC의 IP 범위에서 연결하도록 허용했습니다. 여러 떼. psql을 통해 NLB의 DNS 이름에 연결하면 예상대로 작동했습니다.

비록 작동하지만, 각 응용 프로그램 인스턴스에서 실행중인 PgBouncer가 있습니다 (현재 경비원 인스턴스 풀 관리에 걱정할 필요가 없습니다) 영사 용 템플릿으로 pgbouncer.ini를 업데이트하는 현재 설정과 영사관에서 리더 키가 변경되면 PgBouncer를 다시로드합니다.

+0

응답 해 주셔서 감사합니다. 실제로 매우 유용합니다. 몇 가지 후속 질문. 1) NLB를 사용할 때 클라이언트는 각 트랜잭션에서 연결을 설정합니까? 2) 그것은 클라이언트 (나는 http://docs.sequelizejs.com/를 사용하고 있습니다)에 의존합니까? 3) 응용 프로그램 인스턴스에서 pgbouncer를 어떻게 설정합니까? 4) 도커 컨테이너로 실행하거나 응용 프로그램을 시작해야합니까? 5) node.js를 사용하고 있습니다. pgBouncer를 실행할 수있는 쉬운 방법을 알고 있습니까? 6) 여러 DB에 대해 .INI 파일에 대한 링크가 있습니까? 미리 감사드립니다. – istrau2

+0

1. 모르겠다. 대답하기에 충분히 오래 테스트하지 않았다. 2. psql을 시도한 적이있다. 3-4. 나는 systemd를 통해 pgbouncer를 실행하고, 응용 프로그램의 서비스 파일은 pgbouncer에 의존한다. 5. systemd/upstart/init을 통해 실행하면됩니다. :) 6. 필자는 아니지만 ini 파일에 여러 개의 호스트 행을 정의하면됩니다. –

0

질문에 대한 짧은 대답은 NO입니다. .

1) 자신의 서비스를 관리하고 싶다면 Pgpool을 사용할 수 있습니다. 이것은 귀하의 목표를 달성하는 데 도움이됩니다. 또 다른 옵션은 HAProxy입니다.

2) AWS는 데이터베이스 서버에 대한로드 밸런서를 제공하지 않습니다. 계층 7 SQL 인식로드 밸런서 또는 계층 4 인식로드 밸런서를 MySQL 커넥터 (예 : MySQL의 경우)와 같은 "스마트"db 커넥터 클라이언트와 함께 사용해야합니다.

3) Amazon Marketplace는 조사 할 수있는 상용 및 오픈 소스 솔루션을 제공합니다.

+1

네트워크 부하 분산 장치가 작동하지 않는 이유는 무엇입니까? AWS 마켓 플레이스에서 pgpool을 사용하는 것에서 얻을 수있는 것은 무엇입니까? (여러 균형 인스턴스를 설정하고 가동 시간을 보장하기 위해 조정해야합니까?) 아마존 시장에서 좋은 선택을 고려하는 솔루션을 가리킬 수 있습니까? – istrau2

+0

Amazon 부하 분산 장치는 데이터베이스에서 작동하지 않습니다 (Amazon 당). 다른 유형은 데이터베이스에서 작동 할 수 있습니다. 필자는 AWS Marketplace를 특별한 권장 사항이 아닌 자세한 정보를 얻을 수있는 장소로 권장했습니다.저비용 솔루션을 설계하는 경우 내결함성을 위해 RDS MySQL 또는 Aurora multi-AZ로 전환하고 MySQL 커넥터를 사용하며로드 균형 조정을 위해 RDS 읽기 복제본을 사용합니다. –

관련 문제