제한이있는 Amazon EC2 백업 전략 (스냅 샷이 거의 없거나 전혀 없습니까?)


9

비슷한 질문이 있었지만 EC2 사용에 대한 이해에서 뭔가 빠졌는지 알기 위해 상황에서 권장되는 사항을 알아야합니다.

소규모 신생 기업이 EC2 네트워크에서 비즈니스를 운영하고 있으며 백업 옵션에 대한 조언을 요청했습니다. 그들은 현재 자체 자금을 지원하고 가능할 때 비용을 절약하기 위해 할 수있는 일을하고 있습니다. 시스템 구성에 대해 너무 깊이 파고 들지 않고 웹 서버를 예로 들어 보겠습니다. 데이터베이스가있는 간단한 웹 서버입니다. 문제는 서버가 중단되는 것을 원하지 않는다는 것입니다.

설정을 수행 한 사람은 데이터베이스의주기적인 덤프 만 수행하고 S3에 저장하거나 구성 정보가 포함 된 선택 폴더를 백업하여 필요할 때 Amazon에서 새 서버를 다시 작성하는 스크립트를 작성해야한다고 생각합니다. . 그는 서버의 스냅 샷을 생성하는 데 많은 디스크 공간이 필요하고 기본적으로 큰 데이터 덤프간에 데이터가 썩어 스냅 샷이 빨리 구식이되기 때문에 낭비가 될 것이라고 제안했습니다.

내 생각은 VM의 스냅 샷을 만든 다음 데이터베이스의 주기적 덤프를 수행하고 S3에 저장하는 것입니다. EC2 인스턴스를 잃어 버리거나 업데이트와 같은 것을 사용할 수없는 경우 스냅 샷을 사용하여 처음부터 완전히 새로운 인스턴스를 구축하기보다는 최신 데이터베이스 덤프로 서버를 비교적 빠르게 백업 할 수 있습니다. 새로운 AMI.

EC2 인스턴스 (또는 EBS 스토어)의 스냅 샷을 생성하려면 가동 중지 시간이 필요하다는 것을 알고 있습니다. 또한 스냅 샷을 찍을 때 파일 시스템의 일관성을 유지하기 위해 서버를 종료해야한다는 내용도 읽었습니다. 아직 밸런서 뒤에 클러스터가 없기 때문에 스냅 샷과 관련된 옵션이 제한됩니다.

내가 모르는 아마존에 특정한 것이 없다면 서버를 구축하기위한 스크립팅은 EC2에서 관련 역할을 가진 새로운 서버를 구축 할 수있는 Chef 또는 Puppet 서버를 생성하는 것을 포함합니다. 현재 신생 기업은 그러한 종류의 서버를 계속 운영 할 자금이 없으며 현재 많은 서버를 배포 할 필요가 없습니다.

이상적으로는 가상 밸런서 또는 Amazon 밸런서 서비스 뒤에 여러 서버를 생성 한 다음 한 번에 하나씩 서버를 중단하여 업데이트 또는 스냅 샷을 수행 할 자금을 확보해야합니다. 지금은 데이터베이스 덤프를 수행하는 경우 시스템 업데이트가 응용 프로그램이 의존하는 라이브러리를 변경하고 서비스가 중단되는 경우 도움이되지 않기 때문에 업데이트를 수행한다는 아이디어에 긴장합니다.

또 다른 옵션은 EBS 볼륨을 생성하고 마운트하는 스크립트를 실행하고 서버에서 rsync와 같은 것을 실행하여 대부분의 파일 시스템 정보를 EBS 볼륨으로 캡처 한 다음 내용을 압축하고 S3에 복사하고 볼륨을 분리하는 것입니다 스토리지 비용을 절약하기 위해이를 폐기 한 다음 데이터베이스 덤프를 수행하여 달리 일치하지 않는 기내 데이터를 포착하십시오. 일부 서버의 경우 데이터베이스 요구가 증가함에 따라 임시 EBS 볼륨에 저장해야 할 가능성이 높습니다.

Amazon의 프로덕션 시스템에 업데이트를 적용하기 전에 업데이트를 사전 테스트 할 수있는 환경에서 네트워크 시스템을 다시 만들기 위해 VMWare 샌드 박스가 생성되고 있습니다. 시스템 업데이트로 인해 응용 프로그램이 종료 될 가능성이 최소화되기를 바랍니다.

