살아있는 리눅스 서비스 핫 클론


14

리부팅이나 다른 것 때문에가 아니라 Linux 서비스가 활성 상태 일 때 핫 복제해야합니다. 그것은 우리의 특별한 시나리오 때문입니다 (예, 이미이 답변을 읽었지만 작동중인 Linux 서버 인 Clone 과 약간 다릅니다 ).

우리는 계산 노드를 가지고 있습니다. NLP 계산 노드를 말할 수 있습니다. 서비스를 제공하면서 노드를 시작하면 여러 번 피드를 제공 할 때까지 계산 속도가 느려집니다. 우리는 그것을 워밍업이라고 불렀습니다.

불행하게도 워밍업 작업은 대기하는 데 시간이 오래 걸립니다 (노드가 워밍업되기 전에 계산이 완료되었을 수 있음).

문제는 Linux 서버를 핫 클로닝하여 노드를 최상의 성능으로 유지하여 더 짧은 시간 안에 온라인으로 복제하고 온라인으로 만들 수있는 안정적인 방법이 있습니까?


머신을 시각화하고 "warm-up"상태를 스냅 샷으로 찍어 사용 하시겠습니까?
TripeHound

13
워밍업이 발생 하는지 이해하십니까 ? 예를 들어 파일 캐시의 부작용 일 수 있습니다. 그러나 복제 시스템에 대한 일부 답변은 기본 캐시에서 정의 별 캐시를 재구성 할 수 있기 때문에 파일 캐시를 삭제합니다.
MSalters

fork ()는 주어진 시스템에서 더 많은 프로세스를 생성하면서 시작 오버 헤드를 절약하는 한 가지 방법입니다.
또 다른 사용자

감사합니다, @TripeHound, 저는 VMWare에서 일하는 친구에게 물었습니다. 그는 단순히 거울처럼 두껍지 않은 "따뜻한"상태를 찍는 것이 불가능하다고 말했습니다. MSalters, 나는 워밍업 중에 어떤 일이 일어나는지 100 % 확신하지 못하지만, 서비스가 시작된 후처럼 보입니다. 계산 작업이 끝난 후 일부 게으른 로딩 작업이 작동합니다.
chen steven

2
백그라운드 설정을 인식하지 못하지만 서버가 다운되지 않아야하는 상황입니다. 이는 호스트의 커널이 오래되어 업데이트가 적용되지 않았 음을 나타냅니다. 아마도 이것은 고려해야 할 시스템 설계 결함의 지표 일 것입니다.
Criggie

답변:


28

전체 서버를 "핫 클론"할 수는 없지만 (가상 머신 인 경우에만 가능), criu , Checkpoint / Restore in Userspace를 사용 하여 단일 프로세스를 동결하고 복원 할 수 있습니다 .

이를 통해 프로그램의 내부 상태를 디스크에 저장하고 프로그램을 중지 한 다음 나중에 저장된 파일에서 해당 상태로 프로그램을 복원 할 수 있습니다.

원하는 작업을 지원하기 위해 저장된 프로그램을 나타내는 파일을 다른 서버에 복사하여 복원 할 수 있습니다.

criu에는 다양한 기능이 컴파일 된 최신 커널이 필요하므로 이전 Linux 배포판이 작동하지 않을 수 있습니다. criu check특정 시스템에서 실행 하여 criu의 전제 조건이 있는지 판별 할 수 있습니다 .


그것은 멋진 외모와 나는이에, 덕분에 형제 몇 가지 검사를 할 수 있습니다
첸 스티븐

당신의 경험에서, 이것은 실제로 얼마나 잘 작동합니까? 제한 사항 criu 목록 (거의 예상되는 것-이것은 어려운 문제입니다)을 살펴보면이 사용 사례를 염두에두고 설계되지 않은 응용 프로그램에서 작동하지 않을 것 같은 느낌이 들었습니다.
James_pic 2014

@James_pic 현재는 그것을 사용하지 않기 때문에 진지하게 검토 한 지 1 년이 지났습니다. 연결을 수락하고 계산 (예 : OP의 기계 학습 작업 또는 웹 서버)을 수행하는 데몬의 경우 꽤 잘 작동합니다.
Michael Hampton

