Cách chuyển đổi CentOS 7 sang AlmaLinux 9 trên VPS

Tác giả: Trần Thảo 24 tháng 05, 2026

Gõ lệnh yum update và nhận về một rổ lỗi 404 đỏ lòm trên màn hình terminal? Server liên tục bị hệ thống monitoring réo tên cảnh báo lỗ hổng bảo mật nhưng hoàn toàn bất lực trong việc tải bản vá? Đó là nỗi đau cực kỳ chân thực mà hàng ngàn Sysadmin và Developer đang phải đối mặt kể từ khi CentOS 7 chính thức bị khai tử (End-of-Life EOL) vào ngày 30 tháng 06 năm 2024.

Việc duy trì một hệ điều hành đã ngừng hỗ trợ trên môi trường VPS production không khác gì việc bạn mở toang cửa kho dữ liệu mời hacker vào tấn công. Lúc này, nhu cầu chuyển đổi CentOS 7 sang AlmaLinux 9 trở thành nhiệm vụ sống còn. AlmaLinux 9 nổi lên như một hậu duệ hoàn hảo của RHEL với cam kết hỗ trợ cập nhật bảo mật dài hạn (LTS) đến tận năm 2032.

Tuy nhiên, việc đập đi xây lại hay nâng cấp một hệ thống đang gánh hàng chục gigabyte database mà không gây ra downtime hay sập mạng là bài toán không hề đơn giản. Bài viết này sẽ cung cấp cho bạn quy trình kỹ thuật chuẩn xác nhất, kết hợp giữa tài liệu chính hãng và kinh nghiệm thực chiến để đảm bảo hệ thống của bạn chuyển đổi an toàn tuyệt đối. Mọi thứ đã sẵn sàng, liệu bạn có dám gõ lệnh enter?

Tại sao lộ trình chuyển đổi bắt buộc phải qua bước đệm?

Rất nhiều Sysadmin khi mới tiếp cận công cụ ELevate (do AlmaLinux phát triển) thường mắc sai lầm là muốn nhảy vọt trực tiếp từ bản 7 lên bản 9 cho nhanh. Tuy nhiên, theo tài liệu chính thức của AlmaLinux và dự án ELevate, bạn bắt buộc phải nâng cấp lên AlmaLinux 8 trước, sau đó mới có thể tiếp tục nâng cấp lên AlmaLinux 9.

Lý do kỹ thuật nằm ở việc tiện ích Leapp (công cụ cốt lõi đằng sau ELevate) được thiết kế theo nguyên lý nâng cấp từng bước một (one-step upgrades) giữa các phiên bản lớn (major versions) liền kề. Sự khác biệt quá lớn về kiến trúc lõi (Systemd, Glibc, Python) khiến việc nhảy cóc là bất khả thi. Lộ trình chuẩn sẽ trải qua 2 giai đoạn:

  1. Giai đoạn 1: CentOS 7 -> AlmaLinux 8
  2. Giai đoạn 2: AlmaLinux 8 -> AlmaLinux 9

(Nếu đích đến của bạn xa hơn trong tương lai, quy trình này vẫn áp dụng nối tiếp: AlmaLinux 9 -> AlmaLinux 10).

Checklist sống còn & khắc phục lỗi repo CentOS 7

Trước khi can thiệp vào nhân hệ điều hành, hãy luôn nhớ quy tắc vàng của dân hạ tầng: Tạo Snapshot hoặc Full Backup toàn bộ VPS. Đừng bao giờ giao phó sinh mạng dữ liệu cho các công cụ tự động. Nếu bạn phân vân về cách backup sao cho tối ưu, hãy tham khảo bài viết phân tích 3 cách backup VPS phổ biến: Khi nào dùng Snapshot, Rclone, Tar? của chúng tôi.

Sau khi đã có đường lùi, trở ngại đầu tiên bạn gặp phải là kho lưu trữ (repository) mặc định của CentOS 7 đã không còn hoạt động. Bạn không thể cài công cụ ELevate nếu không thể chạy lệnh yum update cuối cùng. Dưới đây là 2 phương án chính xác nhất để hồi sinh repo:

