1. 2018.12.25 Linux에 Postgres 9.6 버전 설치
  2. 2018.12.12 PostgreSQL의 기본 개념
  3. 2018.12.03 pgadmin4 설치

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

PostgreSQL의 기본 개념

PostgreSQL의 기본개념


 오라클과 psql의 차이점 때문에 용어 선택에서 상당히 헷갈리는 부분이 존재합니다.



1) 용어 차이

 

- 오라클은 DB 엔진이 올라간 후, 인스턴스를 생성하면서 데이터베이스가 생성됩니다. 즉, 오라클에서는 하나의 인스턴스가 하나의 DB를 나타냅니다. 하나의 데이터베이스 엔진으로 여러개의 인스턴스를 생성하면 하나의 서버에 여러개의 DB를 생성 할 수 있습니다. 인스턴스 = DB의 개념이지만, RAC 환경에서는 다수의 인스턴스가 하나의 DB를 이루는 경우도 있습니다. 


- PostgreSQL에서 인스턴스란, 서버 단위의 개념입니다. 서버 단일 인스턴스라고 부르는 PostgreSQL의 인스턴스는 서버 = 인스턴스 개념입니다. 


- 오라클에서 클러스터는 RAC 환경의 공유 노드 개념입니다. 하나의 스토리지를 바라보는 여러대의 노드, 오라클 클러스터웨어인 grid instructure 를 통한 active-active의 환경을 조성하고 클러스터웨어를 통해 이루어진 공유 노드를 클러스터라고 합니다. 


- Psql에서의 클러스터는 Psql DB 집합체를 이야기 합니다. PostgreSQL은 처음 DB를 설치하면 기본적으로 설치되는 DB가 있는데, postgres database, template0, template1 생성하는데, 이 3가지의 DB 집합체를 클러스터라고 합니다.



2) 데이터베이스 구조


- PostgreSQL의 물리적 구조는 매우 단순합니다.

- Shared Memory, 적은 수의 백그라운드 프로세스, 데이터 파일로 구성되어 있습니다.



2-1) Shared Memory


2-1-1) Shared Buffer


 - Shared Buffer의 목적은 DISK I/O를 최소화 하는 것입니다.

 - 그러기 위해서는 아래 항목을 만족해야 합니다.


  ● 매우 큰 버퍼를 빠르게 엑세스해야 한다. (수백GB 단위)

  ● 많은 사용자가 동시에 접근할 때 경합을 최소화해야 한다.

  ● 자주 사용되는 블록은 최대한 오랫동안 버퍼 내에 있어야 한다.


2-1-2) WAL 버퍼


 - WAL 버퍼는 데이터베이스의 변경 사항은 잠시 저장하는 버퍼입니다.

 - WAL 버퍼 내에 저장된 내용은 정해진 시점에서 WAL 파일로 기록됩니다.

 - 백업 및 복구 관점에서 WAL 파일은 매우 중요하고, 오라클에서 Redo의 개념과 비슷한 부분이 있습니다.



2-2) 프로세스 유형


 - Postmaster (Daemon) 프로세스

 - Background 프로세스

 - Backend 프로세스

 - Client 프로세스


2-2-1) Postmaster 프로세스


 - PostgreSQL를 구동 할 때 가장 먼저 시작되는 프로세스 입니다.

 - 초기 기동시 복구 작업, Shared Memory 초기화 작업, 백그라운드 프로세스 구동작업을 수행합니다

 - 클라이언트 프로세스의 접속 요청이 있을 때 Backend 프로세스를 생성합니다.


2-2-2) Background 프로세스


 - Autovacuum launcher를 제외하면, 오라클과 비슷한 백그라운드 프로세스들이 존재합니다.


 ● logger : 에러메세지를 로그 파일에 기록한다.

 ● checkpointer : 체크포인트 발생시, dirty 버퍼를 파일에 기록한다.

 ● writer : 주기적으로 dirty 버퍼를 파일에 기록한다.

 ● wal writer : WAL버퍼 내용을 WAL 파일에 기록한다.

 ● autovacuum launcher : Vacuum이 필요한 시점에 autovacuum worker를 fork 한다.

 ● archiver : Archive Log 모드일 때, WAL 파일을 지정된 디렉토리에 복사한다.

 ● stats collector : 세션 수행 정보 (pg_stat_activity)와 테이블 사용 통계 정보 (pg_stat_all_tables)와 같은 DBMS 사용 통계 정보를 수집한다.


2-2-3) Backend 프로세스


 - Backend 프로세스의 최대 개수는 max_connections 파라미터로 설정 가능하며, 기본값은 100입니다.

 - Backend 프로세스는 사용자 프로세스의 쿼리 요청을 수행한 후, 결과를 전송하는 역할을 수행합니다.

 - 쿼리 수행에 몇가지 메모리 구조가 필요한데, 이 것을 통칭해서 로컬 메모리라고 합니다.

 

 - 로컬 메모리 관련 주요 파라미터


 ◈ work_mem 파라미터

  - 정렬 작업, Bitmap 작업, 해시 조인과 Merge조인 작업시에 사용되는 공간. 기본값은 4MB

 

 ◈ maintenance_work_mem 파라미터

  - Vacuum 및 create index 작업 시에 사용되는 공간. 기본값은 64MB


 ◈ temp_buffers 파라미터

  - Temporary 테이블을 저장하기 위한 공간. 기본값은 8MB



 



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

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
PostgreSQL 백업 및 복구  (0) 2018.11.24

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