Hotline : 07 088 44444
Thích
Chia sẻ

Cài Elasticsearch trên CentOS 7 chỉ trong 6 bước

30/04/2021

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. Elasticsearch nổi tiếng bởi sự đơn giản, mạnh mẽ và khả năng mở rộng tuyệt vời. Sau đây là hướng dẫn cài Elasticsearch trên CentOS 7 nhanh nhất, đơn giản nhất.

Phần mềm Elasticsearch là gì?

Elasticsearch là một công cụ tìm kiếm dựa trên nền tảng Apache Lucene. Phần mềm cung cấp một bộ máy tìm kiếm dạng phân tán và có đầy đủ công cụ với giao diện web HTTP.

Elasticsearch hiện hỗ trợ RESTful. Do đó, ta có thể sử dụng các phương thức HTPT (GET, POST, PUT, DELETE…) kết hợp với HTTP URI (/collection/entry) để thao tác với dữ liệu. Một trong những lý do chính cho sự nổi tiếng của Elasticsearch chính là phương pháp tiếp cận RESTful trực quan, thân thiện đối với các developer lẫn người dùng.

Bên cạnh đó, Elasticsearch còn là một phần mềm mã nguồn mở, miễn phí và được xây dựng bởi một công ty vững mạnh – Elastic. Do đó, nó có thể được ứng dụng trong rất nhiều trường hợp.

Hướng dẫn cài Elasticsearch trên CentOS 7
Hướng dẫn cài Elasticsearch trên CentOS 7

Điều kiện để cài đặt Elasticsearch

  • Một server đang chạy CentOS 7 với tối thiểu 1GB bộ nhớ, cùng với một non-root sudo user.
  • wget đã được cài đặt trên server.

Hướng dẫn cài đặt Elasticsearch trên CentOS 7

Bước 1: Cài đặt Java trên CentOS 7

Elasticsearch được viết bằng ngôn ngữ Java. Do đó, đầu tiên ta cần cài một Java Runtime Environment (JRE) trên server. Cụ thể, ta sẽ sử dụng một native CentOS OpenJDK package cho JRE. JRE là một công cụ miễn phí, được hỗ trợ tốt và được quản lý tự động qua trình quản lý cài đặt CentOS Yum.

Trước tiên, ta cần cài đặt phiên bản mới nhất của OpenJDK 8:

sudo yum install java-1.8.0-openjdk.x86_64

Tiếp theo, xác minh việc cài đặt:

java -version

Command sẽ mở ra một output như sau:

Output
openjdk 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)

Bước 2: Download và cài Elasticsearch trên CentOS 7

Bây giờ, ta có thể download Elasticsearch trực tiếp từ elastic.co trong các package zip, tar.gz, deb hoặc rpm. Đối với CentOS, lựa chọn tốt nhất sẽ là native package rpm. Vì nó sẽ cài đặt mọi thứ cần thiết để chạy Elasticsearch.

Tính đến thời điểm viết hướng dẫn thì phiên bản mới nhất là 7.12. Từ directory hiện tại, hãy download chương trình:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.12-x86_64.rpm

Tiếp theo, cài đặt bằng lệnh rpm:

sudo rpm -ivh elasticsearch-7.12-x86_64.rpm

Sau đó, Elasticsearch sẽ được cài đặt trong /usr/share/elasticsearch/, các config file thì nằm trong /etc/elasticsearch. Các init script sẽ được thêm vào /etc/init.d/elasticsearch.

Để đảm bảo Elasticsearch sẽ khởi động và dừng tự động cùng với server, hãy thêm init script của nó vào runlevels mặc định:

sudo systemctl enable elasticsearch.service

Sau khi Elasticsearch đã được cài đặt, ta có thể bắt đầu cấu hình một số cài đặt quan trọng.

Bước 3: Cấu hình Elasticsearch trên CentOS 7

Ta đã hoàn tất việc cài Elasticsearch trên CentOS 7 cũng như cài các Java dependency của nó. Bây giờ là bước cấu hình Elasticsearch.

Các config file của Elasticsearch đều nằm trong directory /etc/elasticsearch. Một số thiết lập quan trọng mà ta sẽ cấu hình gồm:

  • elasticsearch.yml – Cấu hình thiết lập server Elasticsearch. Đây là nơi hầu hết các option được lưu trữ. Do đó, đây cũng sẽ là file quan trọng để cấu hình.
  • jvm.options – Cung cấp cấu hình cho JVM, chẳng hạn như thiết lập bộ nhớ.

