Những gì bạn cần biết về monitoring elasticsearch

 Elasticsearch chắc hẳn là nhiều người đã biết, nhưng để bài viết trơn tru, cứ phải có cái introduction cho nó dài. Elasticsearch là cơ sở dữ liệu (database) (từng) dành để lưu trữ text (document) là chính, dựa trên một engine nổi tiếng là lucene. Nói là "từng" vì hiện tại elasticsearch được dùng cho cả những ứng dụng thời thượng như là time series data (lưu dữ liệu là các "point" thay vì document) chứ không chỉ dừng lại cho text nữa.

Trong Elasticsearch thì dữ liệu được biểu diễn dưới dạng JSON và có thể dễ dàng truy vấn thông qua REST API cũng như native API (thông qua thư viện). Điểm thú vị của elasticsearch nằm ở chỗ Distributed: Dữ liệu của elasticsearch được phân tán đều trên các node (primary shard / replica shard) và được tự động phân chia lại khi thêm/xoá node đã có. Việc này khiến cho Elasticsearch rất dễ dàng để scale up/down.

Về cơ bản thì sẽ có 2 loại node chính trong ES:

Master node: Node này có nhiệm vụ đứng mũi chịu sào, chịu trách nhiệm điều hành anh em làm việc (coordinate), cũng như nhận một số trọng trách quan trọng như thêm, xoá index... Khi master node chết thì anh em còn lại sẽ họp lại và tìm ra thằng mới dựa trên một thuật toán gọi là Paxos.

Data node: Thằng này là culi, chuyên bốc vác dữ liệu, ai bảo gì làm nấy, có trách nhiệm lưu trữ là chính.

Tuy nhiên distributed cũng khiến cho việc vận hành trở nên painful hơn, nhiều khi do bug của việc cooperate giữa các node, hay là do các hoàn cảnh không dự đoán trước được như server gặp mưa, server gặp bão, cá mập cắn cáp... Ngoài ra một số design của elasticsearch (hay cũng như nhiều database khác) khiến cho nó có thể chết không dự đoán trước được do hết memory hay gặp phải query nặng hơn nó có thể chịu được.

Để vận hành đỡ painful thì việc quan trọng nhất chính là monitoring, tức là nắm được elasticsearch cluster của bạn đang hoạt động thế nào mà không cần phải nhìn log hay là các kiến thức cao siêu mà không phải ai cũng biết. Và cuối cùng chúng ta cũng đén được phần chính của bài viết: chúng ta cần monitoring "cái gì" để biết về sức khoẻ của elasticsearch cluster?

Ntech Developers

Programs must be written for people to read, and only incidentally for machines to execute.

Post a Comment

Previous Post Next Post