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

0
627

Xem cả loạt bài về Redis tại đây: https://hoctapit.com/category/linux/redis/

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:

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

Load lại sysctl:

2. Tuning the kernel memory

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

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

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

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

Check memory used:

Monitor:

 

 

LEAVE A REPLY

Please enter your comment!
Please enter your name here