Phương án 1: Dùng lệnh wget tải cấu hình mới (tự động)

Phương pháp này giúp thay thế nhanh chóng các đường dẫn cũ sang cấu hình mới chứa kho lưu trữ archive.

  1. Sao lưu tệp cấu hình hiện tại:
    sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
  2. Tải tệp kho lưu trữ đã cập nhật từ GitHub:
    sudo wget -O /etc/yum.repos.d/CentOS-Base.repo https://raw.githubusercontent.com/AtlasGondal/centos7-eol-repo-fix/main/CentOS-Base.repo
  3. Dọn dẹp bộ nhớ đệm và tiến hành cập nhật:
    Làm sạch bộ nhớ đệm:

    sudo yum clean all

    Tạo bộ nhớ đệm mới:

    sudo yum makecache

    Cập nhật hệ thống:

    sudo yum update -y

Phương án 2: Dùng lệnh sed trỏ về vault.centos.org (thủ công)

Nếu server chặn truy cập GitHub, bạn có thể chỉnh sửa trực tiếp hàng loạt tệp cấu hình repo hiện tại:

  1. Vô hiệu hóa dòng mirrorlist:
    sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
  2. Kích hoạt và thay đổi baseurl sang kho Vault:
    sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
  3. Làm sạch và update:
    Làm sạch hệ thống:

    yum clean all

    Tạo bộ nhớ đệm:

    yum makecache

    Cập nhật gói:

    yum update -y

Phương án 1: Nâng cấp trực tiếp (in-place upgrade) bằng ELevate

Đây là phương pháp nâng cấp đè trực tiếp lên VPS hiện tại, phù hợp với môi trường Staging/Dev hoặc các hệ thống mà bạn không thể chuyển đổi IP. Quá trình này sẽ có downtime.

Giai đoạn 1: Ép xung từ CentOS 7 lên AlmaLinux 8

1. Cài đặt kho lưu trữ ELevate và công cụ Leapp Sau khi hệ thống CentOS 7 đã ở bản cập nhật mới nhất và được reboot, bạn cài đặt bộ công cụ lõi:

Thêm kho lưu trữ ELevate:

sudo yum install -y http://repo.almalinux.org/elevate/elevate-release-latest-el7.noarch.rpm

Cài đặt tiện ích Leapp và gói dữ liệu đích:

sudo yum install -y leapp-upgrade leapp-data-almalinux

2. Khám bệnh hệ thống (Pre-upgrade check) Đây là bước công cụ sẽ kiểm tra xem hệ thống có đủ điều kiện nâng cấp hay không:

sudo leapp preupgrade

Chắc chắn lệnh này sẽ báo lỗi đỏ ở lần đầu. Đừng hoảng! Tài liệu hãng hướng dẫn bạn mở và phân tích tệp báo cáo tại: /var/log/leapp/leapp-report.txt.

Nếu báo cáo chỉ ra các gói package cũ gây cản trở (inhibitors) mà lệnh yum remove thông thường không gỡ được do vướng lỗi phụ thuộc (dependency hell), bạn hãy dùng lệnh rpm ép buộc xóa bỏ không cần kiểm tra gói phụ thuộc:

sudo rpm -e --nodeps <package_name>

3. Thực thi nâng cấp lên AlmaLinux 8 Khi file report báo xanh, tiến hành nâng cấp và khởi động lại:

Thực thi nâng cấp:

sudo leapp upgrade

Khởi động lại hệ thống:

sudo reboot

Đăng nhập lại và gõ cat /etc/os-release để xác nhận server đã lên AlmaLinux 8. Bạn có thể xem thêm Cách kiểm tra phiên bản CentOS và các bản phân phối Linux khác để nắm rõ các thông số hệ thống.

Giai đoạn 2: Cú nhảy chốt hạ từ AlmaLinux 8 lên AlmaLinux 9

Đừng vội chạy ELevate tiếp. Để lên được bản 9, bạn bắt buộc phải thực hiện dọn dẹp hệ thống một cách kỹ lưỡng.

