Redis Sentinel là cái gì?

0
57
Rate this post

Redis Sentinel

Hôm nay mình muốn giới thiệu đến các bạn một ứng dụng khá hay, thường được cài đặt cùng với cụm Redis Replication để tăng khả năng sẵn sàng cao và khả năng chịu lỗi cho Redis. Nếu bạn đã từng thử setup một cụm Redis Replication tiêu chuẩn với một node Master và hai node Slave để sao lưu dữ liệu, chắc hẳn bạn không còn xa lạ gì với Redis Sentinel. Sentinel có thể được cài đặt và cấu hình một cách dễ dàng, và cách hoạt động của nó cũng rất dễ hiểu. Hãy cùng tìm hiểu thêm về nó.

Redis Sentinel là gì?

Redis Sentinel được sử dụng để giám sát các node trong cụm Redis. Ví dụ như trong hình trên, các node có service redis-sentinel sẽ giám sát các node Master và Slave trong cụm Replication, sau đó sẽ ghi lại log các hoạt động như restart, stop, start của service redis-server.

Nghe có vẻ hay đấy, vậy ghi lại để làm gì? Việc ghi lại log này sẽ phục vụ cho việc Fail-over (Chuyển đổi dự phòng). Trước đây, nếu bạn chỉ cài đặt lên cụm replication, khi node Master gặp vấn đề (down), bạn phải login vào server và khắc phục thủ công bằng cách chọn một con slave bất kỳ để thay thế làm Master. Tuy nhiên, khi sử dụng Sentinel, service này sẽ tự động hóa việc này.

Sau một khoảng thời gian nhất định, khi Sentinel không thể kết nối với Master node bằng cách gửi command PING đi mà không nhận được PONG, nó sẽ đánh dấu Node này đã bị down. Tiếp theo, để đảm bảo tính chính xác, node này sẽ hỏi các node Sentinel khác xem “Ê, mày có thấy thằng Master này down không?” . Nếu một số node nhất định cùng đồng ý rằng thằng Master này down (số node cần được xác định bằng thông số quorum trong config, với công thức số node sentinel/2 + 1 tương đương hơn một nửa) thì các node Sentinel sẽ cùng nhau bầu ra một Master mới. Còn nếu số node không đủ như yêu cầu thì quá trình bầu ra Master mới sẽ bị hoãn.

Oke giờ chúng ta sẽ cùng tìm ra một node Slave phù hợp để biến nó thành Master. Vậy trong các node Slave còn lại, node nào sẽ được chọn làm Master? Dựa trên các tiêu chí nào? Khá đơn giản, việc chọn ra master tiếp theo dựa trên thông số slave-priority được cấu hình trong file config /etc/redis/redis.conf, nếu thông số không được cấu hình thì Sentinel sẽ tự gen ra ID bất kỳ và node nào có ID thấp hơn sẽ được chọn làm Master.

Cài đặt

Để cài đặt Redis Sentinel trên hệ điều hành Ubuntu và Debian, bạn có thể thực hiện lệnh sau:

apt install redis-sentinel -y

Nếu bạn đang sử dụng CentOS, hãy sử dụng lệnh sau:

yum install redis-sentinel -y

Cấu hình

Cấu hình Redis Sentinel khá đơn giản. Dưới đây là cấu hình mẫu của mình:

daemonize yes
pidfile "/var/run/redis/redis-sentinel.pid"
logfile "/var/log/redis/redis-sentinel.log"
bind 0.0.0.0
port 26379
dir "/var/lib/redis"
sentinel monitor mymaster 10.5.9.198 6379 2
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 10000
sentinel auth-pass mymaster password
maxclients 4064
sentinel current-epoch 1

Giải thích các thông số chính:

  • bind: Địa chỉ mà bạn muốn Sentinel lắng nghe (ở đây 0.0.0.0 tức là bạn có thể truy cập từ mọi IP)
  • port: Port mà Sentinel hoạt động
  • sentinel monitor: Khai báo địa chỉ node master cần giám sát (các thông số lần lượt là <tên cụm> )
  • sentinel down-after-milliseconds: Khai báo thời gian mà Sentinel sẽ xác định node Master đã down (ở đây sau khi 3s không kết nối được Master thì Sentinel sẽ cho rằng node này đã down).
  • sentinel failover-timeout: Thời gian sẽ hủy quá trình fail-over nếu chưa thành công.
  • sentinel auth-pass: Nếu Node Master bạn có password thì thêm config này để có thể truy cập được, không có pass thì bỏ dòng này.

Sau khi đã cấu hình xong, Sentinel sẽ kết nối đến Master Node để lấy các thông tin về Slave Node và Sentinel Node để giám sát. Các node Sentinel cũng sẽ giám sát chéo nhau.

Thử stop node Master và sử dụng câu lệnh tail -f /var/log/redis/redis-sentinel.log trên các node Sentinel để xem quá trình fail-over.

  1. Đầu tiên, Sentinel xác định node Master đã down nên khởi tạo vote-for-leader.
  2. Xác định số node Sentinel cần thiết để bầu ra Master (3 > 2 – thỏa mãn).
  3. Cập nhật lại cấu hình và thay đổi Master sang node 10.5.9.126.
  4. Cập nhật các Slave mới cho node Master và Master cho các node Slave. Kết thúc quá trình fail-over.

Ngoài ra, Redis Sentinel còn có khả năng giám sát nhiều master cùng lúc bằng cách sử dụng command sentinel monitor <name> <MASTER_IP> <MASTER_PORT> <quorum>.

Redis Sentinel là một công cụ giúp đơn giản và hiệu quả trong việc thực hiện Fail-over. Kết hợp thêm HAProxy + KeepAlived theo hướng dẫn trong bài trước, bạn có thể tạo ra một cụm Redis có độ bền và khả năng chịu lỗi cao.

Chúc các bạn thử nghiệm thành công!


(Edited by dnulib.edu.vn)
Mong rằng bài viết đã giúp bạn hiểu rõ hơn về Redis Sentinel và ứng dụng của nó trong việc giám sát và bảo đảm sẵn sàng cao cho cụm Redis. Nếu bạn đang cần triển khai ứng dụng như NodeJS, Python, Golang, Java hoặc sử dụng các Database và Message Queue như MongoDB, MySQL, Redis, Kafka, hãy tham khảo sử dụng Bizfly Cloud App Engine của chúng tôi. Đây là một sản phẩm Serverless đơn giản hóa quá trình triển khai ứng dụng cho các bạn Devs. Hiện tại, sản phẩm đang miễn phí sử dụng, hy vọng bạn sẽ ủng hộ. Nếu có bất kỳ ý kiến đóng góp nào, xin vui lòng nhắn tin cho chúng tôi qua Telegram @HoangViet12. Chúc bạn có một ngày tuyệt vời!

Đọc thêm tại: Dnulib