CentOS 7 환경에서 Patroni 오프라인 설치 및 설정 절차

환경 구성 개요

본 가이드는 CentOS 7.7.1908 (x86_64 아키텍처) 환경에서 외부 네트워크 접근 없이 Patroni 와 PostgreSQL 을 구성하기 위한 단계를 기술합니다. PostgreSQL 의 소스 컴파일을 위해 gcc 및 관련 라이브러리들이 필수적으로 존재해야 합니다.

1. 컴파일 도구 및 기본 의존성 설치

PostgreSQL 소스 컴파일에 필요한 빌드 도구를 먼저 확보해야 합니다. 해당 환경은 내부 네트워크로 제한되어 있으므로, 사전에 외부 미러링 사이트에서 rpm 패키지들을 수집하여 전송한 후 로컬에 설치합니다.

1-1. GCC 컴파일러 설치

# 준비된 모든 gcc 관련 rpm 패키지를 노데펜시와 포스를 사용하여 설치
rpm -ivh gcc*.rpm --nodeps --force

# 설치 상태 확인
gcc -v

1-2. 텍스트 처리 라이브러리 (readline) 의존성

# ncurses-devel 가 먼저 필요하며 순서를 지키며 설치
rpm -ivh ncurses-devel-5.9-14.20130511.el7_4.x86_64.rpm
rpm -ivh readline-devel-6.2-11.el7.x86_64.rpm

1-3. 압축 라이브러리 의존성

# zlib 개발용 패키지 설치
rpm -ivh zlib-devel-1.2.7-18.el7.x86_64.rpm

1-4. Python 개발 환경 설정

# python2-rpm-macros, python-devel 등을 포함하는 rpm 묶음 설치
rpm -ivh python*-devel.rpm --nodeps --force

2. Python 패키징 도구 환경 조성

시스템 기본 pip 이 없거나 버전이 낮을 경우, 별도로 python 을 사용하여 pip 를 설치하고 관리 도구인 setuptools 를 구성합니다.

2-1. pip 자동 설치

#!/bin/bash
TAR_FILE="pip-19.3.1.tar.gz"
tar -xf $TAR_FILE
cd pip-19.3.1
python setup.py install

2-2. setuptools.whl 설치

# .whl 파일을 이용하여 수동으로 pip 설치
pip install setuptools-42.0.2-py2.py3-none-any.whl

3. Patroni 필수 라이브러리 적용

Patroni 가 정상 작동하기 위해 psycopg2, etcd 연동 등의 파이썬 모듈들을 다운로드하여 일괄 설치합니다. 설치 디렉토리를 `/opt/offline_pip_deps`로 정의하여 관리하겠습니다.

STAGING_DIR=/opt/offline_pip_deps
mkdir -p $STAGING_DIR
cd $STAGING_DIR

# 의존성 패키지 다운로드 (원격 저장소 경로에 맞게 수정 가능)
# psycopg2_binary, urllib3, six, click 등 whl 형식 파일
wget psycopg2_binary-2.8.4-cp27-cp27mu-manylinux1_x86_64.whl
wget urllib3-1.25.7-py2.py3-none-any.whl
wget patroni-1.6.1.tar.gz
wget six-1.13.0-py2.py3-none-any.whl
wget tzlocal-2.0.0-py2.py3-none-any.whl
wget python_dateutil-2.8.1-py2.py3-none-any.whl
wget psutil-5.6.7.tar.gz
wget cdiff-1.0.tar.gz
wget python_consul-1.1.0-py2.py3-none-any.whl
wget python-etcd-0.4.5.tar.gz
wget pytz-2019.3-py2.py3-none-any.whl
wget dnspython-1.16.0-py2.py3-none-any.whl

# whl 파일 먼저 병렬 설치
pip install *.whl

# tar.gz 형태의 소스 파일 순차 설치
pip install psutil-5.6.7.tar.gz
pip install cdiff-1.0.tar.gz 
pip install python-etcd-0.4.5.tar.gz
pip install patroni-1.6.1.tar.gz

4. 권한 설정 및 최종 검증

일반 사용자 계정으로 Patroni 명령어를 실행할 때 발생할 수 있는 Python 모듈 경로 접근 오류를 방지하기 위해 설치된 패키지 폴더의 권한을 조정해야 합니다. 이는 root 사용자가 아닌 postgres 계정 등 일반 사용자 사용 시에 중요합니다.

# site-packages 디렉토리 읽기/실행 권한 부여
chmod -Rf 755 /usr/lib/python2.7/site-packages/
chmod -Rf 755 /usr/lib64/python2.7/site-packages/

# 실행 파일 자체에도 권한 적용
chmod 755 /usr/bin/patroni
chmod 755 /usr/bin/patronictl 
chmod 755 /usr/bin/patroni_aws
chmod 755 /usr/bin/patroni_wale_restore

설치 완료 여부를 확인하기 위해 다음과 같이 버전을 출력합니다.

patronictl version

이 과정에서 'ImportError: No module named pkg_resources' 에러가 발생하지 않는지 반드시 점검하세요.

태그: Patroni PostgreSQL high-availability CentOS7 offline-deployment

8월 14일 16:47에 게시됨