공개 SW 솔루션설치 & 활용가이드 시스템 SW > 데이터관리 제대로배워보자 How to Use Open Source Software Open Source Software Installation & Application Guide
CONTENTS 1. 개요 2. 기능요약 3. 실행환경 4. 설치및실행 5. 기능소개 6. 활용예제 7. FAQ 8. 용어정리
- 3-1. 개요 소개 가장완성도높은안정적인오픈소스 DBMS 강력하고독립적인커뮤니티를통해지속적으로성장하는 DBMS 주요기능 Full ACID compliance Table Partitioning Row Level Locking 대분류 시스템 SW 소분류 데이터관리 라이선스형태 GPL 라이선스사전설치솔루션 N/A 실행하드웨어 특징 보안취약점 1 Ghz 프로세서 램 1GB 이상의하드웨어 512MB 이상의디스크공간 버전 11(RC1)(2018 년 10 월기준 ) 다양한확장모듈 (extension) 을지원하며대표적으로 PostGIS 꼽을수있음 Java, python, perl 등요즘사용되는대부분의언어를 API 형태제공 DB 구조측면에서 DB 의각객체를각 OS 파일처리 취약점 ID : CVE-2018-10915 심각도 : 6.0 MEDIUM 취약점설명 : SQL Injection 공격의하나로 Pqescape 함수의오동작을유발하며 PostgreSQL 10.5, 9.6.10, 9.5.14, 9.4.19, 9.3.24 에영향이있음 대응방안 : 최신패치적용 참고경로 : https://www.securityfocus.com/bid/105054/info 개발회사 / 커뮤니티 공식홈페이지 PostgreSQL Global Development Group https://www.postgresql.org
- 4-2. 기능요약 PostgreSQL 의주요기능 주요기능 Full ACID compliance Table Partitioning Row Level Locking MVCC 온라인백업 Point-In-Time Recovery Connection Pool 지원여부지원지원지원지원지원지원지원 (PgBouncer)
- 5-3. 실행환경 OS/Hardware/CPU/Database 제한 구분 PostgreSQL 비고 지원되는 OS 지원되는 CPU 최소사양 Database Limitations Linux X86, Windows 2012 R2/2016, Solaris, macos, BSD 등 x86, x86_64, IA64, PowerPC, PowerPC 64, S/390, S/390x, Sparc, Sparc 64, ARM, MIPS, MIPSEL, M68K, PA-RISC 지원 1 Ghz CPU processor 램 1GB 이상의하드웨어 512MB 이상의디스크공간 최대 Database Size: 무제한최대 Table Size: 2 EB 최대 Row Size: 1.6 TB 최대 Column Size: 1 GB 테이블당인덱스개수 : 무제한테이블당컬럼개수 : 250~1600 ( 컬럼타입에따라서다름 ) 테이블당최대 Rows: 무제한 PC 용 Windows OS 도지원 Windows 7/8/10 등 PC 급 OS 도지원 최대 Table Size 의경우버전마다확대되고있으며, 사실상무제한사용
- 6-4. 설치및실행 세부목차 4.1 설치준비 4.2 버전에맞는저장소설치 4.3 설치가능한패키지검색 4.4 패키지설치 4.5 설치후과정 4.6 기동및종료
- 7-4. 설치및실행 4.1 설치준비 http://yum.postgresql.org/ 에서사용하는리눅스배포판과버전확인및 PostgreSQL 확인 버전에맞는저장소설치 OS 버전 (RHEL 6/7, CENTOS) 과종류 (RHEL/UBUNTU/Fedora/AMAZON LINUX 등 ) 에따라설치및환경설정방법이다름
4. 설치및실행 4.2 버전에맞는저장소설치 RHEL(Redhat) 과 CentOS 는커널이같아서숫자만같으면같은 rpm 본으로설치해도무방 OS 버전에따라경로를달리해서저장소설치 - 참고 : 예제에명령어실행전리눅스프롬프트및 PostgreSQL 프롬프트끝에 # 이나오는경우는각각 RHEL 7 root 계정 (Linux) 이나 superuser(postgresql) 계정으로실행 [root@node01] # rpm Uvh https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-redhat10-10-2.noarch.rpm CentOS 7 [root@node01] # rpm Uvh https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-redhat10-10-2.noarch.rpm RHEL 6 [root@node01] # rpm Uvh https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-6-x86_64/pgdg-redhat10-10-2.noarch.rpm CentOS 6 [root@node01] # rpm Uvh https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-6-x86_64/pgdg-redhat10-10-2.noarch.rpm Windows x86-64/32 https://www.enterprisedb.com/downloads/postgres-postgresql-downloads (Enterprisedb 社에서각버전별 Installer 제작하여배포 ) 비트에맞는 Download 버튼클릭하여인스톨러버전다운로드후 GUI 환경으로설치 - 8 -
- 9-4. 설치및실행 4.3 설치가능한패키지검색 사용자설정에따라다르지만보통 Linux 의경우 /etc/yum.repos.d 디렉토리에저장소 (yum repository) 를구축 repository 환경파일을검색하여업데이트가능한패키지목록을검색가능 yum list postgres* 의명령으로패키지를자동으로검색
- 10-4. 설치및실행 4.4 패키지설치 앞장의 yum list postgres* 명령의결과에서나온값대로 yum install 명령으로설치 (PostgreSQL 10기준 ) postgresql-server, postgresql-contrib, postgresql-devel 설치 각각서버버전, 추가모듈, 라이브러리와헤더를가리킴
- 11-4. 설치및실행 4.5 설치후과정 (1/2) initdb 명령을사용하여초기 DB 생성 서비스구동및부팅시자동구동되도록설정 DB 계정추가및설정 - OS 사용자등록 - pgsql 실행 - Postgresql 사용자와 database 생성및권한부여 - 암호설정 [root@node01] # /usr/pgsql-10/bin/postgresql-10-setup initdb [root@node01] # systemctl enable postgresql.service [root@node01] # systemctl start postgresql.service [root@node01] # adduser post_test [root@node01] # sudo u postgres psql postgres postgres=# create user post_test; postgres=# create database post_test_db ENCODING UTF-8 ; postgres=# grant all privileges on database post_test_db to post_test; Postgres=# \passwd post_test;
- 12-4. 설치및실행 4.5 설치후과정 (2/2) 테이블생성 [root@node01 bin] # sudo u postgres psql postgres postgres=# create table test(c1 integer primary key, c2 char(100)); 세션별트랜잭션을이용한 PostgreSQL 활용 - 트랜잭션이란데이터베이스내에서한꺼번에수행되어야할일련의연산들 - 트랜잭션에포함된모든연산은부분적으로만반영할수는없고, 한꺼번에적용하거나 (commit), 한꺼번에취소 (rollback) 되어야함 postgres=# begin; PostgreSQL 에서트랜잭션시작하는구문 postgres=# insert into test select i, i from generate_series(1, 10000) a(i); 1 1 부터 10000 까지 sequential 한값을 test1 테이블에입력 postgres=# commit; 2 하나의트랜잭션을완성하는구문으로위의변경연산을취소하는 rollback 과반대의미의구문임 postgres=# select count(*) from test; 1 세션 2 에는 insert 한값이반영돼있지않음 count ------- 0 (1 row) select count(*) from test; 2 세션 1 에서 commit 후에세션 2 에반영 count ------- 10000 (1 row)
- 13-4. 설치및실행 4.6 기동및종료 PostgreSQL 의기동, 종료, reload 는 pg_ctl 이라는 PostgreSQL 내부명령어수행 PostgreSQL 설치시환경변수로 Database 의데이터위치는지정하므로 D 옵션생략가능 - 기동 : PostgreSQL 프로세스시작 - 종료 : PostgreSQL 프로세스종료 - 상태 : PostgreSQL 프로세스의구동여부확인 - 재시작 : PostgreSQL 프로세스를종료후재시작 - reload: PostgreSQL 프로세스를재시작하지않고도반영할수있는일부파라미터의환경을 DB 에즉각적용 - # pg_ctl reload 혹은 postgres=# select pg_reload_conf(); pg_ctl 명령어나 PostgreSQL 내부함수이용 pg_ctl [start/stop/restart/reload/status] pg_ctl start [-w] [-D DATADIR] pg_ctl stop [-w] [-D DATADIR] [-m SHUTDOWN-MODE] pg_ctl restart [-w] [-D DATADIR] [-m SHUTDOWN-MODE] pg_ctl reload [-D DATADIR] pg_ctl status [-D DATADIR] -D 옵션은데이터클러스터위치지정 -w 옵션은명령이정상적으로수행될때까지기다림 Shutdown mode smart : 모든 client들이접속을끊기를기다림 (-ms), Oracle의 normal옵션과비슷 (-ms) fast : 모든 client들의작업들을 rollback 하고접속을끊은후종료하며, Oracle의 immediate과비슷 (-mf) immediate : 강제종료하며서버시작시 recovery 수행. Oracle의 abort옵션과비슷 (-mi) ex) pg_ctl stop D /dbdata mf w
- 14-5. 기능소개 세부목차 5.1 유지보수 5.2 VACUUM 5.3 ANALYZE 5.4 백업 5.5 최신버전업데이트
- 15-5. 기능소개 5.1 유지보수 DB는일정한성능을발휘하려면좋은상태를유지하기위한유지보수필요 VACUUM - 업데이트및삭제처리를할경우 DB 내부에불필요한데이터공간발생 - 불필요한데이터공간은 DB의비대화와캐시이용효율의저하초래 - 불필요한데이터공간을회수하는유지보수가 VACUUM ANALYZE - DBMS는 DB에데이터를검색할때데이터정렬및물리적배치등의통계를이용하여가장효율적인방법으로데이터검색 - ANALYZE는이통계를최신데이터상태를기반으로재생하는명령 - 특정조건에따라 vacuum이자동실행되는 autovacuum이실행되면서 analyze도자동으로수행 백업 - 중요데이터는 pg_dump, pg_dumpall 등의유틸리티를사용한논리적인형태 (SQL) 로백업실행 - Oracle과유사한방식으로 On-Line방식의백업가능 - 경우에따라 Schema, Data만받는등다양한경우의수에따라사용가능
- 16-5. 기능소개 5.2 Vacuum 종류 VACUUM ( 온라인으로가능하나운영중부하발생가능 ) - 기본으로옵션없이사용하면쓰레기공간을재사용할수있도록반환 FULL ( 테이블 lock을발생 ) - 테이블전체를물리적으로재구성 ( 테이블크기만큼의용량필요 ) FREEZE - 트랜잭션순환 (40억트랜잭션한계 ) 문제를해결하기위한옵션 ANALYZE - 테이블의통계정보수집
- 17-5. 기능소개 5.3 Analyze ANALYZE - 데이터베이스에있는테이블내용에대한통계수집 - 쿼리플래너는이통계를사용하여쿼리를위한가장효율적인실행계획결정사용법 추가 Tip 유지보수관점에서정기적으로해주면좋은작업 REINDEX UPDATE 나 DELETE 등으로 DB 사이즈가급격히늘어난인덱스를다시생성함 배치성업무 ( 대량 INSERT -> 대량 DELETE) 시중요 CLUSTER 인덱스순서로테이블데이터를물리적으로재구성 테이블의물리적압축 + 재구성 + REINDEX 효과 VACUUM FULL 테이블을물리적으로압축 DB 가부풀었을때, 테이블전체를재정렬하여쓰레기데이터를삭제하고비어있는공간을 OS 반환
- 18-5. 기능소개 5.4 백업 COLD 백업 ( 서버정지후백업 ) - 물리적백업 - Data Directory ( 클러스터 ) 를 OS 명령어를이용하여백업 HOT 백업 ( 서버가동중백업 ) - 서비스가운영중에백업을받을수있는방법 - HOT 백업파일을이용한 PITR 복구가능 논리적백업 - SQL (DDL,DML) 백업 - 백업하기 : pg_dump, pg_dumpall - 복구하기 : psql (-f 옵션 ), pg_restore
- 19-5. 기능소개 5.4 백업 (COLD 백업방법예제 )(1/3) COLD 백업방법 - 서버는 stop상태여야함 - 백업, 복구단위는 cluster(instance) 전체 - Data와 wal 로그가각각원격지에위치할경우 sync 맞춰야함 - 추가 tablespace가있을경우확인후함께백업 예제 - pg_ctl stop mf w D /dbdata - mkdir backup - cp -a /dbdata./backup
- 20-5. 기능소개 5.4 백업 (HOT 백업방법예제 )(2/3) HOT 백업방법 - archive가활성화되어있어야함 - start 백업 -> data( 클러스터 ) 복사 -> stop 백업 수행방법 Start 백업 Data( 클러스터 ) 백업 Stop 백업 - Stop 백업이완료되면, pg_xlog 의 archiving 된파일들도따로베이스백업본과보관필요
- 21-5. 기능소개 5.4 백업 ( 논리적백업방법예제 )(3/3) pg_dump - 특정 table 이나 DDL dump 에주로사용 - 출력방식은스크립트형식 ( 디폴트 ) 및아카이브형식 ( 바이너리 ) 사용법 - pg_dump < 데이터베이스이름 > > < 백업파일이름 > - pg_dump -h < 호스트이름 > -p < 포트번호 > < 데이터베이스이름 > > < 백업파일이름 > - 옵션 * -f, file=filename dump file 명또는 directory 명 * -F, format=c d t p dump file format (custom,directory,tar,plain text (default)) * -Z, --compress=0-9 압축레벨설정 * -?, --help 도움말을보여줌 pg_dumpall - cluster 의모든 database 들을 dump - 출력방식은스크립트형식 ( 디폴트 ) 및아카이브형식 ( 바이너리 ) 사용법 - 덤프하기 : pg_dumpall > all.out - restore 하기 : psql f all.out < 데이터베이스이름 > - 옵션 * a : 데이타 only * s : 스키마 only * g : 글로벌오브젝트 only i.e. 사용자, 그룹
5. 기능소개 5.5 최신버전업데이트 최신버전업데이트방법 - 설치바이너리실행 : 대화형모드로 Master, Standby 노드를각각절체후한대씩차례로설치 - pg_upgrade : $PGDATA/bin 디렉토리에있는바이너리로서간단한환경변수설정후하나의명령어로업그레이드진행 예제 - 명령어실행 : - pg_upgrade pg_upgrade Old version DB startup - 22 - New version empty DB
- 23-6. 활용예제 세부목차 6.1 모니터링 6.2 오픈소스툴을활용한 DB 및이중화구성의예
- 24-6. 활용예제 6.1 모니터링 (1/2) 모니터링방법 - Linux의 ps명령을이용하여프로세스를체크하여아래의메인프로세스동작여부체크 - 아래의경로명은시스템환경에따라다름 - PostgreSQL 내부명령어인 pg_ctl 명령어사용 - # ps ef grep postgres - # pg_ctl status 사용법
- 25-6. 활용예제 6.1 모니터링 (2/2) 모니터링방법 - DB의 Active Session 조회 - DB의 Lock 정보조회 - 참고로아래의예는 PSQL세션에서세로보기를활성화한예 사용법
- 26-6. 활용예제 6.2 오픈소스툴을활용한 DB 및이중화구성의예 오픈소스툴로 Load balancing과자동 Failover 등의기능을수행 - Query/DML을자동으로인식하여 load balancing - Read-only Standby를통한 read traffic 분산 - 장애감지및자동 Failover 지원 (on/off 가능 ) - 2개이상다중스탠바이 Instance 환경지원 - 빠른절체시간 - 복제상황모니터링지원
- 27-7. FAQ Q 모니터링툴은무엇이있나요? A Tadpole( 올챙이 ), pgadmin 과같은오픈소스툴이있습니다. 상용툴보다는 기능이부족하지만개발및클라이언트용도외에모니터링특히 pgadmin 의경우 server status 를통해간단한모니터링이가능합니다. Q PostgreSQL 에도테이블스페이스가존재하나요? A Oracle처럼테이블스페이스라는개념이존재합니다만개념이다릅니다. 데이터저장영역이부족한경우 OS의다른파티션영역을다른데이터베이스가사용할수있도록합니다. 그리고테이블스페이스의논리적인 Size제한이없으며, 다만물리적으로 OS영역이남아있는한계속사용할수있습니다.
- 28-8. 용어정리 용어 Postmaster Streaming Replication PITR WAL Snapshot 설명 PostgreSQL 을기동할때가장먼저시작되는프로세스이며, 초기기동시에복구작업, Shared Memory 초기화작업, 백그라운드프로세스구동작업을수행하며, 다른백그라운드프로세스의부모프로세스로백그라운드프로세스의비정상종료시자동구동시켜주는역할 Master Node 와 Standby Node 간의 DB 동기화를하기위해변경된사항을 Master Node 에서 Standby Node 로지속적으로 Replication XLOG( 이중화 LOG) 를보냄으로써유지, Master Node 에서로그파일을 Standby Node 로지속적으로전달함으로써실시간에가까운복제본구성 Point In Time Recovery. 백업및복구의방법론으로서특정시점으로데이터베이스를백업본으로복구하는기술이며, PostgreSQL 에서는 Hot Backup 으로 copy 해둔파일을 Data Directory 로 Restore Write Ahead Log. 데이터베이스의데이터파일에기록하기전에변경사항을 WAL Buffer 에기록해뒀다가정해진시점에 WAL File 에기록하는로깅매커니즘 스토리지, 가상화, 데이터베이스등여러분야에서폭넓게쓰이는정보통신용어로, DBMS 에서는 DB 의현재상태, 즉 DB 의상태를가리키고, 복제본의형태로보유하고있다가나중에복원을위한용도로주로쓰임
Open Source Software Installation & Application Guide 이저작물은크리에이티브커먼즈 [ 저작자표시 비영리 동일조건변경허락 2. 0 대한민국라이선스 ] 에따라이용하실수있습니다.