Cách Cài Đặt và Cấu Hình Elasticsearch trên Ubuntu 16.04

5 năm trước

Giới Thiệu 

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

Elasticsearch hỗ trợ các hoạt động RESTful. Điều này có nghĩa là bạn có thể sử dụng các phương thức HTTP (GET, POST, PUT, DELETE, vv) kết hợp với một HTTP URI (/collection/entry) để thao tác dữ liệu của bạn. Cách tiếp cận RESTful trực quan vừa thân thiện với người phát triển vừa thân thiện với người dùng, đó là một trong những lý do cho sự phổ biến của Elasticsearch.

Elasticsearch là một phần mềm mã nguồn mở và miễn phí với một công ty vững chắc đằng sau nó: Elastic. Sự kết hợp này làm cho nó phù hợp để sử dụng ở bất cứ đâu từ thử nghiệm cá nhân đến tích hợp công ty.

Bài viết này sẽ giới thiệu đến bạn về Elasticsearch và cho bạn biết cách cài đặt, cấu hình, bảo mật và bắt đầu sử dụng nó.

 

Yêu Cầu 

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

Trừ những điều được lưu ý , tất cả các lệnh yêu cầu quyền root trong hướng dẫn này sẽ được chạy như một  non-root user với các đặc quyền sudo.

 

Bước 1 — Tải xuống và Cài đặt Elasticsearch

Elasticsearch có thể được tải trực tiếp từ elastic.co trong các gói ziptar.gzdeb hoặc rpm. Đối với Ubuntu, tốt nhất là sử dụng gói deb (Debian) để cài đặt mọi thứ bạn cần để chạy Elasticsearch.

Trước tiên, hãy cập nhật chỉ mục gói của bạn.

sudo apt-get update

Tải xuống phiên bản Elasticsearch mới nhất, phiên bản 2.3.1 tại thời điểm viết.

wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/deb/elasticsearch/2.3.1/elasticsearch-2.3.1.deb

Sau đó cài đặt nó theo cách thông thường của Ubuntu với dpkg .

sudo dpkg -i elasticsearch-2.3.1.deb

Kết quả này trong Elasticsearch được cài đặt trong /usr/share/elasticsearch/ với các tập tin cấu hình của nó được đặt trong /etc/elasticsearch và tập lệnh khởi đầu của nó được thêm vào trong /etc/init.d/elasticsearch

Để đảm bảo Elasticsearch bắt đầu và dừng tự động với máy chủ, hãy thêm tập lệnh init của nó vào runlevel mặc định.

sudo systemctl enable elasticsearch.service

Trước khi bắt đầu Elasticsearch lần đầu tiên, hãy kiểm tra phần tiếp theo về cấu hình tối thiểu được đề nghị.

 

Bước 2 — Cấu hình Elasticsearch

Bây giờ Elasticsearch và các phụ thuộc Java của nó đã được cài đặt, đã đến lúc cấu hình Elasticsearch. Các tệp cấu hình Elasticsearch nằm trong thư mục /etc/elasticsearch. Có hai tệp:

  • elasticsearch.yml cấu hình cài đặt máy chủ Elasticsearch. Đây là nơi tất cả các tùy chọn, ngoại trừ các tùy chọn để ghi nhật ký, được lưu trữ, đó là lý do tại sao chúng ta chủ yếu quan tâm đến tệp này.

  • logging.yml cung cấp cấu hình để ghi nhật ký. Ban đầu, bạn không phải chỉnh sửa tệp này. Bạn có thể để lại tất cả các tùy chọn ghi nhật ký mặc định. Bạn có thể tìm thấy nhật ký kết quả trong /var/log/elasticsearch theo mặc định.

Các biến đầu tiên để tùy chỉnh trên bất kỳ máy chủ Elasticsearch là node.namevà cluster.name trong elasticsearch.yml. Như tên  đề xuất, node.name chỉ định tên của máy chủ (node) và cluster mà sau này được liên kết.

Nếu bạn không tùy chỉnh biến này, một node.name sẽ được gán tự động đối với tên máy chủ VPS. cluster.name sẽ được tự động đặt thành tên của cluster mặc định.

