Thứ hai, 26/10/2015 | 00:00 GMT+7

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

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 , thì tính năng bảo mật này sẽ được bật cho các server trong cùng một group hoặc account trong cùng khu vực. Điều này đặc biệt quan trọng khi sử dụng Elasticsearch, vì nó không có bảo mật tích hợp trong giao diện HTTP của nó.

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. Elasticsearch yêu cầu Java 7 trở lên. Elasticsearch khuyến nghị Oracle JDK version 1.8.0_73, nhưng gói root Ubuntu OpenJDK dành cho JRE cũng hoạt động.

Bước này hướng dẫn bạn cách cài đặt cả hai version để bạn có thể quyết định version nào phù hợp nhất với mình.

Cài đặt OpenJDK

Gói root Ubuntu OpenJDK dành cho JRE 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 Ubuntu APT.

Trước khi cài đặt OpenJDK với APT, hãy cập nhật danh sách các gói có sẵn để cài đặt trên Ubuntu Server bằng cách chạy lệnh:

  • sudo apt-get update

Sau đó, bạn có thể cài đặt OpenJDK bằng lệnh:

  • sudo apt-get install openjdk-7-jre

Để 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
java version "1.7.0_79" OpenJDK Runtime Environment (IcedTea 2.5.6) (7u79-2.5.6-0ubuntu1.14.04.1) OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

Cài đặt Java 8

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

Thêm Oracle Java PPA vào apt:

  • sudo add-apt-repository -y ppa:webupd8team/java

Cập nhật database gói apt của bạn:

  • sudo apt-get update

Cài đặt version ổn định mới nhất của Oracle Java 8 bằng lệnh này (và chấp nhận thỏa thuận cấp phép bật lên):

  • sudo apt-get -y install oracle-java8-installer

Cuối cùng, xác minh nó đã được cài đặt:

  • java -version

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 Ubuntu, tốt nhất bạn nên sử dụng gói deb (Debian) 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.2. Download nó trong folder bạn chọn bằng lệnh:

  • wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.2.deb

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

  • sudo dpkg -i elasticsearch-1.7.2.deb

Mẹo: Nếu bạn muốn có version Elasticsearch được phát hành mới nhất, hãy truy cập vàoastic.co để tìm liên kết, sau đó sử dụng wget để tải nó xuống Server. Hãy chắc chắn download gói gỡ lỗi.

Đ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 update-rc.d elasticsearch defaults

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

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" : "Harry Leland", "cluster_name" : "elasticsearch", "version" : { "number" : "1.7.2", "build_hash" : "e43676b1385b8125d647f593f7202acbd816e8ec", "build_timestamp" : "2015-09-14T09:49:53Z", "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 thiết lập server HAProxy khả dụng cao với các IP được lưu giữ và nổi trên Ubuntu 14.04
2015-10-23
Cách cài đặt Cassandra và chạy một cụm node đơn trên Ubuntu 14.04
2015-10-21
Cách tạo thiết lập tính khả dụng cao với Corosync, Pacemaker và IP nổi trên Ubuntu 14.04
2015-10-20
Cách tạo thiết lập tính khả dụng cao với Heartbeat và IP nổi trên Ubuntu 14.04
2015-10-20
Cách cài đặt và cấu hình server Salt Master và Minion trên Ubuntu 14.04
2015-10-05
Cách cài đặt và bắt đầu với Symfony 2 trên Ubuntu 14.04
2015-10-01
Cách cài đặt MemSQL trên Ubuntu 14.04
2015-09-30
Cách thiết lập xác thực đa yếu tố cho SSH trên Ubuntu 14.04
2015-09-29
Cách bảo vệ WordPress với Fail2Ban trên Ubuntu 14.04
2015-09-16
Cách cài đặt và sử dụng Composer trên Ubuntu 14.04
2015-09-11