실행중인 Linode 서버를 백업하는 방법은 무엇입니까?


21

우리는 데비안 서버에서 모든 것을 백업하고 싶습니다. 데비안 서버는 종료하지 않고 세계 반대편 (리 노드에서 호스팅)에서 원격으로 실행됩니다.

이 시스템은 간단한 nginx 설정으로 쉘, 이메일, XMPP / prosody 및 웹을 실행합니다.
우리는 안전을 위해 그와 관련된 파일을 백업하고 싶습니다. 예를 들어, 사용자가 홈 디렉토리에 저장 한 파일입니다.

매번 / etc 파일마다 기존 설정 wrt를 정확하게 복사 할 필요는 없습니다. 대신, 우리가 처음부터 백업을 수행하는 이유는 새로운 설정으로 이동할 수 있기 때문입니다 (데비안의 최신 버전은 여전히 ​​Linode에 있습니다).

Linode가 백업 서비스를 제공한다는 것을 알았습니다. 그러나 장기적으로는 우리 자신의 백업이 필요합니다.

이 질문이 존재하는 이유는 과거에 백업을 시도했을 때 다음 두 가지 실수 중 하나를 계속했기 때문입니다.

  • "확인, 복사 만하면 /됩니다."로 이동 한 다음 복사 할 드라이브가 / media / backup 아래에 마운트되어 있고 재귀 적으로 복사되는 [obv] 때문에 이상한 무한 루프에 빠졌습니다. 우리가 rsync 또는 이와 유사한 것을 통해 백업 할 것이기 때문에 여기에서 적용 할 수없는 특정 문제] 또는 / proc 또는 / var 또는 "매일 변경되는 로그를 유지하려고하는 것과 같은 어떤"살아있는 "복사물을 복사하려고 시도했습니다. 또는
  • 나는 "좋아, 우리가 필요한 것의 최소한도를 잡을 것이다. 흠, 모든 사람의 홈 디렉토리 및 웹 서버 디렉토리 (모두 아래에 있음 /var)를 복사 /etc하고 / var / 아래에있는 모든 오래된 메일을 챙기자. vmail "을 선택한 다음 파일 권한 또는 타임 스탬프를 변경했거나 (이번에는 유닉스 파일을 FAT 드라이브에 백업하지 않도록해야 함) 무언가를 잊어 버렸습니다 ("오, 쏴, / usr / 다른 곳에 저장 한 적이없는 로컬 / 빈을 가져 와서 잊어 버렸습니다. ").

따라서 전체 드라이브를 똑바로 복사하면 함정이 발생하고 디렉토리를 선택적으로 복사하면 함정이 발생합니다. 올바른 방법을 알고 싶습니다.

서버 결함 질문 전체 백업 시스템에 무엇이 필요합니까? 철학과 모범 사례를 다루지 만 다음과 같은 구체적인 내용을 찾고 있습니다.

  • 복사해야 할 디렉토리와 제외 할 디렉토리 (현재 실행 중이며 위키, XMPP 채팅, 이메일을 제공하는 시스템이므로 복사 작업이 실행되는 동안 새 메시지가 수신 됨)
  • 타임 스탬프 및 소유자 및 그룹과 같은 어떤 파일 속성을 제시해야하며 어떻게해야합니까? ← 나는이 질문의 절반을 나 자신에게 대답 할 수 rsync -HXaz있다고 생각한다. -zOBV는 정말 "나는 무엇을 보존 할"입니다 질문에 관련이없는

을 사용하는 것과 같이 백업에 대한 많은 조언 dd은 드라이브가 마운트 해제되어 있고 사용 중이 아니라고 가정합니다. 그러나 나는 (아래 / 나는 우리가 확실히 알고 VAR 물건의 일부 그러나 같은 / proc 디렉토리 이하의 / var 서브 디렉토리의 일부 디렉토리 "살아있는"제외 안하고 및 / 마운트 유지하기 위해 필요)? 이 상황에서 고려해야 할 다른 사항이 있습니까? 그런 다음 rsync와 함께 많은 --exclude플래그를 사용하여 스너프 할 수 있다고 생각 합니다.

아니면 더 나은 아이디어, 특히 FOSS 친화적 아이디어가 있습니까?


나는이 질문이 매우 기초적인 것처럼 보이지만 이런 종류의 시스템을 오랫동안 운영해온 결과 나는 이것을 다시 엉망으로 만들었고 결코 그것을 올바르게하는 방법을 결코 모색하지 않았다
Sandra


가치가있는 것은 cp -r -a파일을 복사 할 때 가능한 많은 파일 속성을 보존 할 것입니다 (대상 파일 시스템이 지원하는 것에 따라). -a플래그는 지시 cp속성을 보존 할 수 있습니다. 네트워크를 통해 또는 필요한 속성을 지원하지 않는 파일 시스템을 통해 복사하는 경우, tar -c항상 다루지 않은 몇 가지 경우가 있다고 생각하지만 특히 tar기본적으로 일치하는 사용자 이름에 따라 다릅니다. 두 시스템. 즉, tar명백한 문제없이 전체 (마운트되지 않은) Linux 시스템을 복사했습니다 .
Micheal Johnson

또한 시스템을 실시간으로 복사해야하는 특별한 이유가 있습니까?
Micheal Johnson

linode의 스냅 샷 서비스를 사용하십니까?
ivanivan

답변:


15

따라서 모든 불쾌한 실수없이 모든 드라이브를 백업하고 모든 / proc 및 기타 임시 폴더를 필터링하고 싶습니까?

옵션은 다음과 같이 파일 시스템 내의 다른 폴더에 루트 폴더를 마운트하는 것입니다.

$ cd /mnt
$ mkdir drive
$ mount --bind / drive

이렇게하면 / proc 또는 / sys 폴더와 같이 드라이브에 임시로 간주되지 않는 모든 파일이 제공됩니다.

이제 루트 폴더를 깨끗하게 볼 수 있으므로 표준 cp또는을 사용하여 루트 폴더를 백업 드라이브에 복사하면됩니다 rsync. 다음과 같은 내용이 있습니다.

cp -R /mnt/drive /mnt/backupdrive

이렇게하면 언급 된 문제가 모두 해결됩니다.

  • 백업 디스크가 드라이브 내에 마운트되어 있지 않기 때문에 재귀에 빠지지 않습니다 (관점).
  • 중요한 파일을 놓치지 마십시오. 모든 파일을 가져 오기 때문에

참조 : man mount (8)


6
이 솔루션을 사용하면 데이터베이스와 같이 기록중인 파일을 복사 할 수 있습니다. 파일을 복사하기 전에 별도의 파일로 데이터베이스를 덤프하는 스크립트를 실행하는 것이 좋습니다. 예를 들어 MySQL의 경우 mysqldump를 사용할 수 있습니다.
Marco Martinelli

10

리눅스에서는 모든 것이 파일입니다. rsync를 통해 가능하지만 알아 두어야 할 것이 있습니다.

특히 데이터베이스의 경우 복제를 먼저 고려해야합니다. 또한 주 서버 앞에 프록시 /로드 밸런서를 설정하는 것이 좋습니다. 따라서 전환 중에 주 서버와 미러 서버를 쉽게 전환 할 수 있습니다.

하드웨어 수준에서 가장 좋은 상황은 같은 수의 이더넷 포트, 동일한 hdd 레이아웃 등을 가진 다른쪽에 미러와 같은 서버를 두는 것입니다. 다른 것은 시스템 구성 변경이 필요함을 의미합니다.

즉, 두 개의 eth 포트가있는 경우 네트워크 구성, 방화벽 등이 두 서버의 인터페이스 이름과 일치하는지 확인하고 다른 경우 rsync 후 구성을 변경하거나 두 번째에서 장치 이름을 변경해야합니다 (대상) 서버.

파티션 레이아웃과 동일합니다. 주 서버에서와 동일한 파티션을 만들어야하지만 처음부터 새로 만들면 다른 UUID가 생겨 fstab, grub, mdadm (소프트 레이드가 관련된 경우) 등을 변경해야합니다. .

그러나 데이터베이스와 같이 잘못 될 수있는 많은 것들이 있습니다. 이는 rsync를 수행하기 전에 이전에 중지하지 않으면 일관성이 없을 수 있습니다.

가장 좋은 전략은 먼저 기본 서버의 구성에 맞게 하드웨어 및 파일 시스템 (파티션)을 준비하는 것입니다. 그런 다음 중간 시스템을 통해 빈 패리티 턴을 마운트하십시오 (예 : ssh-server가 임시로 설치된 라이브 CD). 빈 / proc, / dev, / sys를 만든 다음 나머지를 rsync합니다.

rsync -avz -H --delete /etc /bin (...and so on) destserver:/mnt/yourrootfs/

그런 다음 장치에 grub을 설치하고 구성 작업을 수행하여 부팅 가능하게 만들고 네트워크 구성, fstab 및 앞에서 언급 한 기타 사항을 변경해야합니다.

새로운 시스템 (기본 서버에서 사용중인 것과 동일한 버전)을 설치 한 다음 전원을 끄고 다른 임시 시스템 (라이브 CD와 같은)을 통해 마운트 한 다음 / proc, / rsync를 사용하는 sys, / dev 및 / boot

그러나 일반적인 아이디어 일뿐입니다. 이 서버에 실제로있는 구성, 구성, 네트워크 및 하드웨어 설정에 따라 상황이 복잡해질 수 있습니다. 그리고 하루가 끝나면 눈에 띄는 가동 중지 시간 없이는 실제로 어려울 수 있습니다.


데이터베이스 다시 : 적절한 파일 시스템 추상화 (예 : LVM)가있는 경우 전체 DB 복제를 수행하지 않고도 드라이브의 일관된 스냅 샷을 만들 수 있습니다. 그러나이를 위해서는 데이터베이스가 kill -9안전 해야하며 그렇지 않으면 복구에 실패 할 수 있습니다. 좋은 데이터베이스 이러한 상황을 처리 해야 하지만 놀라운 수의 제품은 그렇지 않습니다 (또는 최악의 경우 거의 항상 복구되지만 실제로 작동해야하는 경우 블루 문에서는 한 번 실패합니다). 실제로 복제는 아마도 더 안정적 일 것입니다.
케빈