따라서 ... 시스템에서 데이터베이스 및 응용 프로그램 서버를 사용하여 하나의 서버를 실행하는 제한을 받았으며 가능한 한 다운 타임이 거의없는 것으로 보았습니다 (스냅 샷 사용을 제한하고 백업 프로세스를 가능한 한 "핫"하도록하십시오 ( 서버를 중단하지 않고 실시간으로 생성), 작동 상태에서 EC2 인스턴스의 스냅 샷을 생성하는 시간을 예약하고 S3에 복사하기 위해 데이터베이스 덤프를 수행하는 시간을 제안하는 잘못된 길에 있습니까? 스냅 샷으로 인해 다운 타임이 발생하는 경우 서버의 실시간 백업 생성시?


2
가동 중지 시간에 민감하지만 하나의 서버에서만 실행되고 있습니까?
ceejayoz

1
그들이 클러스터를 운영 할 자금을 얻을 때까지는 그렇습니다. 그들은 밸런서 뒤의 클러스터를 알고 목표로 삼고 있습니다 ... 현재 테이블의 옵션이 아닙니다.
Bart Silverstrim

아마존은 인스턴스 실패를 강력히 경고합니다. 가동 중지 시간과 일부 데이터 손실이 얼마나 비쌀까요?
ceejayoz

때때로 당신은 자신의 신용에 대한 상황을 당신의 손에 줘서 만들어야 할 때가 있습니다.
바트 실버 스트림

답변:


18

이 질문에는 흥미로운 점이 있습니다. 특히 다운 타임 아이디어와 관련이 있습니다. 응용 프로그램이 가동 중지 시간에 민감한 경우 복구 시간도 고려해야한다는 아이디어의 일부가 있습니다. ).

EBS에 대해 조금

EBS 볼륨 및 스냅 샷은 블록 수준에서 작동하므로 EBS 볼륨이 사용 중이라도 인스턴스가 실행되는 동안 스냅 샷을 생성 할 수 있습니다. 그러나 실제로 디스크에있는 (즉, 파일 캐시에없는) 데이터 만 스냅 샷에 포함됩니다. 일관된 스냅 샷에 대한 아이디어를 얻는 것은 후자의 이유입니다.

  • 권장되는 방법은 볼륨을 분리하고 스냅 샷을 작성하고 다시 연결하는 것입니다. 일반적으로 실용적이지 않습니다.
  • 다음으로 가장 좋은 옵션은 디스크에 쓰기 캐시를 플러시하고 파일 시스템을 정지시키고 스냅 샷을 만드는 것입니다.

여기서 흥미로운 점은 위의 두 경우 모두 스냅 샷이 재 연결 / 고정 해제를 마치고 디스크 쓰기를 다시 시작할 때까지 기다릴 필요가 없다는 것입니다. 일단 스냅 샷이 시작되면 데이터가 특정 시점과 일치합니다. 일반적으로이 작업은 몇 초만 걸리며 디스크가 쓰기 잠금 상태가됩니다. 또한 대부분의 데이터베이스는 파일을 디스크에 적절한 방식으로 구성하므로 삽입이 기존 블록에 미치는 영향을 최소화 할 수 있으므로 스냅 샷에 추가되는 데이터가 최소화됩니다.

백업 시점을 고려하십시오

EBS 볼륨은 이미 가용 영역 내에 복제되어 있으므로 어느 정도의 중복성이 내장되어 있습니다. 인스턴스가 종료되면 EBS 볼륨을 새 인스턴스에 간단히 연결하고 (일관성이 결여 된 후) 재개 할 수 있습니다. 중단했다. 여러 측면에서 이로 인해 EBS 볼륨은 액세스 할 수있는 경우 일관성이없는 스냅 샷과 매우 유사합니다. 즉, 대부분의 EC2 사용자는 2011 년 초부터 EBS 볼륨의 계단식 오류를 기억할 수 있습니다. 볼륨은 며칠 동안 액세스 할 수 없었으며 일부 사용자도 데이터를 잃었습니다.

RAID1

