Tại sao team mình phải tìm giải pháp thay thế CentOS?
Công ty mình có khoảng 8 con server đang chạy CentOS 7, và việc migrate sang AlmaLinux là bài toán mình xử lý suốt 3 tháng vừa rồi. CentOS 7 hết support tháng 6/2024. CentOS 8 thì Red Hat khai tử sớm hơn từ cuối 2021 — chuyển thành CentOS Stream, tức rolling release, không phù hợp cho production.
Lúc đó cả team ngồi lại, liệt kê ba lựa chọn thực tế nhất:
- AlmaLinux — do CloudLinux Inc. tài trợ, binary compatible 1:1 với RHEL
- Rocky Linux — do Greg Kurtzer (đồng sáng lập CentOS) khởi xướng
- Oracle Linux — miễn phí nhưng có yếu tố vendor lock-in tiềm ẩn
So sánh các lựa chọn thay thế CentOS
AlmaLinux vs Rocky Linux vs Oracle Linux
Cả ba đều là RHEL clone — rebuild từ source code Red Hat Enterprise Linux. Package, kernel version, system calls gần như giống nhau. App quen từ thời CentOS? Vẫn chạy bình thường. Nhưng về quản lý và vận hành dài hạn thì có vài điểm khác biệt đáng để ý:
- AlmaLinux: Điều hành bởi AlmaLinux OS Foundation (phi lợi nhuận), cộng đồng lớn, release thường chỉ 3–5 ngày sau RHEL. Khi Red Hat thay đổi chính sách source code năm 2023, AlmaLinux chuyển sang track RHEL thay vì rebuild byte-for-byte — nhưng vẫn ABI/API compatible đầy đủ.
- Rocky Linux: Cam kết “bug-for-bug compatible” với RHEL, xây từ source RHEL. Cộng đồng mạnh, nhưng release thường chậm hơn AlmaLinux khoảng 1–2 tuần.
- Oracle Linux: Oracle cung cấp thêm Unbreakable Enterprise Kernel (UEK) — tối ưu cho workload Oracle. Nếu stack của bạn không dùng sản phẩm Oracle, option này không có lợi thế gì nổi bật.
Phân tích ưu nhược điểm từng option
AlmaLinux
Ưu điểm:
- Release nhanh nhất trong 3 lựa chọn — thường 3–5 ngày sau RHEL
- Có
almalinux-deploy.sh— script chuyển đổi in-place từ CentOS/Oracle/Rocky sang AlmaLinux mà không cần rebuild server - Hỗ trợ FIPS compliance, SELinux đầy đủ
- Tài liệu và forum active — câu hỏi trên Reddit/mailing list thường có phản hồi trong ngày
Nhược điểm:
- Không còn binary identical với RHEL từ năm 2023 (dù vẫn compatible ở mức ABI/API)
- Phụ thuộc tài chính vào CloudLinux Inc. — dù đã thành lập foundation độc lập
Rocky Linux
Ưu điểm:
- Bug-for-bug compatible, thích hợp cho môi trường cần chứng nhận RHEL-like nghiêm ngặt
- Cộng đồng rất lớn, nhiều tutorial chất lượng
Nhược điểm:
- Không có script chuyển đổi in-place đơn giản như AlmaLinux
- Release thường chậm hơn AlmaLinux 1–2 tuần
Quyết định của team mình
Sau khi test cả hai trên staging, team chọn AlmaLinux. Lý do gói gọn trong hai điểm: script almalinux-deploy.sh migrate in-place không cần rebuild server vật lý, và release cycle nhanh hơn rõ rệt. Với 8 con production server mà mỗi giờ downtime là tiền, cái script đó tiết kiệm cho mình ít nhất 2–3 ngày công so với cài lại từ đầu.
Hướng dẫn cài đặt AlmaLinux từ đầu
Chuẩn bị
Download ISO tại almalinux.org. AlmaLinux 9.x là version hiện tại (track theo RHEL 9). Tạo USB boot hoặc mount ISO lên VM là xong bước chuẩn bị.
Cài đặt cơ bản
Installer dùng Anaconda — quen tay với RHEL/CentOS là làm được ngay. Ba chỗ cần chú ý khi cấu hình:
- Software Selection: Chọn “Minimal Install” cho server, đừng cài GUI trên production
- Disk Partitioning: Server production nên tách
/var,/home,/tmpriêng — một partition đầy sẽ không kéo sập cả hệ thống - Network: Đặt hostname và IP tĩnh ngay lúc cài, đỡ phải sửa sau khi boot
Cấu hình sau cài đặt
Boot xong, đây là checklist mình chạy trên mọi server mới:
# 1. Update toàn bộ package
dnf update -y
# 2. Cài EPEL repository (nhiều package hữu ích)
dnf install -y epel-release
# 3. Cài các tool cơ bản
dnf install -y vim curl wget git htop net-tools bind-utils
# 4. Cấu hình timezone
timedatectl set-timezone Asia/Ho_Chi_Minh
timedatectl status
# 5. Tắt SELinux nếu gây conflict (không khuyến khích trên production)
# Hoặc set permissive để debug trước
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
# 6. Cấu hình firewall
systemctl enable --now firewalld
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
Migrate in-place từ CentOS 7/8 sang AlmaLinux
Phần này mình dùng nhiều nhất — không rebuild server, convert trực tiếp:
# Download script chuyển đổi chính thức
curl -O https://raw.githubusercontent.com/AlmaLinux/almalinux-deploy/master/almalinux-deploy.sh
# Kiểm tra script trước khi chạy (luôn làm vậy với script từ internet)
less almalinux-deploy.sh
# Chạy migrate (cần quyền root)
bash almalinux-deploy.sh
# Reboot
reboot
# Kiểm tra sau reboot
cat /etc/almalinux-release
# AlmaLinux release 8.x (Stone Smilodon)
# Verify RPM DB
rpm -qa | grep centos # Không còn package CentOS nào
Script swap toàn bộ CentOS package sang AlmaLinux equivalent. Mình test trên CentOS 7 chạy LAMP stack: quá trình mất khoảng 12 phút, không service nào break sau reboot. MySQL, Nginx, PHP-FPM đều khởi động lại bình thường.
Cấu hình bảo mật cơ bản
# Đổi SSH port (tránh brute force)
vim /etc/ssh/sshd_config
# Port 2222
# PermitRootLogin no
# PasswordAuthentication no # Nếu đã dùng key-based auth
# Mở port SSH mới trên firewall
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload
# Restart SSH
systemctl restart sshd
# Cài fail2ban chống brute force
dnf install -y fail2ban
systemctl enable --now fail2ban
Kiểm tra system sau cài đặt
# Xem version
cat /etc/os-release
# Kiểm tra kernel
uname -r
# Xem resource
free -h
df -h
cpu_info=$(lscpu | grep 'CPU(s):' | head -1)
echo "CPU: $cpu_info"
# Test network
curl -I https://google.com
Một vài lưu ý từ thực tế
Migrate xong 8 con server, mình rút ra mấy điểm đáng nhớ:
- Backup trước khi migrate: Script
almalinux-deploy.shkhá ổn định, nhưng đừng test thẳng trên production khi chưa có snapshot. Trên VMware hoặc Proxmox: snapshot trước, chạy sau. - EPEL repository: Nhiều package quen từ thời CentOS giờ nằm trong EPEL. Tìm không thấy package nào?
dnf install epel-releasetrước rồi thử lại. - SELinux: AlmaLinux mặc định bật SELinux enforcing. App chưa được test với SELinux? Bật permissive trước, đọc log
/var/log/audit/audit.log, sau đó mới chuyển sang enforce. - dnf thay cho yum: AlmaLinux 8+ dùng DNF.
yumvẫn là symlink sangdnf, nhưng nên quen tay vớidnfcho nhất quán.
Mình đã chạy AlmaLinux trên production được hơn 6 tháng, chưa gặp vấn đề gì đáng kể. Nếu bạn đang phân vân giữa AlmaLinux và Rocky Linux — câu hỏi then chốt là: stack của bạn có cần migrate in-place không? Nếu có, AlmaLinux dễ thở hơn nhiều nhờ cái script đó.
