Running Postgres-BDR with Google Cloud Platform (3)

Running Postgres-BDR with Google Cloud Platform (3)

  • Postgres-DBR 운영
        – 노드 추가
        – 노드 제거
  • Postgres-BDR 모니터링
  • 백업관련
  • 파티션 테이블 관리

Postgres-BDR 운영

Node Management Manual

노드 추가

  • 노드 추가는 pg_basebackup 으로 SOURCE로부터 전체 백업을 받아온 후, bdr_init_copy 라는 명령어를 이용한다.
  • 데이터가 계속 인입되는 runtime 환경에서 테스트한 결과, 노드 추가 후 group 에 join되어 곧 바로 동기화가 진행되었다.
  • 노드 추가에 영향을 주는 환경변수는 다음과 같다.
# 접속가능한 슬레이브의 접속수를 설정( 슬레이브 수 + 2)인거 같은데.. backup용 확실치 않음
max_wal_senders = 8
# 노드 + 1
max_replication_slots = 7
# BDR과 UDR 모두이 구성 데이터베이스 당 하나의 작업자 및 연결 당 하나의 작업자을 가지고 충분히 큰 값으로 설정해야합니다.
max_worker_processes = 10
  • 환경변수를 꼭 확인하고 신규로 추가할 서버에서 Postgres-BDR 을 설치하고 아래의 스크립트를 그대로 이용하면 된다.
# Created by Peter Yun. 2015-09-01.
#!/bin/bash
SOURCE="bdr-asia-2"
TARGET="bdr-asia-3"
NODENAME="asia-node-003"

sudo service postgresql stop
sudo rm -rf /var/lib/postgresql/9.4/main/*
sudo su -l postgres -c "pg_basebackup -h $SOURCE -U postgres -D /var/lib/postgresql/9.4/main -xlog -c fast -P"

sudo su -l postgres -c "/usr/lib/postgresql/9.4/bin/bdr_init_copy -d testdb -h $SOURCE -p 5432 \
--local-dbname=testdb \
--local-host=$TARGET --local-port=5432 \
--pgdata=/var/lib/postgresql/9.4/main \
--postgresql-conf=/etc/postgresql/9.4/main/postgresql.conf \
--hba-conf=/etc/postgresql/9.4/main/pg_hba.conf \
--node-name=$NODENAME "

sleep 10
sudo su -l postgres -c "tail -20 ~/bdr_init_copy_postgres.log"

# bdr 노드 추가 후 서버 중지
echo ""
echo ""
echo "bdr_init_copy_postgres.log 를 확인하여 이상없으면, bdr_init_copy 로 실행된 postgresql을 중지 하고 service 로 다시 띄운다."
echo "----------"
echo "sudo su -l postgres -c \"tail -20 ~/bdr_init_copy_postgres.log\""
echo "sudo su - postgres"
echo "/usr/lib/postgresql/9.4/bin/pg_ctl --pgdata=/var/lib/postgresql/9.4/main stop -m fast"
echo "exit"
echo "sudo service postgresql start"
echo "----------"

노드 제거

  • 함수로 쉽게 노드를 제거 할 수 있다고 하나, 실제로는 함수 실행 후 확인해보면 노드 정보가 남아있다. (select * from bdr.bdr_nodes;)
# node 하나만 제거
SELECT bdr.bdr_part_by_node_names(ARRAY['node-1']);
# 여러개의 노드를 한 번에 제거
SELECT bdr.bdr_part_by_node_names(ARRAY['node-1', 'node-2', 'node-3']);
# asia-node-003 제거
SELECT bdr.bdr_part_by_node_names(ARRAY['asia-node-003']);
  • 때문에 함수 실행 후 다음을 확인하여 남아있는 정보를 함께 지워준다.
# bdr_nodes 를 확인해서 제거한 노드가 남아 있으면 삭제해준다.
select * from bdr.bdr_nodes;
delete from bdr.bdr_nodes where node_name='asia-node-003';
# bdr_connections 를 확인해서 제거한 노드의 정보가 남아 있으면 삭제해준다.
select * from bdr.bdr_connections;
delete from bdr.bdr_connections where conn_sysid='6189502444603979480';

SELECT * FROM pg_replication_slots;
SELECT pg_drop_replication_slot('bdr_16386_6319248612493171876_2_16386__');

Postgres-BDR 모니터링

Monitoring manual

  • 노드 확인
SELECT * FROM bdr.bdr_nodes;
  • Monitoring connected peers using pg_stat_replication
SELECT * FROM pg_stat_replication;

SELECT
pg_xlog_location_diff(pg_current_xlog_insert_location(), flush_location) AS lag_bytes,
pid, application_name
FROM pg_stat_replication;
  • Monitoring replication slots
SELECT * FROM pg_replication_slots;

SELECT
slot_name, database, active,
pg_xlog_location_diff(pg_current_xlog_insert_location(), restart_lsn) AS retained_bytes
FROM pg_replication_slots
WHERE plugin = 'bdr';
  • Monitoring global DDL locks
select * from bdr.bdr_global_locks ;

백업 관련

  • 증분 백업
  • barman을 사용하여 증분 백업을 하고 싶지만… bdr를 사용할 경우, wal_level = ‘logical’ 옵션 때문에 증분 백업을 사용할수 없음
  • 증분 백업을 위해서는 wal_level 값이 ‘archive’, ‘hot_standby’ 값을 가져야만 함.

  • 노드 추가가 어렵지 않은 만큼 데이터 백업은 snapshot 또는 pg_dump, pg_basebackup 만 해도 괜찮을 듯 하다.


파티션 테이블 관리

  • 월별 range 파티션 사용 시 자동 파티션 생성 procedure 및 job 스케줄러 등록하여 관리가 가능한지 추가 확인 필요

To be continue …

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: