0

Chạy Elasticsearch

Elasticsearch được thiết kế để dễ dàng khởi chạy trên hầu hết các nền tảng chỉ với hai bước đơn giản: tải xuốngchạy. Trong phần này, chúng ta sẽ tìm hiểu nhiều cách khác nhau để chạy Elasticsearch và lựa chọn phương pháp phù hợp nhất cho từng trường hợp sử dụng.


Chạy Elasticsearch Như Một Standalone Instance

Chạy Elasticsearch dưới dạng một standalone instance là cách nhanh nhất và đơn giản nhất để bắt đầu. Chỉ cần tải xuống package phù hợp với hệ điều hành của bạn và chạy lệnh sau trên Linux / Unix / Mac:

bin/elasticsearch

Hoặc nếu bạn đang sử dụng Windows, chạy:

bin\elasticsearch.bat

Vậy là xong! Rất đơn giản, đúng không? Tuy nhiên, trước khi đi sâu vào các thiết lập nâng cao hơn, cần hiểu rõ rằng mỗi khi chúng ta khởi chạy một instance Elasticsearch, thực chất chúng ta đang khởi chạy một node trong cluster.

Tùy vào configuration (mặc định được lưu trong conf/elasticsearch.yml), Elasticsearch hỗ trợ nhiều loại node, bao gồm:

  • Data node: Lưu trữ dữ liệu và thực thi các thao tác trên dữ liệu (được kiểm soát bởi thiết lập node.data, mặc định là true).
  • Ingest node: Dùng để xử lý và chuyển đổi dữ liệu trước khi indexing (được kiểm soát bởi thiết lập node.ingest, mặc định là true).

Còn nhiều loại node khác mà chúng ta sẽ tìm hiểu trong các phần tiếp theo.


Chạy Elasticsearch Dưới Dạng Cluster

Chạy Elasticsearch như một standalone instance rất phù hợp cho development, testing hoặc học tập, nhưng không phải là lựa chọn tốt nhất cho production. Trong môi trường thực tế, Elasticsearch thường được chạy dưới dạng một cluster – tức là tập hợp nhiều nodes, tốt nhất là trên các physical instances khác nhau.

Một cluster trong Elasticsearch có các đặc điểm sau:

  • Được xác định bằng một tên duy nhất, cấu hình thông qua cluster.name (mặc định là "elasticsearch").
  • Các nodes tham gia vào cluster bằng cách sử dụng tên cluster này.
  • Mỗi cluster có một master node chịu trách nhiệm thực thi các thao tác trên toàn bộ cluster.

Trong cluster configuration, ngoài data nodeingest node, Elasticsearch còn hỗ trợ các loại node sau:

  • Master-eligible node: Có thể được bầu làm master node (được kiểm soát bởi node.master, mặc định là true).
  • Coordinating-only node: Chỉ thực hiện việc route requests, xử lý một số bước tìm kiếm, phân phối tải (load balancing) (khi node.master, node.datanode.ingest đều được đặt thành false).
  • Tribe node: Có thể kết nối đến nhiều clusters và thực thi truy vấn trên tất cả chúng (được kiểm soát bởi tribe.*).

Việc thiết lập cluster giúp Elasticsearch hoạt động mạnh mẽ và linh hoạt hơn rất nhiều, đặc biệt là với các hệ thống yêu cầu high availability.


Nhúng Elasticsearch Vào Ứng Dụng

Ngoài việc chạy như một standalone instance hoặc cluster, Elasticsearch còn có thể được nhúng trực tiếp vào ứng dụng Java / JVM. Điều này đặc biệt hữu ích nếu bạn muốn tích hợp Elasticsearch sâu hơn vào phần mềm của mình.

Ví dụ, với Spring Framework, bạn có thể sử dụng:

@Bean
public Settings elasticsearchSettings() {
    return Settings.builder()
        .put("path.home", home().getAbsolutePath())
        .put("path.data", data().getAbsolutePath())
        .build();
}

Nhưng hãy nhớ rằng việc nhúng Elasticsearch vào ứng dụng có thể không phải là giải pháp tối ưu trong dài hạn, đặc biệt khi hệ thống phát triển lớn hơn và cần mở rộng quy mô.


Chạy Elasticsearch Trong Container

Sự phổ biến của các công nghệ như Docker đã thay đổi cách chúng ta triển khai và vận hành phần mềm. Elasticsearch cũng không ngoại lệ – thay vì tải xuống và chạy bằng shell script hoặc batch file, bạn có thể khởi chạy Elasticsearch chỉ với một lệnh duy nhất nếu đã cài đặt Docker:

docker run -d -p 9200:9200 -p 9300:9300 elasticsearch:5.2.0

Nếu muốn chạy một cluster với nhiều nodes, bạn có thể sử dụng:

docker run -d -p 9200:9200 -p 9300:9300 --name es1 elasticsearch:5.2.0 -E cluster.name=es-cluster -E node.name=es1 -E transport.host=0.0.0.0
docker run -d --name es2 --link=es1 elasticsearch:5.2.0 -E cluster.name=es-cluster -E node.name=es2 -E transport.host=0.0.0.0 -E discovery.zen.ping.unicast.hosts=es1
docker run -d --name es3 --link=es1 elasticsearch:5.2.0 -E cluster.name=es-cluster -E node.name=es3 -E transport.host=0.0.0.0 -E discovery.zen.ping.unicast.hosts=es1

Sau khi các container này khởi động, một cluster Elasticsearch với ba nodes sẽ được thiết lập.

Nếu bạn đang sử dụng Docker Compose, lưu ý rằng Elasticsearch yêu cầu truyền các tham số khởi động (-E option), nhưng hiện tại Docker Compose chưa hỗ trợ tính năng này, vì vậy bạn có thể cần tự tạo Docker image tùy chỉnh.


Tóm Lược

Chúng ta vừa tìm hiểu nhiều cách khác nhau để chạy Elasticsearch:

Standalone Instance – Đơn giản và nhanh chóng để khởi động.
Cluster Mode – Cần thiết cho các hệ thống production.
Embedded Mode – Có thể hữu ích trong một số trường hợp, nhưng không phải lúc nào cũng là giải pháp tối ưu.
Docker Deployment – Cách linh hoạt nhất để chạy và mở rộng Elasticsearch.

Trong phần tiếp theo, chúng ta sẽ xem xét cách Elasticsearch phù hợp với các hệ thống phần mềm hiện đại và cách tận dụng tối đa sức mạnh của nó. 🚀


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí