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:
- 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: true và node.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 , node02 và node03 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:
- 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: true và node.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:
- 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: false và node.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 ):
[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 . 
[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:
[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.yml và hosts đượ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.yml và hosts 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.
Các tin liên quan
 

