실행중인 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 send와 ssh.


0

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

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


0

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

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

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

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

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

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


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