Tại sao phải là Redis trên CentOS Stream 9?
Khi thực hiện migrate các hệ thống từ CentOS 7 (đã EOL) lên CentOS Stream 9, mình nhận thấy một sai lầm phổ biến. Nhiều anh em vẫn cài Redis theo kiểu “mì ăn liền”: cài xong, mở port là chạy. Cách này ổn khi làm Lab. Tuy nhiên, trên Production với môi trường khắt khe như RHEL/CentOS, bạn sẽ vấp ngay vào hàng rào bảo mật của SELinux và Firewalld.
Redis (Remote Dictionary Server) là lựa chọn số một cho cache server nhờ độ trễ cực thấp, thường dưới 1ms. Để nó chạy mượt mà trên CentOS Stream 9, chúng ta cần xử lý bài bản hơn. Mục tiêu không chỉ là “chạy được”, mà phải là “chạy an toàn”.
So sánh các phương pháp triển khai
Trước khi gõ lệnh, hãy nhìn qua 3 hướng tiếp cận mình đã rút ra từ nhiều dự án thực tế:
1. Cài đặt từ Source Code
- Ưu điểm: Có ngay Redis 7.2+ mới nhất, tùy chỉnh sâu thông số biên dịch.
- Nhược điểm: Cực hình khi quản lý update và không tự động tích hợp systemd.
2. Triển khai qua Docker
- Ưu điểm: Cô lập môi trường tốt, triển khai trong “một nốt nhạc”.
- Nhược điểm: Network overhead khoảng 5-10% tùy cấu hình. Việc quản lý Redis Cluster qua Docker cũng phức tạp hơn.
3. Cài đặt từ AppStream (Khuyên dùng)
- Ưu điểm: Cực kỳ ổn định, được Red Hat tối ưu hóa. Dễ dàng cập nhật qua
dnfvà tích hợp sẵn SELinux policy. - Nhược điểm: Phiên bản thường chậm hơn bản gốc khoảng vài tháng.
Lựa chọn của mình: Ưu tiên AppStream cho các hệ thống cần sự ổn định lâu dài. Nó giúp việc bảo trì (maintenance) sau này nhẹ nhàng hơn rất nhiều.
Các bước triển khai Redis chuẩn Production
Bước 1: Cài đặt từ Repo chính thống
Trên CentOS Stream 9, Redis có sẵn trong repo mặc định. Bạn chỉ cần thực hiện:
sudo dnf makecache
sudo dnf install redis -y
Sau khi cài xong, hãy kiểm tra phiên bản. Thông thường bạn sẽ nhận được Redis 6.2 hoặc 7.0 tùy thời điểm update repo:
redis-server --version
Bước 2: Cấu hình tối ưu và bảo mật
Mở file cấu hình tại /etc/redis/redis.conf. Đừng để mặc định, hãy thay đổi các thông số sau:
sudo vi /etc/redis/redis.conf
- Bảo mật truy cập: Nếu cần gọi Redis từ App Server khác, hãy đổi
bind 127.0.0.1thành IP Private của server. Tuyệt đối không để trống nếu không có Firewall. - Đặt Password: Tìm dòng
requirepass. Hãy đặt một mật khẩu dài trên 32 ký tự. Redis có khả năng xử lý 150.000 request/giây, nên pass ngắn rất dễ bị brute-force. - Giới hạn RAM: Tránh việc Redis ăn sạch tài nguyên gây treo máy (OOM).
maxmemory 2gb # Tùy vào RAM server bạn có maxmemory-policy allkeys-lru
Bước 3: “Thuần hóa” SELinux
Đừng gõ setenforce 0. Tắt SELinux là cách làm thiếu trách nhiệm với bảo mật hệ thống. Nếu bạn đổi cổng mặc định (ví dụ sang 6380), hãy báo cho SELinux biết:
# Cài tool quản lý nếu chưa có
sudo dnf install policycoreutils-python-utils -y
sudo semanage port -a -t redis_port_t -p tcp 6380
Nếu bạn thay đổi đường dẫn lưu file dump (RDB), hãy cập nhật context cho thư mục mới:
sudo chcon -Rt svirt_sandbox_file_t /var/lib/redis_custom
Bước 4: Thiết lập Firewalld lớp lang
Mặc định CentOS Stream 9 chặn mọi kết nối vào. Đừng mở port khơi khơi cho cả thế giới. Chỉ nên cho phép IP của Application Server truy cập bằng rich-rules:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.50" port protocol="tcp" port="6379" accept'
sudo firewall-cmd --reload
Cách này đảm bảo dù lộ password, hacker cũng không thể kết nối tới port Redis từ bên ngoài.
Vấn đề thực tế: Xử lý lỗi “Transparent Huge Pages” và Overcommit
Khi check log Redis (journalctl -u redis), bạn sẽ thấy cảnh báo về THP. Tính năng này của kernel Linux giúp quản lý bộ nhớ lớn nhưng lại gây lag (latency spikes) rất nặng cho Redis.
Hãy tạo một service để tắt THP triệt để khi khởi động máy:
sudo vi /etc/systemd/system/disable-thp.service
Nội dung file:
[Unit]
Description=Disable Transparent Huge Pages (THP)
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
[Install]
WantedBy=multi-user.target
Đồng thời, hãy thêm vm.overcommit_memory = 1 vào /etc/sysctl.conf để Redis có thể fork tiến trình lưu dữ liệu xuống đĩa mà không bị lỗi thiếu bộ nhớ ảo.
Kích hoạt và kiểm tra
Giờ là lúc tận hưởng thành quả:
sudo systemctl enable --now redis disable-thp.service
sudo redis-cli -a Your_Password ping
Kết quả trả về PONG nghĩa là hệ thống đã sẵn sàng phục vụ hàng chục nghìn request mỗi giây.
Kết luận thực chiến
Triển khai Redis trên CentOS Stream 9 không khó. Cái khó là làm sao để nó tồn tại an toàn trong môi trường doanh nghiệp. Việc tuân thủ SELinux và Firewalld có thể tốn thêm 10 phút cấu hình, nhưng nó sẽ bảo vệ dữ liệu của bạn trước những rủi ro không đáng có. Chúc anh em tối ưu hệ thống thành công!
