Cộng đồng chia sẻ tri thức Lib24.vn

Kinh nghiệm triển khai Redis trên môi trường Production

Gửi bởi: Khoa CNTT - HCEM 28 tháng 10 2020 lúc 21:36:03


Hôm nay mình gặp một sự cố khá nguy hiểm với Redis trên môi trường Production. Số là một cụm web khá quan trọng với công ty vừa mới được dựng, chạy có sử dụng Redis. Sau khi cài đặt hết mọi thứ, từ 3 con Redis replication (1 master, 2 slave), cấu hình Sentinel để HA cho con master, LB 3 con qua Haproxy ngon nghẻ, mình tự tin cho nó chạy thật. Nhưng trong vòng 3 hôm đã có 2 lần con master chết. Check log thấy như sau:

2150:M 28 Mar 12:44:43.083 # Can't save in background: fork: Cannot allocate memory

Nguyên nhân: chưa set overcommit_memory.

Khi ghi dữ liệu từ RAM xuống disk, Redis sử dụng các tiến trình con. Theo mặc định, tiến trình con này cần memory tương đương tiến trình mẹ, do nó có chứa dữ liệu tương đương. Điều này dẫn tới OS không đủ RAM cho việc ghi DB xuống Disk này > lỗi.

Tuy nhiên Linux có hỗ trợ Copy-on-write, nghĩa là chỉ cần cấp memory cho những gì tiến trình con khác với tiến trình mẹ, phần giống nhau thì dùng chung memory cho tiết kiệm. Để bật nó thì cần set overcommit_memory = 1

Việc cần làm sau khi setup REDIS

  1. Tối ưu sysctl

Sửa file /etc/sysctl.conf và thêm dòng

vm.overcommit_memory=1
net.core.somaxconn=65535

Load lại sysctl:

sudo sysctl --system

2. Tuning the kernel memory

Chạy lệnh dưới quyền root:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

3. Tối ưu Redis (bonus)

Với 2 bước trên bắt buộc phải làm khi chạy Redis, các tối ưu sau thì có thể tùy mục đích

Set Max memory redis có thể sử dụng: sửa file config Redis.conf

# memory size in bytes
maxmemory 1288490188

Hoặc để dưới dạng GB cho dễ nhìn:

maxmemory 10G

Set Max client: Mặc định là 10.000 rồi nhưng nếu muốn thêm thì tìm dòng

# Once the limit is reached Redis will close all the new connections sending
# an error 'max number of clients reached'.
maxclients 10000

Check memory used:

redis-cli info memory

Monitor:

redis-cli monitor

Được cập nhật: 15 giờ trước (3:58:13) | Lượt xem: 909