Tôi sẽ cố gắng giải thích bằng một ví dụ thực tế vì câu trả lời và câu trả lời bạn nhận được dường như không giúp ích gì cho bạn.
Khi bạn tải xuống elaticsearch và khởi động nó, bạn tạo một nút elaticsearch cố gắng tham gia một cụm hiện có nếu có hoặc tạo một nút mới. Giả sử bạn đã tạo cụm mới của riêng mình với một nút duy nhất, cụm mà bạn mới bắt đầu. Chúng tôi không có dữ liệu, do đó chúng tôi cần tạo một chỉ mục.
Khi bạn tạo một chỉ mục (một chỉ mục cũng được tạo tự động khi bạn lập chỉ mục cho tài liệu đầu tiên), bạn có thể xác định bao nhiêu phân đoạn sẽ được tạo thành. Nếu bạn không chỉ định một số, nó sẽ có số lượng phân đoạn mặc định: 5 nguyên tắc. Nó có nghĩa là gì?
Điều đó có nghĩa là elaticsearch sẽ tạo ra 5 phân đoạn chính sẽ chứa dữ liệu của bạn:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4 | | 5 |
|____| |____| |____| |____| |____|
Mỗi khi bạn lập chỉ mục cho một tài liệu, elaticsearch sẽ quyết định phân đoạn chính nào được cho là giữ tài liệu đó và sẽ lập chỉ mục ở đó. Các phân đoạn chính không phải là bản sao của dữ liệu, chúng là dữ liệu! Có nhiều phân đoạn giúp tận dụng xử lý song song trên một máy, nhưng toàn bộ vấn đề là nếu chúng ta bắt đầu một trường hợp tìm kiếm khác trên cùng một cụm, các phân đoạn sẽ được phân phối theo cách đều trên cụm.
Nút 1 sau đó sẽ giữ ví dụ chỉ có ba phân đoạn:
____ ____ ____
| 1 | | 2 | | 3 |
|____| |____| |____|
Vì hai phân đoạn còn lại đã được chuyển đến nút mới bắt đầu:
____ ____
| 4 | | 5 |
|____| |____|
Lý do tại sao điều này xảy ra? Bởi vì elaticsearch là một công cụ tìm kiếm phân tán và theo cách này bạn có thể sử dụng nhiều nút / máy để quản lý lượng lớn dữ liệu.
Mỗi chỉ số tìm kiếm được bao gồm ít nhất một phân đoạn chính vì đó là nơi lưu trữ dữ liệu. Tuy nhiên, mọi phân đoạn đều có chi phí, do đó, nếu bạn có một nút duy nhất và không có sự tăng trưởng có thể thấy trước, chỉ cần gắn với một phân đoạn chính duy nhất.
Một loại shard khác là một bản sao. Mặc định là 1, có nghĩa là mọi phân đoạn chính sẽ được sao chép sang phân đoạn khác sẽ chứa cùng một dữ liệu. Bản sao được sử dụng để tăng hiệu suất tìm kiếm và cho sự cố. Một phân đoạn bản sao sẽ không bao giờ được phân bổ trên cùng một nút có chính là liên quan (nó sẽ giống như đặt một bản sao lưu trên cùng một đĩa với dữ liệu gốc).
Quay lại ví dụ của chúng tôi, với 1 bản sao, chúng tôi sẽ có toàn bộ chỉ mục trên mỗi nút, vì 2 phân đoạn sao chép sẽ được phân bổ trên nút đầu tiên và chúng sẽ chứa chính xác dữ liệu giống như các phân đoạn chính trên nút thứ hai:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4R | | 5R |
|____| |____| |____| |____| |____|
Tương tự cho nút thứ hai, sẽ chứa một bản sao của các phân đoạn chính trên nút đầu tiên:
____ ____ ____ ____ ____
| 1R | | 2R | | 3R | | 4 | | 5 |
|____| |____| |____| |____| |____|
Với một thiết lập như thế này, nếu một nút bị hỏng, bạn vẫn có toàn bộ chỉ mục. Các bản sao sẽ tự động trở thành nguyên tắc và cụm sẽ hoạt động bình thường mặc dù lỗi nút, như sau:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4 | | 5 |
|____| |____| |____| |____| |____|
Vì bạn có "number_of_replicas":1
, các bản sao không thể được chỉ định nữa vì chúng không bao giờ được phân bổ trên cùng một nút nơi chính của chúng. Đó là lý do tại sao bạn sẽ có 5 phân đoạn chưa được gán, các bản sao và trạng thái cụm sẽ được YELLOW
thay thế GREEN
. Không mất dữ liệu, nhưng có thể tốt hơn vì một số phân đoạn không thể được chỉ định.
Ngay sau khi nút còn lại được sao lưu, nó sẽ tham gia lại cụm và các bản sao sẽ được chỉ định lại. Phân đoạn hiện có trên nút thứ hai có thể được tải nhưng chúng cần được đồng bộ hóa với các phân đoạn khác, vì các hoạt động ghi rất có thể đã xảy ra trong khi nút bị hỏng. Khi kết thúc thao tác này, trạng thái cụm sẽ trở thành GREEN
.
Hy vọng điều này làm rõ mọi thứ cho bạn.