Tiếp đến là các biến, một số biến cần được tinh chỉnh trên server Elasticsearch là node.namecluster.name trong elasticsearch.yml.

Trong đó, node.name chỉ định tên của server (node) và cluster.name chỉ định tên của cluster. Nếu ta không chỉnh lại các biến này, một node.name sẽ được tự động gán theo server hostname. Còn cluster.name sẽ được tự động đặt thành tên của cluster mặc định.

Giá trị cluster.name thường được sử dụng tới tính năng tự động khám phá của Elasticsearch. Khi đó, nó sẽ tự động phát hiện và liên kết các node Elasticsearch với một cluster.

Edit main config file elasticsearch.yml

Đầu tiên, mở file này bằng nano hoặc text editor bất kỳ:

sudo nano /etc/elasticsearch/elasticsearch.yml

Hãy xóa kí tự # ở đầu các dòng của node.namecluster.name để chúng có hiệu lực, rồi thay đổi các giá trị. Thay đổi cấu hình đầu tiên trong file /etc/elasticsearch/elasticsearch.yml sẽ tương tự như sau:

...
node.name: "My First Node"
cluster.name: mycluster1
...

Các thiết lập mạng cũng được tìm thấy ở trong elasticsearch.yml. Theo mặc định, Elasticsearch sẽ nghe localhost trên port 9200. Do đó, chỉ các client từ cùng một server mới có thể kết nối. Ta nên để các cài đặt này theo mặc định, vì phiên bản mã nguồn mở miễn phí của Elasticsearch không hỗ trợ tính năng xác thực.

node.roles

Một cài đặt quan trọng khác là node.roles. Ta có thể đặt nó thành master-eligible (hoặc đơn giản là master trong cấu hình). Hoặc có thể đặt thành data hay ingest.

  • master-eligible chịu trách nhiệm đảm bảo tính ổn định của các cluster. Trong các triển khai lớn với nhiều cluster node, ta nên có nhiều hơn là chỉ một node chuyên dụng với master role. Thông thường, một master node sẽ không lưu trữ dữ liệu hay tạo các index. Do đó, ta sẽ không thể bị overload – hiện tượng làm ảnh hưởng xấu đến các cluster.
  • data có nhiệm vụ xác định các node sẽ lưu trữ dữ liệu. Thậm chí nếu một data node bị overload, cluster sẽ không bị ảnh hưởng quá nghiêm trọng. Tất nhiên chỉ khi có các node khác đảm nhiệm phần load bị quá tải.
  • Cuối cùng, ingest sẽ cho phép một node chấp nhận và xử lý các data stream. Các setup lớn hơn thường sẽ cần thêm các node ingest, giúp tránh hiện tượng overload trên các node masterdata.

Lưu ý: Một node có thể có nhiều hơn một role, do đó làm tăng khả năng mở rộng cũng như tính khả dụng của Elasticsearch. Theo mặc định, tất cả các role trên đều được gán vào các node. Việc này sẽ phù hợp những setup Elasticsearch single-node. Khi đó ta không cần phải thay đổi các role nữa. Tuy nhiên, ta có thể thay đổi role nếu muốn, chẳng hạn như đặt node thành master:

...
node.roles: [ master ]
...

Thay đổi path.data

path.data có nhiệm vụ xác định path mà data sẽ được lưu trữ. Path mặc định là /var/lib/elasticsearch. Trong môi trường sản xuất, ta nên sử dụng phân vùng dữ liệu và mount point để lưu trữ dữ liệu Elasticsearch. Việc này sẽ mang lại hiệu suất tốt hơn hẳn, và giúp lưu trữ các dữ liệu độc lập với nhau. Ta có thể chỉ định một path path.data khác bằng cách uncomment dòng path.data và thay đổi giá trị của nó:

...
path.data: /media/different_media
...

Sau khi đã hoàn thành các thay đổi, hãy lưu và đóng elasticsearch.yml.

Thay đổi cấu hình trong jvm.options

Vì Elasticsearch chạy bằng JVM, tức là về cơ bản thì nó giống như một ứng dụng Java. Do đó, JVM cũng có thể được cấu hình trong file /etc/elasticsearch/jvm.options giống như mọi ứng dụng Java khác. Trong đó, hai cài đặt quan trọng nhất, đặc biệt là đối với hiệu suất, là XmsXmx. Hai cài đặt này sẽ xác định phân bổ bộ nhớ tối đa (Xmx) và tối thiểu (Xms).

