rsync를 사용하여 4개의 서로 다른 VPS를 백업 저장에 사용되는 5번째 VPS로 백업

rsync를 사용하여 4개의 서로 다른 VPS를 백업 저장에 사용되는 5번째 VPS로 백업

VPS가 4개 있다고 가정해 보겠습니다. 각각에서 다음 cron 명령은 로컬 백업을 위해 일주일에 한 번 실행됩니다.

0 0 * * 6 zip -r /root/backups/dirs/html-$(date +\%F-\%T-).zip /var/www/html
1 0 * * 6 find /root/backups/dirs/* -mtime +30 -exec rm {} \;

0 0 * * 6 mysqldump -u root -pPASSWORD --all-databases > /root/backups/db/db-$(date +\%F-\%T-).sql
1 8 * * 6 find /root/backups/db/* -mtime +30 -exec rm {} \;

(4개의 VPS 각각에서) 각 로컬 백업의 사본을 다음으로 보내고 싶습니다.다섯 번째 VPS, 중앙 백업 환경으로 사용하겠습니다. 전송은 가능한 한 안전해야 합니다(합리적인 범위 내에서).

rsync를 사용하여 이 작업을 자동으로(일정에 따라) 어떻게 수행할 수 있나요?

(아니면 SCP일까요?)

답변1

각 백업이 파일이라고 가정하면(위의 두 파일을 아카이브하여),SCP와 비교될 것이다동기화파일을 전송하는 것 외에 전반적으로 작업량이 적기 때문입니다.

자동화가 진행되는 한 다음과 같이 설정해야 합니다.

  1. 다섯 번째 VPS는 백업을 읽을 수 있는 사용자로서 비밀번호 없이 다른 4개의 VPS에 연결할 수 있습니다(관리하기는 약간 쉽지만 코딩하기는 더 어렵습니다).
  2. 다른 4개의 VPS는 비밀번호 없이 다섯 번째 VPS에 연결할 수 있으며, 각각에 대해 별도의 계정을 사용하는 것이 좋습니다(관리하기는 약간 더 어렵지만 코딩하기는 더 쉽습니다).

둘 다 선호하는 방법은 일반적으로 암호화되지 않은 SSH 키입니다. 완료되면 크론 작업(1의 경우 5번째 VPS, 2의 경우 다른 4개의 VPS)을 설정하여 최신 백업을 원하는 위치로 전송할 수 있습니다.

다음은 디렉터리의 최신 파일을 원격 시스템에 복사하는 두 번째 옵션에 대한 빠르고 더러운 셸 스크립트입니다.

#!/bin/bash
file=`ls -t "${1}" | head -n 1`
scp -pCB "${1}"/"${file}" ${2}

백업이 저장된 디렉터리 경로를 첫 번째 매개변수로 지정하고 user@host:/path다섯 번째 VPS의 위치를 ​​가리키는 문자열을 두 번째 매개변수로 사용하여 이 명령을 실행하면 로컬 시스템의 최신 백업이 다섯 번째 VPS로 복사됩니다.

-pSCP 옵션은 mtime을 보존하고(동일한 명령을 사용하여 find이전 백업을 축소할 수 있음) -C압축을 활성화하며(성능이 향상되거나 향상되지 않을 수 있음) -B아무 메시지도 표시되지 않도록 합니다.

답변2

이 단계에서 각 클라이언트 VPS에 대해 별도의 사용자를 만듭니다. 반드시 필요한 것은 아니지만 VPS가 손상된 경우 다른 시스템에서 백업을 읽거나 쓸 수 없도록 하고 싶습니다.

계정이 있다고 가정하면VPN1 VPN 2, 백업 서버 VPS에서.

  • SSH를 통해 백업 서버 VPS에 액세스하기 위해 비밀번호 대신 인증서를 사용하도록 각 VPS를 설정합니다.

    1. 사용자를 만듭니다(예: "백업")(꼭 필요한 것은 아님).
    2. ssh-keygen각 VPS에서 사용자 "백업"을 위한 SSH 키 세트를 만듭니다.
    3. 각 VPS 계정 ~/backup/.ssh/id_rsa.pub에 콘텐츠를 연결합니다 . ~/<vps-user>/.ssh/authorized_keys이 사용자만 읽을 수 있는지 확인하세요( chmod 600 ~<vps-user>/.ssh/authorized_keys)

이제 각 VPS에서 "백업" 계정에서 백업 서버 vps 계정으로 SSH를 통해 연결할 수 있습니다.

  • 각 클라이언트 머신에 대해 VPS 서버 머신에 백업을 기록할 디렉터리를 생성하고 해당 클라이언트의 VPS 계정에서만 사용할 수 있도록 합니다. 예:
    mkdir /var/spool/big-backups/vps1; chown vps1 /var/spool/big-backups/vps1; chmod 600 /var/spool/big-backups/vps1;

  • 각 vps에서 사용자 "백업"을 위한 cronjob을 생성합니다 rsync -avz /root/backups/db/ -e "ssh -l vps1" /root/backups/ /var/spool/big-backups/vps1/". 분명히 클라이언트 VPS 시스템에서 로컬 백업 작업 후에 이를 예약하십시오. ( z파일이 이미 압축되어 있고 데이터베이스 백업이 예제에 없으면 rsync의 플래그는 바람직하지 않습니다...)

원한다면 scp대신 사용할 수 있습니다 rsync(왜 그렇게 하는지는 모르겠지만 모두 작동합니다).

관련 정보