나의 잡다한 노트 및 메모

PostgreSQL 베어메탈 환경에서 설치 본문

DB/PostgreSQL

PostgreSQL 베어메탈 환경에서 설치

peanutwalnut 2025. 3. 2. 15:32

우분투 환경이다.

 

apt를 통해 설치

sudo apt install postgresql postgresql-contrib

 

 

postgresql.conf에서 설정

새로운 위치에 옮기려면 이동시켜야한다.이때, 옮길 데이터의 디렉토리의 소유자와 그룹을 postgres로 설정하자.port나 max_connections 설정도 여기에서 잘 설정하면 된다.

sudo chown -R postgres:postgres /ssd/postgresql/17/main

sudo rsync -av /var/lib/postgresql/17/main/ /ssd/postgresql/17/main/

기본적으로 data를 다른 directory에서 쓸려면 data_directory를 수정한다.

 

원격 접속 허용

여기에서 listen_addresses 항목을 찾아서 ‘*’ 으로 값을 주면 모든 IP에서 접속 가능하도록 할 수 있다.외부 접속을 허용할 IP 대역을 설정할 수 있다.host all all 0.0.0.0/0 md5sudo systemctl restart postgresql 를 하여 적용하자.

로 입력하자. 위의 것은 ipv4_ 쪽의 항목에다가 적어야한다.

여기에서 모든 IP를 허용하려면

/etc/postgresql/<버전>/main/pg_hba.conf

/etc/postgresql/<버전>/main/postgresql.conf 가 설정 파일이다.

 

 

커널 파라미터 확인

혹시 모르니 확인해보자.2.1. 공유 메모리 (SHM) 관련 파라미터

kernel.shmmax:

이 값은 하나의 공유 메모리 세그먼트의 최대 크기를 바이트 단위로 지정합니다.

PostgreSQL의 shared_buffers 설정보다 커야 합니다.

예를 들어, 서버에 64GB RAM이 있고 shared_buffers를 16GB로 설정한다면, kernel.shmmax는 16GB 이상(예: 17~20GB 또는 그 이상)으로 설정할 수 있습니다.

kernel.shmall:

시스템 전체에서 사용할 수 있는 공유 메모리의 총 페이지 수를 지정합니다.

페이지 크기(보통 4KB)와 kernel.shmmax 값을 고려하여 적절한 값으로 설정해야 합니다.

2.2. 세마포어 (Semaphore) 관련 파라미터/etc/sysctl.conf에 다음과 같은 항목을 추가하거나 수정할 수 있습니다.공유 메모리 설정 (예시: 16GB 이상)세마포어 설정 (기본값보다 높게 조정하는 예)예시일뿐이고, 직접 확인해봤을 때, 이것보다 더 큰 값으로 커널 파라미터가 있었으니 굳이 수정을 안해도 괜찮다.

#!/bin/bash

set -e # 에러 발생 시 스크립트 종료시킨다.

PG_VERSION="17"
OLD_DATA_DIR="/var/lib/postgresql/${PG_VERSION}/main"
NEW_DATA_DIR="/ssd/postgresql/${PG_VERSION}/main"
PG_CONF_DIR="/etc/postgresql/${PG_VERSION}/main"
POSTGRES_CONF="${PG_CONF_DIR}/postgresql.conf"
PG_HBA_CONF="${PG_CONF_DIR}/pg_hba.conf"

ALLOW_IP="0.0.0.0/0"

UBUNTU_CODENAME=$(lsb_release -cs)

wget --quiet -O - <https://www.postgresql.org/media/keys/ACCC4CF8.asc> | sudo apt-key add -
echo "deb <http://apt.postgresql.org/pub/repos/apt/> ${UBUNTU_CODENAME}-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
apt-get update
apt-get install -y postgresql-${PG_VERSION} postgresql-contrib-${PG_VERSION}

# 데이터 디렉토리 이동 및 권한 변경

if [ ! -d "$NEW_DATA_DIR" ]; then
    mkdir -p "$NEW_DATA_DIR"
fi

rsync -av "${OLD_DATA_DIR}/" "${NEW_DATA_DIR}/"
chown -R postgres:postgres "${NEW_DATA_DIR}"

# 기초적인 conf 수정
# data_directory 설정 변경 (주석이 있거나 없거나 처리)
sed -i "s|^#\\?data_directory =.*|data_directory = '${NEW_DATA_DIR}'|" "${POSTGRES_CONF}"

# listen_addresses 설정 변경 (원격 접속 허용: '*' 사용)
sed -i "s|^#\\?listen_addresses =.*|listen_addresses = '*'|" "${POSTGRES_CONF}"

# 포트 변경과 최대 연결 수 변경도 해야하나 여기선 적지 않겠음.

# pg_hba.conf 수정
if ! grep -q "^host\\s\\+all\\s\\+all\\s\\+${ALLOW_IP}\\s\\+md5" "${PG_HBA_CONF}"; then
    echo "host    all             all             ${ALLOW_IP}               md5" >> "${PG_HBA_CONF}"
fi

systemctl restart postgresql

설치 자동화 스크립트

 

kernel.sem = 250 32000 100 128

kernel.shmmax = 17179869184 kernel.shmall = 4194304

예시 )

PostgreSQL은 세마포어를 사용하여 내부 리소스 접근을 제어합니다.

PostgreSQL은 공유 메모리와 세마포어 리소스를 사용하므로, max_connections와 관련된 내부 메모리 소비를 지원하기 위해 커널 파라미터를 조정해야 할 수 있다.

아마 기본적으로 우분투에서 충분한 커널 파라미터의 값이 있어서 문제없을것이다.

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

pg_hba 란?  (0) 2025.03.25
Patroni의 명령어  (0) 2025.03.25
Pigsty 란?  (0) 2025.02.15
pg_rewind 란?  (0) 2025.02.13
Patroni 설정 파일  (0) 2025.02.13