PostgreSQL 주기적인 유지관리 Vacuuming



주기적인 유지관리 Vacuuming

Vacuum 기초

 - PostgreSQL의 Vacuum 명령은 다음과 같은 이유로 각 테이블마다 정기적으로 프로세스 해야합니다.

 a. 업데이트 또는 삭제된 행이 점유한 디스크 공간의 복구 또는 재사용.
 b. PostgreSQL 쿼리 플래너가 사용하는 데이터 통계 업데이트 (DB통계정보)
 c. 인덱스 전용 스캔 속도를 높이는 가시도 맵(visibility map) 업데이트
 d. 트랜잭션 ID 랩어라운드 또는 multixact ID 랩어라운드에 의한 아주 오래된 데이터가 손실되지 않도록 보호
 
 Vacuum에는 두가지 변이인 표준 Vacuum과 Vacuum Full이 있습니다. Vacuum Full은 디스크 공간을 더 많이 회수하는 대신 실행이 느립니다. 또한, 표준형 Vacuum은 데이터베이스 작업과 병렬로 실행할 수 있습니다. (Vacuum 진행중에 DDL (alter) 명령은 안되나 DML (select,insert,delete,update) 명령은 정상 작동함)
 Vacuum Full 작업은 작업중인 테이블에 대해 배타적 잠금이 필수이므로, 테이블의 다른 작업과 병렬로 사용할 수 없습니다.
 Vacuum은 상당한 I/O 트래픽이 발생되며, 다른 활성 세션의 성능을 저하시키는 원인이 됩니다.
 
1) 디스크 공간 복구

 - PostgreSQL에서 행의 UPDATE 또는 DELETE는 행의 오래된 버전을 즉각 제거하지 않습니다. 이러한 접근법은 MVCC의 장점을 누리기 위한것으로, 다른 트랜잭션에서 계속 확인될 가능성이 있을 경우에는 행 버전을 삭제해서는 안됩니다. 그러나 오래되었거나 삭제된 행 버전은 트랜잭션 대상이 아니기 때문에 Vacuum으로 회수 가능합니다.
 - 표준형 Vacuum은 테이블과 인덱스에서 Deed row 버전을 삭제하고, 나중에 재사용할 수 있도록 가용 공간으로 표시합니다. 하지만 테이블에 쓸수 있는 공간이 있는 경우는 오래된 공간을 반환하지 않습니다.
 - Vacuum Full은 Dead space가 일절 없도록 모든 공간을 반환합며, 테이블을 새버전으로 작성함으로 테이블이 최소화되지만, 시간이 오래걸리는 단점이 있습니다.
 - 일상적인 Vacuuming의 목표는 Vacuum Full이 불필요 하도록 표준형 Vacuum을 충분히 실행하는 것입니다. autovacuum데몬은 이와 같은 방식을 작동 되며, 사실상 Vacuum Full을 절대 수행하지 않습니다.
 
2) 실행 계획 통계 업데이트

 - PostgreSQL 쿼리 플래너는 쿼리에 대해 괜찮은 플랜을 생성하기 위해, 테이블 내용에 대한 통계정보에 의존합니다. 이러한 통계는 자체적으로 호출하거나 Vacuum에서 옵션으로 처리하거나 ANALYZE 명령으로 생성됩니다.
 - autovacuum 데몬이 활성화 되면 테이블 내용이 바뀔때마다 ANALYZE 명령이 자동으로 실행됩니다. 업데이트가 빈번하더라도, 데이터의 통계적 분포가 많이 바뀌지 않을때는 통계를 업데이트를 할 필요가 없습니다.

3) visibility map 업데이트

 - Vacuum은 모든 활성 트랜잭션에 보이는 것으로 알려진 튜플만 포함된 페이지를 추적하기 위하여 각 테이블에 대한 visibility map을 관리합니다.
 - 첫번째 목적은 Vacuum 자체는 cleanup 할 것이 없으므로 다음 실행에서 해당 페이지를 스킵합니다.
 - 두번째 목적은 기저 테이블을 참조하지 않고 인덱스만 이용하여 PostgreSQL이 일부 쿼리에 응답할 수 있게 합니다. 테이블을 참조 하지 않고 인덱스만 스캔하는 경우 visibility map을 먼저 확인하기 때문에 페이지에 튜플이 보이는 경우 heep fetch를 스킵할 수 있습니다. 거대 데이터 세트에서는 visibility map이 디스크 액세스를 막을 수 있는 가장 확실한 방법입니다. visibility map은 heep 보다 훨씬 작기때문에 heep이 매우 클 경우에도 쉽게 캐쉬 됩니다.