1. Dọn dẹp tệp cấu hình và bộ nhớ đệm (Cực kỳ quan trọng) Nếu để nguyên cấu hình cũ, tiến trình sẽ crash ngay lập tức.

  • Mở tệp /etc/yum.conf/etc/dnf/dnf.conf, tìm dòng excludexóa toàn bộ nội dung (đặc biệt là các từ khóa như python2-leapp, leapp-upgrade-el7toel8, elevate).
  • Xóa thư mục tạm của quá trình Leapp trước đó:
    sudo rm -fr /root/tmp_leapp_py3
  • Dọn sạch cache DNF:
    sudo dnf clean all

2. Tử huyệt Network-Scripts: Khắc phục lỗi rớt mạng Sự khác biệt chí mạng giữa RHEL 8 và RHEL 9 là sự biến mất hoàn toàn của gói network-scripts. Các tệp cấu hình mạng kiểu cũ (ifcfg-eth0) tại /etc/sysconfig/network-scripts/ không còn được hỗ trợ và đã nhường chỗ hoàn toàn cho định dạng keyfile (.nmconnection) của NetworkManager.

Để tránh VPS không nhận diện được IP và mất kết nối vĩnh viễn sau khi lên bản 9, tài liệu hãng cung cấp lệnh tự động chuyển đổi (migrate) các file cấu hình mạng cũ sang định dạng mới. Hãy chạy lệnh này trước khi nâng cấp:

Chuyển đổi toàn bộ cấu hình mạng sang keyfile:

sudo nmcli connection migrate

(Nếu chỉ muốn chuyển đổi 1 cổng mạng cụ thể, ví dụ ens192, dùng lệnh: sudo nmcli connection migrate ens192).

3. Tiến hành nâng cấp lên AlmaLinux 9 Cài đặt lại dữ liệu Leapp cho bản 9 và thực hiện chu trình quen thuộc:

Kiểm tra hệ thống trước khi nâng cấp (Fix lỗi nếu có trong leapp-report.txt):

sudo leapp preupgrade

Tiến hành nâng cấp:

sudo leapp upgrade

Khởi động lại máy chủ:

sudo reboot

Chúc mừng! VPS của bạn đã hạ cánh an toàn xuống AlmaLinux 9.

Phương án 2: Side-by-side migration (khuyên dùng cho production)

Thay vì đối mặt với rủi ro downtime và dependency hell, các Sysadmin lão làng thường áp dụng chiến thuật chuyển đổi: Tạo một VPS AlmaLinux 9 mới cứng, cài đặt NGINX/Apache/DB, Rsync dữ liệu qua, và cuối cùng là trỏ domain. Đây là phương pháp giúp đạt Zero-Downtime.

Kỹ thuật test website bằng file hosts cục bộ

Khoan vội trỏ DNS. Bạn cần chắc chắn source code cũ chạy ổn định trên môi trường bản 9. Thay vì sửa DNS công khai, hãy ghi đè DNS nội bộ ngay trên máy tính cá nhân của bạn.

  1. Mở file hosts với quyền Administrator/Root:
    • Windows: Mở Notepad (Run as Admin) -> C:\Windows\System32\drivers\etc\hosts
    • macOS/Linux: Terminal -> sudo nano /etc/hosts
  2. Thêm dòng chứa IP của VPS mới và tên miền của bạn:
    192.168.1.100 yourdomain.com
    192.168.1.100 www.yourdomain.com
  3. Xóa bộ nhớ đệm DNS (Flush DNS):
    • Windows: ipconfig /flushdns
    • macOS: sudo dscacheutil -flushcache
  4. Mở trình duyệt ở chế độ Ẩn danh, truy cập website và test các form đặt hàng/kết nối DB. Sau khi test xong, nhớ xóa các dòng vừa thêm trong file hosts và flush DNS lại.

Chiến lược hạ TTL DNS đạt zero-downtime

