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ủ
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ủ
Câu trả lời:
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ừ /proc
hệ thống tệp máy chủ nguồn sang /proc
hệ 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ư DMTCP và CRIU . Đ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.
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 .
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ế.
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.