Giá trị cluster.namee được sử dụng bởi tính năng tự động phát hiện của Elasticsearch để tự động khám phá và kết hợp các  Elasticsearch nodes với một cluster. Do đó, nếu bạn không thay đổi giá trị mặc định, bạn có thể có các nodes không mong muốn, được tìm thấy trên cùng một mạng, trong cluster của bạn.

Để bắt đầu chỉnh sửa tệp cấu hình elasticsearch.yml chính với nano hoặc trình soạn thảo văn bản yêu thích của bạn.

sudo nano /etc/elasticsearch/elasticsearch.yml

Loại bỏ ký tự # ở đầu các dòng cho cluster.name và node.name để bỏ ghi chú chúng, và sau đó cập nhật các giá trị của chúng. Thay đổi cấu hình đầu tiên của bạn trong tệp /etc/elasticsearch/elasticsearch.ymlsẽ trông giống như sau:

/etc/elasticsearch/elasticsearch.yml
. . .
cluster.name: mycluster1node.name: "My First Node". . .

Các cài đặt tối thiểu này bạn có thể bắt đầu bằng cách sử dụng Elasticsearch. Tuy nhiên, bạn nên tiếp tục đọc phần cấu hình để hiểu rõ hơn và tinh chỉnh Elasticsearch.

Một trong những thiết lập đặc biệt quan trọng của Elasticsearch là vai trò của máy chủ, đó là một trong hai chủ hoặc nô lệ. Máy chủ chính chịu trách nhiệm về cluster heath và sự ổn định. Trong các triển khai lớn với nhiều cluster codes, bạn nên có nhiều hơn một trình chủ chuyên dụng. Thông thường, một chủ chuyên dụng sẽ không lưu trữ dữ liệu hoặc tạo chỉ mục. Do đó, không có cơ hội bị quá tải, do đó cluster heath có thể bị đe dọa.

Máy chủ Slave được sử dụng như workhorses có thể được tải với các nhiệm vụ dữ liệu. Ngay cả khi một node nô lệ bị quá tải, thì cluster health không nên bị ảnh hưởng nghiêm trọng, miễn là có các nodes khác để tải thêm.

Cài đặt xác định vai trò của máy chủ được gọi là node.master. Theo mặc định, một node là một máy chủ. Nếu bạn chỉ có một node Elasticsearch, bạn nên để tùy chọn này thành giá trị true mặc định vì ít nhất một máy chủ luôn cần thiết. Ngoài ra, nếu bạn muốn định cấu hình node làm nô lệ, hãy gán giá trị false cho biến node.master như sau:

/etc/elasticsearch/elasticsearch.yml
. . .
node.master: false. . .

Một tùy chọn cấu hình quan trọng khác là node.data, nó quyết định liệu một node có lưu trữ dữ liệu hay không. Trong hầu hết các trường hợp, tùy chọn này phải được để giá trị mặc định của nó (true),nhưng có hai trường hợp mà bạn có thể không muốn lưu trữ dữ liệu trên một node. Một là khi node là một máy chủ chuyên dụng "như đã đề cập trước đó. Hai là khi một node được sử dụng chỉ để lấy dữ liệu từ các node và kết quả tổng hợp. Trong trường hợp sau, node sẽ hoạt động như một cân bằng lượng tải tìm kiếm.

Một lần nữa, nếu bạn chỉ có một node Elasticsearch, bạn không nên thay đổi giá trị này. Nếu không, để vô hiệu hóa lưu trữ dữ liệu cục bộ, chỉ định node.data là false như sau:

/etc/elasticsearch/elasticsearch.yml
. . .
node.data: false. . .

Trong việc triển khai Elasticsearch lớn hơn với nhiều nút, hai tùy chọn quan trọng khác là index.number_of_shards và index.number_of_replicas. Việc đầu tiên xác định có bao nhiêu phần, hoặc đoạn, chỉ mục sẽ được chia thành. Thứ hai xác định số lượng bản sao sẽ được phân phối trên cluster. Có nhiều phân đoạn cải thiện hiệu suất lập chỉ mục, trong khi có nhiều bản sao hơn giúp tìm kiếm nhanh hơn.

Theo mặc định, số lượng phân đoạn là 5 và số lượng bản sao là 1. Giả sử bạn vẫn đang khám phá và thử nghiệm Elasticsearch trên một node, bạn có thể bắt đầu chỉ với một phân đoạn và không có bản sao. Do đó, các giá trị của chúng phải được đặt như sau:

/etc/elasticsearch/elasticsearch.yml
. . .
index.number_of_shards: 1index.number_of_replicas: 0. . .

Một thiết lập cuối cùng mà bạn có thể quan tâm đến việc thay đổi là path.data, xác định đường dẫn nơi dữ liệu được lưu trữ. Đường dẫn mặc định là /var/lib/elasticsearch . Trong môi trường sản xuất, bạn nên sử dụng phân vùng chuyên dụng và điểm gắn kết để lưu trữ dữ liệu Elasticsearch. Trong trường hợp tốt nhất, phân vùng chuyên dụng này sẽ là một phương tiện lưu trữ riêng biệt sẽ cung cấp hiệu suất và tách biệt dữ liệu tốt hơn. Bạn có thể chỉ định một đường dẫn path.data khác nhau bằng cách chỉ định nó như sau:

/etc/elasticsearch/elasticsearch.yml
. . .
path.data: /media/different_media. . .

Khi bạn thực hiện tất cả các thay đổi, hãy lưu và thoát tệp. Bây giờ bạn có thể bắt đầu Elasticsearch lần đầu tiên.

sudo systemctl start elasticsearch

Hãy cho Elasticsearch một vài khởi đầu đầy đủ trước khi bạn cố gắng sử dụng nó. Nếu không, bạn có thể gặp lỗi về việc không thể kết nối.

 

Bước 3 - Bảo đảm Elasticsearch

Theo mặc định, Elasticsearch không có bảo mật tích hợp và có thể được kiểm soát bởi bất kỳ ai có thể truy cập API HTTP. Điều này không phải lúc nào cũng là một nguy cơ bảo mật vì Elasticsearch chỉ nghe trên giao diện loopback (tức là 127.0.0.1) có thể được truy cập cục bộ. Vì vậy, không có truy cập công cộng là có thể và Elasticsearch của bạn là an toàn đủ miễn là tất cả người dùng máy chủ được tin cậy hoặc đây là một máy chủ Elasticsearch chuyên dụng.

Tuy nhiên, nếu bạn muốn tăng cường bảo mật, điều đầu tiên cần làm là bật xác thực. Xác thực được cung cấp bởi Shield plugin thương mại. Rất tiếc, plugin này không miễn phí nhưng có bản dùng thử 30 ngày miễn phí mà bạn có thể sử dụng để kiểm tra. Trang chính thức của nó có hướng dẫn cài đặt và cấu hình tuyệt vời. Điều duy nhất bạn có thể cần biết ngoài ra là đường dẫn đến trình quản lý cài đặt plugin Elasticsearch là /usr/share/elasticsearch/bin/plugin.

Nếu bạn không muốn sử dụng plugin thương mại nhưng vẫn phải cho phép truy cập từ xa vào API HTTP, bạn có thể hạn chế tối đa sự phơi nhiễm mạng với firewall mặc định của Ubuntu, UFW (firewallkhông biến chứng). Theo mặc định, UFW được cài đặt nhưng không được kích hoạt. Nếu bạn quyết định sử dụng nó, hãy làm theo các bước sau:

Đầu tiên, tạo quy tắc để cho phép bất kỳ dịch vụ cần thiết nào. Bạn sẽ cần ít nhất SSH cho phép để bạn có thể đăng nhập vào máy chủ. Để cho phép truy cập toàn thế giới vào SSH, cổng danh sách trắng 22.

sudo ufw allow 22

Sau đó, 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, ví dụ :TRUSTED_IP, như thế này:

sudo ufw allow from TRUSTED_IP to any port 9200

Sau đó kích hoạt UFW với lệnh:

sudo ufw enable
  •  

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

sudo ufw status

Nếu bạn đã chỉ định đúng quy tắc, đầu ra sẽ trông như thế này:

Output of java -versionStatus: active
To Action From
-- ------ ----9200 ALLOW TRUSTED_IP22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
 

Một khi bạn đã xác nhận UFW được kích hoạt và bảo vệ cổng Elasticsearch 9200, thì bạn có thể cho phép Elasticsearch lắng nghe các kết nối bên ngoài. Để thực hiện việc này, hãy mở lại tệp cấu hình elasticsearch.yml .

sudo nano /etc/elasticsearch/elasticsearch.yml
  •  

Tìm dòng có chứa network.bind_host, bỏ ghi chú bằng cách xóa ký tự#  ở đầu dòng và thay đổi giá trị thành 0.0.0.0 để có dạng như sau:

/etc/elasticsearch/elasticsearch.yml
. . .
network.host: 0.0.0.0. . .

Chúng ta đã chỉ định 0.0.0.0 để 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  0.0.0.0.

Để làm cho cài đặt ở trên có hiệu lực, hãy khởi động lại Elasticsearch bằng lệnh:

sudo systemctl restart elasticsearch

Sau đó, hãy thử kết nối từ máy chủ tin cậy đến Elasticsearch. Nếu bạn không thể kết nối, hãy đảm bảo rằng UFW đang hoạt động và biến network.host đã được chỉ định chính xác.

 

Bước 4 - Thử nghiệm 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, công cụ chuyển URL phía máy khách và lệnh GET đơn giản.

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

Bạn sẽ thấy phản hồi sau:

Output of curl
{
"name" : "My First Node",
"cluster_name" : "mycluster1",
"version" : {
"number" : "2.3.1",
"build_hash" : "bd980929010aef404e7cb0843e61d0665269fc39",
"build_timestamp" : "2016-04-04T12:25:05Z",
"build_snapshot" : false,
"lucene_version" : "5.5.0"
},
"tagline" : "You Know, for Search"
}
 

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

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

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

Trong đầu ra từ lệnh trên, bạn có thể xem và xác minh tất cả các cài đặt hiện tại cho node, cluster, đường dẫn ứng dụng, mô-đun, 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. Như đã đề cập, Elasticsearch sử dụng một API RESTful, đáp ứng các lệnh CRUD thông thường: tạo, đọc, cập nhật và xóa. Để làm việc với nó, chúng tôi sẽ sử dụng một lần nữa  curl.

Bạn có thể thêm mục nhập đầu tiên của mình bằng lệnh:

curl -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'

Bạn sẽ thấy phản hồi sau:

output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"_shards":{"total":2,"successful":1,"failed":0},"created":true}
 

Với cuel, chúng ta đã 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 vài tham số:

  • tutorial là chỉ mục dữ liệu trong Elasticsearch.
  • helloworld  là một mẫu
  • 1 là id của mục nhập  theo chỉ mục và mẫu ở trên.

Bạn có thể lấy mục nhập đầu tiên này với một yêu cầu HTTP GET.

curl -X GET 'http://localhost:9200/tutorial/helloworld/1'

Kết quả sẽ giống như sau:

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

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

curl -X PUT 'localhost:9200/tutorial/helloworld/1?pretty' -d '
{
"message": "Hello People!"
}'

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

output
{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"created" : false
}
 

Trong ví dụ trên, chúng ta đã 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ố phụ pretty trong yêu cầu ở trên. Nó cho phép định dạng có thể đọc được của con người để bạn có thể viết từng trường dữ liệu trên một hàng mới. Bạn cũng có thể "prettify" kết quả của bạn khi lấy dữ liệu và nhận được nhiều đầu ra đẹp hơn như thế này:

curl -X GET 'http://localhost:9200/tutorial/helloworld/1?pretty'

Bây giờ phản hồi sẽ ở định dạng tốt hơn nhiều:

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

Đến giờ chúng ta đã thêm vào 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  API documentation.

 

Kết Luận 

Đó là cách dễ dàng để cài đặt, cấu hình và bắt đầu sử dụng Elasticsearch. Khi bạn đã chơi đủ với các truy vấn thủ công, tác vụ tiếp theo của bạn sẽ là bắt đầu sử dụng nó từ các ứng dụng của bạn.

Tìm hiểu thêm nhiều điều thú vị khác tại ViCloud Community