최소 다운타임으로 PostgreSQL Server를 변경하는 방법
소개하다.
본고에서 데이터베이스를 새로운 서버로 옮기려면 몇 초의 정지 시간이 필요합니다.
선결 조건
이 설명서를 시작하기 전에 다음이 필요합니다.
단계 1 - 서버 만들기
새 서버로 이전하는 첫 번째 단계는 당연히 새로운 서버를 만드는 실례입니다.새로 만든 데이터베이스 서버를 How To Install and Use PostgreSQL on Ubuntu 20.04로 다시 설정할 수 있습니다.
2단계 - 이전 데이터베이스 복제 준비
모든 데이터베이스 데이터를 새 서버로 전송하여 데이터 손실이나 대량 다운타임 없이 새 서버를 핫 스페어 노드로 구성한 다음 이전 서버를 종료하고 준비가 완료되면 새 서버를 마스터 노드로 업그레이드할 수 있습니다.
이렇게 하려면 먼저 다음 명령을 사용하여 SSH를 원래 서버에 연결해야 합니다.
ssh root@old_database_address
이전 데이터베이스 서버의 주소로 바꾸기old_database_address
.그리고 파일
/etc/postgresql/postgresql_version/main/postgresql.conf
을 편집하고 서버에서 실행되는 부차적인 버전 번호로 바꿉니다postgresql_version
.이것은 실행
psql --version
을 통해 찾을 수 있습니다.예를 들어 Forpsql (PostgreSQL) 9.6.17
postgresql_version
는 9.6
로 교체됩니다.파일에 다음 행을 첨부합니다.
wal_level = hot_standby
hot_standby = on
max_wal_senders = 3
max_replication_slots = 3
첫 번째 줄은 사전 쓰기 로그를 핫 스페어 서버에서 읽기 전용 조회를 실행하는 데 필요한 정보로 기록합니다.두 번째 줄은 서버를 열 예비 노드로 충당할 것이다.현재로서는 그럴 필요가 없지만, 이따가 새 서버에 대해 같은 변경을 할 것입니다. 같은 설정을 복사하는 것이 각각의 설정에 대한 작은 변경보다 쉽습니다.다음은 새 데이터베이스 서버에 접근해서 백업을 할 수 있도록 하고 편집
/etc/postgresql/postgresql_version/main/pg_hba.conf
과 교체postgresql_version
를 통해 웹 서버에 접근해야 합니다.다음 행을 추가합니다.
host replication replica old_database_address/32 md5
host replication replica new_database_address/32 md5
다음 값을 바꿉니다.old_database_address
이전 데이터베이스의 IP 주소여야 합니다.new_database_address
신규 데이터베이스 서버마지막으로 새 서버가 액세스할 수 있도록 새 사용자를 만들어야 합니다.
su - postgres -c "psql -c \"CREATE ROLE replica REPLICATION LOGIN ENCRYPTED PASSWORD 'topsecretpassword';\""
선택한 보안 암호로 바꿉니다topsecretpassword
.SQL 명령을 postgres 사용자로 실행하면 새 역할이 만들어집니다.
이러한 변경 사항을 추가하면 PostgreSQL 서버를 다시 시작해야 합니다.
systemctl restart postgresql.service
그런 다음 3단계를 반복하여 새 데이터베이스 서버를 완전히 동일하게 변경해야 합니다. 그러나 이전 데이터베이스에 연결하지 말고 새 데이터베이스 서버에 연결해야 합니다.이는
ssh root@old_database_address
대신 다음 명령을 실행하여 수행할 수 있습니다.ssh root@new_database_address
새 데이터베이스 서버의 IP 주소로 바꿉니다new_database_address
.이 두 데이터베이스 모두 복제를 처리할 준비가 되어 있는 이상 지금은 새로운 데이터베이스에서 실제 데이터를 복제할 때이다.
단계 3 - 핫 스페어 노드 생성 및 데이터베이스 데이터 전송
이 단계에서는 PostgreSQL에 내장된 핫 스페어 노드를 사용하여 새 데이터베이스 인스턴스를 이전 서버의 복사본으로 설정합니다.시작하려면 다음 명령을 사용하여 새 서버에 로그인해야 합니다.
ssh root@new_database_address
데이터베이스 서버의 IP 주소로 new_database_address
를 바꿉니다.열 예비 노드가 원시 데이터베이스에서 데이터를 수신하기 위해서는 먼저 모든 데이터를 삭제해야 한다.postgres 인스턴스를 중지하고
/var/lib/postgres/postgresql_version/main/
디렉토리를 삭제할 수 있습니다.systemctl stop postgresql.service
rm -rf /var/lib/postgresql/postgresql_version/main
이전과 같이,postgres 데이터베이스 버전으로 바꿉니다. postgresql_version
첫 번째 명령은 PostgreSQL 서비스의 실행을 중지하고 두 번째 명령은 모든 데이터베이스 데이터를 삭제하여 원시 시스템에서 데이터를 불러옵니다.이제 원본 데이터베이스를 새 서버로 복사할 수 있습니다.
su - postgres
pg_basebackup --pgdata=/var/lib/postgresql/postgresql_version/main/ --write-recovery-conf --username=replica --host=old_database_address --xlog-method=stream
postgresql_version
를 PostgreSQL 버전으로 변경하고 old_database_address
를 원본 데이터베이스 주소로 변경하는 것을 잊지 마십시오.첫 번째 명령은postgres 사용자가 되고, 두 번째 명령은 원시 서버에서 데이터를 복사합니다.
이 명령에는 몇 가지 설정해야 할 스위치가 있습니다.
--pgdata
스위치는 데이터를 저장할 디렉터리를 지정합니다. 이 값은 PostgreSQL 데이터베이스를 저장하는 기본 디렉터리로 설정되어 있습니다.--write-recovery-conf
가 완료되면 기본 recovery.conf
파일을 생성하여 서버를 핫 스페어 노드로 설정하는 것이 더 쉽습니다.--username
새 역할을 만들 때 생성되는 사용자 이름을 설정합니다.--host
원래 서버의 호스트 이름을 지정할 수 있습니다.--xlog-method
모든 사전 쓰기 로그 파일이 백업과 함께 복사되도록 합니다.주의: 이 명령이 끊기면 원시 서버에 내부 방화벽 규칙이 설정되어 있어서 접근을 막을 수 있습니다.최초의 서버 방화벽 설정에 따라 이전에
pg_hba.conf
파일에 추가된 IP 주소 화이트리스트를 통해 이 문제를 복구할 수 있습니다.현재, 새 서버는 복사본으로 설정되어 있으며, 웹 응용 프로그램을 새로운 데이터베이스 서버에 가리키고, 새로운 데이터베이스 서버를 주 노드로 만들어야 합니다.
4단계 - 주 데이터베이스 노드를 새 데이터베이스 서버로 전환
주의: 이 때, 귀하는 모든 사이트의 데이터베이스 주소를 새로운 데이터베이스 주소로 변경하고, 잠시 닫아야 합니다
이제 원본 데이터베이스 서버를 중지하고 기존 데이터베이스 서버를 업그레이드해야 합니다.
ssh root@old_database_address
systemctl stop postgresql
예전과 같이 낡은 데이터베이스의 주소로 바꾸다old_database_address
.이것은 원시 데이터베이스 서버를 정지합니다.
다음에 새 데이터베이스 서버를 마스터로 업그레이드합니다.이렇게 하면 데이터베이스를 쓰기 시작할 수 있는 주 서버가 됩니다.
ssh root@new_database_address
su - postgres
pg_ctlcluster postgresql_version main promote
마찬가지로 new_database_address
를 새 데이터베이스의 IP 주소로 바꾸고 postgresql_version
를 서버에서 실행되는postgres 버전으로 바꿉니다.현재, 오래된 데이터베이스는 중단되었고, 새로운 데이터베이스는 마스터로 업그레이드되었습니다. 현재 필요한 것은 이 데이터베이스에 의존하는 모든 사이트를 다시 시작하는 것입니다.
지금 너는 너의 사이트를 방문할 수 있을 것이다. 모든 것이 정상적으로 운행되어야 한다.
5. 정리
모든 것이 정상이라고 확신하면, 낡은 클라우드 공급자의 서버를 닫고, PostgreSQL의 백명단 주소를 업데이트하면, 새 서버만 접근할 수 있습니다.
먼저 데이터베이스 서버에 SSH를 다시 연결합니다.
ssh root@new_database_address
새 데이터베이스 서버의 IP 주소로 바꿉니다new_database_address
.다음에
pg_hba.conf
파일을 편집하고 오래된 데이터베이스와 주소를 삭제할 수 있습니다.편집이 완료되면 파일은 다음과 같이 표시됩니다.local all postgres peer
local all all peer
이제 모든 것이 끝났습니다. 당신은 안전하게 원시 데이터베이스를 삭제할 수 있습니다.완료되면 새 데이터베이스 서버로의 이전이 완전히 완료됩니다.결론
본고에서 데이터베이스를 최소한의 정지 시간으로 서버에서 다른 서버로 옮기는 방법을 배웠습니다.이 과정은 열 예비 노드를 사용하여 데이터베이스를 새 서버로 복사한 다음 메인 데이터베이스 서버를 전환하고 낡은 데이터베이스 서버를 닫는 것을 포함한다.
Reference
이 문제에 관하여(최소 다운타임으로 PostgreSQL Server를 변경하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/keeyan/how-to-change-postgresql-server-with-minimal-downtime-573g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)