나의 잡다한 노트 및 메모
PostgreSQL 베어메탈 환경에서 설치 본문
우분투 환경이다.
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 |