Versioning?
→ Major version 기준 5년 동안 메이저 버전을 지원한다고 공식 support 카테고리 내 versioning 정책에 나와있다.
2025년 1월 20일 기준 17.2버전까지 출시가 되었고 마지막 릴리즈는 2029년 11월 8일에 종료한다고 게시되어있다.
1년에 한 번 Major version을 출시하고 수정이 필요한 경우 세 달에 한 번 Minor version을 출시한다고 나와있다.
PostgreSQL 설치 방법 (PostgreSQL 17.2)
공식 문서 기준 Major 17 버전대에서의 요구사항은 다음과 같다.
패키지 | 버전 | 버전 확인 | 설치 확인 |
GNU Make | 3.81 이상 | make --version | dnf list installed | grep make |
gcc | 가능한 최신버전 (최소 C-99 컴포넌트가 호환되어야 함) | gcc --version | dnf list installed | grep gcc |
gzip | - | - | dnf list installed | grep gzip |
bzip2 | - | - | dnf list installed | grep bzip2 |
tarball | - | - | dnf list installed | grep tar |
Flex | 2.5.35 이상 | flex --version | dnf list installed | grep flex |
Bison | 2.3 이상 | bison --version | dnf list installed | grep bison |
perl | 5.14 이상 | perl --version | dnf list installed | egrep "^(perl)\.” |
readline | - | - |
이 중 Flex와 Bison 패키지에 대해 간단하게 설명하면
Flex : 어휘분석기를 생성해주는 소프트웨어로 c언어로 구문 분석 코드를 만들 수 있다
Bison : yacc의 기능을 개선한 GNU 파서를 생성해주는 파서 생성기
부가서비스 DB에 작업을 하면서 문제가 생겼다. 외부망을 사용하지 못하기 때문에 필요한 패키지 다운로드를 못하는 상황,
Flex → https://github.com/westes/flex/releases/tag/v2.6.4
Bison → https://ftp.gnu.org/gnu/bison/
readline은 https://ftp.gnu.org/gnu/readline/
에서 다운로드 받을 수 있다.
curl이나 wget이 불가능한 상황이지만, lrzsz는 사용이 가능한 환경이기 때문에 로컬 → 서버로 파일을 전송했다.
세 소스 파일 모두 make install까지 진행한다
./configure && make && make install
다만, readline은 설치하면 이런 화면을 볼 수 있다
ldconfig를 사용해서 공유 라이브러리 캐시를 재설정해야 한다.
ldconfig
source 설치
https://www.postgresql.org/ftp/source/v17.2/
위 URL을 들어가면 소스 설치 페이지를 볼 수 있다.
curl 혹은 wget으로 tar.gz 압축파일을 다운로드 받는다.
cd /usr/local/src
curl -LO <https://ftp.postgresql.org/pub/source/v17.2/postgresql-17.2.tar.gz>
or
wget <https://ftp.postgresql.org/pub/source/v17.2/postgresql-17.2.tar.gz>
압축 해제 후 아카이빙도 풀어준다.
tar -zxf postgresql-17.2.tar.gz
postgresql-17.2 디렉터리에 들어가면 아래와 같은 목록을 볼 수 있다
postgreSQL의 prefix default 경로는 /usr/local/pgsql이다. 디렉터리를 생성해준다
mkdir /usr/local/pgsql
생성해준 후 configure prefix 옵션을 /usr/local/pgsql-17.2로 지정해준다
./configure --prefix=/usr/local/pgsql-17.2 --with-openssl
make && make install
중간에 이런 에러가 나면서 진행이 멈췄다.
공유 라이브러리 부분에서 문제가 발생했다고 에러가 나왔다.
config.log 파일을 확인해보자
공유 라이브러리 문제라고 나왔기 때문에 shared 부분을 검색했다.
./conftest 도중에 libreadline.so.8 공유 라이브러리 파일을 열 수 없다. 파일이나 디렉터리가 없다 이런 에러가 나온다
libreadline.so.8 파일을 찾아보자
find / -name "libreadline.so.8:"
/usr/local/lib 디렉터리에 설치가 되었다.
readline을 configure && make && make install 하는 과정에서 경로 지정이 안되어서 그렇다.
소프트링크를 지정해준다.
ln -s /usr/local/lib/libreadline.so.8.2 /usr/lib64/libreadline.so.8.2
ldconfig
다시 configure를 해주자
./configure --prefix=/usr/local/pgsql
make && make install
prefix 옵션을 부여하게 되면 관련 설치파일을 모두 pgsql-17.2 디렉터리 내 하위 디렉터리를 생성 후 설치한다.
make install 작업까지 끝나게 되면 아래처럼 /usr/local/pgsql-17.2 디렉터리 하위에 bin, include, lib, share 디렉터리가 생성되어 있는 것을 볼 수 있다.
pgsql 디렉터리를 postgres 계정으로 소유자를 변경해준다.
chown -R postgres:postgres /usr/local/pgsql
postgres 계정으로 접속한다
su postgres
PostgreSQL디렉터리인 /usr/local/pgsql의 binary 디렉터리인 /usr/local/pgsql/bin을 환경변수로 등록해준다.
su - postgres
vim ~/.bashrc
맨 밑줄에 추가
export PATH=$PATH:/usr/local/pgsql/bin
source ~/.bashrc
이중화를 위한 설정이기 때문에 1번 서버에서만 진행해도 된다.
bin 디렉터리에 있는 initdb를 이용한다
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
생성에 성공했으면 아래와 같은 출력결과와 함께 start 명령문이 나온다.
data 디렉터리를 조회해보면 디렉터리와 conf 파일들이 생성된 것을 볼 수 있다.
DB Cluster를 생성하면 data 디렉터리 내에 conf 파일들이 생성되는데 먼저 postgresql.conf 파일을 설정한다.
** postgresql.conf **
# postgresql에 접근할 수 있는 ip
listen_addresses = '*'
# postgresql 포트
port = 5432
# postgresql 최대 동시접속 수
max_connections = 10
# postgresql 소켓경로
unix_socket_directories = '/var/run/postgresql'
# white ahead log 파일의 최대 크기
max_wal_size = 1GB
# white ahead log 파일의 최소 크기
min_wal_size = 80MB
# white ahead log 레벨
wal_level = replica
# WAL 저장소가 archive_command에 의한 저장소로 저장됨
archive_mode = on
archive_command = 'cp "%p" "/usr/local/pgsql/archivedir/%f"'
# 대기 노드 또는 Streming Clienct와 연동할 수 있는 동시 연동 수
max_wal_senders = 10
# 복제 슬롯의 최대 수, 현재 복제 슬롯 수보다 낮으면 서버 시작이 불가능
max_replication_slots = 10
# primary 노드에 대한 정보를 적는다, application_name에는 대기노드를 적는다.
# failover가 실행되면 myrecovery.conf에 primay_conninfo가 작성되므로 초기 설정이라고 생각하면 됨
primary_conninfo = 'host=172.16.10.37 port=5432 user=potgres application_name="server1"'
# 대기 노드
hot_standby = on
# 로그 유형
log_destination = 'stderr'
# stderr로 전송된 로그 메시지를 캡처하여 로그 파일로 리다이렉트하는 logging collector 백그라운드 프로세스를 활성화
logging_collector = on
# 로그 디렉터리
log_directory = 'log'
# 로그 파일명
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
# 로그 파일권한
log_file_mode = 0600
# logging_collector가 사용으로 설정된 경우 이 매개변수에 의해 PostgreSQL가 이름이 동일한 기존 로그 파일에 추가하는 것이 아니라 파일을 비운다
log_truncate_on_rotation = on
# Custom 부분, 맨 밑에 추가
# Pgpool-II 사용 시 postgresql 버전이 12 이상일 때 추가해주는 옵션
pgpool.pg_ctl = '/usr/local/pgsql/bin/pg_ctl'
# failover 시 myrecovery.conf 파일에 primary_conninfo 정보가 작성됨
include_if_exists = '/usr/local/pgsql/data/myrecovery.conf'
** pg_hba.conf **
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 172.16.10.0/24 scram-sha-256
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
host replication all 172.16.10.0/24 scram-sha-256
기본적으로 localhost에 대한 접근은 trust로 되어있으나,
호스트를 localhost가 아닌 자신의 ip로 접속 시에는 비밀번호 입력을 요구함
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data start
만약 실행이 안되면 data/log 파일을 보면 된다.
소켓 변경을 해준 경우 이런 에러가 출력되는 걸 볼 수 있다
could not create lock file "/var/run/postgresql/.s.PGSQL.5432.lock": 그런 파일이나 디렉터리가 없습니다
/var/run/postgresql 디렉터리를 생성하고 소유자를 변경해주면 된다.