Di Chuyển Redis Server
1. Chuẩn Bị
1.1 Yêu Cầu
- Quyền root/sudo trên cả hai server
- Redis đã được cài đặt trên server mới
- Đủ dung lượng ổ đĩa trên server mới
- Kết nối mạng giữa hai server
1.2 Thông Tin Server
# Server cũ (source)
SOURCE_HOST=192.168.1.10
SOURCE_PORT=6379
SOURCE_PASS=your_redis_password
# Server mới (destination)
DEST_HOST=192.168.1.20
DEST_PORT=6379
DEST_PASS=new_redis_password
2. Phương Pháp Di Chuyển
2.1 Sử Dụng Redis Replication
# 1. Trên server mới, chỉnh sửa redis.conf
sudo nano /etc/redis/redis.conf
# Thêm cấu hình replication
replicaof $SOURCE_HOST $SOURCE_PORT
masterauth $SOURCE_PASS
# 2. Khởi động lại Redis trên server mới
sudo systemctl restart redis
# 3. Kiểm tra trạng thái replication
redis-cli -h $DEST_HOST -p $DEST_PORT -a $DEST_PASS info replication
2.2 Sử Dụng Redis Backup/Restore
a. Backup trên server cũ
# Tạo backup từ server cũ
redis-cli -h $SOURCE_HOST -p $SOURCE_PORT -a $SOURCE_PASS --rdb /tmp/redis_backup.rdb
# Tạo backup từ local
redis-cli -a $SOURCE_PASS --rdb /tmp/redis_backup.rdb
# Chuyển file backup sang server mới
scp /tmp/redis_backup.rdb user@$DEST_HOST:/tmp/
Lưu ý
-a $SOURCE_PASS: Chỉ định mật khẩu Redis (nếu Redis được cấu hình với mật khẩu). Nếu không có mật khẩu, bạn có thể bỏ phần này.
--rdb /tmp/redis_backup.rdb: Tạo một file RDB (Redis Database File) tại đường dẫn /tmp/redis_backup.rdb.
b. Restore trên server mới
# Dừng Redis
sudo systemctl stop redis
# Copy file backup vào thư mục data
sudo cp /tmp/redis_backup.rdb /var/lib/redis/dump.rdb
sudo chown redis:redis /var/lib/redis/dump.rdb
# Khởi động lại Redis
sudo systemctl start redis
2.3 Sử Dụng Redis DUMP/RESTORE Commands
# Script di chuyển dữ liệu
#!/bin/bash
# Kết nối tới Redis cũ và lấy tất cả keys
keys=$(redis-cli -h $SOURCE_HOST -p $SOURCE_PORT -a $SOURCE_PASS --scan)
# Di chuyển từng key
for key in $keys; do
# Dump từ source
dump_value=$(redis-cli -h $SOURCE_HOST -p $SOURCE_PORT -a $SOURCE_PASS --raw DUMP "$key")
# Restore sang destination
redis-cli -h $DEST_HOST -p $DEST_PORT -a $DEST_PASS -x RESTORE "$key" 0 <<< "$dump_value"
done
2.4 Di Chuyển Cấu Hình Redis
a. Sao Lưu Cấu Hình Từ Server Cũ
# Backup file cấu hình
sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.bak
# Tạo thư mục lưu trữ cấu hình
mkdir -p ~/redis_migration
cd ~/redis_migration
# Sao lưu các file cấu hình quan trọng
sudo cp /etc/redis/redis.conf ./
sudo cp /etc/systemd/system/redis.service ./
sudo cp -r /etc/redis/redis.conf.d/ ./ # nếu có
# Tạo file chứa các thông số tuning hiện tại
redis-cli INFO ALL > redis_info.txt
b. Chuyển Cấu Hình Sang Server Mới
# Tạo archive file cấu hình
tar -czf redis_config.tar.gz *
# Chuyển file sang server mới
scp redis_config.tar.gz user@$DEST_HOST:/tmp/
# Trên server mới
cd /tmp
tar xzf redis_config.tar.gz
# Backup cấu hình hiện tại trên server mới
sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.original
# Copy cấu hình từ server cũ
sudo cp redis.conf /etc/redis/
sudo cp redis.service /etc/systemd/system/
c. Điều Chỉnh Cấu Hình Cho Server Mới
# Chỉnh sửa redis.conf
sudo nano /etc/redis/redis.conf
# Cập nhật các thông số cần thay đổi
bind 127.0.0.1 # Địa chỉ IP mới
port 6379
dir /var/lib/redis
pidfile /var/run/redis/redis-server.pid
logfile /var/log/redis/redis-server.log
# Cập nhật các thông số tuning
maxmemory 2gb
maxmemory-policy allkeys-lru
d. Áp Dụng Cấu Hình Mới
# Reload systemd
sudo systemctl daemon-reload
# Khởi động lại Redis với cấu hình mới
sudo systemctl restart redis
# Kiểm tra status
sudo systemctl status redis
# Xác nhận cấu hình đã được áp dụng
redis-cli INFO | grep -E "maxmemory|used_memory|redis_version"
Lưu ý quan trọng
-
Điều chỉnh các thông số phù hợp với phần cứng của server mới:
- maxmemory
- maxclients
- timeout
- tcp-keepalive
-
Kiểm tra và cập nhật các đường dẫn:
- Thư mục data
- File log
- File pid
-
Xem xét các cấu hình bảo mật:
- Mật khẩu authentication
- Bind address
- Protected mode
e. Kiểm Tra Cấu Hình
# Kiểm tra syntax của file cấu hình
redis-server /etc/redis/redis.conf --test-memory 1024
# Kiểm tra các thông số quan trọng
redis-cli CONFIG GET maxmemory
redis-cli CONFIG GET maxmemory-policy
redis-cli CONFIG GET bind
redis-cli CONFIG GET port
# Kiểm tra permissions
ls -l /etc/redis/redis.conf
ls -l /var/lib/redis
ls -l /var/log/redis
f. Phân Quyền Lại File và Thư Mục
# Phân quyền cho các file cấu hình
sudo chown redis:redis /etc/redis/redis.conf
sudo chmod 640 /etc/redis/redis.conf
# Phân quyền cho thư mục Redis
sudo chown -R redis:redis /var/lib/redis
sudo chmod 750 /var/lib/redis
# Phân quyền cho thư mục log
sudo mkdir -p /var/log/redis
sudo chown -R redis:redis /var/log/redis
sudo chmod 750 /var/log/redis
# Phân quyền cho thư mục pid
sudo mkdir -p /var/run/redis
sudo chown redis:redis /var/run/redis
sudo chmod 755 /var/run/redis
# Phân quyền cho systemd service file
sudo chmod 644 /etc/systemd/system/redis.service
Lưu ý về phân quyền
-
File cấu hình (
redis.conf
):- Owner: redis:redis
- Permission: 640 (rw-r-----)
- Chỉ user redis và root có thể đọc/ghi
-
Thư mục data (
/var/lib/redis
):- Owner: redis:redis
- Permission: 750 (rwxr-x---)
- Chỉ user redis có quyền ghi
-
Thư mục log (
/var/log/redis
):- Owner: redis:redis
- Permission: 750 (rwxr-x---)
- Đảm bảo Redis có thể ghi log
-
File service:
- Permission: 644 (rw-r--r--)
- Có thể đọc bởi tất cả user
g. Kiểm Tra Phân Quyền
# Kiểm tra quyền các file và thư mục
echo "Kiểm tra file cấu hình:"
ls -l /etc/redis/redis.conf
echo -e "\nKiểm tra thư mục data:"
ls -ld /var/lib/redis
ls -l /var/lib/redis/
echo -e "\nKiểm tra thư mục log:"
ls -ld /var/log/redis
ls -l /var/log/redis/
echo -e "\nKiểm tra thư mục pid:"
ls -ld /var/run/redis
echo -e "\nKiểm tra service file:"
ls -l /etc/systemd/system/redis.service
# Kiểm tra user và group của process Redis
ps aux | grep redis-server
tip
Sau khi phân quyền, nên kiểm tra:
- Redis có thể khởi động bình thường
- Có thể ghi log
- Có thể tạo file pid
- Có thể đọc/ghi data
3. Kiểm Tra Sau Di Chuyển
3.1 Xác Nhận Dữ Liệu
# Kiểm tra số lượng keys
redis-cli -h $SOURCE_HOST -p $SOURCE_PORT -a $SOURCE_PASS dbsize
redis-cli -h $DEST_HOST -p $DEST_PORT -a $DEST_PASS dbsize
# Kiểm tra một số key mẫu
redis-cli -h $DEST_HOST -p $DEST_PORT -a $DEST_PASS --scan | head -n 5
3.2 Kiểm Tra Hiệu Suất
# Kiểm tra latency
redis-cli -h $DEST_HOST -p $DEST_PORT -a $DEST_PASS --latency
# Kiểm tra memory usage
redis-cli -h $DEST_HOST -p $DEST_PORT -a $DEST_PASS info memory
4. Chuyển Đổi Production
4.1 Chuẩn Bị Chuyển Đổi
- Thông báo cho người dùng về thời gian downtime
- Backup dữ liệu trên cả hai server
- Cập nhật DNS/Load balancer (nếu có)
4.2 Quy Trình Chuyển Đổi
# 1. Dừng ứng dụng hoặc chuyển sang chế độ maintenance
# 2. Đảm bảo dữ liệu đã được sync hoàn toàn
redis-cli -h $DEST_HOST -p $DEST_PORT -a $DEST_PASS info replication
# 3. Chuyển traffic sang server mới
# (Cập nhật cấu hình ứng dụng, DNS, etc.)
# 4. Kiểm tra hoạt động trên server mới
# 5. Khởi động lại ứng dụng
5. Xử Lý Sự Cố
5.1 Các Vấn Đề Thường Gặp
Vấn Đề | Nguyên Nhân | Giải Pháp |
---|---|---|
Replication lỗi | Network/Firewall | Kiểm tra kết nối mạng và firewall rules |
Memory không đủ | Dataset lớn | Tăng RAM hoặc điều chỉnh maxmemory |
Permissions | File ownership | Kiểm tra quyền của user redis |
5.2 Rollback Plan
# 1. Dừng ứng dụng
# 2. Chuyển traffic về server cũ
# 3. Khôi phục cấu hình ứng dụng
# 4. Kiểm tra hoạt động
# 5. Khởi động lại ứng dụng