4) 트랜잭션 ID 랩어라운드 실패 방지

 - PostgreSQL의 MVCC 트랜잭션 시멘틱은 트랜잭션 ID(XID) 번호의 비교 가능 여부에 달려있습니다. 트랜잭션 ID의 크기는 제한되어 있으므로(32비트) 장시간 (40억 트랜잭션 이상) 동안 실행되는 클러스터는 트랜잭션 ID 랩어라운드가 발생합니다. XID 카운트가 0으로 랩어라운드 되고 과거에 있었던 모든 트랜잭션이 미래에 나타나게 됩니다. 즉 데이터의 소실이 발생합니다. 이 것을 피하려면 피하려면 20억 트랜잭션마다 모든 데이터베이스의 모든 케이블을 Vacuum해야 합니다.
 - 주기적으로 Vacuuming으로 문제가 해결되는 이유는 이 행이 과거에 커밋된 트랜잭션에 의해 삽입되었고 삽입 트랜잭션의 결과로 MVCC 관점으로 부터 현재와 미래 트랜잭션에서 모두 보이는 것이 확실하도록 Vacuum이 행에 동결 표시를 한다는 것입니다.
 
5) Multixact 및 랩어라운드

 - Multixact ID는 복수 트랜잭션에 의한 행 잠금을 지원할 때 사용됩니다.
 - Vacuum 테이블 스캔 중에, 테이블 부분적으로 또는 전체적으로 vacuum_multixact_freeze_min_age보다 오래된 multixact ID는 서로 다른 값으로 교체되는데, 이 값은 0, 단일 트랜잭션ID 또는 신규 multixact ID일 수 있습니다. 테이블 별로 pg_class.relminmxid는 해당 테이블에 계속 나타날 가능성이 있고 가장 오래된 multixact ID를 저장합니다. 이 값이 vacuum_multixact_freeze_min_age보다 오래된 경우 전체 테이블 스캔이 강제됩니다.
 - 전체 테이블 Vacuum 스캔은 사용된 멤버 저장소 공간이 할당된 저장소 공간의 50%를 초과 할 경우 multixact 연령이 가장 오래된 것을 시작으로 모든 테이블에 대해 순처적으로 일어납니다.
 
6) Autovacuum 데몬
 
 - Autovacuum 데몬의 목적은 Vacuum과 ANALYZE 명령의 실행을 자동화하는 것입니다.
 - autovacuum이 활성화 되면 다수의 튜플이 삽입, 업데이트 또는 삭제된 테이블을 검사합니다. 이 검사는 통계 수집 기능을 사용합니다. 따라서 track_counts가 true로 설정되지 않으면 사용할 수 없습니다.
 

CentOS 7 에서 방화벽에 PostgreSQL 리스너 포트 등록하기

접근제어


- PostgreSQL은 pg_hba.conf를 통해 접근제어를 할 수 있으나, 성능상의 이슈로 인해 OS단이나 방화벽 장비, 보안장비에서 제어하는 것을 추천 한다고 했습니다.


- CentOS 7 에서는 새로나온 Firewalld 와 기존의 iptables 모두 사용 가능 합니다.



firewalld 의 설정



# firewall-cmd --permanent --zone=trusted --add-source=<Client IP address>/32


# firewall-cmd --permanent --zone=trusted --add-port=5432/tcp


# firewall-cmd --reload



iptables 설정


# iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d <Server IP address> --dport 5432 -m state --state NEW,ESTABLISHED -j ACCEPT


# iptables -A OUTPUT -p tcp -s <Server IP address> --sport 5432 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT




'Database > PostgreSQL' 카테고리의 다른 글

PostgreSQL Tablespace 생성  (0) 2018.12.27
PostgreSQL DB 생성 및 삭제  (0) 2018.12.27
CentOS 7 에서 방화벽에 PostgreSQL 리스너 포트 등록하기  (0) 2018.12.27
초간단 postgresql.conf 설정  (0) 2018.12.27
pg_hba.conf  (0) 2018.12.27
Linux에 Postgres 9.6 버전 설치  (0) 2018.12.25

pg_hba.conf

pg_hba.conf



- PostgreSQL의 인증관련 설정 파일 ( HBA : host-based authentication 호스트 기반의 인증 약어 )


1) $PGDATA 에 존재. (클러스터홈)

2) PostgreSQL의 pg_hba.conf 파일을 통해 외부접근에 대한 처리는 되도록 배재하는것이 좋습니다.

   pg_hba.conf 설정을 통하여 외부접근을 하게 되면, PostgreSQL 인증체크처리 부하가 발생하여 전체적인 성능에 부하가 걸릴 수 있기 때문에, OS단의 iptables에서 통제 하거나, 그 앞단에서 방화벽, 보안장비에서 통제하는 편이 좋습니다.

3) 설정은 간단하며, 접근 Host나 Host의 데이터 전송방식과 암호화 전송방식에 대한 설정을 가지고 있습니다.

4) 실제적인 계정에 대한 정보는 PostgreSQL의 카탈로그 테이블인 pg_user에서 관리하기 때문에 계정 권한, 패스워드 변경 등의 작업은 실시간 적용이 가능하나, 클라이언트의 접근 방식이나, 암호 전달 방식은 pg_ctl reload 또는, pg_ctl restart 명령을 통해 pg_hba.conf를 다시 로드해야 합니다. restart는 불편함이 있지만, 불법 접근에 대한 처리에 있어 빠른 응답으로 PostgreSQL 서버 부담을 줄이고, 최대한 성능을 끌어내기 위해 채택한 방법입니다.



- pg_hba.conf 내용



# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:

host    all             all             127.0.0.1/32            md5

# IPv6 local connections:

host    all             all             ::1/128                 md5

# Allow replication connections from localhost, by a user with the

# replication privilege.

#host    replication     enterprisedb        127.0.0.1/32            md5

#host    replication     enterprisedb        ::1/128                 md5




- 환경설정



1. Host Type


Host Type은 접근자의 접근위치와 통신의 암호화 관련 설정입니다.

local, host, hostssl, hostnossl을 지원합니다.

 

local은 자칫 localhost로 생각할 수 있겠지만, local은 Unix Domain Socket을 통한 접속에 해당되는 것으로 다소 햇갈릴수 있으니 주의 하시기 바랍니다.

 

hostssl은 ssl인증서를 통한 암호화 통신만 지원하며 localhost, 127.0.0.1식의 즉 TCP/IP접속에 해당된다.

hostnossl은 ssl접속은 불가능하며, TCP/IP통신을 지원합니다.

 

host나 hostssl로 설정한 상태에서 SSL기능을 사용하시려면 Postgres컴파일시 --with-openssl옵션을 주어야 하며, postgresql.conf에 ssl=true로 설정을 해주셔야만 합니다.

 

 

2. Database Name


특정한 디비에 대한 접속을 제한할 수 있으며 ,(콤마)로 여러 개의 DB로 접근 제어가 가능합니다.  모든 DB에 대한 접근을 풀려면 all로 설정하시면 됩니다. 만약에 설정할 DB가 수십개라면 기재하기 불편하실경우 @dblist.txt 식으로 설정하고 dblist.txt을 PGDATA로 설정한 폴더의 안에 넣어 두시면됩니다.

 


3. User Name


계정설정으로 ,(콤마)구분으로 할 수 있으며, Database의 @파일명 식으로 따로 파일을 만들어서 처리하실수도 있습니다. PostgreSQL의 계정 그룹 카탈로그 테이블인 pg_group 또는 create_group 명령으로 그룹을 만들어 계정들은 하위(SYSID)에 묶어두었을때는 +(플러스) 키를 붙인 그룹명으로 설정하면 해당 그룹에 대한 모든 접근이 가능해집니다.

 


4. CIDR-ADDRESS or IP-Mask


IPv4 CIDR구분으로 해당 C Class에 대해 모두 접근처리를 할 경우는 : xxx.xxx.xxx.0/24

해당 IP에 대한 접근처리를 할 경우는 : xxx.xxx.xxx.xxx/32

 


5. Authentication Method


이 부분은 실제적인 계정의 패스워드에 대한 서버로의 전송을 어떻게 할 것인가를 정하는 것입니다.

PostgreSQL Server와 Client와의 접속에는 처음 Client가 접속을 하게 되면 pg_hba.conf에 대해 검색해서 해당 접속에 대한 접근허용을 확인하고 확인이 되면 이 Auth.Method에 설정된 암호화 방식으로 패스워드를 전송하라고 응답메시지를 보내고 다시 Client가 Server로 로그인을 하게 되는 방식입니다.


trust : 패스워드 없이 접근 가능

reject : 거부

md5 : 패스워드를 md5로 암호화해서 전송

crypt : crypt로 암호화 해서 전송 Postgres 7.2이후부터는 사용 안함. (이전버전설정 호환용)

password : text로 패스워드를 전송하는 것.

krb4, krb5 : KerberOS V4, 5를 지원한다.

ident : 접속 ClientOS User이름을 확인하는 방법?

pam : PAM(Pluggable Authentication Modules)서비스를 사용한 인증




- 설정 예제



# 로컬 시스템상의 모든 유저가 임의의 데이터베이스에 

# 임의의 데이터베이스 유저명으로 Unix 도메인 소켓을 사용해 접속하는 것을 허가 

# (로컬 접속에서는 디폴트). 

# TYPE    DATABASE    USER        CIDR-ADDRESS          METHOD 

  local   all         all                               trust 



# 로컬 loopback의 TCP/IP 접속을 사용하는 것은 위와 같다. 

# TYPE    DATABASE    USER        CIDR-ADDRESS          METHOD 

  host    all         all         127.0.0.1/32          trust    



# 분리된 netmask 열을 사용하고 있는 것을 제외하고 위와 같다. 

# TYPE    DATABASE    USER        IP-ADDRESS    IP-MASK            METHOD 

  host    all         all         127.0.0.1     255.255.255.255    trust 



# IP주소 192.168. 93. x를 가지는 모든 호스트의 모든 유저가, 

# ident가 그 접속에 대해 보고하는 것과 같은 유저명(전형적으로는 Unix 유저명)으로 

# 데이터베이스 "postgres"에 접속하는 것을 허가. 

# TYPE    DATABASE    USER        CIDR-ADDRESS          METHOD 

  host    postgres    all         192.168.93.0/24       ident sameuser 



# 유저의 패스워드가 올바르게 입력되었을 경우, 

# 호스트 192.168. 12.10부터의 유저가 데이터베이스 "postgres"에 접속하는 것을 허가 

# TYPE    DATABASE    USER        CIDR-ADDRESS          METHOD 

  host    postgres    all         192.168.12.10/32      md5 



# 선행하는 "host"행이 없으면, 이 2행에 의해 192.168. 54.1으로 접속 시도는 

# 모두 거부(이 항목이 최초로 일치되기 때문에). 

# 다만, 인터넷상의 다른 모든 장소로부터의 Kerberos 5 접속은 허가. 

# 제로 마스크는, 호스트 IP주소의 비트를 고려하지 않고 

# 어느 호스트라도 조합할 수 있는 것을 의미합니다. 

# TYPE    DATABASE    USER        CIDR-ADDRESS          METHOD 

  host    all         all         192.168.54.1/32       reject 

  host    all         all         0.0.0.0/0             krb5 

 


# 192.168. x.x 호스트로부터의 유저가, ident 검사를 통과하는 경우, 

# 어느 데이터베이스라도 접속을 허가. 만약, 예를 들면, ident가 "bryanh"라고 인정해 

# "bryanh"가 PostgreSQL의 유저 "guest1"로서 

# 접속 요구를 내는 경우, "bryanh"는 "guest1"로 접속이 허가된다고 합니다. 

# 맵 "omicron"에 대한 기재사항이 pg_ident.conf에 있으면 접속을 허가. 

# TYPE    DATABASE    USER        CIDR-ADDRESS          METHOD 

  host    all         all         192.168.0.0/16        ident omicron 



# 로컬 접속에 대해서, 이하의 단 3행 밖에 기재가 없는 경우, 로컬 유저는 

# 자신의 데이터베이스(데이터베이스 유저명과 같은 이름의 데이터베이스)에게만 접속 허가. 

# 다만 관리자와 롤 "support"의 멤버는 모든 데이터베이스에 접속 가능. 

# $PGDATA/admins 파일은 관리자의 리스트를 포함한다. 

# 모든 경우에 패스워드가 필요. 

# TYPE    DATABASE    USER        CIDR-ADDRESS          METHOD 

  local  sameuser      all                              md5 

  local  all           @admins                          md5 

  local  all           +support                         md5 



# 위의 마지막 2행은 1개의 행으로 정리하는 것이 가능. 

  local  all           @admins,+support                 md5 


# 데이터베이스의 열에는 리스트나 파일명도 사용할 수 있지만, 그룹은 사용할 수 없다. 

  local  db1,db2,@demodbs  all                          md5 



'Database > PostgreSQL' 카테고리의 다른 글

CentOS 7 에서 방화벽에 PostgreSQL 리스너 포트 등록하기  (0) 2018.12.27
초간단 postgresql.conf 설정  (0) 2018.12.27
pg_hba.conf  (0) 2018.12.27
Linux에 Postgres 9.6 버전 설치  (0) 2018.12.25
PostgreSQL의 기본 개념  (0) 2018.12.12
pgadmin4 설치  (0) 2018.12.03

Linux에 Postgres 9.6 버전 설치

PostgreSQL 9.6 설치


현재 가장 많이 사용하는 버전이 9.6버전이기 때문이기도 하고, Postgres가 성능적인 부분에서 많은 발전을 이뤄낸 버전이기도 하기 때문에 9.6버전의 설치하는 법을 안내 해보고자 합니다.


기존의 run 파일을 올려서 설치하는 방식이 아닌, PostgreSQL 홈페이지에서 yum repo를 제공하고 있으며, 누구나 쉽게 설치를 할 수 있으나, 처음부터 yum으로 설치 하게 되면, 설치 기본 경로라던가 엔진의 경로, datafile의 경로등 자신이 원하는 대로 설치가 용이 하지않고 나중에 수정해주는 작업은 매우 번거롭기도 하기 때문에 설치 단계에서부터 원하는 입맛대로 설치를 위한 방법을 알아보도록 하겠습니다.



CentOS 7 64bit 설치


PostgreSQL DB는 일반적으로 같은 오픈소스 OS인 CentOS를 많이 이용합니다.

