CentOS 7 EOL và bài toán chuyển đổi cho dân DevOps
Kể từ ngày 30/06/2024, CentOS 7 đã chính thức “nghỉ hưu” (End of Life). Nếu bạn vẫn đang vận hành các server chạy hệ điều hành này, rủi ro bảo mật là rất lớn vì các bản vá sẽ không còn được phát hành. Thực tế tại công ty mình, việc quản lý hàng chục server “đời cũ” gánh các dịch vụ legacy như PHP 5.6 hay Java 8 là một cơn ác mộng khi phải tính chuyện migrate.
Câu hỏi đặt ra là: Cài mới hoàn toàn (Fresh Install) hay nâng cấp trực tiếp (In-place Upgrade)? Cài mới đồng nghĩa với việc bạn phải setup lại toàn bộ Nginx, cấu hình MySQL, phân quyền thư mục và hàng tá config lặt vặt khác. Với ELevate – một dự án mã nguồn mở từ team AlmaLinux – bạn có thể nâng cấp thẳng từ CentOS 7 lên các bản phân phối RHEL-based mà vẫn giữ nguyên hiện trạng hệ thống.
Tại sao nên chọn ELevate thay vì cài đặt mới?
Để anh em dễ hình dung, mình sẽ so sánh nhanh hai phương pháp này dựa trên thực tế triển khai khoảng 20 server tại đơn vị mình.
1. Phương pháp Fresh Install
- Quy trình: Backup dữ liệu -> Cài OS mới -> Cấu hình lại môi trường -> Restore.
- Vấn đề: Downtime thường kéo dài từ 2-4 tiếng cho mỗi server. Rủi ro lớn nhất là quên backup các file config nằm rải rác trong
/etc/.
2. Dùng ELevate (In-place Upgrade)
- Quy trình: Chạy script tự động chuyển đổi package ngay trên OS đang chạy.
- Điểm cộng: Giữ nguyên User, Crontab, SSH Key và các dịch vụ đang chạy. Tiết kiệm khoảng 80% thời gian so với việc cài lại từ đầu.
- Hạn chế: Dễ gặp lỗi nếu hệ thống cài quá nhiều thư viện ngoài không thuộc repo chính thức.
Đánh giá công cụ ELevate
ELevate không phải là một script đơn giản. Nó dựa trên framework Leapp của Red Hat để thực hiện các bước kiểm tra cực kỳ khắt khe.
Lợi thế:
- Hỗ trợ nhiều đích đến: Bạn có thể chọn lên AlmaLinux, Rocky Linux, hay thậm chí Oracle Linux.
- Cơ chế Pre-upgrade check: Tool sẽ liệt kê mọi rủi ro tiềm ẩn trước khi bạn thực hiện thay đổi thực tế.
- Hoàn toàn miễn phí và được cộng đồng đóng góp liên tục.
Lưu ý: Tool hiện chỉ hỗ trợ kiến trúc x86_64. Nếu bạn dùng server chạy chip ARM, ELevate chưa phải là giải pháp lúc này.
Hướng dẫn triển khai chi tiết
Lưu ý quan trọng: Hãy thực hiện Snapshot hoặc Backup toàn bộ dữ liệu trước khi bắt đầu. Đừng bao giờ tin 100% vào các công cụ nâng cấp OS.
Bước 1: Cập nhật CentOS 7 lên bản mới nhất
Đầu tiên, hãy chắc chắn server đang ở phiên bản 7.9. Hãy chạy lệnh sau:
sudo yum update -y
sudo reboot
Bước 2: Cài đặt Repo ELevate
Sau khi máy khởi động lại, chúng ta tải package repo của ELevate về máy.
sudo yum install -y http://repo.almalinux.org/elevate/elevate-release-latest-el7.noarch.rpm
Bước 3: Cài đặt Leapp và dữ liệu đích
Tùy vào việc bạn muốn lên AlmaLinux hay Rocky Linux mà cài package tương ứng. Ở đây mình ưu tiên AlmaLinux vì độ ổn định cao.
# Chọn AlmaLinux làm đích đến
sudo yum install -y leapp-upgrade leapp-data-almalinux
Bước 4: Chạy kiểm tra hệ thống (Pre-upgrade)
Đây là giai đoạn “khám sức khỏe” cho server. Lệnh này chỉ quét hệ thống, chưa thực hiện nâng cấp nên rất an toàn.
sudo leapp preupgrade
Kết quả sẽ nằm ở file /var/log/leapp/leapp-report.txt. Nếu xuất hiện lỗi “Inhibitor”, bạn bắt buộc phải xử lý. Dưới đây là 3 lỗi mình thường gặp nhất:
- PATA Driver: Kernel mới không còn hỗ trợ driver này. Xử lý:
sudo rmmod pata_acpi. - PermitRootLogin: RHEL 8 yêu cầu xác nhận rõ ràng quyền root. Xử lý:
sudo echo PermitRootLogin yes >> /etc/ssh/sshd_config. - Answer file: Bạn cần xác nhận xóa module PAM cũ bằng lệnh:
sudo leapp answer --section remove_pam_pkcs11_module_check.confirm=True.
Bước 5: Bắt đầu nâng cấp
Khi lệnh preupgrade báo SUCCESS, hãy tiến hành lệnh nâng cấp thực sự. Quá trình này thường mất từ 15 đến 45 phút tùy vào cấu hình phần cứng.
sudo leapp upgrade
sudo reboot
Bước 6: Xác nhận kết quả
Sau khi reboot, server sẽ khởi động vào môi trường nâng cấp tạm thời. Đừng can thiệp, hãy để nó tự chạy. Khi màn hình login hiện ra, kiểm tra lại phiên bản:
cat /etc/redhat-release
# Kết quả mong đợi: AlmaLinux release 8.10 (Cerulean Leopard)
Kinh nghiệm “xương máu” để tránh lỗi
Sau khi migrate thành công nhiều hệ thống, mình rút ra vài điểm cần lưu ý:
- Dung lượng phân vùng /boot: Nếu phân vùng này còn trống dưới 100MB, quá trình nâng cấp chắc chắn sẽ thất bại. Hãy xóa bớt kernel cũ để giải phóng không gian.
- Tắt tạm thời SELinux: Chuyển sang chế độ
permissivegiúp tránh các lỗi phân quyền khó chịu trong lúc script ghi đè file hệ thống. - Xử lý Repo bên thứ ba: Các repo như Remi hay EPEL nên được disable trước khi upgrade. Sau khi lên OS mới, bạn hãy cài lại phiên bản tương ứng cho RHEL 8.
Việc nâng cấp từ CentOS 7 không còn quá đáng sợ nếu bạn nắm vững ELevate. Hy vọng bài viết này giúp anh em tiết kiệm được vài đêm thức trắng để migrate server. Nếu gặp lỗi lạ trong quá trình chạy Leapp, hãy để lại log ở phần comment nhé!

