최소 다운타임으로 PostgreSQL Server를 변경하는 방법


소개하다.
본고에서 데이터베이스를 새로운 서버로 옮기려면 몇 초의 정지 시간이 필요합니다.

선결 조건
이 설명서를 시작하기 전에 다음이 필요합니다.
  • Ubuntu20.04 데이터베이스 서버로 다음과 같은 방식으로 PostgreSQLHow To Install and Use PostgreSQL on Ubuntu 20.04을 실행한다.

  • 단계 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.17postgresql_version9.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 신규 데이터베이스 서버
  • 의 IP 주소여야 합니다.
    마지막으로 새 서버가 액세스할 수 있도록 새 사용자를 만들어야 합니다.
    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
    
    이제 모든 것이 끝났습니다. 당신은 안전하게 원시 데이터베이스를 삭제할 수 있습니다.완료되면 새 데이터베이스 서버로의 이전이 완전히 완료됩니다.

    결론
    본고에서 데이터베이스를 최소한의 정지 시간으로 서버에서 다른 서버로 옮기는 방법을 배웠습니다.이 과정은 열 예비 노드를 사용하여 데이터베이스를 새 서버로 복사한 다음 메인 데이터베이스 서버를 전환하고 낡은 데이터베이스 서버를 닫는 것을 포함한다.

    좋은 웹페이지 즐겨찾기