EBS 디스크의 고장을 막으려 고 시도하는 경우 (발생한 경우) RAID1 설정을 고려할 수 있습니다. EBS 볼륨은 블록 장치이므로 mdadm을 사용하여 원하는 구성으로 쉽게 설정할 수 있습니다. EBS 볼륨 중 하나가 사양에 맞지 않는 경우 수동으로 실패하고 나중에 다른 EBS 볼륨으로 교체하기가 쉽습니다. 물론 이것은 단점이 있습니다-모든 쓰기 시간 증가, 가변 성능에 대한 감수성 증가, I / O 비용의 두 배 (모노 타 릴리, 성능 측면이 아님),보다 광범위한 AWS 장애에 대한 실질적인 보호 기능 없음 (작년의 일반적인 문제는 잠금 상태 인 EBS 볼륨을 분리 할 수 ​​없음), 물론 실패시 디스크의 일관성이없는 상태입니다.

S3FS

특정 응용 프로그램 (데이터베이스에는 해당되지 않음)의 옵션은 S3을 로컬 파일 시스템으로 (예 : s3fs를 통해) 마운트하는 것입니다. 속도가 느리고 파일 시스템에서 기대할 수있는 일부 기능이 없으며 예상대로 작동하지 않을 수 있습니다 (최종 일관성). 즉, 업로드 된 파일을 인스턴스 전체에서 사용할 수있게하는 것과 같은 간단한 목적으로 장점이있을 수 있습니다. 분명히 좋은 읽기 / 쓰기 성능이 필요한 것은 아닙니다.

MySQL 바이너리 로그

MySQL과 관련된 또 다른 옵션은 bin-log를 사용하는 것입니다. bin 로그를 저장하고 (추가 된 쓰기가 데이터베이스에 미치는 영향을 최소화하기 위해) 두 번째 EBS 볼륨을 설정하고 데이터베이스 덤프와 함께 사용할 수 있습니다. s3fs를 사용 하여이 작업을 수행 할 수도 있습니다. 실제로 성능을 견딜 수있는 경우 실제로 장점이있을 수 있습니다 (s3fs를 직접 사용하는 것보다 rsync가 더 좋을 수 있으며 가능한 한 압축해야합니다).

다시 한번, 우리는 목적의 개념으로 돌아옵니다. 위의 제안으로 어떤 일이 일어날 지 고려하십시오.

  • 액세스 할 수없는 EBS 볼륨 :
    • RAID1-당신이 데이터를 얻을 수 없기 때문에 쓸모없는
    • bin-log-S3로 내 보낸 경우를 제외하고는 쓸모가 없습니다.
  • 인스턴스가 예기치 않게 종료됩니다.
    • RAID1-디스크를 사용할 수 있지만 일관성이없는 경우 데이터베이스 자체의 불일치에서 복구 할 수 있습니다
    • bin-log-마지막 몇 가지 이벤트를 검토해야 할 수도 있지만 데이터에 액세스 할 수 있어야합니다.
  • 누군가 루트로 DROP DATABASE를 실행합니다.
    • RAID1-존재하지 않는 데이터베이스의 완벽한 사본 두 개가 있습니다.
    • bin-log-명령 직전까지 이벤트를 재생할 수 있어야합니다.

따라서 RAID1은 대부분 쓸모가 없으며 bin-log는 너무 오래 걸립니다. 둘 다 특정 상황에서는 장점이 있지만 아이디어 백업과는 거리가 멀습니다.

스냅 샷

스냅 샷은 차등 적이며 데이터를 포함하고 압축 된 실제 블록 만 저장한다는 점에 유의해야합니다. 볼륨이 20GB이지만 1GB 만 사용하는 EBS 볼륨과 달리 여전히 '프로비저닝 된'스토리지 (20GB)에 대한 요금이 부과됩니다. 스냅 샷을 사용하면 사용한만큼만 요금이 청구됩니다. 스냅 샷간에 데이터가 변경되지 않으면 이론적으로 요금이 부과되지 않습니다. (스냅 샷은 PUTS / GETS 및 사용한 스토리지에 대해 청구됩니다).

또한 응용 프로그램 데이터 (데이터베이스 포함)를 루트 볼륨 (이미 설정했을 수 있음)에 저장하지 않는 것이 좋습니다. 장점 중 하나는 루트 볼륨에 최소한의 변화가 있다는 것입니다. 즉, 스냅 샷의 빈도가 적거나 변경이 적어 비용과 사용 편의성이 줄어든다는 것을 의미합니다.

