使用 Ansible 部署 Elasticsearch 集群

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 使用 Ansible 部署 Elasticsearch 集群

Elasticsearch 是一款开源的分布式搜索和分析引擎,我们可以在其中存储海量的数据并且快速地进行搜索,然而部署 Elasticsearch 集群的过程耗时且繁琐,好在 Elasticsearch 官方为我们提供了 Ansible Playbook 方便我们快速部署 Elasticsearch 集群。ansible-elasticsearch github 地址:https://github.com/elastic/ansible-elasticsearch。本文将演示使用 Ansible 搭建一套 3 Master 和 3 Data 节点的 Elasticsearch 集群。

机器规划

主机名 IP 地址 作用
ydt-net-ansible 11.8.36.62 Ansible,Web 服务器
ydt-net-esansible01 11.8.38.130 Master 节点
ydt-net-esansible02 11.8.38.131 Master 节点
ydt-net-esansible03 11.8.38.136 Master 节点
ydt-net-esansible04 11.8.38.137 Data 节点
ydt-net-esansible05 11.8.38.138 Data 节点
ydt-net-esansible06 11.8.38.140 Data 节点

安装 Ansible

我们首先需要安装好 Ansible,Ansible 的 RPM 包可以到 [这个网站] (https://releases.ansible.com/ansible/rpm/release/epel-7-x86_64/) 下载。

下载完成后使用以下命令安装:

rpm -ivh ansible-安装包

查看 Ansible 版本:

root@ydt-net-ansible:/root # ansible --version
ansible 2.9.15
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Aug  7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]

配置 Hosts(可选)

在每一台 Elasticsearch 节点和 Ansible 主机上编辑 /etc/hosts 文件配置 hosts 记录。如果后面指定使用 IP 地址进行通信,那么可以跳过这一步。

11.8.38.130      ydt-net-esansible01
11.8.38.131      ydt-net-esansible02
11.8.38.136      ydt-net-esansible03
11.8.38.137      ydt-net-esansible04
11.8.38.138      ydt-net-esansible05
11.8.38.140      ydt-net-esansible06

添加 Ansible Playbook

使用以下命令添加 Elasticsearch Ansible Playbook 到本地,也可以直接克隆 ansible-elasticsearch 的项目到本地,效果是一样的。

ansible-galaxy install elastic.elasticsearch,v7.15.0

Elasticsearch Ansible Playbook 位于 ~/.ansible/roles/elastic.elasticsearch 目录中。

root@ydt-net-ansible:/root #ls ~/.ansible/roles/elastic.elasticsearch/
ansible.cfg   defaults  elastic.yml  filter_plugins  Gemfile.lock  inventory.yml  Makefile  meta       tasks      test
CHANGELOG.md  docs      files        Gemfile         handlers      LICENSE        manifest  README.md  templates  vars

设置 Inventory 节点信息

在 ~/.ansible/roles/elastic.elasticsearch 目录下创建 inventory.yml 文件,设置节点的角色以及远程登录的用户名和密码。

[hosts]
ydt-net-esansible01
ydt-net-esansible02
ydt-net-esansible03
ydt-net-esansible04
ydt-net-esansible05
ydt-net-esansible06
#master 节点
[master]
ydt-net-esansible01
ydt-net-esansible02
ydt-net-esansible03
#data 节点
[data]
ydt-net-esansible04
ydt-net-esansible05
ydt-net-esansible06
#用户名和密码
[hosts:vars]
ansible_ssh_user='yourusername'
ansible_ssh_pass='yourpassword'

编辑 ansible.cfg 文件,设置以下参数,在登录的时候不校验 SSH 公钥。

[defaults]
host_key_checking = False

Elasticsearch 集群配置文件

在 ~/.ansible/roles/elastic.elasticsearch 目录下创建 elastic.yml 文件,设置 Elasticsearch 集群的具体配置。有几个参数需要注意:

  • es_version:设置 Elasticsearch 的版本,我们本次使用自己准备的 RPM 包安装 Elasticsearch,因此通过 es_custom_package_url 下载的 RPM 包的版本要和 es_version 指定的版本匹配。
  • cluster.name:集群名称,所有节点设置的集群名称要一致。
  • network.host:默认情况下 Elasticsearch 只在 127.0.0.1 监听服务,设置为 0 表示在本机所有 IP 地址都监听服务。
  • es_heap_size:设置堆大小,通常情况下设置为服务器内存的一半,最大不要超过 31G。
  • cluster.initial_master_nodes:集群初始化时在第一次选举中有成为 Master 资格(master-eligible)的节点列表。
  • discovery.seed_hosts:设置种子发现节点,Master 节点会获取整个集群的节点信息,因此通常将该值设置为所有 master-eligible 的节点。
  • bootstrap.memory_lock:锁定物理内存地址,防止 Elasticsearch 的内存被交换出去,也就是避免 Elasticsearch 使用 swap 交换分区。
  • es_use_repositoryes_add_repository 设置 为 false 表示不通过公网去下载 Elasticsearch 官网源的安装包。
  • es_custom_package_url:设置指定的下载源。
- hosts: master
  roles:
   - role: elastic.elasticsearch
  vars:
    #版本
    es_version: "7.15.0"
    #堆内存大小
    es_heap_size: "2g"
    #Elasticsearch 节点配置
    es_config:
      cluster.name: "es-ansible"
      network.host: 0
      #集群初始化时在第一次选举中有成为 Master 资格的节点列表
      cluster.initial_master_nodes: "ydt-net-esansible01,ydt-net-esansible02,ydt-net-esansible03"
      #种子发现节点
      discovery.seed_hosts: "ydt-net-esansible01:9300,ydt-net-esansible02:9300,ydt-net-esansible03:9300"
      http.port: 9200
      #Master 节点属性
      node.data: false
      node.master: true
      node.ingest: false
      node.ml: false
      cluster.remote.connect: false
      bootstrap.memory_lock: true
    #不使用官网源安装
    es_use_repository: false
    es_add_repository: false
    #指定内网下载 rpm 包的 URL
    es_custom_package_url: http://11.8.36.62:8080/download/elasticsearch-7.15.0-x86_64.rpm
    #用户名和密码
    es_api_basic_auth_username: "elastic"   
    es_api_basic_auth_password: "elastic@ansible"
- hosts: data
  roles:
    - role: elastic.elasticsearch
  vars:
    es_version: "7.15.0"
    es_data_dirs:
      - "/var/lib/elasticsearch"
    es_heap_size: "4g"
    es_config:
      cluster.name: "es-ansible"
      network.host: 0
      discovery.seed_hosts: "ydt-net-esansible01:9300,ydt-net-esansible02:9300,ydt-net-esansible03:9300"
      http.port: 9200
      #Data 节点属性
      node.data: true
      node.master: false
      node.ml: false
      bootstrap.memory_lock: true
    es_use_repository: false
    es_add_repository: false
    es_custom_package_url: http://11.8.36.62:8080/download/elasticsearch-7.15.0-x86_64.rpm
    es_api_basic_auth_username: "elastic"
    es_api_basic_auth_password: "elastic@ansible"

配置 HTTP 服务器

由于我们的机器无法直接访问公网下载 Elasticsearch 安装包,这里提前从 [Elasticsearch 官网] (https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.html) 下载好 RPM 包传到内网的服务器上。接下来在服务器上通过 Nginx 部署一个 Web 服务,在 Ansible 部署 Elasticsearch 的时候会通过 es_custom_package_url 指定的 URL 来下载安装 Elasticsearch 所需的 RPM 包。

Nginx 配置如下:

events {
    worker_connections  1024;
}
http {
    server {
        listen       8080;
        location / {
            autoindex on;
            root html;
        }
    }
}

将 Elasticsearch RPM 包放在 Nginx 根目录中的 html/download 目录下。image.png启动 Nginx:

sbin/nginx

访问 http://{Nginx服务器地址}:8080/download 应该可以看到下载页面。image.png

部署 Elasticsearch 集群

在 ~/.ansible/roles/elastic.elasticsearch 目录下执行以下命令部署 Elasticsearch 集群。

ansible-playbook elastic.yml -i inventory.yml

验证

如果一切顺利等待一会就可以安装完成,使用以下命令查看 Elasticsearch 集群状态。可以看到此时我们的 Elasticsearch 集群状态是 green,并且 6 个节点都已经成功上线。

#查看集群状态
root@ydt-net-ansible:/root #curl -u elastic:elastic@ansible http://ydt-net-esansible01:9200/_cluster/health?pretty
{
  "cluster_name" : "es-ansible",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 6,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}
#查看节点
root@ydt-net-ansible:/root #curl -u elastic:elastic@ansible http://ydt-net-esansible01:9200/_cat/nodes?v&pretty
ip          heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
11.8.38.137            7          72   0    0.00    0.04     0.05 cdfhirstw -      ydt-net-esansible04
11.8.38.140            8          72   0    0.13    0.08     0.10 cdfhirstw -      ydt-net-esansible06
11.8.38.131            5          78   0    0.00    0.09     0.15 m         -      ydt-net-esansible02
11.8.38.136           27          78   0    0.01    0.11     0.18 m         -      ydt-net-esansible03
11.8.38.130           11          78   1    0.00    0.07     0.14 m         *      ydt-net-esansible01
11.8.38.138            8          72   0    0.00    0.05     0.08 cdfhirstw -      ydt-net-esansible05

参考资料

  • [INSTALLING ELASTICSEARCH USING ANSIBLE – THE QUICK WAY!] (https://blog.pythian.com/installing-elasticsearch-using-ansible-the-quick-way/)
  • [ansible-elasticsearch] (https://github.com/elastic/ansible-elasticsearch)


相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
11月前
|
缓存 Prometheus 监控
Elasticsearch集群JVM调优设置合适的堆内存大小
Elasticsearch集群JVM调优设置合适的堆内存大小
1796 1
|
6月前
|
Java Linux
CentOS环境搭建Elasticsearch集群
至此,您已成功在CentOS环境下搭建了Elasticsearch集群。通过以上介绍和步骤,相信您对部署Elasticsearch集群有了充分的了解。最后祝您在使用Elasticsearch集群的过程中顺利开展工作!
329 22
|
5月前
|
JSON 安全 数据可视化
Elasticsearch(es)在Windows系统上的安装与部署(含Kibana)
Kibana 是 Elastic Stack(原 ELK Stack)中的核心数据可视化工具,主要与 Elasticsearch 配合使用,提供强大的数据探索、分析和展示功能。elasticsearch安装在windows上一般是zip文件,解压到对应目录。文件,elasticsearch8.x以上版本是自动开启安全认证的。kibana安装在windows上一般是zip文件,解压到对应目录。elasticsearch的默认端口是9200,访问。默认用户是elastic,密码需要重置。
2122 0
|
11月前
|
存储 监控 安全
Elasticsearch 集群
【11月更文挑战第3天】
213 54
|
11月前
|
缓存 监控 Java
Elasticsearch集群JVM调优
Elasticsearch集群JVM调优
331 5
|
11月前
|
缓存 监控 安全
优化Elasticsearch 集群配置
优化Elasticsearch 集群配置
283 4
|
11月前
|
监控 安全 网络安全
Elasticsearch集群的网络设置
Elasticsearch集群的网络设置
349 3
|
11月前
|
存储 缓存 监控
Elasticsearch集群JVM调优堆外内存
Elasticsearch集群JVM调优堆外内存
203 1
|
11月前
|
监控 Java 测试技术
Elasticsearch集群JVM调优垃圾回收器的选择
Elasticsearch集群JVM调优垃圾回收器的选择
343 1
|
11月前
|
存储 监控 固态存储
Elasticsearch集群硬件与资源分配
Elasticsearch集群硬件与资源分配
222 2