12

현재 환경의 범위를 벗어난 것일 수도 있지만이를 수행하는 업계 표준 방법은 서버를 가상화하는 것입니다. 많은 가상화 호스트 (VMware, virtualbox 등)는“스냅 샷”을 허용하여 서버의 상태를 저장 한 다음 새 인스턴스로 복제 할 수 있습니다. 이러한 새 인스턴스는 원래 프로세스와 동일한 프로세스 상태를 유지합니다. 물론 실행중인 소프트웨어가 가상 환경에서 계속 올바르게 작동하는지 확인해야합니다 (CUDA / GPU 계산이 필요합니다).


소프트웨어 (또는 그 의존성)가 업데이트를 요구할 때까지 가상화는 훌륭하며, 정상적인 재로드 메커니즘을 제공하지 않습니다. VM 스냅 샷 또는 실시간 마이그레이션이 이전 코드를 실행 중입니다.
John Mahowald

"실제"머신 또는 가상화 호스트에서 프로젝트를 실행하는 것은 모두 수용 적이며, "오래된"코드 항목 (A / B 테스트 또는 롤링 업데이트 등)을 처리하는 몇 가지 방법을 취할 수 있습니다. 그러나 스냅 샷이 작업 노드의 예열 상태를 완전히 복제 할 수 있습니까?
첸 스티븐

3
컴퓨터를 "실시간 마이그레이션"할 때는 일시 중지해야합니다. 일시 중지 된 동안 메모리는 클러스터의 다른 시스템으로 1 : 1로 복사되며, 일시 중지되지 않은 그대로 유지됩니다. 사용중인 메모리 양과 네트워크 패브릭 속도에 따라 시간이 걸릴 수 있습니다. 호출하는 가동 중지 시간이 필요에 따라 부족한 경우이 방법을 사용할 수 있습니다.
스풀러

@chensteven 나는 가장 최근에 virtualbox 환경에서 왔습니다. 그것은 얼마 전이지만, 실행중인 스냅 샷에는 실행중인 프로세스와 메모리의 내용을 포함하여 스냅 샷을 찍을 당시의 vm의 정확한 상태가 포함되어 있습니다. 그런 다음이 스냅 샷을 새 vm에 복제하여 정확히 동일한 상태의 두 시스템을 제공 할 수 있습니다.
cawwot

3

언급 한 질문은 http://www.linuxfocus.org/English/March2005/article370.shtml 링크를 참조 하며 요청을 수행하는 것으로 상상했던 모든 방법을 설명합니다.

옵션이 있다는 것은 서버에서 실행되는 것에 많은 의미가 없습니다. 복제 프로세스에서 변경 될 수있는 모든 파일이 대상 시스템의 파일과 일치하지 않을 수 있음을 고려해야합니다. 이 게시물에서 데이터베이스에 대해 이야기하고 데이터 무결성을 보장하지 않는 것처럼 복제합니다.

"여러 번 먹일 때까지"라는 말의 의미가 명확하지 않습니다 .

그러나 요청한 내용을 잘 이해했다면 시스템을 복제하려면 리소스를 복사하고 계산하는 데 시간이 필요하다는 점을 고려해야합니다.

"ON / OF"또는 더 나은 활성 / 백업 환경을 수행하려면 서버가 서버에서 올바르게 구성되어 있어야합니다.

당신이 기대하는 대답이 아니라면 미안하지만 당신이 얻는 옵션은 그 것입니다.


서비스를 시작한 후 노드가 최고의 성능에 "따뜻해 지도록"하기 위해 계산 작업을 여러 번 호출해야합니다. 따라서 여기서의 문제는 많은 수의 요청이 시스템에 충돌하는 것처럼 실제 작업에 대한 동적 복제 또는 확장과 같습니다. 따라서 새로운 계산 노드를 설정하는 데 시간이 충분하지 않습니다 다가오는 파도처럼 그들을
알아라

1

수행하려는 작업에 많은 잠재적 인 문제가 있으며 물론 데이터가 동적으로 저장되지 않는 동안 서버를 오프라인으로 전환하여 복제하는 것이 가장 좋습니다.

그러나 이전에했던 것처럼 당신이하려는 것은 전적으로 그럴듯합니다. 사용하는 경우 dd전체 서버를 블록 수준에서 다른 드라이브 나 다른 서버로 복제 할 수 있습니다. 그러나 새 서버에서 일부 추가 설정이 필요하며 다른 서버와 새 서버를 단순히 켤 수는 없습니다. 이를 이해하려면 서버 하드웨어 및 소프트웨어에 대한 몇 가지 사항을 알아야합니다.

첫째, 최상의 데이터 전략을 결정하려면 정기적으로 업데이트되는 내용을 아는 것이 도움이 될 것입니다. 동적으로 업데이트되지만 정적 컨텐츠가있는 SQL 서버가 있습니까? 또는 git이 콘텐츠에 지속적인 데이터 업데이트를 보내는 것과 같은 하위 버전 시스템을 사용하는 개발자 팀이 있습니까? 업데이트 내용에 따라 최선의 전체 행동 과정이 결정됩니다.

예를 들어, 정기적으로 업데이트되는 것이 SQL 인 경우 해당 서버가 다음과 같은 방식으로 작동하는 동안 새 서버로 마이그레이션 할 수 있습니다.

  • dd 새 서버의 모든 데이터를 복제합니다.
  • 새 서버 설정을 시작하십시오. 특히 다른 하드웨어 인 경우 약간의 작업이 필요할 수 있지만 처음부터 설정하는 것보다 여전히 빠를 수 있습니다.
  • 첫 번째 서버가 활성 상태 인 동안 두 번째 서버를 라이브로 작업해야하는 경우 다른 서버에서 동일한 DNS를 사용할 수 없으므로 DNS 변경이 필요할 수도 있습니다.
  • 새 서버가 완료되어 독립적으로 실행 된 후 원래 서버에서 SQL Server의 최종 백업을 수행하여 새 서버로 가져 오십시오.

데이터를 놓치지 않도록 원래 서버를 일시적으로 오프라인 상태로 만들어야 할 수도 있습니다. 또는 가동 중지 시간을 없애기 위해 두 번째 가동을 설정하고 dns를 새 서버를 가리킨 다음 새 서버에서 수동으로 dns 항목을 업데이트하면 작동 중단 시간이 사실상 없습니다. SQL을 백업하고 새 서버로 복원하는 데 몇 분의 다운 타임이 더 번거롭지 만 다운 타임이 0 일 때 필요할 수 있습니다 .

물론 이것은 하나의 유스 케이스 예제 일 뿐이며 구성 및 여러 변수에 따라 특정 사례를 기반으로 마이그레이션 전략을 작성해야 할 수도 있습니다.

다른 문제는 서버 하드웨어 구성과 관련이 있습니다. 새 서버는 기존 서버와 하드웨어가 100 % 동일합니까? 그렇다면 설정이 더 쉽습니다. 그러나 다른 한편으로는 완전히 다른 하드웨어 구성 인 경우 미리 두 번째 서버를 미리 설정 한 다음 모든 데이터 및 SQL 데이터베이스를 백업하는 다른 전략을 구현해야 할 수도 있습니다. 첫 번째 서버를 수동으로 마이그레이션하여 원하는대로 구성을 변경합니다.

서버 마이그레이션은 결코 쉬운 일이 아니며, 성공적인 이동을 위해서는 서버 또는 직원이 동일한 직원에 대한 깊은 지식이 있어야합니다. 어쨌든 전체 백업을 즉시 가져와 로컬 컴퓨터에서도 세 번째 소스에 저장하는 것이 좋습니다. 최악의 시나리오 (서버 충돌 및 돌이킬 수없는 죽음)가 발생하더라도 여전히 서버를 재 구축하기위한 데이터 사본.

이것이 도움이되기를 바랍니다. 서버 이동과 함께 행운을 빕니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.