psql을 사용하는 이유는 명백히 단가 절감을 위함인데, 라이센스 비용이 들어가는 OS, 즉, 윈도우나 유닉스에 설치하는 것은 그 의미가 퇴색된다고 봅니다. 그래서 CentOS 7 버전에 PostgreSQL을 설치합니다.



CentOS의 설치는 간단합니다. 오라클 설치 때와는 확연히 다르게, 미니멀 설치를 합니다.

설치를 하면서 중요한 부분입니다. 


Compatibility Library, Development Tools


두 패키지는 추가로 설치하도록 합니다. gcc나 openssh 등 기본적으로 개발자들이나 운영하는데 있어 추가적인 무언가 하기위해 필요한 기본적인 것들이 많이 들어있습니다.


그리고 설치가 완료 되면 yum으로 추가적인 것들을 설치 해줍니다.


# yum -y install net-tools elinks wget bind-utils vim sysstat


서버 네트워크를 Bonding 한다거나, 그 밖의 다른 설정이 필요하다면 다른 패키지들을 충분히 설치합니다.



그룹 및 유저 추가


yum으로 postgresql를 설치하면 기본적으로 postgres 그룹과 postgres 유저를 설치해줍니다.

유저 홈은 /var/lib/pgsql 으로 설정이 되고, 데이터의 기본 경로는 /var/lib/pgsql/9.6/data 밑으로 가게됩니다.

이게 참 애매한 부분이 있기도 하고 운영하는데 불편하기도 하고 해서 그룹과 유저를 기본적으로 세팅을 해놓고 시작을 해보겠습니다.


# groupadd -g 26 postgres


# useradd -u 26 -g postgres -d /home/postgres postgres


# passwd postgres


# su - postgres



프로파일 설정


$ vi .bash_profile


# .bash_profile


# Get the aliases and functions

if [ -f ~/.bashrc ]; then

        . ~/.bashrc

fi


# User specific environment and startup programs


PATH=$PATH:$HOME/.local/bin:$HOME/bin


export PATH


[ -f /etc/profile ] && source /etc/profile

PGDATA=/usr/local/pgsql/data              <----- 데이터가 설치될 경로입니다.

export PGDATA

# If you want to customize your settings,

# Use the file below. This is not overridden

# by the RPMS.

[ -f /var/lib/pgsql/.pgsql_profile ] && source /var/lib/pgsql/.pgsql_profile


export PS1="\[\e[36;1m\]\u@\[\e[32;1m\]\h:\[\e[31;1m\]\w]$ \[\e[0m\]"

export TERM=linux


PATH=$PATH:$HOME/bin:/usr/pgsql-9.6/bin

export PATH


alias vi='vim $*'


:wq!



유저가 보기도 좋고 관리도 편하게 세팅이 됩니다.



PostgreSQL 설치


데이터를 설치할 경로, 로그를 쌓을 경로를 만들어주고 권한을 부여합니다. 데이터 경로나, 로그의 경로는 다르게 지정을 해도 됩니다. 스스로가 관리하기 편한 경로에 지정 해주는것이 좋습니다. /usr/local/pgsql/data 이 경로는 이전 버전에서 사용하던 경로 입니다. 예를 들면 /app/db/pgsql/data 이렇게 설치를 하고, /app/db/pgsql/diag/log 라는 경로를 만들어 로그를 쌓고 싶다면, 만들어주면 됩니다. DB 관리의 용이함을 위해 data 파티션을 따로 지정해준다거나 하는 것도 좋습니다. 


저는 usr과 var의 의미를 살리기 위해 저는 아래와 같이 설정하고 설치를 진행합니다.

 


# mkdir -p /usr/local/pgsql/data

# chown -R postgres:postgres /usr/local/pgsql


# mkdir -p /var/postgresql/log

# chown -R postgres:postgres /var/postgresql


yum을 이용해 설치


# yum -y install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm

# yum -y install postgresql96 postgresql96-server


설치가 끝났습니다.

너무 간단하죠? 오라클에 비하면 할게 없습니다.



클러스터 초기화


PostgreSQL에서 클러스터란 database 집합체를 뜻한다고 설명한 적이 있습니다. 클러스터를 초기화 해야만 Database를 사용 할 수 있습니다. initdb 명령은 클러스터를 생성하거나 초기화 하는데 사용됩니다.


$ initdb -D /usr/local/pgsql/data



서버 실행


클러스터가 초기화 되면 Database를 시작 할 수 있습니다. PostgreSQL의 기본이 되는 postgres, template0, template1을 시작하는 것 입니다. 


$ pg_ctl start -D /usr/local/pgsql/data -l /var/postgresql/log/postgresql.log


서버를 실행하는 명령은 pg_ctl 뿐만 아니라 다른 명령도 있습니다.


$ postgres -D /usr/local/pgsql/data


이렇게만 실행해도 서버가 시작됩니다. postgresql의 공식 메뉴얼에는 백그라운드로 실행시키는 것은 권장하고 있습니다.