또한 오래된 스냅 샷은 언제라도 삭제할 수 있다는 점과 관련이 있습니다. 차이는 있지만 다른 스냅 샷에는 영향을 미치지 않습니다. 즉, 스냅 샷에 할당 된 각 블록은 해당 블록을 여전히 참조하는 스냅 샷이 없을 때까지 양도되지 않습니다.

주기적 덤프의 문제점은 먼저 덤프 사이의 시간 (MySQL의 bin-log를 사용하여 해결 될 수 있음)과 복구의 어려움입니다. 큰 덤프를 가져 와서 bin-log에서 모든 이벤트를 재생하는 데 시간이 걸립니다. 또한 덤프 작성이 성능에 영향을 미치지 않습니다. 아마도 그러한 덤프는 스냅 샷보다 훨씬 더 많은 스토리지를 필요로합니다. 대부분의 측면에서 선호되는 데이터베이스 및 스냅 샷 전용으로 만 EBS 볼륨을 설정합니다 (즉, 스냅 샷을 만드는 것은 성능에 약간의 영향을 미칩니다).

스냅 샷 및 EBS 볼륨의 장점은 다른 인스턴스에서 사용할 수 있다는 것입니다. 인스턴스 부팅에 실패한 경우 루트 볼륨을 다른 인스턴스에 연결하여 문제를 진단 및 수정하거나 데이터를 복사 할 수 있으며 몇 분의 다운 타임으로 루트 볼륨을 전환 할 수 있습니다 (인스턴스 중지, 분리) 루트 볼륨, 새 루트 볼륨 연결, 인스턴스 시작). 동일한 아이디어가 두 번째 EBS 볼륨에 데이터를 보유하는 경우에도 적용됩니다. 기본적으로 커스텀 AMI에서 새 인스턴스를 가동하고 현재 EBS 볼륨을 연결하면 다운 타임을 최소화 할 수 있습니다.

(두 개의 EBS 볼륨을 사용하여 동일한 서버 (마스터-슬레이브)에 두 개의 MySQL 사본을 설정 한 다음 슬레이브를 종료하여 스냅 샷을 찍을 수 있다고 주장 할 수 있습니다 (아마도 권하지 않을 것입니다) EBS 볼륨-다운 타임없이 일관 적이지만 성능 비용은 그만한 가치가 없습니다).

AWS에는 자동 확장 기능이 있습니다.이 인스턴스는 일정한 수의 인스턴스를 유지할 수 있습니다 (해당 번호가 1 인 경우에도).하지만 스냅 샷에서 배포 할 수 있습니다. 따라서 스냅 샷이 유용하지 않다면 전제는 많이 사용되지 않습니다 .

또 다른 두 가지 점-주어진 시점에 단일 인스턴스에만 연결할 수있는 EBS 볼륨과 달리 단일 스냅 샷에서 원하는만큼 인스턴스를 배포 할 수 있습니다. 또한 EBS 볼륨은 가용 영역 내에서 사용하도록 제한되어 있으며 스냅 샷은 리전 내에서 사용할 수 있습니다.

스냅 샷을 사용하는 경우 서버가 다운되면 마지막 스냅 샷을 사용하여 새 스냅 샷을 시작할 수 있습니다. 특히 루트 볼륨을 데이터와 분리하면 업데이트가 잘못되면 다운 타임이 최소화됩니다. 데이터가 포함 된 EBS 볼륨을 전송하고 불일치로 인해 손상 될 수있는 모든 것을 보존하기 위해 스냅 샷을 만듭니다.

참고로 Amazon은 마지막 스냅 샷 이후에 변경된 데이터 양에 따라 EBS 볼륨의 실패율이 증가한다고 말합니다.

최종 추천

  • 스냅 샷 사용 – 훌륭함-다운 타임을 야기하는 것보다 훨씬 줄임
  • 별도의 데이터와 루트 볼륨 (아마도 데이터베이스를 자체 볼륨에 배치하고 필요할 경우 업데이트 전에 스냅 샷)
  • bin-log를 사용하여 가능한 한 'hot'상태를 유지하십시오-이것을 (압축 된) S3에 업로드하십시오
  • 실제로 데이터가 EBS 볼륨에 그대로 있어도 볼륨 자체에 일시적으로 액세스 할 수없는 경우에도 인스턴스에서 데이터를 가져와야합니다.

추천 자료 :

(나는 너무 많이 썼지 만 충분히 말하지 않았다고 생각하지만 읽을 가치가있는 것을 찾으십시오.)


