首页
学习
活动
专区
圈层
工具
发布
43 篇文章
1
干货 | Elasitcsearch7.X集群/索引备份与恢复实战
2
干货 | Elasticsearch 运维实战常用命令清单
3
腾讯云Elasticsearch集群运维常用命令详解一(集群篇)
4
腾讯云Elasticsearch集群运维常用命令详解二(节点篇)
5
腾讯云Elasticsearch集群运维常用命令详解三(索引篇)
6
如何系统的学习 Elasticsearch ?
7
Elasitcsearch 开发运维常用命令集锦
8
Elasticsearch集群数据备份与恢复 Snapshot & Restore
9
搭建ELFK日志采集系统
10
Kubernetes Helm3 部署 ElasticSearch & Kibana 7 集群
11
使用 Ansible 部署 Elasticsearch 集群
12
技术角 | 在CentOS 8上使用Elastic Stack: Elasticsearch/Kibana 7.8部署与认证配置
13
在CentOS 8上使用Elastic Stack: Elasticsearch/Kibana 7.8的部署与认证配置
14
Elasticsearch 生产环境集群部署最佳实践
15
ES 7.8 速成笔记(中)
16
ES 7.8 速成笔记(上)
17
如何在CentOS 7上设置生产Elasticsearch集群
18
kubernetes-2:helm实战-1:生产级别的elasticsearch集群部署
19
ElasticSearch 7集群部署
20
在CentOS 7安装ElasticSearch 7.x
21
zabbix 监控 es 集群
22
ELK 日志报警插件 ElastAlert
23
Elasticsearch集群规划最佳实践
24
kubernetes-7:elasticsearch容器化
25
Go Elasticsearch 增删改查(CRUD)快速入门
26
go操作elasticsearch示例
27
在 Kubernetes 上搭建 EFK 日志收集系统
28
一文彻底搞定 EFK 日志收集系统
29
TKE上搭建EFK日志采集系统
30
使用 EFKLK 搭建 Kubernetes 日志收集工具栈
31
腾讯云Elasticsearch集群规划及性能优化实践
32
【干货】Elasticsearch索引性能优化 (2)
33
让Elasticsearch飞起来!——性能优化实践干货
34
【干货】Elasticsearch的索引性能优化(3)
35
Elasticsearch性能优化实战指南
36
ElasticSearch性能优化官方建议
37
Elasticsearch 7.10.1集群压测报告(4核16G*3,AMD)
38
Elasticsearch压测之Esrally压测标准
39
通过 esrally 压测elasticsearch
40
Elasticsearch压测工具esrally部署之踩坑实录(上)
41
Elasticsearch压测工具Esrally部署之踩坑实录(下)
42
Elasticsearch压测工具Esrally部署指南
43
百亿架构之filebeat讲解

使用 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/) 下载。

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

代码语言:javascript
复制
rpm -ivh ansible-安装包

查看 Ansible 版本:

代码语言:javascript
复制
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 地址进行通信,那么可以跳过这一步。

代码语言:javascript
复制
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 的项目到本地,效果是一样的。

代码语言:javascript
复制
ansible-galaxy install elastic.elasticsearch,v7.15.0

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

代码语言:javascript
复制
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 文件,设置节点的角色以及远程登录的用户名和密码。

代码语言:javascript
复制
[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 公钥。

代码语言:javascript
复制
[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:设置指定的下载源。
代码语言:javascript
复制
- 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 配置如下:

代码语言:javascript
复制
events {
    worker_connections  1024;
}


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

将 Elasticsearch RPM 包放在 Nginx 根目录中的 html/download 目录下。

启动 Nginx:

代码语言:javascript
复制
sbin/nginx

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

部署 Elasticsearch 集群

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

代码语言:javascript
复制
ansible-playbook elastic.yml -i inventory.yml

验证

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

代码语言:javascript
复制
#查看集群状态
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)
下一篇
举报
领券