$ postgres -D /usr/local/pgsql/data >/var/postgresql/log/postgresql.log 2>&1 &


pg_ctl 명령으로는 백그라운드로 실행해도 포그라운드로 나오는데, 이건 좀 더 체크를 해볼 필요가 있을것 같습니다.


OS에서 Jobs를 확인해보면 백그라운드에서 실행중임을 알수 있습니다.


$ jobs

[1]+  Running                 postgres -D /usr/local/pgsql/data > /var/postgresql/log/postgresql.log 2>&1 &




설치 확인


$ psql -d postgres -U postgres


접속을 하면 sql 프롬프트가 나옵니다.


postgres=# 

postgres=# \l

                                  List of databases

   Name    |   Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   

-----------+-----------+----------+-------------+-------------+-----------------------

 postgres  | postgres  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 

 template0 | postgres  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +

           |           |          |             |             | postgres=CTc/postgres

 template1 | postgres  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +

(3 rows)


클러스터를 구성하는 3개의 DB가 시작된 것을 볼 수 있습니다.


postgres=# \q


하면 OS로 나갈 수 있습니다.

이 것으로 설치 및 확인은 완료 되었습니다.





'Database > PostgreSQL' 카테고리의 다른 글

초간단 postgresql.conf 설정  (0) 2018.12.27
pg_hba.conf  (0) 2018.12.27
Linux에 Postgres 9.6 버전 설치  (0) 2018.12.25
PostgreSQL의 기본 개념  (0) 2018.12.12
pgadmin4 설치  (0) 2018.12.03
PostgreSQL 11 설치  (0) 2018.12.03

pgadmin4 설치

pgadmin 은 웹에서 postgresql을 관리 해줄수 있게 해주는 관리 툴입니다.

오라클 EM 같은거라고 보시면 됩니다.



SELINUX 해제


setenforce 0

sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config



Yum으로 pgadmin 설치


# yum install  https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-redhat96-9.6-3.noarch.rpm -y

# yum install epel-release


# yum install pgadmin4



pgadmin4 환경설정


# vi /usr/lib/python2.7/site-packages/pgadmin4-web/config_distro.py

LOG_FILE = '/var/log/pgadmin4/pgadmin4.log'

SQLITE_PATH = '/var/lib/pgadmin4/pgadmin4.db'

SESSION_DB_PATH = '/var/lib/pgadmin4/sessions'

STORAGE_DIR = '/var/lib/pgadmin4/storage'



# python /usr/lib/python2.7/site-packages/pgadmin4-web/setup.py

NOTE: Configuring authentication for SERVER mode.


Enter the email address and password to use for the initial pgAdmin user account:


Email address: <이메일 주소>

Password: <패스워드>

Retype password: <패스워드 확인>

pgAdmin 4 - Application Initialisation

======================================



# mkdir -p /var/lib/pgadmin4/

# mkdir -p /var/log/pgadmin4/


# chown -R apache:apache /var/lib/pgadmin4

# chown -R apache:apache /var/log/pgadmin4


# chcon -R -t httpd_sys_content_rw_t "/var/log/pgadmin4/"

# chcon -R -t httpd_sys_content_rw_t "/var/lib/pgadmin4/"




virtual host 만들기


# vi /etc/httpd/conf.d/pgadmin4.conf


<VirtualHost *>

    ServerName 192.168.0.9/pgadmin


    WSGIDaemonProcess pgadmin processes=1 threads=25

    WSGIScriptAlias / /usr/lib/python2.7/site-packages/pgadmin4-web/pgAdmin4.wsgi

 

    <Directory "/usr/lib/python2.7/site-packages/pgadmin4-web/">

        WSGIProcessGroup pgadmin

        WSGIApplicationGroup %{GLOBAL}

        Require all granted

    </Directory>

</VirtualHost>



# apachectl configtest

Syntax OK



# systemctl restart httpd


# setsebool -P httpd_can_network_connect 1


# firewall-cmd --permanent --add-service=http

# firewall-cmd --reload

success



웹 브라우저에서 192.168.0.9/pgadmin 으로 접속해보면 아래와 같은 화면이 나오고 위에서 입력한 메일 주소로 로그인이 가능합니다.




'Database > PostgreSQL' 카테고리의 다른 글

Linux에 Postgres 9.6 버전 설치  (0) 2018.12.25
PostgreSQL의 기본 개념  (0) 2018.12.12
pgadmin4 설치  (0) 2018.12.03
PostgreSQL 11 설치  (0) 2018.12.03
PostgreSQL 백업 및 복구  (0) 2018.11.24
PostgreSQL 소스 코드로 설치  (0) 2018.04.03

PostgreSQL 11 설치

Linux Cent OS 7.5 x64


PostgreSQL 11



우선 yum repository를 설치합니다. 


# yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm



그 후에 yum으로 postgresql을 설치 합니다.


# yum -y install postgresql11-server postgresql11



설치하고 나면 postgres 라는 계정이 생성됩니다.


# su - postgres

-bash-4.2$


프로토콜이 보기 불편하니 변경해줍니다.


$ vi .bash_profile


export PS1="[\u@\h:\w]\\$ "   

추가


root에서 DB를 서비스에 init 합니다.


[root@psql-db ~]# /usr/pgsql-11/bin/postgresql-11-setup initdb

Initializing database ... OK


systemctl 로 DB를 구동하고, 서버 실행시 자동 실행되게 등록해줍니다.


[root@psql-db ~]# systemctl start postgresql-11

[root@psql-db ~]# systemctl enable postgresql-11

Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-11.service to /usr/lib/systemd/system/postgresql-11.service.

[root@psql-db ~]#


방화벽에 PostgreSQL을 차단하지 않게 정책을 추가해줍니다.


[root@psql-db ~]# firewall-cmd --add-service=postgresql --permanent

success

[root@psql-db ~]# firewall-cmd --reload

success

[root@psql-db ~]#



PostgreSQL의 conf 파일은 /var/lib/pgsql/11/data/postgresql.conf 있습니다.


vi로 열어서 listener  설정을 해줍니다.



listen_addresses = '192.168.0.9'



remote 접속 허용 설정을 해줍니다.


[root@psql-db ~]# vi /var/lib/pgsql/11/data/pg_hba.conf


# Accept from anywhere  (아무나 다)

host all all 0.0.0.0/0 md5


or


# Accept from trusted subnet (특정 대역대만)

host all all 192.168.18.0/24 md5



예>


# IPv4 local connections:

host    all             all             0.0.0.0/0               md5

#host    all             all             127.0.0.1/32            ident


Postgres 재구동


# systemctl restart postgresql-11



TEST 유저와 TEST DB를 만들고 접속 해봅니다.


[postgres@psql-db:~]$ createuser test_user

[postgres@psql-db:~]$ createdb test_db -O test_user

[postgres@psql-db:~]$ psql -c "alter user test_user with password 'test'"


권한을 주기위해 admin 유저로 접속을 합니다. postgres/postgres


[postgres@psql-db:~]$ psql -U postgres -d postgres

psql (9.2.24, server 11.1)

WARNING: psql version 9.2, server version 11.0.

         Some psql features might not work.

Type "help" for help.


postgres=# 

postgres=# 

postgres=# grant all privileges on database test_db to test_user;

GRANT

postgres=# \q


터미널에서 TEST DB에 접속


[postgres@psql-db:~]$ psql -U test_user -h 192.168.0.9 -d test_db

psql (9.2.24, server 11.1)

WARNING: psql version 9.2, server version 11.0.

         Some psql features might not work.

Type "help" for help.


test_db=>


설치가 완료 되었습니다.

'Database > PostgreSQL' 카테고리의 다른 글

PostgreSQL의 기본 개념  (0) 2018.12.12
pgadmin4 설치  (0) 2018.12.03
PostgreSQL 11 설치  (0) 2018.12.03
PostgreSQL 백업 및 복구  (0) 2018.11.24
PostgreSQL 소스 코드로 설치  (0) 2018.04.03
PostgreSQL 버그 리포팅 가이드 라인  (0) 2018.04.03

Oracle 18c 설치 Single

오라클 18c가 릴리즈 되었는데 설치 방법이 약간 바뀌었다.


18c는 2018.08.21 기준, 리눅스와 솔라리스 버전만 릴리즈 되었다.



해당 예제는 리눅스 7버전에 설치를 진행 한다.



리눅스 7의 Oracle 설치를 위한 기본 설치 패키지



Server with GUI

Hardware Monitoring Utilities

Large Systems Performance

Network file system client

Performance Tools

Compatibility Libraries

Development Tools


# vi /etc/hosts


# yum update -y




자동 셋업


# yum install -y install oracle-database-preinstall-18c




수동 셋업


# vi /etc/sysctl.conf


fs.file-max = 6815744

kernel.sem = 250 32000 100 128

kernel.shmmni = 4096

kernel.shmall = 1073741824

kernel.shmmax = 4398046511104

kernel.panic_on_oops = 1

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048576

net.ipv4.conf.all.rp_filter = 2

net.ipv4.conf.default.rp_filter = 2

fs.aio-max-nr = 1048576

net.ipv4.ip_local_port_range = 9000 65500



# vi /etc/security/limits.d/oracle-database-preinstall-18c.conf


oracle   soft   nofile    1024

oracle   hard   nofile    65536

oracle   soft   nproc    16384

oracle   hard   nproc    16384

oracle   soft   stack    10240

oracle   hard   stack    32768

oracle   hard   memlock    134217728

oracle   soft   memlock    134217728



패키지 설치 목록


# OL6 and OL7 (RHEL6 and RHEL7)

yum install -y bc    

yum install -y binutils

yum install -y compat-libcap1

yum install -y compat-libstdc++-33

yum install -y compat-libstdc++-33.i686

yum install -y elfutils-libelf.i686

yum install -y elfutils-libelf

yum install -y elfutils-libelf-devel.i686

yum install -y elfutils-libelf-devel

yum install -y fontconfig-devel

yum install -y glibc.i686

yum install -y glibc

yum install -y glibc-devel.i686

yum install -y glibc-devel

yum install -y ksh

yum install -y libaio.i686

yum install -y libaio

yum install -y libaio-devel.i686

yum install -y libaio-devel

yum install -y libX11.i686

yum install -y libX11

yum install -y libXau.i686

yum install -y libXau

yum install -y libXi.i686

yum install -y libXi

yum install -y libXtst.i686

yum install -y libXtst

yum install -y libgcc.i686

yum install -y libgcc

yum install -y librdmacm-devel

yum install -y libstdc++.i686

yum install -y libstdc++

yum install -y libstdc++-devel.i686

yum install -y libstdc++-devel

yum install -y libxcb.i686

yum install -y libxcb

yum install -y make

yum install -y nfs-utils

yum install -y net-tools

yum install -y python

yum install -y python-configshell

yum install -y python-rtslib

yum install -y python-six

yum install -y smartmontools

yum install -y sysstat

yum install -y targetcli

yum install -y unixODBC



그룹 및 유저 추가


# groupadd -g 54321 oinstall

# groupadd -g 54322 dba

# groupadd -g 54323 oper


# useradd -u 54321 -g oinstall -G dba,oper oracle




추가 세팅



SELinux 설정


# vi /etc/selinux/config


SELINUX=permissive


# setenforce Permissive

※ 리눅스 7 버전은 SELinux 설정 후 재구동 필요없음.



방화벽 Off


# systemctl stop firewalld

# systemctl disable firewalld



디렉토리 생성


# mkdir -p /u01/app/oracle/product/18.0.0/dbhome_1

# mkdir -p /u02/oradata

# chown -R oracle:oinstall /u01 /u02

# chmod -R 775 /u01 /u02


* u01 - 엔진

* u02 - 데이터



프로파일 설정


기존의 방식대로 해도 되고, 

아래는 18c 부터 오라클이 제공하는 방식을 설명한다.


$ mkdir /home/oracle/scripts


$ touch /home/oracle/scripts/setEnv.sh


$ cat > /home/oracle/scripts/setEnv.sh <<EOF

# Oracle Settings

export TMP=/tmp

export TMPDIR=\$TMP


export ORACLE_HOSTNAME=ol7-183.localdomain

export ORACLE_UNQNAME=cdb1

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=\$ORACLE_BASE/product/18.0.0/dbhome_1

export ORA_INVENTORY=/u01/app/oraInvenotry

export ORACLE_SID=cdb1

export PDB_NAME=pdb1

export DATA_DIR=/u02/data


export PATH=/usr/sbin:/usr/local/bin:\$PATH

export PATH=\$ORACLE_HOME/bin:\$PATH


export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib

export CLASSPATH=\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib

EOF


$ echo ". /home/oracle/scripts/setEnv.sh" >> /home/oracle/.bash_profile



시작, 종료 스크립트 작성


$ touch /home/oracle/scripts/start_all.sh

$ touch /home/oracle/scripts/stop_all.sh


$ cat > /home/oracle/scripts/start_all.sh <<EOF

#!/bin/bash

. /home/oracle/scripts/setEnv.sh


export ORAENV_ASK=NO

. oraenv

export ORAENV_ASK=YES


dbstart \$ORACLE_HOME

EOF



$ cat > /home/oracle/scripts/stop_all.sh <<EOF

#!/bin/bash

. /home/oracle/scripts/setEnv.sh


export ORAENV_ASK=NO

. oraenv

export ORAENV_ASK=YES


dbshut \$ORACLE_HOME

EOF



$ chown -R oracle.oinstall /home/oracle/scripts

$ chmod u+x /home/oracle/scripts/*.sh


설치 완료후에 /etc/oratab에 넣어주고, 오라클 유저로 시작/종료 할 수 있다.


~/scripts/start_all.sh

~/scripts/stop_all.sh



엔진 설치


Oracle 홈페이지에서 LINUX.X64_180000_db_home.zip 파일을 받을 수 있다.


해당 파일을 반드시 /u01/app/oracle/product/18.0.0/dbhome_1 폴더로 옮겨서 압축을 푼다.


$ cd /u01/app/oracle/product/18.0.0/dbhome_1



X매니저 나 Gnome 환경에서 GUI 방식으로 설치 한다.


$ ./runInstaller




엔진 설치 완료


DBCA는 12c와 동일하다.