EBS 스냅 샷 작동 방식에 대한 유용한 정보 및 설명
bwight

예, 훌륭한 정보가있었습니다. 두 가지 답변 (특히 의견과 함께 할 때)이 도움이되었으므로 두 가지 모두를 받아 들일 수 있기를 바랍니다!
바트 실버 스트림

4

라이브 EBS 볼륨을 스냅 샷 할 수 있지만 파일 시스템이 일관된 상태에 있는지 확인한 다음 스냅 샷이 시작되는 동안 정지해야합니다. 모든 파일 시스템이이를 가능하게하는 것은 아니지만 가능하지만 자체 백업 솔루션의 기초입니다.

EBS 스냅 샷은 변경된 데이터에 대해서만 요금을 청구하기 때문에 매우 저렴하며 데이터 요금은 자체적으로 매우 저렴합니다. 그러나 이는 블록 레벨 변경을 기반으로하므로 다소 빠르게 변경 될 수 있습니다. 스냅 샷 간에도 마찬가지이며 스냅 샷간에 변경된 데이터 만 청구됩니다. 비용에 대한 아이디어를 제공하기 위해 스냅 샷 스토리지에 대해 월당 10 달러 미만을 지불하고 매일 스냅 샷을 작성하여 지난 7 일 및 지난 달의 주간 스냅 샷을 유지하며이 체계에 따라 2 개의 서버 (~ 20 개의 스냅 샷, 20GB 하드 드라이브).


서버의 파일 시스템이 불행히도 xfs가 아닙니다. EFS 볼륨 형식의 XFS를 마운트하고 인스턴스에 연결 한 다음 기존 데이터를 해당 마운트 지점으로 이동하는 것으로 마이그레이션 할 수 있다고 생각했습니다. 지금은 그들이 다운 타임에 갈 것이라고 생각하지 않으며 그에 대한 요금을 추가했습니다.
Bart Silverstrim

@Bart : 1 시간 또는 2 시간의 다운 타임을 견뎌내려면 기존 스냅 샷을 XFS로 마이그레이션 할 수 있습니다. 또한 파일 시스템을 사용하는 경우 ext4가 일관된 스냅 샷 작업을 수행하는 데 필요한 항목을 지원한다고 생각합니다.
Matthew Scharley

대답에서 알 수 있듯이 서비스를 중지하지 않고 데이터베이스를 중지하지 않고도 스냅 샷을 만들 수 있습니다. 이 A의 가능성 이있는 스냅 샷을 수행 하지 않을 수 일치,하지만 그 상황에서 당신은 여전히 데이터베이스 덤프를해야합니다.
Javier Constanzo

@javierConstanzo-라이브 스냅 샷을 찍고 일관성이없는 상태를 위험에 빠뜨리고 데이터베이스 덤프를 사용하여 파일 시스템의 일관성에서 문제를 해결할 것을 제안하고 있습니까?
Bart Silverstrim

@Bart : 또한 스냅 샷은 백업 할 때처럼 '핫'하고, rsync 나 이와 유사한 것보다 훨씬 내부적으로 일관성이 있다고 제안합니다. 다른 사람이 전송하는 동안 파일이 변경 될 수 있으므로 일부 상황에서는 쓸모없는 백업이 발생할 수 있습니다. 개인적으로 스냅 샷이 작동하도록 파일 시스템을 변경 (필요한 경우)하기 위해 몇 시간의 가동 중지 시간을 먹는 것이 좋습니다. EBS 스냅 샷의 백업 솔루션이 얼마나 유연한 지 놀랍습니다. 실행중인 인스턴스에 마운트하여 복원 할 수 있습니다.
Matthew Scharley

1

Zmanda Cloud Backup과 같은 저렴한 저렴한 백업 솔루션은 어떻습니까? 약 6 대의 서버와 1 개의 SQL Server를 백업하는 데 사용되며 한 달에 약 10 달러입니다. 자체 서명 된 인증서로 데이터를 암호화 할 수 있으며 s3을 사용하여 데이터를 저장합니다 (따라서 EC2에서 백업하는 경우 데이터 전송 요금이 없습니다).


당신은 제휴합니까? 그들이 EBS 스냅 샷을 위해 ~ $ 1 / 월에 봄에 오지 않는다면 ...
ceejayoz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.