---
title: "Cách cài đặt và định cấu hình Elasticsearch trên Ubuntu 20.04"
description: "Cách cài đặt và định cấu hình Elasticsearch trên Ubuntu 20.04"
url: https://cloudfly.vn/techblog/cach-cai-dat-va-dinh-cau-hinh-elasticsearch-tren-ubuntu-2004
image: https://media.cloudfly.vn/posts/techblog_2_INDvgcY.jpg
---

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

## 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.
```command
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:
```command
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:
```command
sudo apt update
```

Sau đó cài đặt Elasticsearch bằng lệnh này:
```command
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`:
```command
sudo nano /etc/elasticsearch/elasticsearch.yml
```

<$>[note]
**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:
```nginx
[label /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.
```command
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:
```command
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:
```command
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:
```command
sudo ufw enable
```

Cuối cùng, kiểm tra trạng thái của UFW bằng lệnh sau:
```command
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:
```
[secondary_label 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.
```command
curl -X GET 'http://localhost:9200'
```

Bạn sẽ nhận được phản hồi sau:
```
[secondary_label 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:
```command
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: **c**reate, **r**ead, **u**pdate, và **d**elete. Để 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:
```command
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:
```
[secondary_label 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.
```command
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ả:
```
[secondary_label 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.
```command
curl -X PUT -H "Content-Type: application/json"  'localhost:9200/tutorial/helloworld/1?pretty' '
{
  "message": "Hello, People!"
}'
```

Elasticsearch nên xác nhận sửa đổi thành công như thế này:
```
[secondary_label 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:
```command
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:
```
[secondary_label 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.
