Thứ ba, 20/10/2020 | 00:00 GMT+7

Cách cài đặt và cấu hình Elasticsearch trên CentOS 7

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à một 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 để sử dụng ở mọi nơi, 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

Trước khi làm theo hướng dẫn này, hãy đảm bảo bạn hoàn thành các yêu cầu sau:

Trừ khi có lưu ý khác, tất cả các lệnh yêu cầu quyền root trong hướng dẫn này phải được chạy với quyền user không phải root có quyền sudo.

Giả định

Hướng dẫn này giả định server của bạn đang sử dụng VPN giống như được mô tả ở đây: Cách sử dụng VPN Ansible và Tinc để bảo mật cơ sở hạ tầng server của bạn . Điều này sẽ cung cấp chức năng mạng riêng tư dù mạng vật lý mà server của bạn đang sử dụng.

Nếu bạn đang sử dụng mạng riêng được chia sẻ, chẳng hạn như Mạng riêng DigitalOcean, bạn phải sử dụng VPN để bảo vệ Elasticsearch khỏi truy cập trái phép. Mỗi server phải trên cùng một mạng riêng vì Elasticsearch không có bảo mật được tích hợp trong giao diện HTTP của nó. Mạng riêng không được chia sẻ với bất kỳ máy tính nào mà bạn không tin tưởng.

Bước 1 - Cài đặt Java

Đầu tiên, bạn cần có Môi trường thời gian chạy Java (JRE) trên Server của bạn vì Elasticsearch được viết bằng ngôn ngữ lập trình Java. Bạn có thể 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.

Bạn có thể cài đặt OpenJDK mới nhất bằng lệnh:

  • sudo yum install java-1.8.0-openjdk.x86_64

Để xác minh JRE của bạn đã được cài đặt và được dùng , hãy chạy lệnh:

  • java -version

Kết quả sẽ như thế này:

Output of java -version
openjdk version "1.8.0_65" OpenJDK Runtime Environment (build 1.8.0_65-b17) OpenJDK 64-Bit Server VM (build 25.65-b01, 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 về cách thực hiện việc này, vui lòng xem bài viết vềCách cài đặt Java trên CentOS và Fedora .

Bước 2 - Download và cài đặt Elasticsearch

Elasticsearch có thể được download trực tiếp từastic.co trong các gói zip, tar.gz, deb hoặc rpm. Đối với CentOS, tốt nhất bạn nên sử dụng gói rpm root 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à 1.7.3. Download nó trong folder bạn chọn bằng lệnh:

  • wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.3.noarch.rpm

Sau đó cài đặt nó theo cách CentOS thông thường bằng lệnh rpm như sau:

  • sudo rpm -ivh elasticsearch-1.7.3.noarch.rpm

Điều này dẫn đến việc Elasticsearch được cài đặt trong /usr/share/elasticsearch/ với các file cấu hình của nó đượ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 bắt đầu và dừng tự động với Server, hãy thêm tập lệnh init của nó vào runlevel mặc định bằng lệnh:

  • sudo systemctl enable elasticsearch.service

Bước 3 - Cấu hình elastic

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 file cấu hình Elasticsearch nằm trong folder /etc/elasticsearch . Có hai file :

  • elasticsearch.yml - Cấu hình cài đặt server Elasticsearch. Đây là nơi lưu trữ tất cả các tùy chọn, ngoại trừ các tùy chọn để ghi log , đó là lý do tại sao ta hầu hết quan tâm đến file này.

  • logging.yml - Cung cấp cấu hình để ghi log . Lúc đầu, bạn không phải chỉnh sửa file này. Bạn có thể để lại tất cả các tùy chọn ghi log mặc định. Bạn có thể tìm thấy các bản ghi 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ỳ server Elasticsearch là node.namecluster.name trong elasticsearch.yml . 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 biến này, tên node.name sẽ được tự động gán cho tên server 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.

Để bắt đầu chỉnh sửa file cấu hình elasticsearch.yml chính:

  • sudo nano /etc/elasticsearch/elasticsearch.yml

Xóa ký tự # ở đầu các dòng cho node.namecluster.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:

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

Một cài đặt quan trọng khác là role của server , có thể là “chủ” hoặc “ server ”. “Các bậc thầy” chịu trách nhiệm về sức khỏe và sự ổn định của cụm. Trong các đợt triển khai lớn với nhiều nút cụm, bạn nên có nhiều hơn một “cái chính” chuyên dụng. Thông thường, một “tổng thể” 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.

“Các slaver ” được sử dụng làm “các ngựa làm việc” có thể được tải các việc dữ liệu. Ngay cả khi một nút " slaver " 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.

Cài đặt xác định role của server được gọi là node.master . Nếu bạn chỉ có một nút Elasticsearch, bạn nên bỏ chú thích tùy chọn này để nó giữ giá trị mặc định là true - tức là nút duy nhất cũng phải là nút chính. Ngoài ra, nếu bạn muốn cấu hình nút làm slaver , hãy xóa ký tự # ở đầu dòng node.master và thay đổi giá trị thành false :

/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ó xác định xem một nút 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 nên đượ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 nút. Một là khi nút là một “tổng thể” chuyên dụng, như ta đã đề cập. Khác là khi một nút chỉ được sử dụng để tìm nạp dữ liệu từ các node và tổng hợp kết quả. Trong trường hợp sau, nút sẽ hoạt động như một “bộ cân bằng tải tìm kiếm”.

, nếu bạn chỉ có một nút Elasticsearch, bạn nên bỏ chú thích cài đặt này để nó giữ giá trị true mặc định. Nếu không, để tắt lưu trữ dữ liệu local , hãy bỏ comment sau và thay đổi giá trị thành false :

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

Hai tùy chọn quan trọng khác là index.number_of_shardsindex.number_of_replicas . Đầu tiên xác định thành bao nhiêu mảnh (mảnh) index sẽ được chia thành. Thứ hai xác định số lượng bản sao sẽ được phân phối trên toà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, tốt hơn nên bắt đầu với chỉ 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 thành như sau (đảm bảo xóa dấu # ở đầu các dòng):

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

Một cài đặt cuối cùng mà bạn có thể cần 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 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ó:

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

Sau khi bạn thực hiện tất cả các thay đổi, vui lòng lưu và thoát khỏi file . Đến đây bạn có thể khởi động Elasticsearch lần đầu tiên bằng lệnh:

  • sudo service elasticsearch start

Vui lòng đợi ít nhất 10 giây để Elasticsearch khởi động hoàn toàn trước khi bạn có thể sử dụng nó. Nếu không, bạn có thể gặp lỗi không thể kết nối.

Bước 4 - Đảm bảo elastic

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. 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. Cân nhắc sử dụng iptables để bảo mật hệ thống của bạn hơn nữa.

Tinh chỉnh bảo mật đầu tiên là ngăn truy cập . Để xóa quyền truy cập , hãy chỉnh sửa file 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 localhost để nó trông giống như sau:

/etc/elasticsearch/elasticsearch.yml
... network.bind_host: localhost ... 

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ẻ riêng tư !

Ngoài ra, để bảo mật hơn, bạn có thể tắt các tập lệnh động đượ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 các biểu thức tùy chỉnh, hãy thêm dòng sau vào cuối file /etc/elasticsearch/elasticsearch.yml :

/etc/elasticsearch/elasticsearch.yml
... script.disable_dynamic: true ... 

Để các thay đổi trên có hiệu lực, bạn sẽ phải khởi động lại Elasticsearch bằng lệnh:

  • sudo service elasticsearch restart

Bước 5 - Kiểm tra

Hiện tại, Elasticsearch sẽ chạy trên cổng 9200. Bạn có thể kiểm tra nó với curl, công cụ chuyển URL phía client dòng lệnh và yêu cầu GET đơn giản như sau:

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

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

Output of curl
{ "status" : 200, "name" : "CentOS Node", "cluster_name" : "mysqluster", "version" : { "number" : "1.7.3", "build_hash" : "05d4530971ef0ea46d0f4fa6ee64dbc8df659682", "build_timestamp" : "2015-10-15T09:14:17Z", "build_snapshot" : false, "lucene_version" : "4.10.4" }, "tagline" : "You Know, for Search" }

Nếu bạn thấy phản hồi tương tự như ở trên, Elasticsearch đang hoạt động bình thường. Nếu không, hãy đảm bảo bạn đã làm theo đúng hướng dẫn cài đặt và bạn đã để một thời gian để Elasticsearch khởi động hoàn toàn.

Bước 6 - 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 RESTful API, đá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ó, ta sẽ sử dụng lại curl.

Bạn có thể thêm mục nhập đầu tiên của bạn 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,"created":true}

Với curl, ta đã 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 . Điều quan trọng là phải hiểu các thông số ở đây:

  • 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.

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

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

Kết quả trông như sau :

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"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 -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, "created" : false }

Trong ví dụ trên, ta đã sửa đổi message của mục nhập đầu tiên thành “Xin chào mọi người!”. Cùng với đó, số version đã đượ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 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ể "kiểm tra" kết quả của bạn khi truy xuất dữ liệu và nhận được kết quả đẹp hơn nhiều 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 World!" } }

Lúc này, ta đã 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

Đó 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, nhiệm 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 .


Tags:

Các tin liên quan

Cách cài đặt và cấu hình Elasticsearch trên CentOS 8
2020-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