5

실제로 원하는 것은 복원입니다. 무엇을 하든지 정기적으로 테스트를 복원해야합니다.


Linode에는 백업 서비스가 있습니다. 스냅 샷은 미리 정의 된 제한된 일정 또는 API를 사용하여 만들 수 있습니다.

스냅 샷 기반 백업의 장점은 복사 중에 데이터가 변경되지 않으므로 정확한 시점을 제공한다는 것입니다. 스냅 샷은이 경우 새로운 Linode 인 다른 호스트로 쉽게 복원 할 수 있습니다.


예를 들어 백업이 여전히 작동하는지 확인하는 데 대한 정보는 없습니다. 리노 드는 파산합니다.
마크

내 질문에 편집 내용 중 하나를 입력하는 동안 Linode의 백업 서비스에 대해 알았고 동료와 이야기를 나 and습니다. 그것은 우리의 즉각적인 위기를 해결했지만 우리는 자신의 집에도 데이터를 저장하는 방법을 찾으려고 노력할 것입니다. 그래서 그 서비스를 제공하기 위해 내가 처음 게시했을 때 나는 알지 못했습니다. 그러나 복원에는 다음과 같은 문제점이 있습니다. 서버가 잘못 구성된 경우, 껌과 와이어 행거가 잘못 구성되어 있으면 서버를 정확히 동일한 잘못 구성된 상태로 복원 할 필요는 없습니다. 우리는 좋아하는 데이터를 원합니다.
산드라

복구 지점 목표 및 장애 도메인에 적합한 경우이 백업을 다른 스토리지로 내보내는 방법에 대해 더 많이 작성했습니다. 그러나 나는 간략하게 설명했다. 백업은 단지 그 일부일 뿐이며 그러한 위험을 식별하고 처리하는 우수한 비즈니스 연속성 계획입니다.
John Mahowald

1

소규모 가상 사설 서버에 BackupPC를 사용하고 있습니다. BackupPC는 후드에서 rsync를 사용할 수 있으며 전체 및 증분 백업을 지원합니다. 그것을보고 그것이 당신의 요구 사항을 충족시킬 것인지 확인하십시오.


1

ZFS에서 시스템을 실행하십시오. 그런 다음 다음과 유사한 것을 사용하여 즉각적인 원자 스냅 샷을 만들 수 있습니다.

# zfs snap -r tank@name-of-backup

tankZFS 풀의 이름은 어디에 있습니까 ? 이 스냅 샷은 파일 시스템 및 모든 하위 파일 시스템의 즉각적인 순간 스냅 샷입니다.

스냅 샷을 만든 후에는 사용하여 다른 호스트로 전송할 수 있습니다 zfs sendssh.


0

내 의견 그것은 내부 리눅스 명령으로 서버를 실행하는 곳과 장소에 따라 다르며, 완전한 데이터와 라이브러리를 모방 / 파이프해야합니다. vmware에서 실행 중이고 올바르게 구성된 경우 실시간 마이그레이션을 제공합니다. 그렇지 않으면 타사 도구를 사용해야합니다. 이것이 도움이되기를 바랍니다. 추가 참조 라이브 서버를 어떻게 백업합니까?

Rsync는 서버간에 데이터를 동기화하는 좋은 명령입니다.


0

체크리스트가 불완전하거나 단순히 간과 된 것으로 인해 누락 된 비트에 의존 할 필요가없고 목록에서 하나의 항목을 누락 할 필요가없는 2 가지 솔루션이 있습니다.

먼저, 기본 하드웨어 플랫폼을 좀 더 제어 할 수있는 플랫폼으로 이것을 옮기면 서버가 실행되는 동안 모든 파일의 디스크 스냅 샷을 만들 수 있습니다. 예를 들어 AWS에서는 EBS 디스크를 스냅 샷 할 수 있으며 나중에 다른 스냅 샷을 만들 때 차이를 지불 할 수도 있습니다.

둘째, Ansible과 같은 구성 관리 시스템을 사용하여 전체 서버 설정을 스크립팅하는 것이 좋습니다. 이것은 것입니다

  • 소스 제어에서 구성한 모든 것을 문서화

  • 스크립트가 최신인지 확인하기 위해 백업 또는 베어 메탈에서 서버 재생성을 테스트 할 수 있습니다.

  • 새로운 운영 체제에서 일반적으로 약간의 변경만으로 스크립트를 다시 실행할 수 있습니다.


1
Linode에서도 스냅 샷을 만들 수 있습니다. Ansible을 확인하겠습니다! 그것은 내가 처음에 알고 싶었던 것에 대한 일종의 부수적 인 주제입니다. 그러나 그런 말을들은 적이 없었습니다.
산드라
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.