Cách cài đặt và cấu hình Elasticsearch trên CentOS 8
Elasticsearch là một nền tảng để tìm kiếm phân tán và phân tích dữ liệu trong thời gian thực. Sự phổ biến của nó là do dễ sử dụng, các tính năng mạnh mẽ và khả năng mở rộng. Elasticsearch hỗ trợ các hoạt động RESTful. Điều này nghĩa là bạn có thể sử dụng các phương thức HTTP ( GET
, POST
, PUT
, DELETE
, v.v.) kết hợp với URI HTTP (/ collection / entry) để thao tác dữ liệu của bạn . Cách tiếp cận RESTful trực quan thân thiện với cả nhà phát triển và user , đó là một trong những lý do khiến Elasticsearch trở nên phổ biến.
Elasticsearch là phần mềm open-souce 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 với nhiều trường hợp sử dụng, 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 cho bạn về Elasticsearch và hướng dẫn bạn cách cài đặt, cấu hình và bắt đầu sử dụng nó.
Yêu cầu
Để làm theo hướng dẫn này, bạn cần những thứ sau:
- Server chạy CentOS 8 với bộ nhớ tối thiểu 1GB và user sudo không phải root. Để biết hướng dẫn chi tiết, hãy xem Hướng dẫn cài đặt server ban đầu cho CentOS 8 của ta
-
wget
được cài đặt trên server của bạn
Bước 1 - Cài đặt Java trên CentOS 8
Elasticsearch được viết bằng ngôn ngữ lập trình Java. Nhiệm vụ đầu tiên của bạn là cài đặt Java Runtime Environment (JRE) trên server của bạn. Bạn sẽ sử dụng gói CentOS OpenJDK root cho JRE. JRE này miễn phí, được hỗ trợ tốt và được quản lý tự động thông qua trình quản lý cài đặt CentOS Yum .
Cài đặt version mới nhất của OpenJDK 8:
- sudo dnf install java-1.8.0-openjdk.x86_64 -y
Bây giờ xác minh cài đặt của bạn:
- java -version
Lệnh sẽ tạo một kết quả như sau:
Outputopenjdk version "1.8.0_262" OpenJDK Runtime Environment (build 1.8.0_262-b10) OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
Khi bạn bắt đầu sử dụng Elasticsearch và bắt đầu tìm kiếm hiệu suất và khả năng tương thích của Java tốt hơn, bạn có thể chọn cài đặt Java độc quyền của Oracle (Oracle JDK 8). Để biết thêm thông tin, hãy tham khảo bài viết của ta vềCách cài đặt Java trên CentOS và Fedora .
Bước 2 - Download và cài đặt Elasticsearch trên CentOS 8
Bạn có thể download Elasticsearch trực tiếp từastic.co ở các gói zip
, tar.gz
, deb
hoặc rpm
. Đối với CentOS, tốt nhất nên sử dụng gói rpm
root , gói này sẽ cài đặt mọi thứ bạn cần để chạy Elasticsearch.
Tại thời điểm viết bài này, version Elasticsearch mới nhất là 7.9.2.
Từ folder đang làm việc, download chương trình:
- sudo rpm -ivh https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-x86_64.rpm
Elasticsearch sẽ cài đặt trong /usr/share/elasticsearch/
, với các file cấu hình được đặt trong /etc/elasticsearch
và tập lệnh init của nó được thêm vào /etc/init.d/elasticsearch
.
Để đảm bảo Elasticsearch tự động khởi động và dừng với server , hãy thêm tập lệnh init của nó vào runlevel mặc định:
- sudo systemctl daemon-reload && sudo systemctl enable elasticsearch.service
Với Elasticsearch được cài đặt, bây giờ bạn sẽ cấu hình một vài cài đặt quan trọng.
Bước 3 - Cấu hình Elasticsearch trên CentOS 8
Đến đây bạn đã cài đặt Elasticsearch và phần phụ thuộc Java của nó, đã đến lúc cấu hình Elasticsearch.
Các file cấu hình Elasticsearch nằm trong folder /etc/elasticsearch
. Những thứ ta sẽ xem xét và chỉnh sửa là:
elasticsearch.yml
- Cấu hình cài đặt server Elasticsearch. Đây là nơi hầu hết các tùy chọn được lưu trữ, đó là lý do tại sao ta hầu như quan tâm đến file này.jvm.options
- Cung cấp cấu hình cho JVM chẳng hạn như cài đặt bộ nhớ.
Các biến đầu tiên để tùy chỉnh trên bất kỳ server Elasticsearch là node.name
và cluster.name
trong elasticsearch.yml
. Hãy làm điều đó ngay bây giờ.
Như tên của chúng gợi ý, node.name
chỉ định tên của server (nút) và cụm mà sau này được liên kết. Nếu bạn không tùy chỉnh các biến này, node.name
sẽ được tự động gán cho tên server . cluster.name
sẽ được tự động đặt thành tên của cụm mặc định.
Giá trị cluster.name
được sử dụng bởi tính năng tự động khám phá của Elasticsearch để tự động phát hiện và liên kết các node Elasticsearch với một cụm. Do đó, nếu bạn không thay đổi giá trị mặc định, bạn có thể có các node không mong muốn, được tìm thấy trên cùng một mạng, trong cụm của bạn.
Hãy bắt đầu chỉnh sửa file cấu hình elasticsearch.yml
chính.
Mở nó bằng nano
hoặc editor bạn muốn :
- sudo nano /etc/elasticsearch/elasticsearch.yml
Xóa ký tự #
ở đầu các dòng cho node.name
và cluster.name
để bỏ ghi chú chúng rồi thay đổi giá trị của chúng. Những thay đổi cấu hình đầu tiên của bạn trong file /etc/elasticsearch/elasticsearch.yml
sẽ giống như sau:
... node.name: "My First Node" cluster.name: mycluster1 ...
Cài đặt mạng cũng được tìm thấy elasticsearch.yml
. Theo mặc định, Elasticsearch sẽ lắng nghe trên localhost trên cổng 9200 để chỉ các client từ cùng một server mới có thể kết nối. Bạn nên giữ nguyên các cài đặt này theo quan điểm bảo mật vì version nguồn mở và miễn phí của Elasticsearch không cung cấp các tính năng xác thực.
Một cài đặt quan trọng khác là thuộc tính node.roles
. Bạn có thể đặt điều này thành master-eligible
(chỉ cần master
trong cấu hình), data
hoặc ingest
.
Role master-eligible
chính chịu trách nhiệm về sức khỏe và sự ổn định của cụm. Trong triển khai lớn với rất nhiều nút cluster, nó khuyến khích để có nhiều hơn một nút chuyên dụng với một master
chỉ role . Thông thường, một nút master
chuyên dụng sẽ không lưu trữ dữ liệu hoặc tạo index . Do đó, sẽ không có cơ hội bị quá tải, do đó sức khỏe của cụm có thể bị đe dọa.
Role data
xác định các node sẽ lưu trữ dữ liệu. Ngay cả khi một nút dữ liệu bị quá tải, tình trạng của cụm sẽ không bị ảnh hưởng nghiêm trọng, miễn là có các node khác chịu tải bổ sung.
Cuối cùng, role ingest
cho phép một nút chấp nhận và xử lý các stream dữ liệu. Trong các cài đặt lớn hơn, nên có các node ingest
chuyên dụng để tránh quá tải có thể xảy ra trên các node master
và nút data
.
Lưu ý: một nút có thể có một hoặc nhiều role cho phép khả năng mở rộng, khả năng dự phòng và tính sẵn sàng cao của cài đặt Elasticsearch. Theo mặc định, tất cả các role này đều được gán cho nút. Điều này phù hợp với một Elasticsearch một nút, như trong kịch bản ví dụ được mô tả trong bài viết này. Do đó, bạn không cần phải thay đổi role . Tuy nhiên, nếu bạn muốn thay đổi role , chẳng hạn như dành một nút làm nút master
, bạn có thể thực hiện bằng cách thay đổi /etc/elasticsearch/elasticsearch.yml
như thế này:
... node.roles: [ master ] ...
Một cài đặt khác cần xem xét thay đổi là path.data
. Điều này xác định đường dẫn nơi dữ liệu được lưu trữ và đường dẫn mặc định là /var/lib/elasticsearch
. Trong môi trường production , bạn nên sử dụng phân vùng chuyên dụng và điểm mount để 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 mang lại hiệu suất tốt hơn và cách ly dữ liệu. Bạn có thể chỉ định một đường dẫn path.data
khác bằng cách bỏ comment path.data
và thay đổi giá trị của nó như sau:
... path.data: /media/different_media ...
Đến đây bạn đã thực hiện tất cả các thay đổi của bạn , hãy lưu và elasticsearch.yml
.
Bạn cũng phải chỉnh sửa cấu hình của bạn trong jvm.options
.
Nhớ lại rằng Elasticsearch được chạy bởi JVM, tức là về cơ bản nó là một ứng dụng Java. Vì vậy, cũng giống như bất kỳ ứng dụng Java nào, nó có cài đặt JVM có thể được cấu hình trong file /etc/elasticsearch/jvm.options
. Hai trong số các cài đặt quan trọng nhất, đặc biệt là về hiệu suất, là Xms
và Xmx
, xác định mức phân bổ bộ nhớ tối thiểu ( Xms
) và tối đa ( Xmx
).
Theo mặc định, cả hai đều được đặt thành 1GB
, nhưng điều đó gần như không bao giờ là tối ưu. Không chỉ vậy, nếu server của bạn chỉ có 1GB RAM, bạn sẽ không thể khởi động Elasticsearch với cài đặt mặc định. Điều này là do hệ điều hành chiếm ít nhất 100MB nên sẽ không thể dành 1GB cho Elasticsearch.
Thật không may, không có công thức chung nào để tính toán cài đặt bộ nhớ. Đương nhiên, bạn càng phân bổ nhiều bộ nhớ thì hiệu suất của bạn càng tốt, nhưng hãy đảm bảo vẫn còn đủ bộ nhớ cho phần còn lại của các quá trình trên server . Ví dụ: nếu máy của bạn có 1GB RAM, bạn có thể đặt cả Xms
và Xmx
thành 512MB
, do đó cho phép 512MB khác cho phần còn lại của quá trình. Lưu ý thông thường cả Xms
và Xmx
đều được đặt thành cùng một giá trị để tránh bị phạt hiệu suất của bộ thu gom rác JVM.
Nếu server của bạn chỉ có 1GB RAM, bạn phải chỉnh sửa cài đặt này.
Mở jvm.options
:
- sudo nano /etc/elasticsearch/jvm.options
Bây giờ thay đổi các giá trị Xms
và Xmx
thành 512MB
:
... -Xms512m -Xmx512m ...
Lưu và thoát khỏi file .
Bây giờ hãy bắt đầu Elasticsearch lần đầu tiên:
- sudo systemctl start elasticsearch.service
Chờ ít nhất 10 giây để Elasticsearch khởi động trước khi bạn cố gắng sử dụng nó. Nếu không, bạn có thể gặp lỗi kết nối.
Lưu ý: Bạn nên biết rằng không phải tất cả cài đặt Elasticsearch đều được đặt và lưu trong file cấu hình. Thay vào đó, một số cài đặt được đặt thông qua API của nó, như index.number_of_shards
và index.number_of_replicas
. Đầu tiên xác định thành bao nhiêu mảnh (mảnh) index sẽ chia. Thứ hai xác định số lượng bản sao sẽ được phân phối trên cụm. Có nhiều phân đoạn hơn sẽ cải thiện hiệu suất lập index , trong khi có nhiều bản sao hơn giúp tìm kiếm nhanh hơn.
Giả sử rằng bạn vẫn đang khám phá và thử nghiệm Elasticsearch trên một nút duy nhất, bạn có thể sử dụng các cài đặt này và thay đổi chúng bằng cách chạy lệnh curl sau:
- curl -XPUT -H 'Content-Type: application/json' 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{
- "index.number_of_replicas" : "0",
- "index.number_of_shards" : "1"
- }'
Với Elasticsearch được cài đặt và cấu hình , bây giờ bạn sẽ bảo mật và kiểm tra server .
Bước 4 - (Tùy chọn) Bảo mật Elasticsearch trên CentOS 8
Elasticsearch không có bảo mật tích hợp và bất kỳ ai có thể truy cập API HTTP đều có thể kiểm soát nó. Phần này không phải là hướng dẫn toàn diện để bảo mật Elasticsearch. Thực hiện bất kỳ biện pháp nào cần thiết để ngăn chặn truy cập trái phép vào nó và server / máy ảo mà nó đang chạy.
Theo mặc định, Elasticsearch được cấu hình để chỉ lắng nghe trên network interface localhost, tức là không thể kết nối từ xa. Bạn nên giữ nguyên cài đặt này trừ khi bạn đã thực hiện một hoặc cả hai biện pháp sau:
- Bạn đã giới hạn quyền truy cập vào cổng TCP 9200 chỉ cho các server tin cậy có iptables .
- Bạn đã tạo một vpn giữa các server tin cậy của bạn và bạn sẽ hiển thị Elasticsearch trên một trong các giao diện ảo của vpn.
Chỉ khi bạn đã thực hiện những điều trên, bạn mới nên cân nhắc cho phép El Plasticeach nghe trên các network interface khác ngoài localhost. Ví dụ: một thay đổi như vậy có thể được xem xét khi bạn cần kết nối với Elasticsearch từ một server khác.
Để thay đổi độ phơi sáng mạng, mở file elasticsearch.yml
:
- sudo nano /etc/elasticsearch/elasticsearch.yml
Trong file này, tìm dòng chứa network.host
, bỏ ghi chú bằng cách xóa ký tự #
ở đầu dòng, sau đó thay đổi giá trị thành địa chỉ IP của network interface bảo mật. Dòng sẽ trông giống như sau:
... network.host: 10.0.0.1 ...
Cảnh báo: Vì Elasticsearch không có bất kỳ bảo mật tích hợp nào, điều rất quan trọng là bạn không đặt địa chỉ IP này thành bất kỳ địa chỉ IP nào có thể truy cập vào bất kỳ server nào mà bạn không kiểm soát hoặc tin cậy. Không ràng buộc Elasticsearch với địa chỉ IP mạng công cộng hoặc chia sẻ .
Ngoài ra, để bảo mật hơn, bạn có thể tắt các tập lệnh được sử dụng để đánh giá các biểu thức tùy chỉnh. Bằng cách tạo ra một biểu thức độc hại tùy chỉnh, kẻ tấn công có thể xâm phạm môi trường của bạn.
Để tắt biểu thức tùy chỉnh, hãy thêm dòng sau vào cuối file /etc/elasticsearch/elasticsearch.yml
:
... script.allowed_types: none ...
Để các thay đổi trên có hiệu lực, bạn sẽ phải khởi động lại Elasticsearch.
Khởi động lại Elasticsearch ngay bây giờ:
- sudo service elasticsearch restart
Trong bước này, bạn đã thực hiện một số biện pháp để bảo mật server Elasticsearch của bạn . Đến đây bạn đã sẵn sàng để kiểm tra ứng dụng.
Bước 5 - Kiểm tra Elasticsearch trên CentOS 8
Hiện tại, Elasticsearch sẽ chạy trên cổng 9200. Bạn có thể kiểm tra bằng cách sử dụng curl
, công cụ dòng lệnh để chuyển URL phía client .
Để kiểm tra dịch vụ, hãy thực hiện yêu cầu GET
như sau:
- curl -X GET 'http://localhost:9200'
Bạn sẽ thấy phản hồi sau:
Output{ "name" : "My First Node", "cluster_name" : "mycluster1", "cluster_uuid" : "R23U2F87Q_CdkEI2zGhLGw", "version" : { "number" : "7.9.2", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "d34da0ea4a966c4e49417f2da2f244e3e97b4e6e", "build_date" : "2020-09-23T00:45:33.626720Z", "build_snapshot" : false, "lucene_version" : "8.6.2", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
Nếu bạn thấy một phản hồi tương tự, Elasticsearch đang hoạt động bình thường. Nếu không, hãy kiểm tra lại hướng dẫn cài đặt và đợi một thời gian để Elasticsearch khởi động hoàn toàn.
Server Elasticsearch của bạn hiện đã hoạt động. Trong bước tiếp theo, bạn sẽ thêm và lấy một số dữ liệu từ ứng dụng.
Bước 6 - Sử dụng Elasticsearch trên CentOS 8
Trong bước này, bạn sẽ thêm một số dữ liệu vào Elasticsearch và sau đó thực hiện một số truy vấn thủ công.
Sử dụng curl
để thêm mục nhập đầu tiên của bạn:
- curl -H 'Content-Type: application/json' -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'
Bạn sẽ thấy kết quả sau:
Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":3,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":2,"_primary_term":4
Bằng cách sử dụng curl
, bạn đã gửi một yêu cầu HTTP POST
đến server El Plasticeach. URI của yêu cầu là /tutorial/helloworld/1
. Ta hãy xem xét kỹ hơn các thông số đó:
-
tutorial
là index của dữ liệu trong Elasticsearch. -
helloworld
là loại. -
1
là id của mục nhập của ta theo index và loại ở trên.
Lưu ý bạn cũng cần đặt kiểu nội dung của tất cả các yêu cầu POST
thành JSON với đối số -H 'Content-Type: application/json'
. Nếu bạn không làm điều này Elasticsearch sẽ từ chối yêu cầu của bạn.
Bây giờ truy xuất mục nhập đầu tiên của bạn bằng cách sử dụng yêu cầu HTTP GET
:
- curl -X GET 'http://localhost:9200/tutorial/helloworld/1'
Kết quả sẽ như thế này:
Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":3,"_seq_no":2,"_primary_term":4,"found":true,"_source":{ "message": "Hello World!" }}
Để sửa đổi một mục hiện có, bạn có thể sử dụng một yêu cầu HTTP PUT
như sau:
- curl -H 'Content-Type: application/json' -X PUT 'localhost:9200/tutorial/helloworld/1?pretty' -d '
- {
- "message": "Hello People!"
- }'
Elasticsearch sẽ xác nhận sửa đổi thành công như 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 }
Trong ví dụ trên, bạn đã sửa đổi message
của mục nhập đầu tiên thành "Hello People!"
. Cùng với đó, số version đã tăng lên 2
.
Để làm cho kết quả của các hoạt động GET
của bạn dễ đọc hơn, bạn cũng có thể "kiểm tra" kết quả của bạn bằng cách thêm đối số pretty
:
- curl -X GET 'http://localhost:9200/tutorial/helloworld/1?pretty'
Bây giờ phản hồi sẽ xuất ra ở định dạng dễ đọc hơn:
Output{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "_seq_no" : 1, "_primary_term" : 1, "found" : true, "_source" : { "message" : "Hello People!" } }
Đây là cách bạn có thể thêm và truy vấn dữ liệu trong Elasticsearch. Để tìm hiểu về các hoạt động khác, bạn có thể kiểm tra tài liệu API Elasticsearch .
Kết luận
Trong hướng dẫn này, bạn đã cài đặt, cấu hình và bắt đầu sử dụng Elasticsearch trên CentOS 8. Khi bạn đã cảm thấy thoải mái với các truy vấn thủ công, nhiệm vụ tiếp theo của bạn sẽ là bắt đầu sử dụng dịch vụ từ các ứng dụng của bạn.
Các tin liên quan
Cách cài đặt và cấu hình Elasticsearch trên CentOS 72020-10-20
Cách cài đặt MongoDB trên CentOS 8
2020-10-07
Cách bảo mật MongoDB trên CentOS 8
2020-10-07
Cách cấu hình quyền truy cập từ xa cho MongoDB trên CentOS 8
2020-10-07
Cách cấu hình ghi log HAProxy với Rsyslog trên CentOS 8 [Quickstart]
2020-09-22
Cách cài đặt Git trên CentOS 8
2020-04-12
Cách thiết lập và cấu hình Tổ chức phát hành chứng chỉ (CA) trên CentOS 8
2020-04-06
Cách cài đặt MariaDB trên CentOS 8
2020-04-03
Cách thiết lập firewall bằng firewalld trên CentOS 8
2020-04-03
Cách thêm và xóa người dùng trên CentOS 8
2020-04-03