ThingWorx 고가용성 > PostgreSQL 고가용성 > PostgreSQL HA 설치 및 구성
PostgreSQL HA 설치 및 구성
아래에 제공된 지침은 이전 다이어그램의 구현을 지원하기 위한 것입니다. 이 지침은 PostgreSQL HA 배포를 구현하는 PostgreSQL 관리자 및 사용자를 위해 작성되었습니다.
참조를 위해 Pgpool-II와 함께 PostgreSQL HA 배포 예에는 이 솔루션을 구현하기 위한 다운로드, 명령줄 시퀀스 및 스크립트를 단계별로 안내하는 예가 포함되어 있습니다.
참조 문서
PostgreSQL을 설치하기 전에 필수 소프트웨어에 대한 설명서를 포함하여 모든 설치 및 구성 문서를 읽고 이해해야 합니다. 보안 권장 사항을 포함하여 적절한 설정을 이해하고 적용하는 것이 중요합니다.
다음 링크는 노드 관리를 위해 스트리밍 복제 및 Pgpool-II를 사용하는 PostgreSQL HA설치 및 구성에 대한 유용한 정보를 제공합니다.
PostgreSQL 설치 및 PostgreSQL에 새 사용자 역할 만들기
PostgreSQL 설치 및 구성 지침은 ThingWorx 설치 안내서에 나와 있습니다. 배포할 특정 ThingWorx 버전에 대한 설치 안내서를 참조하십시오. 모든 세 PostgreSQL 노드에서 동일한 설치 및 구성 작업을 수행해야 합니다.
PostgreSQL 데이터베이스 스크립트 구성 및 실행
PostgreSQL 내에 데이터베이스를 빌드하는 지침은 ThingWorx 설치 안내서에 나와 있습니다. 배포할 특정 ThingWorx 버전에 대한 설치 안내서를 참조하십시오. 모든 세 PostgreSQL 노드에서 동일한 설치 및 구성 작업을 수행해야 합니다.
모델/데이터 공급자 스키마 스크립트 구성 및 실행
PostgreSQL 내에서 ThingWorx 스키마를 빌드하는 지침은 ThingWorx 설치 안내서에 나와 있습니다. 배포할 특정 ThingWorx 버전에 대한 설치 안내서를 참조하십시오. 모든 세 PostgreSQL 노드에서 동일한 구성 작업을 수행해야 합니다.
모든 PostgreSQL 노드에 복제 사용자 만들기
모든 노드에 복제 작업을 관리하기 위한 PostgreSQL 사용자를 만듭니다. 동일한 사용자 이름 및 암호를 사용해야 합니다.
모든 PostgreSQL 노드에 복제 매개 변수 추가
다음 표에는 해당 복제 서비스를 제어하는 PostgreSQL 매개 변수가 나와 있습니다.
* 
구성 열에 나열된 값은 참조 아키텍처의 배포 예를 반영하지만 사용자의 환경에 맞게 수정될 수 있습니다. 아래 표에 나온 대부분의 설정에 대해 환경에 적합한 구성 값을 결정하는 데 도움을 주는 링크가 제공됩니다.
설정
구성
설명
listen_addresses
'*'
모든 네트워크 인터페이스에서 수신합니다. 경우에 따라 네트워크 인터페이스가 여러 개 있는 경우 특정 네트워크 인터페이스로 제한하는 것이 좋습니다.
포트
5432
기본 포트 번호입니다.
max_connections
200
PostgreSQL의 기본값은 100입니다. ThingWorx의 기본 설정은 100입니다(maxpoolsize). 데이터베이스에서 예상되는 총 동시 연결 수에 따라 이 숫자를 늘립니다. 이 값은 항상 클러스터에 있는 서버 수에 ThingWorx platform-settings.json 파일에 구성된 최대 풀 크기를 곱한 값보다 커야 합니다.
shared_buffers
1024MB
선택적 성능 조정입니다. 데이터베이스 서버에서 공유 메모리 버퍼에 사용하는 메모리 양을 설정합니다. 이 양은 시스템에서 사용 가능한 메모리의 1/4로 설정하는 것이 좋습니다. 리소스 소비 > 메모리(Resource Consumption > Memory)를 참조하십시오.
work_mem
32MB
선택적 성능 조정입니다. 임시 디스크 파일에 쓰기 전에 내부 정렬 작업 및 해시 테이블에서 사용할 메모리의 양을 지정합니다. 리소스 소비 > 메모리(Resource Consumption > Memory)를 참조하십시오. work_mem까지 아래로 스크롤합니다.
maintenance_work_mem
512MB
선택적 성능 조정입니다. 유지 관리 작업에서 사용할 최대 메모리 양을 지정합니다. 리소스 소비 > 메모리(Resource Consumption > Memory)를 참조하십시오. 이 옵션은 work_mem 바로 뒤에 나타납니다.
wal_level
enum
선택적 성능 조정입니다. 유지 관리 작업에서 사용할 최대 메모리 양을 지정합니다. Write Ahead Log > Settings(WAL > 설정)를 참조하십시오.
synchronous_commit
그때
Write Ahead Log > Settings(WAL > 설정)로 이동하여 synchronous_commit (enum)으로 스크롤합니다.
archive_mode
그때
archive_command
'cd .'
Write Ahead Log > Archiving(WAL > 아카이빙)으로 이동하여 archive_command (string)으로 스크롤합니다.
max_wal_size
10
Write Ahead Log(WAL)로 이동하여 ARCHIVING(아카이빙) 링크를 클릭합니다. max_wal_size (integer)까지 위로 스크롤합니다. WAL 구성에 대한 자세한 내용은 PostgreSQL 10 설명서의 WAL Configuration(WAL 구성)을 참조하십시오.
synchronous_standby_names
node1, node2 또는 node2, node0 또는 node0, node1
쉼표로 구분된 목록으로 다른 노드의 "application_name"(해당 recovery.conf 파일에 지정됨)을 추가합니다. Write Ahead Log(WAL)의 Settings(설정) 섹션에서 synchronous_commit을 참조하십시오.
hot_standby
true/false
이 모드에 대한 자세한 내용은 Hot Standby(상시 대기)를 참조하십시오.
fsync
그때
Write Ahead Log > Settings(WAL > 설정)로 이동하여 fsync로 스크롤합니다.
체크포인트 설정
체크포인트 설정에 대한 자세한 내용은 Checkpoints(체크포인트)를 참조하십시오.
start_replication 및 retargetMaster 스크립트 설정
각 노드에서 복제 서비스를 활성화하는 스크립트를 설정하고 PostgreSQL 노드가 시스템과 동기화되었는지 확인합니다.
또한 각 노드에서 recovery.conf 파일을 만들고 구현할 수 있는 스크립트를 설정합니다. recovery.conf 파일에는 발생하는 실패에 따라 어떤 노드가 마스터이고 어떤 노드가 대기인지 조정하는 데 필요한 변경이 포함되어야 합니다.
모든 PostgreSQL 노드에 대한 외부 연결 매개 변수 조정
pg_hba.conf 파일의 매개 변수를 수정하여 사용자 및 데이터베이스가 IP가 액세스할 ThingWorx 데이터를 저장하도록 할 수 있습니다. 이 IP는 데이터베이스에 연결합니다.
* 
Pgpool-II에서 연결하는 경우 인증 액세스가 여기에 설명된 Pgpool-II 설명서(md5 또는 신뢰)를 따르는지 확인합니다.
pg_hba.conf 파일에 대한 자세한 내용은 PostgreSQL 10 설명서의 "The pg_hba.conf File(pg_hba.conf 파일)"을 참조하십시오.
PostgreSQL 서비스를 재시작하여 복제 시작
모든 PostgreSQL 노드를 순서대로 재시작하여 어떤 노드가 마스터(먼저 시작됨)이고 어떤 노드가 주 대기 노드(두 번째로 시작됨)이며 어떤 노드가 세 번째 노드(마지막으로 시작됨)인지 제어합니다.
마스터 노드의 경우 PostgreSQL 서비스를 시작합니다.
주 대기 노드의 경우 먼저 start_replication 스크립트를 실행하여 마스터 노드와 동기화합니다. 그런 다음 PostgreSQL 서비스를 시작합니다.
두 번째 대기 노드의 경우 먼저 start_replication 스크립트를 실행하여 주 대기 노드와 동기화합니다. 그런 다음 PostgreSQL 서비스를 시작합니다.
Pgpool-II 노드 설치
Pgpool을 설치하기 전에 필요한 필수 소프트웨어에 대한 설명서를 포함하여 모든 설치 문서를 읽고 이해하십시오. 보안 권장 사항을 포함하여 적절한 설정을 이해하고 적용하는 것이 중요합니다.
Pgpool-II에 대한 다운로드 정보는 여기에서 볼 수 있습니다.
Pgpool-II 설치 지침은 운영 체제 설명서를 참조하십시오. Pgpool-II 서비스를 실행하려면 모든 노드에 동일한 버전의 Pgpool-II를 설치해야 합니다.
Pgpool-II 노드 구성
다음 표에는 Pgpool-II 설치에 대해 수정할 매개 변수가 나와 있습니다. 모든 Pgpool-II 매개 변수는 pgpool.conf 파일에 유지됩니다. 이러한 속성과 값은 모든 Pgpool-II 노드에 추가되어야 합니다.
설정
설명
listen_addresses
'*'
ThingWorx 응용 프로그램의 모델 공급자가 동일한 서버 또는 다른 서버에 있는 Pgpool-II에 연결할 수 있도록 허용하는 값을 선택합니다.
port
5432
클라이언트 연결을 수신하기 위한 TCP 포트
pcp_listen_address
*
PCP(Port Control Protocol) 연결을 위한 IP/호스트 필터(* 모두 허용)
pcp_port
9898
PCP 연결을 수신하기 위한 TCP 포트
backend_hostname
backend_port
backend_weight
backend_data_directory
backend_flag
<ip of backend#>
<port of backend#>
1
/var/lib/postgresql/10.x/main
ALLOW_TO_FAILOVER
세 노드(마스터 및 두 개의 대기) 각각에 대해 이러한 백엔드 구성 값을 설정합니다. 예를 들어, backend_hostname0이 마스터이면 backend_hostname1은 대기입니다. 자세한 내용은 PostgreSQL 온라인 설명서를 참조하십시오.
enable_pool_hba
그때
pool_hba.conf를 활성화합니다.
master_slave_mode
그때
마스터/대기 복제를 사용하고 있음을 PostgreSQL에 알립니다.
load_balance_mode
off
* 
ThingWorx에 대해 부하 부산을 사용하지 않는 것이 좋습니다.
master_slave_sub_mode
stream
기본 제공 PostgreSQL 스트리밍 복제를 사용하도록 Pgpool-II에 알립니다.
replication_mode
off
Pgpool-II의 복제를 사용하지 마십시오. 대신 기본 제공 PostgreSQL 스트리밍 복제를 사용합니다.
sr_check_period
10
스트리밍 복제 지연 시간(초)
sr_check_user
replicator
스트리밍 복제 사용자
sr_check_password
replicator
스트리밍 복제 암호
sr_check_database
postgres
스트리밍 복제 데이터베이스
health_check_user
postgres
장애 조치 상태 확인 사용자
health_check_password
postgres
장애 조치 상태 확인 암호
health_check_database
postgres
장애 조치 상태 확인 데이터베이스
failover_command
/etc/pgpool2/failover.sh %d %h %D %m %H %R %M %P
이 설정에 대한 자세한 내용은 아래의 failover_command 단원을 참조하십시오.
또한 부록 C에 나오는 다음 샘플 스크립트를 참조하십시오.
failover.sh
retargetMaster_001.sh
retargetMaster_002.sh
retargetMaster_003.sh
num_init_children
max_pool
max_child_connections
superuser_reserved_connections
성능 조정 매개 변수입니다. 이러한 설정은 Pgpool-II의 연결 풀링 기능과 관련이 있습니다. 시작 시 가장 높은 볼륨 트래픽 처리량 요구사항에 필요한 충분한 연결을 제공해야 합니다. 단, PostgreSQL DB 노드의 최대 연결 수 설정을 초과하지 않아야 합니다. 제안 사항 및 값 계산을 위한 수식은 설명서의 Pools 단원(위의 링크 참조)을 참조하십시오.
* 
num_init_childrenmodelproviderconfig.jsonmaxpoolsize보다 크고 postgresql.confmax_connectionsnum_init_children 설정보다 큰지 확인합니다.
PostgreSQL 장애 조치 스크립트 구성
각 Pgpool-II 노드에 Pgpool-II 서비스가 실패 감지 시 호출할 장애 조치 스크립트를 설정합니다. 이 스크립트에는 모든 PostgreSQL 노드 실패에 대한 논리 및 작업이 포함되어야 합니다.
PCP 구성 업데이트
pool_hba.conf 파일을 업데이트하면 모든 ThingWorx 서버가 인식됩니다.
PostgreSQL에 대한 ThingWorx 요청의 경우 Pgpool-II가 ThingWorx 자격 증명을 사용하여 PostgreSQL 노드에 연결하여 설정된 액세스 권한 및 제한을 유지합니다. pool_hba.conf 파일은 pg_hba.conf와 동일한 형식, 인증 방법 및 인증 옵션(md5, 신뢰 등)을 사용합니다.
pool_hba.conf 구성에 대한 자세한 내용은 http://www.pgpool.net/docs/latest/en/html/client-authentication.html을 참조하십시오.
클라이언트 인증 업데이트
pool_hba.conf 파일을 업데이트하면 모든 ThingWorx 서버가 인식됩니다.
PostgreSQL에 대한 ThingWorx 요청의 경우 Pgpool-II가 ThingWorx 자격 증명을 사용하여 PostgreSQL 노드에 연결하여 설정된 액세스 권한 및 제한을 유지합니다. pool_hba.conf 파일은 pg_hba.conf와 동일한 형식, 인증 방법 및 인증 옵션(md5, 신뢰 등)을 사용합니다.
pool_hba.conf 구성에 대한 자세한 내용은 http://www.pgpool.net/docs/latest/en/html/client-authentication.html을 참조하십시오.
장애 조치를 위해 Pgpool-II 구성
고가용성 구성에서 Pgpool-II는 활성/수동 모드로 작동하며 일반적으로 하나의 활성 Pgpool-II 노드와 하나의 대기 노드로 구성됩니다. Pgpool-II는 노드 상태를 모니터링하기 위한 watchdog 프로세스를 제공하며 주 노드 실패 시 대기 노드를 활성화합니다.
자세한 내용 및 Watchdog 구성(http://www.pgpool.net/docs/latest/en/html/example-watchdog.html)에 대한 정보는 Pgpool 설명서를 참조하십시오.
다음 표에는 Pgpool-II 내에서 watchdog을 구성할 때 고려해야 할 설정 및 값이 나와 있습니다. 이러한 설정과 값을 각 Pgpool-II 노드의 pgpool.conf 파일에 추가해야 합니다.
설정
설명
use_watchdog
그때
Pgpool-II에서 watchdog을 켭니다.
wd_hostname
'{IP address of this Pgpool-II node}'
이 watchdog의 호스트 이름 또는 IP 주소입니다.
wd_port
9000
이 watchdog의 포트 번호입니다.
delegate_IP
'{Virtual IP address to access PostgreSQL}'
클라이언트가 Pgpool-II를 통해 PostgreSQL에 액세스하는 데 사용하는 가상 IP 주소입니다.
ifconfig_path
/etc/pgpool2
if_up_cmd 및 if_down_cmd 명령 또는 스크립트가 포함된 디렉터리의 절대 경로입니다.
if_up_cmd
'ifup.sh $_IP_$ <eni id of Pgpool node>'
Pgpool-II가 delegate_IP 주소를 사용하여 가상 IP 인터페이스를 실행하려고 시도하면 명령이 실행됩니다. EC2 관리 콘솔에 로그인하고 해당 Pgpool-II 인스턴스로 이동하여 Pgpool-II 노드의 eni ID를 검색할 수 있습니다. 콘솔의 설명에서 Network interfaces 엔트리를 찾고 eth0을 클릭한 다음 인터페이스 ID를 찾습니다. 이 ID를 $<eni id of Pgpool node>에 사용합니다.
if_down_cmd
'ifdown.sh $_IP_$ <eni id of Pgpool node>'
Pgpool-II가 delegate_IP 주소를 사용하여 가상 IP 인터페이스를 내리려고 시도하면 명령이 실행됩니다. Pgpool-II 노드의 eni ID를 가져오려면 if_up_cmd를 참조하십시오.
arping_path
/usr/bin
iputils-arping 설치 패키지의 경로
arping_cmd
arping -U $_IP_$ -w 1
IP를 확인하는 데 사용되는 arping 명령
heartbeat_destination0
'{IP address of the other Pgpool-II node}'
하트비트 검사를 수행할 IP 주소. other_pgpool_hostname0 설정의 값
heartbeat_destination_port0
9694
기본값을 사용하십시오.
heartbeat_device
'eth0'
하트비트 통신을 위한 IP 주소용 NIC 장치
other_pgpool_hostname0
'{IP address of the other Pgpool-II node}'
다른 Pgpool-II 서버 인스턴스의 IP 주소
other_pgpool_port0
5432
다른 Pgpool-II 노드가 수신하는 포트
other_wd_port0
9000
다른 Pgpool-II watchdog 기능이 수신하는 포트
도움이 되셨나요?