Thứ năm, 17/03/2016 | 00:00 GMT+7

Cách sử dụng Ansible để thiết lập một cụm sản xuất elastic

Trong hướng dẫn này, ta sẽ chỉ cho bạn cách sử dụng Ansible, một công cụ quản lý cấu hình, để cài đặt cụm Elasticsearch production trên Ubuntu 14.04 hoặc CentOS 7 trong môi trường server cloud . Ta sẽ xây dựng dựa trên hướng dẫn Cách sử dụng Ansible và Tinc VPN để bảo mật cơ sở hạ tầng server của bạn đảm bảo rằng các node Elasticsearch của bạn sẽ được bảo mật khỏi các máy tính bên ngoài mạng của bạn .

Elasticsearch là một server tìm kiếm nguồn mở phổ biến được sử dụng để tìm kiếm và phân tích dữ liệu được phân phối theo thời gian thực. Khi được sử dụng cho bất kỳ mục đích nào khác ngoài phát triển, Elasticsearch nên được triển khai trên nhiều server như một cụm, để có hiệu suất, độ ổn định và khả năng mở rộng tốt nhất.

Yêu cầu

Bạn phải có ít nhất ba server Ubuntu 14.04 hoặc CentOS 7, với mạng riêng, để hoàn thành hướng dẫn này vì một cụm Elasticsearch phải có tối thiểu 3 nút đủ điều kiện chính. Nếu bạn muốn có các node chính và nút dữ liệu chuyên dụng, bạn cần ít nhất 3 server cho các node chính cộng với các server bổ sung cho bất kỳ nút dữ liệu nào. Cũng lưu ý , nếu bạn định sử dụng kích thước heap Elasticsearch mặc định là 2 GB, server của bạn phải được cấp phát ít nhất 4 GB bộ nhớ.

Sau khi có được các server của bạn, hãy cấu hình chúng để sử dụng VPN dạng lưới với hướng dẫn này: Cách Sử dụng Ansible và Tinc VPN để Bảo mật Cơ sở hạ tầng Server của Bạn . Đảm bảo rằng mỗi server có một tên server khoảng không quảng cáo Ansible duy nhất.

Nếu bạn đang sử dụng mạng riêng, chẳng hạn như Mạng riêng DigitalOcean, server của bạn có thể giao tiếp an toàn với các server khác trên cùng một account hoặc group 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ó.

Giả định

Ta sẽ giả định tất cả các server mà bạn muốn sử dụng làm nút Elasticsearch có giao diện VPN được đặt tên là “tun0”, như được mô tả trong hướng dẫn được liên kết ở trên. Nếu không, và bạn muốn các node ES của bạn lắng nghe trên một giao diện khác, bạn sẽ phải áp dụng các thay đổi thích hợp trong file site.yml của Playbook.

Ta cũng sẽ giả định Playbook của bạn nằm trong folder có tên là ansible-tinc trong folder chính của máy tính local của bạn.

Download Playbook ansible -asticsearch

Elastic cung cấp một role Ansible được dùng để dễ dàng cài đặt một cụm Elasticsearch. Để sử dụng nó, ta chỉ cần thêm nó vào ansible-tinc và xác định một vài group server và chỉ định role thích hợp cho các group . , nếu bạn chưa làm theo hướng dẫn VPN tiên quyết, bạn có thể tìm thấy nó ở đây .

Đầu tiên, hãy thay đổi folder chứa Tinc Ansible Playbook của bạn:

  • cd ~/ansible-tinc

Sau đó sao chép role ansible-elasticsearch , có sẵn trên account GitHub của Elastic, vào folder roles của Playbook:

  • cd roles
  • git clone https://github.com/elastic/ansible-elasticsearch

Đổi tên role thành “asticsearch ”:

  • mv ansible-elasticsearch elasticsearch

Cập nhật site.yml

Hãy chỉnh sửa file Playbook chính, site.yml , để ánh xạ ba role Elasticsearch khác nhau cho ba group server Ansible khác nhau. Điều này sẽ cho phép ta tạo các node chính, dữ liệu chuyên dụng và các node Elasticsearch đủ điều kiện / dữ liệu bằng cách chỉ cần thêm server vào các group thích hợp.

Thay đổi trở lại folder của Ansible Playbook:

  • cd ~/ansible-playbook

Trong trình soạn thảo yêu thích của bạn, chỉnh sửa một file mới gọi là elasticsearch.yml . Ta sẽ sử dụng vi :

  • vi site.yml

Ánh xạ role chính chuyên dụng của Elasticsearch với group

Ở dưới cùng của file , bản đồ chủ chuyên dụng elasticsearch role cho elasticsearch_master_nodes group bằng cách thêm những dòng này:

site.yml - Các node chính chuyên dụng
- hosts: elasticsearch_master_nodes   roles:     - { role: elasticsearch, es_instance_name: "node1", es_config: { discovery.zen.ping.unicast.hosts: "node01, node02, node03", network.host: "_tun0_, _local_", cluster.name: "production", discovery.zen.ping.multicast.enabled: false,  http.port: 9200, transport.tcp.port: 9300, node.data: false, node.master: true, bootstrap.mlockall: true } }   vars:     es_major_version: "2.x"     es_version: "2.2.1"     es_heap_size: "2g"     es_cluster_name: "production" 

Role này sẽ tạo các node chính chuyên dụng vì nó cấu hình các node với các giá trị sau: node.master: truenode.data: false .

Đảm bảo cập nhật tên server được đánh dấu trong biến discovery.zen.ping.unicast.hosts để trùng với tên server khoảng không quảng cáo Ansible (hoặc địa chỉ IP VPN) của một số server Elasticsearch của bạn. Điều này sẽ cho phép các node này khám phá cụm Elasticsearch. Trong ví dụ, ta đang sử dụng node01 , node02node03 vì đó là những tên server được sử dụng trong hướng dẫn VPN tiên quyết. Ngoài ra, nếu giao diện VPN của bạn được đặt tên khác với “tun0”, hãy cập nhật biến network.host phù hợp.

Nếu bạn muốn sử dụng version Elasticsearch khác, hãy cập nhật es_version . Lưu ý cấu hình này sẽ không hoạt động đối với các version trước 2.2 vì các version cũ hơn không chấp nhận danh sách được phân tách bằng dấu phẩy cho biến network.host .

Cập nhật es_heap_size thành giá trị gần bằng một nửa bộ nhớ trống trên server chính chuyên dụng của bạn. Ví dụ: nếu server của bạn còn trống khoảng 4 GB, hãy đặt kích thước heap thành “2g”.

Bây giờ bất kỳ host thuộc về elasticsearch_master_nodes host group Ansible sẽ được cấu hình như là bậc thầy chuyên Elasticsearch nút.

Ánh xạ Elasticsearch Master / Role dữ liệu với group

Ở dưới cùng của file , bản đồ tổng thể đủ điều kiện và dữ liệu elasticsearch role cho elasticsearch_master_data_nodes group bằng cách thêm những dòng này:

site.yml - Các node dữ liệu / đủ điều kiện chính
- hosts: elasticsearch_master_data_nodes   roles:     - { role: elasticsearch, es_instance_name: "node1", es_config: { discovery.zen.ping.unicast.hosts: "node01, node02, node03", network.host: "_tun0_, _local_", cluster.name: "production", discovery.zen.ping.multicast.enabled: false, http.port: 9200, transport.tcp.port: 9300, node.data: true, node.master: true, bootstrap.mlockall: true } }   vars:     es_major_version: "2.x"     es_version: "2.2.1"     es_heap_size: "2g"     es_cluster_name: "production" 

Role này sẽ tạo các node dữ liệu đủ điều kiện chính vì nó cấu hình các node với các giá trị sau: node.master: truenode.data: true .

Đảm bảo cập nhật tên server được đánh dấu trong biến discovery.zen.ping.unicast.hosts để trùng với tên server khoảng không quảng cáo Ansible (hoặc địa chỉ IP VPN) của một số server Elasticsearch của bạn. Ngoài ra, nếu giao diện VPN của bạn được đặt tên khác với “tun0”, hãy cập nhật biến network.host phù hợp.

Đặt es_version thành cùng một giá trị mà bạn đã sử dụng cho role chính chuyên dụng.

Cập nhật es_heap_size thành giá trị gần bằng một nửa bộ nhớ trống trên server dữ liệu / đủ điều kiện chính của bạn.

Bây giờ bất kỳ host thuộc về elasticsearch_master_data_nodes host group Ansible sẽ được cấu hình như các node dữ liệu mà là tổng thể hội đủ điều kiện.

Ánh xạ role dữ liệu chuyên dụng của Elasticsearch với group

Ở dưới cùng của file , bản đồ dữ liệu chuyên dụng elasticsearch role cho elasticsearch_data_nodes group bằng cách thêm những dòng này:

site.yml - Các node dữ liệu chuyên dụng
- hosts: elasticsearch_data_nodes   roles:     - { role: elasticsearch, es_instance_name: "node1", es_config: { discovery.zen.ping.unicast.hosts: "node01, node02, node03", network.host: "_tun0_, _local_", cluster.name: "production", discovery.zen.ping.multicast.enabled: false, http.port: 9200, transport.tcp.port: 9300, node.data: true, node.master: false, bootstrap.mlockall: true } }   vars:     es_major_version: "2.x"     es_version: "2.2.1"     es_heap_size: "2g"     es_cluster_name: "production" 

Role này sẽ tạo các node dữ liệu chuyên dụng vì nó cấu hình các node với các giá trị sau: node.master: falsenode.data: true .

Đảm bảo cập nhật tên server được đánh dấu trong biến discovery.zen.ping.unicast.hosts để trùng với tên server khoảng không quảng cáo Ansible (hoặc địa chỉ IP VPN) của một số server Elasticsearch của bạn. Ngoài ra, nếu giao diện VPN của bạn được đặt tên khác với “tun0”, hãy cập nhật biến network.host phù hợp.

Đặt es_version thành cùng một giá trị mà bạn đã sử dụng trong các role trước đó.

Cập nhật es_heap_size thành giá trị gần bằng một nửa bộ nhớ trống trên server dữ liệu chuyên dụng của bạn.

Bây giờ bất kỳ host thuộc về elasticsearch_data_nodes host group Ansible sẽ được cấu hình như dữ liệu chuyên dụng Elasticsearch nút.

Lưu và thoát

Đến đây bạn đã xác định ba role và ánh xạ chúng đến các group lưu trữ, bạn có thể lưu và thoát khỏi site.yml .

Vui lòng thêm nhiều role Elasticsearch và ánh xạ group server sau này.

Cập nhật file kiểm kê server lưu trữ

Như vậy, các role Elasticsearch mới đã được ánh xạ tới các group server , bạn có thể tạo các loại nút Elasticsearch khác nhau bằng cách thêm các server vào các group server thích hợp.

Chỉnh sửa file kiểm kê hosts Ansible:

  • vi hosts

Nếu bạn đã làm theo hướng dẫn yêu cầu , file của bạn sẽ trông giống như sau (với tên server và địa chỉ IP của server ):

Khoảng không quảng cáo server Ansible - Tệp root
[vpn] node01 vpn_ip=10.0.0.1 ansible_host=45.55.41.106 node02 vpn_ip=10.0.0.2 ansible_host=159.203.104.93 node03 vpn_ip=10.0.0.3 ansible_host=159.203.104.127 node04 vpn_ip=10.0.0.4 ansible_host=159.203.104.129  [removevpn] 

Bây giờ, hãy thêm ba group tương ứng với các ánh xạ mà ta đã xác định trong site.yml .

Khoảng không quảng cáo server Ansible - Group Elasticsearch
[elasticsearch_master_nodes]  [elasticsearch_master_data_nodes]  [elasticsearch_data_nodes] 

Bây giờ, hãy phân phối các server Elasticsearch của bạn giữa các group server mới, tùy thuộc vào loại nút Elasticsearch mà bạn muốn cụm của bạn bao gồm. Ví dụ: nếu bạn muốn ba nút chính chuyên dụng và một nút dữ liệu chuyên dụng duy nhất, file khoảng không quảng cáo của bạn sẽ trông giống như sau:

Khoảng không quảng cáo server Ansible - Toàn bộ ví dụ
[vpn] node01 vpn_ip=10.0.0.1 ansible_host=45.55.41.106 node02 vpn_ip=10.0.0.2 ansible_host=159.203.104.93 node03 vpn_ip=10.0.0.3 ansible_host=159.203.104.127 node04 vpn_ip=10.0.0.4 ansible_host=159.203.104.129  [removevpn]  [elasticsearch_master_nodes] node01 node02 node03  [elasticsearch_master_data_nodes]  [elasticsearch_data_nodes] node04 

Lưu ý: Mỗi nút Elasticsearch cũng phải được xác định trong group server [vpn] để tất cả các node có thể giao tiếp với nhau qua VPN. Ngoài ra, bất kỳ server nào cần kết nối với cụm Elasticsearch cũng phải được xác định trong group server [vpn] .

Khi file khoảng không quảng cáo của bạn phản ánh cài đặt Elasticsearch (và VPN) mong muốn, hãy lưu và thoát.

Tạo cụm Elasticsearch

Bây giờ site.ymlhosts được cài đặt , bạn đã sẵn sàng tạo cụm Elasticsearch của bạn bằng cách chạy Playbook.

Chạy Playbook bằng lệnh này:

  • ansible-playbook site.yml

Sau khi Playbook hoàn tất quá trình chạy, cụm Elasticsearch của bạn sẽ được cài đặt và chạy. Bước tiếp theo là xác minh mọi thứ đang hoạt động bình thường.

Xác minh trạng thái cụm Elasticsearch

Từ bất kỳ server Elasticsearch nào của bạn, hãy chạy lệnh này để in trạng thái của cụm:

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

Bạn sẽ thấy kết quả cho biết rằng một cụm có tên “sản xuất” đang chạy. Nó cũng phải cho biết tất cả các node bạn đã cấu hình đều là thành viên:

Cluster State:
{ "cluster_name" : "production", "version" : 8, "state_uuid" : "SgTyn0vNTTu2rdKPrc6tkQ", "master_node" : "OzqMzte9RYWSXS6OkGhveA", "blocks" : { }, "nodes" : { "OzqMzte9RYWSXS6OkGhveA" : { "name" : "node02-node1", "transport_address" : "10.0.0.2:9300", "attributes" : { "data" : "false", "master" : "true" } }, "7bohaaYVTeeOHvSgBFp-2g" : { "name" : "node04-node1", "transport_address" : "10.0.0.4:9300", "attributes" : { "master" : "false" } }, "cBat9IgPQwKU_DPF8L3Y1g" : { "name" : "node03-node1", "transport_address" : "10.0.0.3:9300", "attributes" : { "master" : "false" } }, ...

Nếu bạn thấy kết quả tương tự như thế này, cụm Elasticsearch của bạn đang chạy! Nếu một số nút của bạn bị thiếu, hãy xem lại khoảng không quảng cáo hosts Ansible của bạn đảm bảo rằng các group server của bạn được xác định đúng cách.

Xử lý sự cố

Nếu bạn gặp sự cố curl: (7) Failed to connect to localhost port 9200: Connection refused , Elasticsearch không chạy trên server đó. Điều này thường được gây ra bởi lỗi cấu hình Elasticsearch trong site.yml file , chẳng hạn như không chính xác network.host hoặc discovery.zen.ping.unicast.hosts mục. Ngoài việc xem xét file đó, hãy kiểm tra log Elasticsearch trên server của bạn ( /var/log/elasticsearch/ node01 -node1/production.log ) để tìm manh mối.

Nếu bạn muốn xem ví dụ về Playbook được tạo theo hướng dẫn này, hãy xem kho lưu trữ GitHub này . Điều này sẽ giúp bạn biết site.ymlhosts trông như thế nào.

Kết luận

Cụm Elasticsearch của bạn sẽ chạy ở trạng thái khỏe mạnh và được cấu hình với một số tối ưu hóa cơ bản!

Elasticsearch có nhiều tùy chọn cấu hình khác không được đề cập ở đây, chẳng hạn như cài đặt index , phân đoạn và sao chép. Bạn nên truy cập lại cấu hình của bạn sau cùng với tài liệu chính thức, đảm bảo rằng cụm của bạn được cấu hình để đáp ứng nhu cầu của bạn.


Tags:

Các tin liên quan