Table of Contents

No table of contents

Cách cài đặt và định cấu hình Elasticsearch trên Ubuntu 20.04

Posted on: 29 tháng 6 năm 2023

Ubuntu

Giới thiệu

Elasticsearch là một nền tảng để tìm kiếm và phân tích dữ liệu phân tán trong thời gian thực. Nó là một lựa chọn phổ biến nhờ khả năng sử dụng, các tính năng mạnh mẽ và khả năng mở rộng của nó.

Bài viết này sẽ hướng dẫn bạn cài đặt Elasticsearch, định cấu hình nó cho trường hợp sử dụng của bạn, bảo mật cài đặt của bạn và bắt đầu làm việc với máy chủ Elasticsearch của bạn.

Điều kiện tiên quyết

Trước khi làm theo hướng dẫn này, bạn sẽ cần:

  • Máy chủ Ubuntu 20.04 có RAM 4GB và 2 CPU được thiết lập với non-root sudo user. Bạn có thể đạt được điều này bằng cách làm theo Thiết lập máy chủ ban đầu với Ubuntu 20.04
  • Đã cài đặt OpenJDK 11

Đối với hướng dẫn này, chúng tôi sẽ làm việc với lượng CPU và RAM tối thiểu cần thiết để chạy Elasticsearch. Lưu ý rằng dung lượng CPU, RAM và dung lượng lưu trữ mà máy chủ Elasticsearch của bạn sẽ yêu cầu tùy thuộc vào volume của logs mà bạn mong đợi.

Bước 1 - Cài đặt và định cấu hình Elasticsearch

Các thành phần Elasticsearch không có sẵn trong kho gói mặc định của Ubuntu. Tuy nhiên, chúng có thể được cài đặt bằng APT sau khi thêm danh sách nguồn gói (package source list) của Elastic.

Tất cả các gói được ký bằng khóa ký Elasticsearch (Elasticsearch signing key) để bảo vệ hệ thống của bạn khỏi gói giả mạo. Các gói đã được xác thực bằng khóa sẽ được trình quản lý gói của bạn coi là đáng tin cậy. Trong bước này, bạn sẽ nhập khóa GPG công khai của Elasticsearch và thêm danh sách nguồn gói Elastic để cài đặt Elasticsearch.

Để bắt đầu, hãy sử dụng cURL, công cụ dòng lệnh để truyền dữ liệu bằng URL, để nhập khóa GPG công khai của Elasticsearch vào APT. Lưu ý rằng chúng tôi đang sử dụng các đối số -fsSL để tắt tất cả tiến trình và các lỗi có thể xảy ra (ngoại trừ lỗi máy chủ) và để cho phép cURL thực hiện yêu cầu trên một vị trí mới nếu được chuyển hướng. Đưa đầu ra của lệnh cURL vào chương trình khóa apt, chương trình này sẽ thêm khóa GPG công khai vào APT.

  1. curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Tiếp theo, thêm danh sách nguồn Elastic vào thư mục sources.list.d, nơi APT sẽ tìm kiếm các nguồn mới:

  1. echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

Tiếp theo, hãy cập nhật danh sách gói của bạn để APT sẽ đọc nguồn Elastic mới:

  1. sudo apt update

Sau đó cài đặt Elasticsearch bằng lệnh này:

  1. sudo apt install elasticsearch

Elasticsearch hiện đã được cài đặt và sẵn sàng để được định cấu hình.

Bước 2 - Định cấu hình Elasticsearch

Để định cấu hình Elasticsearch, chúng tôi sẽ chỉnh sửa tệp cấu hình chính elasticsearch.yml - nơi lưu trữ hầu hết các tùy chọn cấu hình của nó. Tệp này nằm trong thư mục /etc/elasticsearch.

Sử dụng trình soạn thảo văn bản ưa thích của bạn để chỉnh sửa tệp cấu hình của Elasticsearch. Ở đây, chúng tôi sẽ sử dụng nano:

  1. sudo nano /etc/elasticsearch/elasticsearch.yml

Lưu ý: Tệp cấu hình của Elasticsearch ở định dạng YAML, có nghĩa là chúng ta cần duy trì định dạng thụt lề. Đảm bảo rằng bạn không thêm bất kỳ khoảng trống nào khi chỉnh sửa tệp này.

Tệp elasticsearch.yml cung cấp các tùy chọn cấu hình cho cluster, node, paths, memory, network, discovery, và gateway của bạn. Hầu hết các tùy chọn này được cấu hình sẵn trong tệp nhưng bạn có thể thay đổi chúng theo nhu cầu của mình. Với mục đích trình diễn cấu hình một máy chủ, chúng tôi sẽ chỉ điều chỉnh cài đặt cho máy chủ lưu trữ mạng.

Elasticsearch lắng nghe lưu lượng truy cập từ mọi nơi trên cổng 9200. Bạn có thể hạn chế quyền truy cập bên ngoài vào phiên bản Elasticsearch của mình để ngăn người ngoài đọc dữ liệu của bạn hoặc tắt cụm Elasticsearch của bạn thông qua [REST API] (https://en.wikipedia.org/wiki/Representational_state_transfer). Để hạn chế quyền truy cập và tăng tính bảo mật, hãy tìm dòng chỉ định network.host, bỏ ghi chú và thay thế giá trị của nó bằng localhost để nó có dạng như sau:

/etc/elasticsearch/elasticsearch.yml
. . .
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: localhost
. . .

Chúng tôi đã chỉ định localhost để Elasticsearch lắng nghe trên tất cả các giao diện và IP bị ràng buộc. Nếu bạn muốn nó chỉ nghe trên một giao diện cụ thể, bạn có thể chỉ định IP của nó thay cho localhost. Lưu và đóng elasticsearch.yml. Nếu bạn đang sử dụng nano, bạn có thể làm như vậy bằng cách nhấn CTRL+X, tiếp theo là Y rồi ENTER.

Đây là những cài đặt tối thiểu bạn có thể bắt đầu để sử dụng Elasticsearch. Bây giờ bạn có thể bắt đầu Elasticsearch lần đầu tiên.

Bắt đầu dịch vụ Elasticsearch với systemctl. Hãy cho Elasticsearch một vài phút để khởi động. Nếu không, bạn có thể gặp lỗi về việc không thể kết nối.

  1. sudo systemctl start elasticsearch

Tiếp theo, hãy chạy lệnh sau để kích hoạt Elasticsearch khởi động mỗi khi máy chủ của bạn khởi động:

  1. sudo systemctl enable elasticsearch

Với Elasticsearch được bật khi khởi động, hãy chuyển sang bước tiếp theo để thảo luận về bảo mật.

Bước 3 - Bảo mật Elasticsearch

Theo mặc định, Elasticsearch có thể được kiểm soát bởi bất kỳ ai có thể truy cập API HTTP. Đây không phải lúc nào cũng là một rủi ro bảo mật vì Elasticsearch chỉ lắng nghe trên giao diện loopback (nghĩa là 127.0.0.1), giao diện này chỉ có thể được truy cập cục bộ. Do đó, không thể truy cập công khai và miễn là tất cả người dùng máy chủ đều đáng tin cậy, bảo mật có thể không phải là mối quan tâm chính.

Nếu bạn cho phép truy cập từ xa vào API HTTP, bạn có thể hạn chế tiếp xúc với mạng bằng tường lửa mặc định của Ubuntu, UFW. Tường lửa này đã được kích hoạt nếu bạn làm theo các bước trong hướng dẫn Thiết lập máy chủ ban đầu với Ubuntu 20.04.

Bây giờ chúng ta sẽ định cấu hình tường lửa để cho phép truy cập vào cổng API HTTP Elasticsearch mặc định (TCP 9200) cho máy chủ từ xa đáng tin cậy, thường là máy chủ bạn đang sử dụng trong thiết lập một máy chủ, chẳng hạn như 198.51.100.0. Để cho phép truy cập, gõ lệnh sau:

  1. sudo ufw allow from 198.51.100.0 to any port 9200

Sau khi hoàn tất, bạn có thể kích hoạt UFW bằng lệnh:

  1. sudo ufw enable

Cuối cùng, kiểm tra trạng thái của UFW bằng lệnh sau:

  1. sudo ufw status

Nếu bạn đã chỉ định đúng các quy tắc, bạn sẽ nhận được kết quả như sau:

Output
Status: active To Action From -- ------ ---- 9200 ALLOW 198.51.100.0 22 ALLOW Anywhere 22 (v6) ALLOW Anywhere (v6)

UFW bây giờ sẽ được bật và thiết lập để bảo vệ cổng Elasticsearch 9200.

Nếu bạn muốn đầu tư vào bảo vệ bổ sung, Elasticsearch cung cấp plugin Shield thương mại để mua.

Bước 4 - Kiểm tra Elasticsearch

Hiện tại, Elasticsearch sẽ chạy trên cổng 9200. Bạn có thể kiểm tra nó bằng cURL và yêu cầu GET.

  1. curl -X GET 'http://localhost:9200'

Bạn sẽ nhận được phản hồi sau:

Output
{ "name" : "elasticsearch-ubuntu20-04", "cluster_name" : "elasticsearch", "cluster_uuid" : "qqhFHPigQ9e2lk-a7AvLNQ", "version" : { "number" : "7.6.2", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f", "build_date" : "2020-03-26T06:34:37.794943Z", "build_snapshot" : false, "lucene_version" : "8.4.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }

Nếu bạn nhận được phản hồi tương tự như trên, thì Elasticsearch đang hoạt động bình thường. Nếu không, hãy đảm bảo rằng bạn đã làm theo hướng dẫn cài đặt một cách chính xác và bạn đã cho phép một khoảng thời gian để Elasticsearch bắt đầu hoàn toàn.

Để thực hiện kiểm tra kỹ lưỡng hơn về Elasticsearch, hãy thực hiện lệnh sau:

  1. curl -XGET 'http://localhost:9200/_nodes?pretty'

Trong kết quả từ lệnh trên, bạn có thể xác minh tất cả các cài đặt hiện tại cho node, cluster, application paths, modules, v.v.

Bước 5 — Sử dụng Elasticsearch

Để bắt đầu sử dụng Elasticsearch, trước tiên hãy thêm một số dữ liệu. Elasticsearch sử dụng API RESTful, phản hồi các lệnh CRUD thông thường: create, read, update, và delete. Để làm việc với nó, chúng ta sẽ sử dụng lại lệnh cURL.

Bạn có thể thêm mục nhập đầu tiên của mình như sau:

  1. curl -XPOST -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' '{ "message": "Hello World!" }'

Bạn sẽ nhận được phản hồi sau:

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":2,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}

Với cURL, chúng tôi đã gửi yêu cầu HTTP POST tới máy chủ Elasticsearch. URI của yêu cầu là /tutorial/helloworld/1 với một số tham số:

  • tutorial là chỉ mục của dữ liệu trong Elasticsearch.
  • helloworld là loại.
  • 1 là ID của mục nhập của chúng tôi theo chỉ mục và loại ở trên.

Bạn có thể truy xuất mục nhập đầu tiên này bằng yêu cầu HTTP GET.

  1. curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' '{ "message": "Hello World!" }'

Đây phải là đầu ra kết quả:

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}

Để sửa đổi một mục nhập hiện có, bạn có thể sử dụng yêu cầu HTTP PUT.

  1. curl -X PUT -H "Content-Type: application/json" 'localhost:9200/tutorial/helloworld/1?pretty' '
  2. {
  3. "message": "Hello, People!"
  4. }'

Elasticsearch nên xác nhận sửa đổi thành công như thế này:

Output
{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "result" : "updated", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1 }

Trong ví dụ trên, chúng tôi đã sửa đổi message của mục nhập đầu tiên thành “Hello, People!”. Cùng với đó, số phiên bản đã được tự động tăng lên 2.

Bạn có thể nhận thấy đối số bổ sung pretty trong yêu cầu trên. Nó cho phép định dạng mà con người có thể đọc được để bạn có thể ghi từng trường dữ liệu trên một hàng mới. Bạn cũng có thể “prettify” (chỉnh sửa) kết quả của mình khi truy xuất dữ liệu để có được đầu ra dễ đọc hơn bằng cách nhập lệnh sau:

  1. curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1?pretty'

Bây giờ phản hồi sẽ được định dạng để con người phân tích cú pháp:

Output
{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "_seq_no" : 1, "_primary_term" : 1, "found" : true, "_source" : { "message" : "Hello, People!" } } }

Bây giờ chúng tôi đã thêm và truy vấn dữ liệu trong Elasticsearch. Để tìm hiểu về các hoạt động khác, vui lòng kiểm tra tài liệu API.

Kết luận

Bây giờ bạn đã cài đặt, định cấu hình và bắt đầu sử dụng Elasticsearch. Để khám phá thêm chức năng của Elasticsearch, vui lòng tham khảo tài liệu chính thức của Elasticsearch.

0 replies