Có thể sao chép một quá trình chạy giữa các máy?


8

Theo sự hiểu biết của tôi, tất cả quá trình linux thực sự là các tệp, có thể sao chép một quy trình đang chạy từ máy này sang máy khác không?

ví dụ: sao chép máy chủ tomcat đang chạy từ máy này sang máy khác mà không phải khởi động lại máy chủ


Bạn sẽ cần phần mềm phân cụm. Tôi không biết kiến ​​thức về tên, hoặc những gì mỗi người làm, nhưng tôi biết rằng có một cái để dịch chuyển các quá trình sang các máy khác.
ctrl-alt-delor

Không thực sự tập tin. Tập tin không phải là bản chất. Các trạng thái của thiết bị là bản chất và chúng được HĐH tiếp xúc với không gian người dùng dưới dạng các tệp
炸鱼 薯条

Cụ thể hơn, các tiến trình thực sự là thứ ít tập tin nhất trên linux, không giống như các trạng thái khác của linux. Bạn không thể giữ fd cho một tiến trình và giả sử quy trình tồn tại, đó là chức năng pdfork của FreeBSD, không tồn tại trên linux.
炸鱼 薯条

Câu trả lời:


8

Theo sự hiểu biết của tôi, tất cả quá trình linux thực sự là các tập tin

Bạn không nên dùng phép ẩn dụ quá theo nghĩa đen. Các quy trình Linux thực sự có thể được truy cập thông qua hệ thống tệp giả cho mục đích gỡ lỗi, giám sát và phân tích, nhưng các quy trình không chỉ là các tệp này và "sao chép" chúng từ /prochệ thống tệp máy chủ nguồn sang /prochệ thống tệp đích .

Có thể sao chép một quá trình chạy giữa các máy?

Một trong những vấn đề nghiêm trọng khi di chuyển một quy trình đang chạy giữa các máy chủ là cách xử lý các mô tả tệp đang mở mà quy trình này đang sử dụng. Nếu một quá trình đang đọc hoặc ghi một tệp, chính tệp này (hoặc bản sao chính xác) phải có sẵn trên máy chủ đích. Các mô tả tệp liên quan đến ổ cắm sẽ rất khó xử lý vì địa chỉ IP mà chúng bị ràng buộc sẽ có khả năng thay đổi từ máy chủ này sang máy chủ khác. Các quy trình chia sẻ các phân đoạn bộ nhớ với các phân đoạn khác sẽ ngừng thực hiện sau khi di chuyển. Xung đột PID cũng có thể xảy ra, nếu một quy trình đang chạy có cùng một thông tin với quy trình đến, một trong số chúng sẽ cần phải được thay đổi. Mối quan hệ cha mẹ con sẽ bị mất, và tôi vừa vạch ra những vấn đề tiềm ẩn.

Mặc dù có những vấn đề này, có những giải pháp kỹ thuật cung cấp chức năng gọi là " Điểm kiểm tra ứng dụng " như DMTCPCRIU . Điều này tương tự với những gì được sử dụng với các trình ảo hóa như VMWare, VirtualBox, Oracle VM và các công cụ khác khi chúng thực hiện di chuyển / dịch chuyển tức thời máy ảo . Với các máy ảo, công việc thực sự "đơn giản" hơn khi toàn bộ HĐH được di chuyển, bao gồm các bộ mô tả tệp, hệ thống tệp, bộ nhớ, mạng và các thiết bị khác, v.v.


Tôi thực sự đã hỏi câu hỏi này như một bài tập hơn là một thứ gì đó được thử trên một hệ thống thực sự. Nhìn vào quá trình "tập tin" Tôi thấy rằng một quy trình có quá nhiều phụ thuộc để chỉ sao chép một tập tin và làm cho nó hoạt động trên một máy khác nhưng không bao giờ đau lòng để hỏi và có thể có một cái nhìn khác về mọi thứ. cảm ơn câu trả lời của bạn.
aviad m

Còn docker thì sao? . chỉnh sửa tìm thấy criu.org/Docker
phil294

@Blauhirn Thật vậy. Tôi đã đề cập đến CRIU với một liên kết trong đó tích hợp với OpenVZ, LXC / LXD và Docker được đề cập.
jlliagre

2

Không, không thể di chuyển một quá trình (tức là chương trình đang chạy) từ máy Unix này sang máy khác.

Một số dịch vụ , chẳng hạn như dịch vụ web, dịch vụ cơ sở dữ liệu hoặc bộ định tuyến, cung cấp các tùy chọn dự phòng, chẳng hạn như chuyển đổi dự phòng và / hoặc cân bằng tải. Điều này có nghĩa là bạn có một vài bản sao của dịch vụ đang chạy trên một số máy và nếu một máy khác bị mất, hoặc chúng chia sẻ tải của việc cung cấp dịch vụ, có thể sao chép cơ sở dữ liệu / trạng thái của nhau để cập nhật.

Các loại dịch vụ này sẽ "di chuyển" từ máy này sang máy khác, trong khi các quy trình cung cấp dịch vụ không di chuyển.

Đây là một tính năng của dịch vụ cụ thể, tuy nhiên, không phải của Unix.

Bạn có thể tìm thêm thông tin trên diễn đàn ServerFault .


2

Vâng nó có thể. MOSIX ( http://www.mosix.org ) thực hiện quá trình di chuyển giữa các máy linux (như được đề cập trong liên kết wikipedia trong câu trả lời @jlliagre), là nguồn mở và không yêu cầu vá nhân. Đó là cho các ứng dụng HPC và có thể không phải là những gì bạn muốn, nhưng tôi nghĩ rằng tôi sẽ đề cập đến cho hậu thế.


0

Không, như bây giờ nó không thể. khi quá trình đến dưới một dịch vụ. Sau đó, dịch vụ để chuyển quá trình dịch vụ có thể có thể. Nhưng điều này đòi hỏi phải thay đổi cấp độ hệ điều hành.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.