내가 아는 한 모든 Linux 프로세스는 실제로 파일입니다. 실행 중인 프로세스를 한 컴퓨터에서 다른 컴퓨터로 복사할 수 있습니까?
예: 서버를 다시 시작하지 않고 실행 중인 Tomcat 서버를 한 컴퓨터에서 다른 컴퓨터로 복사합니다.
답변1
내가 아는 한 모든 Linux 프로세스는 실제로 파일입니다.
이 비유를 너무 문자 그대로 받아들이면 안 됩니다. Linux 프로세스는 실제로 디버깅, 모니터링 및 분석 목적으로 의사 파일 시스템을 통해 액세스할 수 있지만 프로세스는 단순한 파일 그 이상이며 /proc
소스 호스트 파일 시스템에서 대상 파일 시스템으로 "복사" 됩니다 /proc
.
머신 간에 실행 중인 프로세스를 복사할 수 있나요?
호스트 간에 실행 중인 프로세스를 이동할 때 발생하는 심각한 문제 중 하나는 프로세스가 사용하고 있는 열린 파일 설명자를 어떻게 처리해야 하는가입니다. 프로세스가 파일을 읽거나 쓰는 경우 해당 파일(또는 정확한 복제본)이 대상 호스트에서 사용 가능해야 합니다. 소켓과 관련된 파일 설명자는 바인딩된 IP 주소가 호스트마다 변경될 수 있으므로 처리하기가 까다롭습니다. 다른 프로세스와 메모리 세그먼트를 공유하는 프로세스는 마이그레이션 후에 이 작업 수행을 중지합니다. PID 충돌도 발생할 수 있습니다. 실행 중인 프로세스에 들어오는 프로세스와 동일한 pid가 있으면 그 중 하나를 변경해야 합니다. 부모-자식 관계가 없어지고 근본적인 문제를 발견했을 뿐입니다.
이러한 문제에도 불구하고,이 기능을 제공하는 기술 솔루션이 있습니다.라고 불리는 "신청 체크포인트" 좋다DMTCP그리고크리우. 이는 VMWare, VirtualBox, Oracle VM 등과 같은 하이퍼바이저가 가상 머신을 생성할 때 사용하는 것과 유사합니다.실시간 마이그레이션/부치다. 가상 머신을 사용하면 파일 설명자, 파일 시스템, 메모리, 네트워크 및 기타 장치 등을 포함하여 전체 운영 체제가 이동되기 때문에 작업이 실제로 "더 쉽습니다".
답변2
예, 가능합니다. 모식스(http://www.mosix.org)는 @jlliagre의 답변에 있는 Wikipedia 링크에 설명된 대로 Linux 시스템 간의 프로세스 마이그레이션을 수행하며 오픈 소스이며 커널 패치가 필요하지 않습니다. 이는 HPC 애플리케이션을 위한 것이며 원하는 것이 아닐 수도 있지만 후손을 위해 언급하고 싶다고 생각했습니다.
답변3
아니요, 이동이 불가능합니다.프로세스(즉, 실행 중인 프로그램) 하나의 Unix 시스템에서 다른 시스템으로.
일부제공하다네트워크 서비스, 데이터베이스 서비스 또는 라우터 등은 장애 조치 및/또는 로드 밸런싱과 같은 중복 옵션을 제공합니다. 즉, 여러 시스템에서 실행되는 서비스의 여러 복사본이 있고, 한 시스템이 실패하면 다른 시스템이 대신하거나 서비스 제공 로드를 공유하여 최신 상태를 유지하기 위해 데이터베이스/상태를 서로 복제할 수 있습니다.
이러한 유형의 서비스는 서비스 이동을 제공하는 프로세스 없이 한 시스템에서 다른 시스템으로 "이동"합니다.
그러나 이는 Unix가 아닌 특정 서비스의 기능입니다.
다음에 대한 자세한 정보를 찾을 수 있습니다.서버 장애 포럼.
답변4
아니요, 아직은 불가능합니다. 프로세스가 서비스에 속하는 경우. 그러면 서비스 간 프로세스 이전이 가능해집니다. 그러나 이를 위해서는 운영 체제 수준 변경이 필요합니다.