복제를 위한 주 서버 구성
첫 번째 단계에서는 복제를 위해 주 PostgreSQL 서버를 구성합니다. 여기에는 네트워크 연결을 허용하도록 구성 파일을 수정하고, 필요한 Write-Ahead Log (WAL) 레벨을 활성화하며, 복제를 위한 특수 사용자를 생성하는 작업이 포함됩니다.
1. PostgreSQL 구성 파일 수정
복제를 준비하려면 기본 구성 파일인 postgresql.conf를 수정해야 합니다. nano와 같은 텍스트 편집기로 이 큰 파일을 수동으로 편집하는 것은 옵션이 많기 때문에 어렵고 오류가 발생하기 쉽습니다. 더 효율적이고 안정적인 방법은 명령줄 도구를 사용하여 필요한 설정을 보거나 업데이트하는 것입니다. 이렇게 하면 수백 줄을 스크롤할 필요가 없고 실수로 인한 오류를 방지할 수 있습니다.
먼저 수정해야 하는 설정인 listen_addresses, wal_level, max_wal_senders의 현재 값을 확인해 보겠습니다.
CONF_FILE="/etc/postgresql/14/main/postgresql.conf"
echo "--- Current Settings ---"
sudo grep -E "^#?\s*(listen_addresses|wal_level|max_wal_senders)" $CONF_FILE
이 줄들은 아마도 #으로 주석 처리되어 있을 것입니다.
이제 이러한 설정을 자동으로 업데이트해 보겠습니다. 다음 명령은 구성 파일을 백업한 다음 각 필수 매개변수를 업데이트합니다.
CONF_FILE="/etc/postgresql/14/main/postgresql.conf"
## 변경 전에 백업 생성
sudo cp $CONF_FILE ${CONF_FILE}.bak.$(date +%s)
## 모든 IP 주소에서의 연결을 허용하도록 listen_addresses 설정
sudo sed -i -E "s/^[#\s]*listen_addresses\s*=.*/listen_addresses = '*'/" "$CONF_FILE"
## 복제 로그를 활성화하기 위해 wal_level을 'replica'로 설정
sudo sed -i -E "s/^[#\s]*wal_level\s*=.*/wal_level = replica/" "$CONF_FILE"
## 동시 복제 연결 최대 개수 설정
sudo sed -i -E "s/^[#\s]*max_wal_senders\s*=.*/max_wal_senders = 10/" "$CONF_FILE"
마지막으로 변경 사항이 올바르게 적용되었는지 확인해 보겠습니다. 아래 명령은 주석 처리된 줄을 제외하고 업데이트된 값을 표시합니다.
echo "--- Verified Settings ---"
sudo grep -E "^(listen_addresses|wal_level|max_wal_senders)" $CONF_FILE
출력은 업데이트되고 활성화된 구성을 보여야 합니다.
listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
이 설정이 확인되었으므로 서버는 다음 단계를 위해 올바르게 구성되었습니다.
2. 전용 복제 사용자 생성
슈퍼유저 대신 복제를 위한 전용 사용자를 사용하는 것이 좋습니다. replicator라는 역할을 생성해 보겠습니다.
psql 명령줄 클라이언트를 사용하여 PostgreSQL 에 연결합니다.
sudo -u postgres psql
이제 다음 SQL 명령을 실행하여 복제 권한과 암호를 가진 사용자를 생성합니다.
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'replicapass';
CREATE ROLE 출력이 표시되어야 합니다. 이제 psql 클라이언트를 종료합니다.
\q
3. 복제 연결 허용
다음으로, replicator 사용자가 복제 서버에서 연결할 수 있도록 서버를 구성해야 합니다. pg_hba.conf 파일을 편집하여 이 작업을 수행합니다.
nano로 파일을 엽니다.
sudo nano /etc/postgresql/14/main/pg_hba.conf
파일 끝에 다음 줄을 추가합니다. 이 규칙은 replicator 사용자가 replication 의사 데이터베이스에 모든 IP 주소 (0.0.0.0/0) 에서 연결할 수 있도록 허용합니다. 이 랩에서는 두 서버가 동일한 머신에 있으므로 127.0.0.1/32를 사용합니다.
host replication replicator 127.0.0.1/32 md5
Ctrl+X, Y, Enter를 눌러 저장하고 종료합니다.
4. 주 서버 재시작
이러한 모든 구성 변경 사항을 적용하려면 PostgreSQL 서비스를 다시 시작해야 합니다.
sudo service postgresql restart
이제 주 서버는 복제 연결을 수락할 준비가 되었습니다.