프로호스터 > 블로그 > 관리 > Patroni, etcd, HAProxy를 사용하여 고가용성 PostgreSQL 클러스터 구축
Patroni, etcd, HAProxy를 사용하여 고가용성 PostgreSQL 클러스터 구축
문제가 제기된 당시에는 이 솔루션을 혼자서 개발하고 출시할 만큼 충분한 경험이 없었습니다. 그리고 구글링을 시작했습니다.
문제가 무엇인지는 모르겠지만, 튜토리얼처럼 차근차근 모든 것을 진행하고, 작성자와 동일한 환경을 준비하더라도 아무 일도 일어나지 않는다는 사실을 여러 번 마주하게 됩니다. 무슨 일인지는 모르겠지만 이 문제를 다시 접했을 때 모든 것이 잘되면 나만의 튜토리얼을 작성하기로 결정했습니다. 확실히 효과가 있을 것입니다.
인터넷 가이드
인터넷에는 다양한 가이드, 튜토리얼, 단계별 등이 부족하여 어려움을 겪지 않습니다. 우연히 장애 조치 PostgreSQL 클러스터를 편리하게 구성하고 구축하기 위한 솔루션을 개발하는 임무를 맡게 되었습니다. 이에 대한 주요 요구 사항은 마스터 서버에서 모든 복제본으로 복제를 스트리밍하고 마스터 서버가 발생할 경우 예약을 자동으로 프로비저닝하는 것이었습니다. 실패.
다음으로 방금 생성한 /etc/patroni.yml 파일에 다음 내용을 넣어야 합니다. 물론 모든 위치의 IP 주소를 사용하는 주소로 변경해야 합니다.
이 yaml의 주석에 주의하세요. 클러스터의 각 시스템에서 주소를 사용자 고유의 주소로 변경하십시오.
/etc/patroni.yml
scope: pgsql # должно быть одинаковым на всех нодах
namespace: /cluster/ # должно быть одинаковым на всех нодах
name: postgres1 # должно быть разным на всех нодах
restapi:
listen: 192.168.0.143:8008 # адрес той ноды, в которой находится этот файл
connect_address: 192.168.0.143:8008 # адрес той ноды, в которой находится этот файл
etcd:
hosts: 192.168.0.143:2379,192.168.0.144:2379,192.168.0.145:2379 # перечислите здесь все ваши ноды, в случае если вы устанавливаете etcd на них же
# this section (bootstrap) will be written into Etcd:/<namespace>/<scope>/config after initializing new cluster
# and all other cluster members will use it as a `global configuration`
bootstrap:
dcs:
ttl: 100
loop_wait: 10
retry_timeout: 10
maximum_lag_on_failover: 1048576
postgresql:
use_pg_rewind: true
use_slots: true
parameters:
wal_level: replica
hot_standby: "on"
wal_keep_segments: 5120
max_wal_senders: 5
max_replication_slots: 5
checkpoint_timeout: 30
initdb:
- encoding: UTF8
- data-checksums
- locale: en_US.UTF8
# init pg_hba.conf должен содержать адреса ВСЕХ машин, используемых в кластере
pg_hba:
- host replication postgres ::1/128 md5
- host replication postgres 127.0.0.1/8 md5
- host replication postgres 192.168.0.143/24 md5
- host replication postgres 192.168.0.144/24 md5
- host replication postgres 192.168.0.145/24 md5
- host all all 0.0.0.0/0 md5
users:
admin:
password: admin
options:
- createrole
- createdb
postgresql:
listen: 192.168.0.143:5432 # адрес той ноды, в которой находится этот файл
connect_address: 192.168.0.143:5432 # адрес той ноды, в которой находится этот файл
data_dir: /data/patroni # эту директорию создаст скрипт, описанный выше и установит нужные права
bin_dir: /usr/lib/postgresql/9.6/bin # укажите путь до вашей директории с postgresql
pgpass: /tmp/pgpass
authentication:
replication:
username: postgres
password: postgres
superuser:
username: postgres
password: postgres
create_replica_methods:
basebackup:
checkpoint: 'fast'
parameters:
unix_socket_directories: '.'
tags:
nofailover: false
noloadbalance: false
clonefrom: false
nosync: false
스크립트는 클러스터의 세 시스템 모두에서 실행되어야 하며 위 구성은 모든 시스템의 /etc/patroni.yml 파일에도 배치되어야 합니다.
클러스터의 모든 머신에서 이러한 작업을 완료한 후에는 그 중 하나에서 다음 명령을 실행하십시오.
이제 브라우저에서 HAproxy를 사용하여 머신의 주소를 열고 포트 7000을 지정하면 클러스터에 대한 통계를 볼 수 있습니다.
마스터인 서버는 UP 상태가 되고, 레플리카는 DOWN 상태가 됩니다. 이는 정상이며 실제로 작동하지만 HAproxy의 요청에 대해 503을 반환하기 때문에 이런 식으로 나타납니다. 이를 통해 세 서버 중 어느 서버가 현재 마스터인지 항상 정확히 알 수 있습니다.
결론
너는 아주 멋져! 단 30분 만에 스트리밍 복제 및 자동 대체 기능을 갖춘 탁월한 내결함성 및 고성능 데이터베이스 클러스터를 배포했습니다. 이 솔루션을 사용할 계획이라면 다음을 확인하세요. 공식 Patroni 문서 포함, 특히 클러스터 관리에 대한 편리한 액세스를 제공하는 Patronictl 유틸리티와 관련된 부분입니다.