Khi mọi thứ đã hoàn hảo, bạn cần chuyển traffic khách hàng sang server mới một cách mượt mà nhất. Bí quyết nằm ở chỉ số TTL (Time-To-Live).

  • Hạ TTL: Truy cập trang quản trị DNS (Cloudflare, v.v.), hạ giá trị TTL của bản ghi A xuống mức an toàn là 300 giây (5 phút).
  • Thời điểm: Việc này bắt buộc phải thực hiện trước giờ G ít nhất 24 đến 48 giờ. Công thức chờ chuẩn là: Giá trị TTL hiện hành (tính bằng giờ) + Khoảng đệm an toàn (2-4 giờ). Ví dụ: TTL cũ là 24h, bạn phải hạ xuống 300s và chờ 26 tiếng rồi mới tiến hành đổi IP.
  • Chuyển đổi: Khi đổi IP sang server mới, mạng toàn cầu sẽ cập nhật chỉ trong 5 phút. Khách hàng đang thao tác trên web sẽ không hề nhận ra sự gián đoạn. Sau khi hệ thống ổn định được 6-12 tiếng, hãy tăng TTL trở lại mức 14400s hoặc 86400s để tối ưu hiệu suất truy vấn.

Troubleshooting: Bắt bệnh SELinux chuẩn hãng

Trên AlmaLinux 9, SELinux được siết chặt hơn rất nhiều. Rất nhiều trường hợp cấu hình web server xong nhưng truy cập báo lỗi 500 Internal Server Error hoặc 403 Permission Denied.

Thay vì tắt SELinux (một hành động tự hủy về mặt bảo mật), tài liệu hãng cung cấp bộ công cụ chuẩn để bạn phân tích lỗi:

1. Sử dụng sealert để phân tích log Cài đặt gói setroubleshoot-server để dịch log thô thành các gợi ý sửa lỗi rõ ràng:

Cài đặt công cụ:

sudo dnf install -y setroubleshoot-server

Phân tích tệp nhật ký:

sudo sealert -a /var/log/audit/audit.log

2. Khôi phục nhãn bảo mật (File Context) Nếu lỗi do bạn copy/move file khiến nhãn bảo mật bị sai, hãy dùng lệnh restorecon để ép khôi phục nhãn gốc cho thư mục web:

sudo restorecon -Rv /var/www/html/

Trường hợp bạn chuyển source code sang một thư mục tùy chỉnh (không phải mặc định), bạn phải khai báo nhãn mới bằng semanage trước:

Khai báo nhãn mới:

sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/myapp(/.*)?"

Khôi phục nhãn bảo mật cho thư mục:

sudo restorecon -Rv /var/www/myapp

Gia cố bảo mật máy chủ AlmaLinux 9 sau khi hoàn tất

Sau khi lên mây thành công, đừng bỏ quên việc bọc thép cho server mới của bạn, như chúng tôi đã đề cập trong series Bảo mật VPS Linux từ A-Z với 10 lớp phòng thủ thiết yếu (cập nhật 2025). Các cuộc tấn công dò tìm mật khẩu hoạt động 24/7 không phân biệt ngày đêm.

Tự động cài bản vá bảo mật với dnf-automatic

Sysadmin bận rộn không thể ngày nào cũng SSH vào gõ lệnh cập nhật. Cấu hình tự động cài đặt các bản vá an ninh là giải pháp tối ưu:

sudo dnf install -y dnf-automatic

Mở tệp /etc/dnf/automatic.conf và điều chỉnh thông số để hệ thống chỉ cập nhật các gói liên quan đến bảo mật (tránh nâng cấp các tính năng gây lỗi code):

upgrade_type = security
apply_updates = yes

Kích hoạt bộ hẹn giờ của systemd:

sudo systemctl enable --now dnf-automatic.timer

Chống brute-force với Fail2ban

Fail2ban phân tích log theo thời gian thực để block IP của các kẻ tấn công dò mật khẩu SSH hay Web Admin. Nếu bạn muốn tìm hiểu sâu hơn cấu trúc của công cụ này, hãy xem bài viết Cài đặt Fail2Ban: Hướng dẫn chi tiết bảo vệ VPS khỏi Brute-Force (2025). Vì gói này không có sẵn ở repo gốc, bạn phải cài EPEL trước:

Cài đặt kho lưu trữ EPEL:

sudo dnf install epel-release -y

Cài đặt Fail2ban và module Firewalld:

sudo dnf install fail2ban fail2ban-firewalld -y

(Lưu ý: Luôn nhân bản tệp cấu hình sang jail.local để chỉnh sửa, đặt tham số backend = systemd để tương thích tốt với AlmaLinux 9, và thêm IP của chính bạn vào ignoreip để tránh tự khoá cửa). Cuối cùng, kích hoạt dịch vụ:

sudo systemctl enable --now fail2ban

Câu hỏi thường gặp (FAQ)

1. Chuyện gì xảy ra nếu tôi tiếp tục giữ lại hệ điều hành CentOS 7?

Rất nguy hiểm. CentOS 7 đã ngừng hoạt động (EOL) từ 06/2024. Lệnh yum update hiện báo lỗi 404 và bạn vĩnh viễn không có bản vá bảo mật mới, biến VPS thành mục tiêu cho hacker khai thác zero-day.

2. Đằng nào cũng nâng cấp, tại sao chỉ lên AlmaLinux 9 mà không lên hẳn bản mới nhất (10.1)?

Vì giới hạn rủi ro. Công cụ nâng cấp bắt buộc bạn đi từng bậc (7 -> 8 -> 9 -> 10). Ép một hệ thống cũ kỹ qua 3 lần nâng cấp lớn liên tiếp làm tăng tỷ lệ crash theo cấp số nhân. Bản 9 hiện tại đã cực kỳ ổn định, tương thích tốt các Control Panel và được hỗ trợ bảo mật (LTS) đến tận 2032 (6 năm nữa), là điểm rơi an toàn nhất.

3. Tôi có thể nâng cấp trực tiếp từ CentOS 7 lên AlmaLinux 9 bằng ELevate không?

KHÔNG. Công cụ Leapp chỉ hỗ trợ nâng cấp từng bậc một (one-step). Kiến trúc lõi (Systemd, Glibc) quá khác biệt nên bạn bắt buộc phải lên bản 8 trước, dọn dẹp cấu hình, rồi mới chạy tool lần nữa để lên bản 9.

4. Máy chủ đang chạy Production (có khách/doanh thu), nên chọn In-place hay Side-by-side?

Bắt buộc chọn Side-by-side (Thuê VPS mới). Nâng cấp đè (In-place) dễ gây crash, kẹt gói phần mềm và chắc chắn có downtime. Chuyển đổi sang VPS mới, Rsync dữ liệu và trỏ DNS đảm bảo an toàn tuyệt đối (Zero-downtime).

5. Tại sao nhiều người cảnh báo sẽ bị mất mạng (rớt IP) sau khi lên AlmaLinux 9?

Do bản 9 đã loại bỏ hoàn toàn network-scripts (các file ifcfg-*). Nếu bạn không chạy lệnh sudo nmcli connection migrate để chuyển đổi sang định dạng Keyfile trước khi reboot, VPS sẽ khởi động lên trong tình trạng mất kết nối IP.

6. Copy source web sang VPS mới xong bị lỗi 403 Forbidden / 500 Error, xử lý thế nào?

Do SELinux chặn quyền (File Context) khi copy file. Tuyệt đối không tắt SELinux. Chỉ cần chạy lệnh sudo restorecon -Rv /var/www/html/ để ép hệ thống khôi phục lại nhãn bảo mật mặc định là website sẽ hoạt động bình thường.

Kết luận

Việc chuyển đổi CentOS 7 sang AlmaLinux 9 là một dự án lớn đòi hỏi sự am hiểu sâu sắc về kiến trúc Linux. Dù bạn chọn In-place nâng cấp qua các bước đệm rủi ro hay Side-by-side chuyển đổi an toàn tuyệt đối, sự chuẩn bị kỹ lưỡng về Snapshot, NetworkManager, và DNS TTL chính là chìa khóa định đoạt sự thành công. Hệ thống mới của bạn giờ đây đã sẵn sàng vận hành mạnh mẽ, bảo mật và ổn định cho tới năm 2032!

Tài liệu tham khảo