Theo mặc định, cả hai giá trị đều được đặt thành 1GB, tuy nhiên nó không hề thiết thực. Hãy tưởng tượng sử dụng một server với chỉ 1GB RAM, ta sẽ chẳng thể khởi động được Elasticsearch với cài đặt mặc định. Sở dĩ vì hệ điều hành luôn chiếm ít nhất 100MB, nên việc để dành 1GB cho Elasticsearch là không thể.

Không may là ta không có công thức chung nào để tính toán cài đặt bộ nhớ cả. Dĩ nhiên, bộ nhớ được phân bổ càng nhiều thì càng tốt, nhưng hãy đảm bảo còn đủ bộ nhớ cho các quá trình còn lại trên server. Giả sử ta có một máy với 1GB RAM, thì XmsXmx có thể được đặt thành 512MB. Khi đó ta sẽ còn lại 512MB cho các quá trình khác. Lưu ý: Giá trị của XmsXmx thường được đặt giống nhau.

Với server có một 1GB RAM, hãy bắt đầu bằng việc mở jvm.options:

sudo nano /etc/elasticsearch/jvm.options

Bây giờ, đặt giá trị của XmsXmx thành 512MB:

...
-Xms512m
-Xmx512m
...

Tiếp theo, hãy lưu và thoát file.

Bây giờ hãy mở Elasticsearch bằng lệnh sau:

sudo service elasticsearch start

Quá trình khởi động Elasticsearch thường sẽ mất khoảng 10 giây.

Lưu ý:

Không phải tất cả cài đặt Elasticsearch đều được thiết lập và lưu trữ trong các config file. Thay vào đó, một số cài đặt được đặt qua API của nó. Chẳng hạn như index.number_of_shards hay index.number_of_replicas. Cài đặt đầu tiên sẽ xác định số mảnh (shard) mà index sẽ chia ra. Cài đặt còn lại xác định số lượng bản sao sẽ được phân phối trên toàn bộ cluster. Có nhiều shard hơn sẽ cải thiện hiệu suất của index. Trong khi đó, nhiều bản sao sẽ giúp tăng tốc độ tìm kiếm.

Giả sử ta đang test Elasticsearch trên một node duy nhất. Khi đó, các node này có thể được thay đổi bằng 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"
}'

Sau khi đã cấu hình và cài Elasticsearch trên CentOS 7, bây giờ ta có thể bảo mật và kiểm thử server.

Bước 4: Bảo mật Elasticsearch

Elasticsearch không có tính năng bảo mật được tính hợp sẵn. Do đó, bất kỳ ai có quyền truy cập vào HTPT API cũng có thể kiểm soát Elasticsearch. Bước này không phải là một hướng dẫn toàn diện để có thể bảo mật Elasticsearch. Do đó, hãy chỉ thực hiện những giải pháp cần thiết để ngăn chặn truy cập trái phép vào Elasticsearch và server mà nó đang chạy.

Theo mặc định, Elasticsearch được cấu hình chỉ để nghe trên localhost network interface. Do đó, ta sẽ không thể kết nối với Elasticsearch từ xa. Vì vậy ta nên giữ nguyên cài đặt trừ khi:

  • Giới hạn chỉ cho các host được tin cậy có iptables truy cập vào TCP port 9200.
  • Đã tạo VPN giữa các host, chuẩn bị expose Elasticsearch trên một trong số các virtual interface của VPN.

Nếu đã thực hiện một trong hai cài đặt trên, tốt nhất hãy cho phép Elasticsearch nghe các netword interface khác ngoài localhost. Đặc biệt là khi cần kết nối với Elasticsearch từ một host khác.

Đầu tiên, mở file elasticsearch.yml để thay đổi network exposure:

sudo nano /etc/elasticsearch/elasticsearch.yml

Trong file này, tìm dòng có chứa network.host rồi uncomment nó 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 được bảo mật. Dòng đó sẽ có dạng như sau:

...
network.host: 10.0.0.1
...
Lưu ý:

Như chúng tôi đã nói ở trên, Elasticsearch không có trình bảo mật nào được tích hợp sẵn. Do đó không được đặt phần này thành địa chỉ IP mà các server không được kiểm soát hay tin cậy có thể truy cập. Ngoài ra cũng không được ràng buộc Elasticsearch với một địa chỉ IP public hay shared private network.

Bên cạnh đó, ta có thể disable custom expressions để tăng thêm tính bảo mật. Cụ thể, 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, hãy restart lại Elasticsearch:

sudo service elasticsearch restart

Như vậy là ta đã hoàn thành việc thêm một số biện pháp để bảo mật server Elasticsearch. Tiếp theo là bước test ứng dụng sau khi cài Elasticsearch trên CentOS 7.

Bước 5: Test Elasticsearch trên CentOS 7

Bây giờ, Elasticsearch sẽ chạy trên port 9200. Để kiểm tra, hãy sử dụng curl – command-line tool để chuyển URL client-side.

Đầu tiên, tạo một request GET:

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

Màn hình sẽ hiển thị các response như sau:

{
  "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 nhận được response tương tự như trên, Elasticsearch đang hoạt động hoàn toàn tốt. Còn không, hãy kiểm tra lại hướng dẫn cài Elasticsearch trên CentOS 7 ở trên.

Ở bước cuối cùng, ta 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 7

Bây giờ, ta bắt đầu thêm một số dữ liệu vào Elasticsearch và thực hiện vài truy vấn thủ công.

Đầu tiên, dùng curl để thêm vào entry đầu tiên:

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

Output sẽ có dạng như sau:

{"_index":"tutorial","_type":"helloworld","_id":"1","_version":3,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":2,"_primary_term":4

Bây giờ dùng curl để gửi một request HTTP POST đến server Elasticsearch. URI của request là /tutorial/helloword/1. Trong đó:

  • tutorial là index của dữ liệu trong Elasticsearch.
  • helloworld : loại dữ liệu
  • 1 : id của entry

Lưu ý rằng ta cũng cần đặt loại content của mọi POST request thành JSON với đối số -H 'Content-Type: applocation/json' . Nếu không , Elasticsearch sẽ reject các request này.

Bây giờ, truy xuất entry đầu tiên bằng HTTP GET request:

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

Output:

{"_index":"tutorial","_type":"helloworld","_id":"1","_version":3,"_seq_no":2,"_primary_term":4,"found":true,"_source":{ "message": "Hello World!" }}

Để chỉnh sửa entry hiện có, hãy sử dụng một HTTP request PUT:

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:

{
  "_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, ta đã sửa message của entry đầu thành "Hello Peopple!". Khi đó, version number sẽ được tăng lên thành 2.

Để làm cho output của GET dễ đọc hơn, ta có thể thể thêm đối số pretty vào:

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

Output bây giờ sẽ ở định dạng dễ đọc hơn như sau:

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

Như vậy là ta đã hoàn tất việc thêm và truy vấn dữ liệu trong Elasticsearch.

Kết luận

Trong hướng dẫn này, ta đã biết cách cài Elasticsearch trên CentOS 7. Cùng với đó là cách cấu hình, bảo mật và sử dụng Elasticsearch. Chúc các bạn thành công!

Nếu bạn có thắc mắc hay có vấn đề cần hỗ trợ, bạn có thể liên hệ trực tiếp với Vietnix thông qua các kênh sau:
  • Hotline: 1800 1093 - 07 088 44444
  • Email: support@vietnix.vn
  • Hoặc chat trực tiếp với Vietnix thông qua biểu tượng Livechat ở góc phải màn hình. Đội ngũ chuyên viên của chúng tôi luôn sẵn sàng tư vấn và hỗ trợ bạn 24/7.
Vietnix hiện đang có chương trình khuyến mãi lớn nhất trong năm, giảm giá TRỌN ĐỜI: Đăng ký dùng thử ngay và Vietnix sẽ hoàn tiền 100% nếu quý khách không hài lòng với chất lượng sản phẩm, dịch vụ!
Mình là Bo - admin của Quản Trị Linux. Mình đã có 10 năm làm việc trong mảng System, Network, Security và đã trải nghiệm qua các chứng chỉ như CCNP, CISSP, CISA, đặc biệt là chống tấn công DDoS. Gần đây mình trải nghiệm thêm Digital Marketing và đã hòan thành chứng chỉ CDMP của PersonVUE. Mình rất thích được chia sẻ và hỗ trợ cho mọi người, nhất là các bạn sinh viên. Hãy kết nối với mình nhé!
Bài viết liên quan
Không có bài viết liên quan
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments