Làm thế nào để tránh thời gian chết với linux?


13

Các bản cập nhật phần mềm thường xuyên cho Ubuntu yêu cầu khởi động lại (có thể có tác dụng phụ như thời gian chết).

Tôi thấy Ubuntu có https://www.ubfox.com/livepatch cho phép cập nhật kernel mà không cần khởi động lại, tuy nhiên, đây là dịch vụ trả phí. Ngoài ra còn có ksplice .

Có bản phân phối / quy trình Linux nào mà bản nâng cấp / bản vá không bao giờ yêu cầu khởi động lại không?

(Tôi biết thiết lập máy chủ có tính sẵn sàng cao (HA) và có máy chủ dùng một lần là cách tốt nhất - vì vậy tôi không hỏi về việc duy trì dịch vụ, nhưng trên máy chủ thực tế.)


1
Liệu một máy chủ bị chặn không khí có hoạt động như một cỗ máy không bao giờ cần khởi động lại không? Rốt cuộc, nếu không ai có thể truy cập nó, bạn có bao giờ cần phải khởi động lại không? ;) - Ví dụ: máy chủ giám sát trên nhà máy điện hạt nhân, chỉ đơn giản là báo động nếu có sự cố. (Có Tôi biết điều này có thể sẽ là một hệ thống chuyên dụng chứ không phải là một máy chủ ngẫu nhiên, nhưng tôi đang sử dụng ví dụ chỉ để đưa ra quan điểm rằng có dịp khi khởi động lại cho 'cập nhật bảo mật' có thể là một ý tưởng hoàn toàn khó tính.
djsmiley2k TMW

3
@ djsmiley2k Đó là một trong những trường hợp máy mà bạn không bao giờ khởi động lại vẫn không cung cấp cho bạn đủ khả dụng. Thay vào đó bạn cần dự phòng.
kasperd

@kasperd ok, vậy một cụm máy không bao giờ khởi động lại?
djsmiley2k TMW

3
@ djsmiley2k Câu trả lời của tôi cho câu hỏi đã tranh luận lý do tại sao tôi coi một cụm máy được khởi động lại cùng một lúc đáng tin cậy hơn một máy mà bạn không bao giờ khởi động lại.
kasperd

2
Điều gì làm cho bạn nghĩ rằng tránh thời gian chết hệ thống cá nhân là tốt hơn?
warren

Câu trả lời:


12

Đối với câu hỏi của bạn, "Có bản phân phối / quy trình Linux nào mà bản nâng cấp / bản vá không bao giờ yêu cầu khởi động lại không?", Tôi không biết gì cả, và tôi rất nghi ngờ rằng sẽ có bất kỳ bản nào thực sự không cần khởi động lại. Ngoài nhận xét của Michael Hampton về lý do tại sao vá trực tiếp không phải là một trải nghiệm vượt trội ở bất cứ đâu, vá trực tiếp cũng không đạt được kết quả tương tự như khởi động lại.

Một giai thoại để minh họa điều này: Gần đây tôi đã điều tra một vấn đề trong đó một tiện ích cụ thể đã bắt đầu phân tách trên một số lượng lớn máy. Tôi đã thử nhìn vào các thư viện chia sẻ mà nó đã sử dụng để xem liệu có bất kỳ thứ gì được nâng cấp gần đây đã phá vỡ nó không; ldd nói rằng nó không phải là một tệp thực thi (mặc dù khi tôi kéo cùng một nhị phân xuống máy tính xách tay của mình, ldd có thể thấy các phụ thuộc thư viện chia sẻ vẫn ổn). Tôi đã thử bước qua nó trong gdb; nó tách ra trước khi nó kịp đến hướng dẫn đầu tiên.

Nhìn vào thời điểm xảy ra lỗi, tôi thấy rằng một bản vá Ksplice đã được áp dụng gần đây. Tôi đã sao lưu bản vá và tệp nhị phân không segfault, sau đó thêm nó trở lại và nó bắt đầu segfault lại. Khởi động lại vào kernel đã vá tương đương hoạt động tốt. Nó hóa ra là một bản vá cho hỗ trợ 32 bit mà mọi người Ksplice đã không áp dụng khá chính xác. Theo tín dụng của họ, họ đã phát hành một bản vá cố định trong vòng vài giờ và nó đã hoạt động trở lại chính xác trong đội tàu của chúng tôi mà không cần sự can thiệp.

Một ví dụ khác: các bản vá Meltdown / Spectre xâm lấn đến mức nhóm nhân Ubuntu đã quyết định rằng việc vá trực tiếp là không thực tế và yêu cầu mọi người khởi động lại hệ thống của họ vào kernel cố định trước khi nhận lại các bản vá trực tiếp.

Chúng tôi điều hành một đội máy chủ vật lý và ảo lớn đang hoạt động, với số lượng lớn cả hai hệ thống Ksplice và Canonical Livepatch. Cả hai đều đáng tin cậy hơn nhiều so với nhiều phần mềm khác, nhưng tôi vẫn muốn thấy các dịch vụ của chúng tôi được thiết kế với kiến ​​trúc thân thiện với khởi động lại hơn là dựa vào vá trực tiếp kernel.


30

Có một sự khác biệt quan trọng giữa làm cho một dịch vụ có tính sẵn sàng cao và làm cho một máy riêng lẻ có sẵn cao.

Trong hầu hết các trường hợp, mục tiêu là làm cho dịch vụ trở nên khả dụng cao và tính sẵn có của các máy riêng lẻ chỉ là một phương tiện để đạt được mục tiêu đó. Tuy nhiên, có giới hạn về mục tiêu bạn có thể đạt được bằng cách cải thiện tính khả dụng của từng máy.

Ngay cả khi bạn có thể lấy đi tất cả thời gian chết do cần cập nhật phần mềm, các máy riêng lẻ vẫn sẽ không khả dụng 100%. Do đó, để tăng tính khả dụng của dịch vụ trên mức khả dụng của từng máy bạn phải thiết kế dự phòng ở mức cao hơn. Câu cuối cùng của câu hỏi của bạn cho thấy rằng ít nhất về nguyên tắc bạn biết điều này.

Nếu bạn thiết kế một dịch vụ khả dụng hơn các máy riêng lẻ có thể cung cấp thì sẽ không còn áp lực để đạt được tính sẵn sàng cao của các máy riêng lẻ. Do đó, đối với các dịch vụ khả dụng cao, không cần phải tránh khởi động lại. Thay vào đó, bạn có thể hy sinh một số độ tin cậy của các máy riêng lẻ để tiết kiệm có thể được đưa vào các lĩnh vực khác, nơi bạn có thể đạt được mức độ tin cậy cao hơn nhiều.

Một khi hệ thống cấp cao được thiết kế để trở nên đáng tin cậy trong trường hợp các thành phần phần cứng riêng lẻ không thực hiện việc vá nhân thay đổi trực tiếp từ việc trở thành một lợi thế để trở thành rủi ro.

Đó là một rủi ro vì có thể có sự khác biệt tinh tế giữa hành vi của một máy được vá trực tiếp và một máy được khởi động với phiên bản kernel mới nhất. Điều này có thể giới thiệu một lỗi tiềm ẩn có thể gây ra sự cố ngừng hoạt động vào lần tới khi máy được khởi động lại. Rủi ro này được khuếch đại bằng cách khởi động lại để có được một bảng xếp hạng sạch sẽ được xem như là một phương pháp để giảm thiểu một số lần mất điện.

Một ngày nào đó bạn có thể bị cúp điện mà bạn nghĩ việc khởi động lại máy có thể giúp ích. Nhưng khi bạn khởi động lại, bạn sẽ gặp phải lỗi tiềm ẩn khiến máy không quay trở lại trạng thái mong muốn. Vá trực tiếp không phải là cách duy nhất xảy ra lỗi tiềm ẩn như vậy, nó cũng có thể xảy ra do một thứ gì đó tầm thường như một dịch vụ được kích hoạt thủ công và không bao giờ được cấu hình để khởi động trong khi khởi động hoặc được cấu hình để bắt đầu quá sớm. không đến do sự phụ thuộc không thỏa mãn.

Vì những lý do đó, một dịch vụ khả dụng cao thực sự có thể dễ dàng đạt được hơn với việc khởi động lại thường xuyên các máy riêng lẻ với tốc độ đủ chậm để bạn có thể phát hiện sự cố và tạm dừng chuỗi khởi động lại sau khi xảy ra sự cố.


Tôi thích mô tả của bạn về rủi ro; .
dùng75126

@ user75126 Tôi thấy đây là một tính năng phù hợp với máy khách hơn là máy chủ. Hơn nữa, hỏi phân phối nào hỗ trợ nó có vẻ giống như một câu hỏi đề xuất sản phẩm. Đối với tôi nghe có vẻ như hai lý do tại sao việc đọc lại câu hỏi như thế sẽ khiến nó lạc đề đối với trang web này.
kasperd

3
@ user75126 Ksplice của Oracle có bản dùng thử miễn phí và một cấp miễn phí cho máy tính để bàn Ubuntu và Fedora (chỉ, nhưng họ không thực sự thực thi điều này). Vấn đề là việc tạo ra các bản vá trực tiếp rất khó để tự động hóa, và thậm chí các bộ phận có thể được tự động hóa cũng tốn thời gian. Tạo các bản vá này là một hoạt động tương đối tốn nhiều công sức và thật hợp lý khi các công ty tính phí cho việc đó. Tôi đã xem xét những gì nó cần để tự tạo ra các bản vá trực tiếp và chạy thẳng ra khỏi đó. Tôi đã không có loại thời gian đó trong ngày của tôi.
Michael Hampton

12
@ user75126 Thực tế rất tệ trên trang web này để thay đổi tiêu đề và nội dung câu hỏi theo cách vô hiệu hóa câu trả lời hiện có. Nếu bạn muốn hỏi một câu hỏi khác, thì hãy hỏi một câu hỏi khác.
Greg Schmit

2
@ user75126 Cảm ơn. Tôi đã đọc câu hỏi của bạn và tôi không nghĩ đó thực sự là một câu trả lời cho nó. Tôi chỉ đơn thuần bình luận về lý do tại sao đây là một dịch vụ phải trả tiền.
Michael Hampton
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.