Linux bất biến: Kiểm soát máy chủ sản xuất với Fedora Silverblue & NixOS

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Khi máy chủ sản xuất của bạn gặp sự cố lúc 2 giờ sáng

Đã 2 giờ sáng. Điện thoại của bạn đổ chuông, hệ thống giám sát đang báo động. Một dịch vụ sản xuất quan trọng đã ngừng hoạt động.

Bạn SSH vào máy chủ, tim đập thình thịch, chỉ để phát hiện ra rằng các bản cập nhật bảo mật định kỳ ngày hôm qua bằng cách nào đó đã làm hỏng một phụ thuộc cốt lõi. Hoặc có lẽ không phải là một bản cập nhật; có thể một tệp cấu hình đã bí ẩn khác với trạng thái dự định ban đầu, gây ra lỗi dịch vụ không rõ ràng mà chỉ xuất hiện dưới tải nặng. Đây không chỉ là một giấc mơ tồi tệ; đó là một thực tế khắc nghiệt mà nhiều người trong chúng ta đã phải đối mặt với các bản phân phối Linux truyền thống, có thể thay đổi.

Vấn đề cốt lõi: Trạng thái có thể thay đổi và cấu hình bị trôi

Các bản phân phối Linux truyền thống như Ubuntu, Debian, hoặc CentOS vốn dĩ có thể thay đổi. Mỗi lần cài đặt gói, chỉnh sửa tệp cấu hình và điều chỉnh thủ công đều trực tiếp làm thay đổi hệ thống đang chạy. Mặc dù về lý thuyết điều này mang lại sự linh hoạt, nhưng trên thực tế – đặc biệt trong môi trường sản xuất – nó thường dẫn đến sự không nhất quán và khó đoán.

  • Vòng xoáy phụ thuộc: Một gói mới được cài đặt, kéo theo các phụ thuộc xung đột với một ứng dụng quan trọng hiện có, dẫn đến các lỗi không mong muốn.
  • Cấu hình bị trôi: Theo thời gian, các thay đổi thủ công tích lũy. Các kỹ sư khác nhau thực hiện những thay đổi tinh tế, dẫn đến các máy chủ, mặc dù chạy cùng một hệ điều hành, lại hoạt động khác biệt. Việc khắc phục sự cố sau đó trở thành một cuộc điều tra tẻ nhạt qua nhiều năm sửa đổi rải rác.
  • Cập nhật không thể đoán trước: Các bản cập nhật là rất cần thiết, nhưng chúng thường mang theo rủi ro hồi quy. Nếu không có cơ chế khôi phục rõ ràng và đáng tin cậy, một bản cập nhật bị lỗi có thể gây ra thời gian ngừng hoạt động kéo dài khi bạn cố gắng khôi phục trạng thái hoạt động trước đó.
  • Ác mộng về khả năng tái tạo: Bạn có thể nhanh chóng tạo một bản sao chính xác môi trường sản xuất của mình không? Với các hệ thống có thể thay đổi, đạt được khả năng tái tạo thực sự là một cuộc đấu tranh liên tục, thường dựa vào các tập lệnh thiết lập mong manh, được bảo trì thủ công.

Cuộc đấu tranh không ngừng này chống lại một hệ thống luôn thay đổi gây ra một tổn thất đáng kể. Ví dụ, trên máy chủ sản xuất Ubuntu 22.04 của tôi với chỉ 4GB RAM, chi phí quản lý một hệ thống có thể thay đổi thường gây ra các sự tăng đột biến tài nguyên không mong muốn và thời gian phản hồi chậm, được quy cho sự tích lũy ‘rác hệ thống’ hoặc các tương tác phụ thuộc không lường trước.

Bằng cách áp dụng các nguyên tắc bất biến, tôi đã có thể tạo ra một môi trường hợp lý, dễ đoán. Điều này làm giảm đáng kể thời gian xử lý cho các dịch vụ quan trọng, giải phóng RAM quý giá và thời gian của nhà phát triển.

Giới thiệu Linux bất biến: Một con đường mới đến sự ổn định

Các bản phân phối Linux bất biến đưa ra một cách tiếp cận cơ bản khác để quản lý hệ thống. Ý tưởng cốt lõi rất đơn giản nhưng mạnh mẽ: hệ điều hành cơ sở vẫn ở chế độ chỉ đọc. Bất kỳ thay đổi nào, dù là cập nhật hay cài đặt phần mềm tùy chỉnh, đều được áp dụng một cách giao dịch hoặc xếp lớp lên trên. Nếu có sự cố, bạn có thể ngay lập tức quay lại trạng thái trước đó, đã biết là tốt. Điều này mang lại sự ổn định, độ tin cậy và khả năng tái tạo nâng cao cho các hoạt động máy chủ.

Fedora Silverblue và NixOS là hai bản phân phối hàng đầu trong bối cảnh Linux bất biến. Mặc dù cả hai đều ưu tiên tính bất biến, nhưng phương pháp của chúng khác nhau đáng kể.

Fedora Silverblue: Cập nhật giao dịch và tư duy ưu tiên container

Fedora Silverblue, và đối tác máy chủ của nó, Fedora CoreOS, sử dụng OSTree để quản lý hệ điều hành cơ sở của nó. Hãy hình dung OSTree như Git dành cho hệ điều hành của bạn: bạn ‘cam kết’ một trạng thái hệ thống mới và có thể dễ dàng ‘khôi phục’ về các phiên bản trước đó.

Cách hoạt động:

  • Hệ thống cơ sở chỉ đọc: Hệ điều hành cốt lõi (cụ thể là thư mục /usr) được gắn dưới dạng chỉ đọc. Điều này ngăn chặn việc sửa đổi ngẫu nhiên hoặc cố ý các tệp hệ thống cốt lõi.
  • Cập nhật giao dịch: Các bản cập nhật được tải xuống dưới dạng một hình ảnh mới hoàn chỉnh, về cơ bản là một cam kết OSTree. Sau đó, bạn khởi động lại hệ thống của mình vào hình ảnh mới này. Nếu có bất kỳ vấn đề nào phát sinh, bạn chỉ cần khởi động lại về phiên bản hoạt động trước đó.
  • Xếp lớp với rpm-ostree: Đối với các gói cấp hệ thống không có sẵn dưới dạng Flatpak, rpm-ostree cho phép bạn “xếp lớp” các RPM. Các lớp này trở thành một phần của cam kết OSTree mới của bạn và được áp dụng một cách giao dịch, đảm bảo tính nguyên tử.
  • Tập trung vào Container: Các ứng dụng và môi trường phát triển được thiết kế để chạy trong các container (như Podman/Docker) hoặc Flatpak. Sự cô lập quan trọng này giữ chúng tách biệt khỏi hệ thống cơ sở.

Các lệnh thực tế:

Kiểm tra trạng thái hệ thống hiện tại của bạn:

rpm-ostree status

Nâng cấp hệ thống của bạn lên hình ảnh cơ sở mới nhất:

rpm-ostree upgrade

Sau khi nâng cấp, cần khởi động lại. Nếu có vấn đề gì xảy ra, việc khôi phục rất đơn giản:

rpm-ostree rollback
sudo reboot

Xếp lớp một gói như htop (yêu cầu khởi động lại để có hiệu lực):

rpm-ostree install htop
sudo reboot

Gỡ bỏ một gói đã được xếp lớp:

rpm-ostree uninstall htop
sudo reboot

Cài đặt một ứng dụng Flatpak (đây là phương pháp được khuyến nghị cho các ứng dụng máy tính để bàn, và cũng hữu ích trên máy chủ cho một số công cụ nhất định):

flatpak install flathub org.mozilla.firefox

NixOS: Hoàn toàn khai báo và tái tạo hoàn toàn

NixOS đẩy ranh giới của tính bất biến và khả năng tái tạo, làm cho nó trở thành một hệ điều hành thực sự khác biệt và mạnh mẽ. Nó được xây dựng dựa trên trình quản lý gói Nix và ngôn ngữ biểu thức Nix.

Cách hoạt động:

  • Cấu hình khai báo: Toàn bộ hệ thống của bạn, từ các mô-đun hạt nhân cấp thấp đến các dịch vụ người dùng, được định nghĩa chính xác trong một tệp cấu hình duy nhất, dễ đọc, thường được tìm thấy tại /etc/nixos/configuration.nix.
  • Cập nhật & Khôi phục nguyên tử: Khi bạn sửa đổi và áp dụng cấu hình của mình, NixOS xây dựng một thế hệ hệ thống mới trong một môi trường cô lập. Nếu thành công, nó sẽ chuyển đổi nguyên tử sang thế hệ mới này. Nếu có bất kỳ vấn đề nào phát sinh, bạn có thể dễ dàng khởi động vào bất kỳ thế hệ trước đó nào.
  • Quản lý gói hàm: Nix đảm bảo rằng mọi gói được xây dựng trong một môi trường cô lập. Thiết kế này ngăn ngừa xung đột phụ thuộc và đảm bảo khả năng tái tạo hoàn hảo trên các máy khác nhau.
  • Khả năng tái tạo từ nguồn đến nhị phân: Với một tệp configuration.nix giống hệt và cùng các kênh Nix, bất kỳ ai cũng có thể xây dựng một hệ thống giống hệt của bạn từng bit.

Các lệnh thực tế:

Cấu hình hệ thống của bạn được định nghĩa trong /etc/nixos/configuration.nix. Đây là một ví dụ đoạn mã:

# /etc/nixos/configuration.nix
{
  config, pkgs, ...
}:

{
  # Bật SSH
  services.openssh.enable = true;

  # Cài đặt htop và wget
  environment.systemPackages = with pkgs; [
    htop
    wget
  ];

  # Đặt múi giờ thành Europe/Berlin
  time.timeZone = "Europe/Berlin";

  # ... các cấu hình khác theo yêu cầu
}

Sau khi sửa đổi configuration.nix, hãy áp dụng các thay đổi:

sudo nixos-rebuild switch

Nếu bạn gặp sự cố sau lệnh switch, bạn có thể dễ dàng khôi phục về thế hệ trước đó:

sudo nixos-rebuild switch --rollback

Để xem tất cả các thế hệ hệ thống có sẵn:

nixos-rebuild list-generations

Cài đặt một gói tạm thời cho người dùng hiện tại (không phải trên toàn hệ thống):

nix-env -iA nixos.htop

Hoặc, cho một phiên shell duy nhất:

nix-shell -p htop

Cách tiếp cận bất biến nào phù hợp với bạn?

Lựa chọn giữa Fedora Silverblue và NixOS phần lớn phụ thuộc vào kiến thức chuyên môn hiện có và khả năng chấp nhận thay đổi của bạn:

  • Đối với môi trường quen thuộc với độ an toàn nâng cao: Fedora Silverblue. Nếu bạn đã quen với các bản phân phối dựa trên RPM truyền thống và tìm kiếm những lợi thế của tính bất biến, cập nhật giao dịch và khôi phục đơn giản mà không cần thay đổi hoàn toàn tư duy, Silverblue là một lựa chọn tuyệt vời. Nó tích hợp liền mạch với quy trình làm việc container và tạo ra sự cân bằng tốt giữa tính linh hoạt của hệ thống và sự ổn định vững chắc.
  • Để tái tạo tối ưu và kiểm soát khai báo: NixOS. Nếu bạn là nhà phát triển hoặc quản trị viên hệ thống ưu tiên khả năng tái tạo tuyệt đối, cơ sở hạ tầng khai báo và cách tiếp cận lập trình chức năng đối với cấu hình hệ thống, NixOS mang đến khả năng vô song. Mặc dù đường cong học tập của nó dốc hơn, nhưng những lợi ích về độ tin cậy của hệ thống và quản lý các môi trường phức tạp là rất lớn. Nó biến đổi cấu hình máy chủ của bạn thành mã, mở đường cho các quy trình GitOps mạnh mẽ.

Cả hai bản phân phối đều giải quyết hiệu quả vấn đề cốt lõi của cấu hình bị trôi và trạng thái hệ thống không thể đoán trước, mặc dù với các triết lý cơ bản khác nhau. Silverblue có thể được coi là một sự phát triển của Linux truyền thống, trong khi NixOS đại diện cho một cuộc cách mạng thực sự.

Đón nhận khả năng dự đoán trong quản lý máy chủ

Kỷ nguyên các máy chủ dần trôi dạt vào trạng thái không nhất quán, chỉ để gặp sự cố ngoạn mục vào thời điểm tồi tệ nhất có thể, đang dần khép lại. Bằng cách áp dụng Linux bất biến với các bản phân phối như Fedora Silverblue hoặc NixOS, bạn không chỉ đơn thuần là cài đặt một hệ điều hành.

Bạn đang đón nhận một triết lý mới đề cao sự ổn định, khả năng tái tạo và sự an tâm. Các cuộc gọi lúc 2 giờ sáng của bạn sẽ trở nên không thường xuyên, và việc khắc phục sự cố sẽ biến từ việc đoán mò điên cuồng thành các lần khôi phục đơn giản, dễ đoán. Đã đến lúc xây dựng các môi trường sản xuất mạnh mẽ và kiên cường hơn.

Share: