Skip to main content

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
  1. Đ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
  2. Kiểm tra và cập nhật các đường dẫn:

    • Thư mục data
    • File log
    • File pid
  3. 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
  1. File cấu hình (redis.conf):

    • Owner: redis:redis
    • Permission: 640 (rw-r-----)
    • Chỉ user redis và root có thể đọc/ghi
  2. Thư mục data (/var/lib/redis):

    • Owner: redis:redis
    • Permission: 750 (rwxr-x---)
    • Chỉ user redis có quyền ghi
  3. Thư mục log (/var/log/redis):

    • Owner: redis:redis
    • Permission: 750 (rwxr-x---)
    • Đảm bảo Redis có thể ghi log
  4. 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:

  1. Redis có thể khởi động bình thường
  2. Có thể ghi log
  3. Có thể tạo file pid
  4. 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

  1. Thông báo cho người dùng về thời gian downtime
  2. Backup dữ liệu trên cả hai server
  3. 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ânGiải Pháp
Replication lỗiNetwork/FirewallKiểm tra kết nối mạng và firewall rules
Memory không đủDataset lớnTăng RAM hoặc điều chỉnh maxmemory
PermissionsFile ownershipKiể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

Tài Liệu Tham Khảo