Redis Cluster Production Setup คู่มือสมบูรณ์ 2026
Redis Cluster คืออะไร — ทำไมต้อง Cluster?
Redis เป็น in-memory data store ที่เร็วที่สุดในโลกแต่ถ้าใช้ Redis แบบ standalone node เดียวจะมีข้อจำกัดสำคัญคือ RAM ของเครื่องเดียวถ้าข้อมูลมีขนาด 64GB แต่ server มี RAM แค่ 32GB ก็ใช้ไม่ได้ Redis Cluster แก้ปัญหานี้โดยการกระจายข้อมูลไปหลาย node โดยอัตโนมัติทำให้รองรับข้อมูลขนาดใหญ่ได้
Redis Cluster ทำงานด้วยหลักการ Sharding คือแบ่งข้อมูลออกเป็น 16,384 hash slots แล้วกระจายไปยัง master nodes แต่ละ master มี replica สำรองข้อมูลถ้า master ตายก็ failover ไป replica อัตโนมัติทำให้ระบบมี High Availability
สถาปัตยกรรม Redis Cluster ในระดับ Production
สำหรับ production ที่ต้อง uptime 99.99% แนะนำให้ใช้อย่างน้อย 6 nodes คือ 3 masters + 3 replicas กระจายอยู่ใน 3 Availability Zones (AZ) แต่ละ AZ มี 1 master และ 1 replica ของ master ตัวอื่นเพื่อให้ AZ ใดตายไป cluster ยังทำงานได้
| Component | Minimum | แนะนำ Production | หน้าที่ |
|---|---|---|---|
| Master Nodes | 3 | 3-6 | เก็บข้อมูลจริงรับ read/write |
| Replica Nodes | 3 | 3-6 | สำรองข้อมูล failover อัตโนมัติ |
| RAM per Node | 4 GB | 16-64 GB | เก็บ dataset ใน memory |
| Network | 1 Gbps | 10 Gbps | Replication + client traffic |
| Disk | SSD 50 GB | NVMe SSD 200+ GB | RDB/AOF persistence |
ขั้นตอนติดตั้ง Redis Cluster บน Ubuntu 22.04
ขั้นตอนการติดตั้ง Redis Cluster สำหรับ production มีดังนี้:
Step 1: ติดตั้ง Redis Server
# ติดตั้ง Redis จาก official repository
sudo apt update && sudo apt upgrade -y
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt update && sudo apt install redis-server -y
redis-server --version
Step 2: ตั้งค่า redis.conf สำหรับ Cluster Mode
# /etc/redis/redis.conf — แก้ไขค่าเหล่านี้
port 6379
bind 0.0.0.0
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
appendfsync everysec
maxmemory 12gb
maxmemory-policy allkeys-lru
requirepass YourStrongPassword123!
masterauth YourStrongPassword123!
คำอธิบาย config สำคัญ:
- cluster-enabled yes — เปิดโหมด cluster
- cluster-node-timeout 5000 — ถ้า node ไม่ตอบภายใน 5 วินาทีถือว่า down
- appendonly yes — เปิด AOF persistence ป้องกันข้อมูลหายตอน restart
- maxmemory-policy allkeys-lru — ลบ key ที่ไม่ได้ใช้นานสุดเมื่อ RAM เต็ม
- requirepass + masterauth — ตั้ง password สำหรับ client และ replication
Step 3: สร้าง Cluster
# รัน Redis บนทุก node แล้วสร้าง cluster
redis-cli --cluster create \
node1:6379 node2:6379 node3:6379 \
node4:6379 node5:6379 node6:6379 \
--cluster-replicas 1 -a YourStrongPassword123!
# ตรวจสอบสถานะ cluster
redis-cli -a YourStrongPassword123! cluster info
redis-cli -a YourStrongPassword123! cluster nodes
Monitoring และ Alerting สำหรับ Redis Cluster
Production Redis Cluster ต้องมี monitoring ที่ดีค่าที่ต้องเฝ้าดู:
- used_memory vs maxmemory — ถ้าเกิน 80% ต้อง scale หรือ evict
- connected_clients — จำนวน connection ถ้าเพิ่มขึ้นผิดปกติอาจมี connection leak
- instantaneous_ops_per_sec — throughput ของ commands ต่อวินาที
- keyspace_hits vs keyspace_misses — cache hit ratio ควรอยู่เหนือ 95%
- cluster_state — ต้องเป็น ok เสมอถ้าเป็น fail ต้องรีบแก้ทันที
- repl_backlog_active — ดูว่า replication ทำงานปกติหรือไม่
แนะนำใช้ Prometheus + Redis Exporter + Grafana สำหรับ monitoring dashboard ที่สมบูรณ์หรือใช้ redis-cli --stat สำหรับ quick check
Redis Cluster Best Practices สำหรับ Production
- อย่าใช้ KEYS command — ใช้ SCAN แทนเพราะ KEYS บล็อก Redis ทั้ง node
- ใช้ Pipeline — ส่งหลาย commands พร้อมกันลด round-trip time
- ตั้ง TTL ทุก key — ป้องกัน memory เต็มจาก stale data
- ใช้ Hash Slots อย่างฉลาด — ใช้ hash tag {user:1001} เพื่อให้ related keys อยู่ node เดียวกัน
- Backup RDB ทุกวัน — เก็บไว้ S3 หรือ off-site storage อย่างน้อย 7 วัน
- ทดสอบ Failover เป็นประจำ — สั่ง
redis-cli debug sleep 30แล้วดูว่า failover ทำงานจริงหรือไม่ - แยก network สำหรับ cluster bus — port 16379 ควรอยู่บน private network ไม่เปิดให้ public
- ใช้ Connection Pool — ไม่ต้องสร้าง connection ใหม่ทุกครั้งลด overhead
เปรียบเทียบ Redis Cluster vs Redis Sentinel vs ElastiCache
| Feature | Redis Cluster | Redis Sentinel | AWS ElastiCache |
|---|---|---|---|
| Sharding | ✅ อัตโนมัติ | ❌ ไม่รองรับ | ✅ อัตโนมัติ |
| HA/Failover | ✅ อัตโนมัติ | ✅ อัตโนมัติ | ✅ อัตโนมัติ |
| จัดการเอง | ต้อง setup เอง | ต้อง setup เอง | AWS จัดการให้ |
| ค่าใช้จ่าย | ถูก (self-hosted) | ถูก (self-hosted) | แพง (~$500+/mo) |
| เหมาะกับ | Data ขนาดใหญ่ | Data ขนาดเล็ก-กลาง | ไม่อยากดูแลเอง |
Q: Redis Cluster ต้องใช้กี่ node ขั้นต่ำ?
ขั้นต่ำ 6 nodes สำหรับ production คือ 3 masters + 3 replicas ถ้าใช้แค่ 3 nodes (3 masters ไม่มี replica) เมื่อ master ตาย 1 ตัว cluster จะ down ทั้งระบบไม่แนะนำสำหรับ production