Hướng dẫn mọi người cách cài đặt Elasticsearch

Elastichsearch là gì

Hiểu theo một cách đơn giản Elasticsearch là dùng để search (tìm kiếm). Cụ thể Elasticsearch là một searchengine hỗ trợ ta trong việc tìm kiếm dữ liệu.

Elasticsearch là một phần mềm mã nguồn mở theo giấy phép Apache License 2.0, được xây dựng dựa trên nền tảng của Apache Lucene.

Dự án Elasticsearch được khởi xướng bởi Shay Banon từ năm 2004 với tên là Compass. Đến năm 2010 Shay Banon cho ra bản Elasticsearch đầu tiên version 0.4.0 vào ngày 08-02-2010. Elasticsearch đã cho ra bản mới nhất (tính tới thời điểm hiện tại) version 5.2.2 vào ngày 28-02-2017. Hiện tại, Elasticsearch chỉ còn hỗ trợ các version 2 và 5.

Ta có 1 tập dữ liệu lớn. Ta đưa cho Elasticsearch, chúng sẽ có nhiệm vụ là giúp ta lưu trữ, index và search các dữ liệu đó. Về cách lưu trữ và index dữ liệu của Elasticsearch, tôi sẽ nói đến chi tiết trong các bài sau. Sau đây ta sẽ tìm hiểu một số đặc điểm của Elasticsearch.

Đặc điểm nổi bật của Elasticsearch.

Elasticsearch hỗ trợ xử lý phân tán. Khi ta xây dựng 1 cụm (cluster) Elasticsearch, dữ liệu sẽ được phân tán đều ra các node của cụm.

Khả năng chịu lỗi, giúp ta bảo toàn dữ liệu tránh việc mát dữ liệu khi có sự cố như một số server bị hỏng hóc, điều này rất hay xảy ra đối với các hệ thống server. Elasticsearch cho phép tạo các bản sao cho dữ liệu, thường sẽ mặc định tạo cho ta một bản sao dữ liệu. Các bản sao này sẽ tự động được update, cũng như tự động khôi phục lại nếu bị mất, hoặc tự động khôi phục lại cho bản chính nếu bản chính bị mấy.

Lưu dữ liêu theo kiểu không có cấu trúc. Các bản ghi có cấu trúc khác nhau có thể được lưu trữ và index cùng nhau.

Hỗ trợ API gọi qua RESTful, nên rất linh hoạt trong việc sử dụng ngôn ngữ lập trình để thao tác với chúng.

Ta đã cùng tìm hiểu qua về Elasticsearch. Sau đây, tôi sẽ hướng dẫn mọi người cách cài đặt Elasticsearch

Cài đặt

Trong phần này mình sẽ hướng dẫn cài đặt Elasticsearch cho Ubuntu.

Do Elastichsearch chạy trên nền java, nên trước tiên ta phải cài jdk trước. Đối với Elasticsearch 2.x thì cần JDK1.7 trở lên, với Elasticsearch 5.x thì cần JDK1.8 trở lên.

Nếu bạn chưa cài đặt JDK thì có thể làm theo hướng dẫn sau:

Tải JDK từ trang chủ của oracle http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Sau đó giải nén vào thư mục /opt:

tar xzf jdk-8u121-linux-x64.tar.gz -C /opt

Ở đây mình cài JDK1.8 bản 64 bit. Nếu bị permission denied thì dùng sudo

Sau đó, ta kiểm tra biến môi trường JAVA_HOME:

echo $JAVA_HOME
Nếu bạn nào chưa cấu hình biến môi trường cho Java hoặc mới cài JDK theo hướng dẫn trên thì cấu hình biế môi trường như sau:
export JAVA_HOME=/opt/jdk1.8.0_121
export JRE_HOME=/opt/jdk1.8.0_121/jre
export PATH=$PATH:/opt/jdk1.8.0_121/bin:/opt/jdk1.8.0_121/jre/bin

Đối với những bạn đã cài JDK trước đó, hoặc JDK không ở thư mục /opt/jdk1.8.0_121 thì có thể sửa thay /opt/jdk1.8.0_121 tương ứng với thư mục JDK của bạn.

Sau khi đã có JDK, tiếp theo ta cài đặt Elasticsearch. Trước tiên ta tải trên trang chủ của Elasticsearch: https://www.elastic.co/downloads/elasticsearch. Sau đó ta giải nén chúng:

tar zxf elasticsearch-*.tar.gz

Sau đó, ta cd vào thư mục bin trong thư mục vừa giải nén.

cd elasticsearch-*/bin

Sau đó, ta chỉ việc chạy file elasticsearch:

./elasticsearch

Và Elasticsearch đã hoạt động. Bạn có thể kiểm tra bằng các vào http://localhost:9200

Mình hiện tại đang dùng Elasticsearch 2.x, vì mình thấy Elasticsearch 5.x khá là nặng, tốn khá nhiều RAM, nhất là đối với những bạn muốn cài trên máy tính cá nhân để nghịch ngợm thì mình khuyên các nên thử với các bản 2.x.

Các khái niệm cơ bản trong Elasticsearch

Document: Dùng để xác định một phần dữ liệu thống nhất, khái niệm này hơi khó nói, nên mình sẽ lấy ví dụ để các bạn hiểu. Ví dụ như dữ liệu của bạn là thông tin về các sản phẩn của cửa hàng, thì mỗi document sẽ tương ứng với thông tin của một sản phẩm, các thông tin của một sản phẩm sẽ được gói gọn trong một document. Nếu so sánh với SQL, thì Document sẽ tương tự như một bản ghi trong SQL. Trong Document có các Field tương ứng với các thuộc tính của Document đó.

Type: Dùng để nhóm các Document cùng 1 loại với nhau. Như các Document của các sản phẩm, hoặc các Document của các bài báo,… So sánh với SQL, thì Type tương tự như table trong SQL.

Index: Tương tự như Database trong hệ cơ sở dữ liệu SQL, nó là một kho chứa các Type, thông thường các type trong cùng một ứng dụng sẽ được gộp trong 1 type.

Shard: Shard là một khái niệm lưu trữ dữ liệu của 1 index. Trong một index người ta sẽ chưa thành một hoặc nhiều shard, Dữ liệu trong 1 shard sẽ được lưu cùng một chỗ, mà cụ thể là cùng trong 1 thư mục. Mối shard sẽ có một hoặc nhiều hoặc không có bản sao được gọi là replicate, các bản sao này sẽ được lưu trong các node khác nhau của 1 cụm Elasticsearch, nhằm để đảm báo an toàn cho dữ liệu.

Node và cluster: Mỗi khi ta bật Elasticsearch trên máy, nó sẽ tạo thành 1 node, nhiều node kết hợp với nhau tạo thành cụm (cluster), thường mỗi máy vật lý sẽ chạy 1 node Elasticsearch. Các node trong cụm có chức năng chia sẻ việc lưu trữ dữ liệu, khi dữ liệu quá lớn, 1 máy tính không thẻ lưu trữ hết được, chúng phải được lưu trữ phân tán qua các node. Ta cũng có thể tạo 2 node trên 1 máy vật lý khi ta bật 2 chương trình Elasticsearch chạy cùng 1 lúc trên 1 máy. Các xây dựng cụm Elasticsearch cũng khá đơn giản, với các máy có kết nối multicase với nhau, ta chỉ cần cấu hình tên cụm trong file cấu hình của mối node giống nhau (ban đầu tên cluster của Elasticsearch để mặc định rồi, nên chúng giống nhau, nhưng mình khuyến cáo các bạn nên đổi tên cluster trong file config để tránh trường hợp các máy khác trong mạng multicase sẽ tự động join vào cụm của bạn). Khi tạo cụm thì mặc định node nào chạy đầu tiên sẽ trở thành node master.

Trên đây là một số giới thiệu cơ bản về Elasticsearch. Các bạn có thể theo dõi bài tiếp theo đê tìm hiểu về cách index dữ liệu.

Fivestar: 
No votes yet