在CentOS 8/7上设置Elasticsearch Cluster | Ubuntu 20.04 / 18.04和Ansible

这是续集。
请从下面的链接下载并以PDF格式支持本文。

以PDF格式下载指南

关门
这是续集。

这是续集。
这是续集。

Elasticsearch是功能强大的开源RESTful分布式实时搜索和分析引擎,可提供全文搜索功能。 Elasticsearch基于Apache Lucene构建,该软件可根据Apache 2许可免费获得。在本文中,我们将使用Ansible自动化工具在CentOS 8/7和Ubuntu 20.04 / 18.04上安装Elasticsearch Cluster。

本教程将帮助Linux用户在CentOS 8 / CentOS 7和Ubuntu 20.04 / 18.04 Linux系统上安装和配置高度可用的多节点Elasticsearch集群。 ElasticSearch的主要用途包括日志分析,搜索引擎,全文搜索,业务分析和安全智能。

此设置将安装具有Ansible角色的Elasticsearch 7.x集群。我们正在使用的角色是ElasticSearch官方项目,您可以自由选择。

Elasticsearch节点类型

Elasticsearch节点有两种常规类型。

  • 主节点:负责集群范围内的操作,例如管理索引和向数据节点分配数据分片存储。
  • 数据节点:保存实际的索引数据,并处理所有CRUD,搜索和聚合操作。他们消耗更多 中央处理器记忆体输入/输出

设置要求

开始之前 安装并更新了CentOS 8/7服务器。需要具有sudo特权或root用户的用户才能执行操作。我的设置基于以下节点结构。

伺服器 名称规格服务器角色
麋鹿大师0116GB RAM,8vpcus师父
麋鹿大师0216GB RAM,8vpcus师父
麋鹿大师0316GB RAM,8vpcus师父
麋鹿数据0132GB RAM,16VPCC资料
麋鹿data0232GB RAM,16VPCC资料
麋鹿数据0332GB RAM,16VPCC资料

注意事项:

  • 在较小的环境中,可以将节点用于数据操作和主操作。

存储注意事项

对于数据节点,建议正确配置存储以实现可伸缩性。在我的实验室中,对于每个数据节点 500GB 安装在/数据下的磁盘。它由以下命令组成:

警告:请勿复制命令并执行。这些只是参考点。

sudo parted -s -a optimal -- /dev/sdb mklabel gpt
sudo parted -s -a optimal -- /dev/sdb mkpart primary 0% 100%
sudo parted -s -- /dev/sdb align-check optimal 1
sudo pvcreate /dev/sdb1
sudo vgcreate vg0 /dev/sdb1
sudo lvcreate -n lv01 -l+100%FREE vg0
sudo mkfs.xfs /dev/mapper/vg0-lv01
echo "/dev/mapper/vg0-lv01 /data xfs defaults 0 0" | sudo tee -a /etc/fstab
sudo mount -a

步骤1:在工作站上安装Ansible

使用Ansible在CentOS 8/7上设置Elasticsearch集群。请确保在您的计算机上安装了Ansible,以便于管理。

对于Fedora:

sudo dnf install ansible

对于CentOS:

sudo yum -y install epel-release
sudo yum install ansible

RHEL 7 / RHEL 8:

--- RHEL 8 ---
sudo subscription-manager repos --enable ansible-2.9-for-rhel-8-x86_64-rpms
sudo yum install ansible

--- RHEL 7 ---
sudo subscription-manager repos --enable rhel-7-server-ansible-2.9-rpms
sudo yum install ansible

Ubuntu

sudo apt update
sudo apt install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install ansible

有关其他发行版,请参见: 官方Ansible安装指南

查询版本以验证计算机上是否已安装Ansible。

$ ansible --version
ansible 2.9.6
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/var/home/jkmutai/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.7.6 (default, Jan 30 2020, 09:44:41) [GCC 9.2.1 20190827 (Red Hat 9.2.1-1)]

步骤2:导入Elasticsearch ansible角色

安装Ansible后,您可以使用Galaxy将Elasticsearch ansible角色导入到本地系统。

$ ansible-galaxy install elastic.elasticsearch,7.6.2

- downloading role 'elasticsearch', owned by elastic
- downloading role from https://github.com/elastic/ansible-elasticsearch/archive/7.6.2.tar.gz
- extracting elastic.elasticsearch to /var/home/jkmutai/.ansible/roles/elastic.elasticsearch
- elastic.elasticsearch (7.6.2) was installed successfully

哪里 7.6.2 要下载的Elasticsearch角色的发行版本。你可以检查一下 发布页面 关于要安装的匹配Elasticsearch版本。

该角色将被添加到 〜/ .Ansible /角色 目录。

$ ls ~/.ansible/roles
total 4.0K
drwx------. 15 jkmutai jkmutai 4.0K May  1 16:28 elastic.elasticsearch

在Elasticsearch群集主机上配置SSH。

$ vim ~/.ssh/config

这是我的其他配置的示例。请根据环境进行更新。

# Elasticsearch master nodes
Host elk-master01
  Hostname 95.216.167.173
  User root
Host elk-master02
  Hostname 95.216.195.161
  User root
Host elk-master03
  Hostname 95.217.159.46
  User root

# Elasticsearch worker nodes
Host elk-data01
  Hostname 95.216.195.178
  User root
Host elk-data02
  Hostname 95.217.159.52
  User root
Host elk-data03
  Hostname 95.217.159.43
  User root

确保已将SSH密钥复制到所有计算机。

--- Master nodes ---
for host in elk-master0{1..3}; do ssh-copy-id $host; done

--- Worker nodes ---
for host in elk-data0{1..3}; do ssh-copy-id $host; done

确保无需密码验证即可使用ssh。

$ ssh elk-master01
Warning: Permanently added '95.216.167.173' (ECDSA) to the list of known hosts.
[[email protected] ~]# 

如果您的私密ssh密钥有密码短语,请将其保存以避免在每台计算机上提示。

$ eval `ssh-agent -s` && ssh-add
Enter passphrase for /var/home/jkmutai/.ssh/id_rsa: 
Identity added: /var/home/jkmutai/.ssh/id_rsa (/var/home/jkmutai/.ssh/id_rsa)

第三步:创建并运行Elasticsearch Playbook

现在已经配置了所有前提条件,让我们创建一个用于部署的剧本文件。

$ vim elk.yml

该矿具有以下内容。

- hosts: elk-master-nodes
  roles:
    - role: elastic.elasticsearch
  vars:
    es_enable_xpack: false
    es_data_dirs:
      - "/data/elasticsearch/data"
    es_log_dir: "/data/elasticsearch/logs"
    es_java_install: true
    es_heap_size: "1g"
    es_config:
      cluster.name: "elk-cluster"
      cluster.initial_master_nodes: "95.216.167.173:9300,95.216.195.161:9300,95.217.159.46:9300"
      discovery.seed_hosts: "95.216.167.173:9300,95.216.195.161:9300,95.217.159.46:9300"
      http.port: 9200
      node.data: false
      node.master: true
      bootstrap.memory_lock: false
      network.host: '0.0.0.0'
    es_plugins:
     - plugin: ingest-attachment

- hosts: elk-data-nodes
  roles:
    - role: elastic.elasticsearch
  vars:
    es_enable_xpack: false
    es_data_dirs:
      - "/data/elasticsearch/data"
    es_log_dir: "/data/elasticsearch/logs"
    es_java_install: true
    es_config:
      cluster.name: "elk-cluster"
      cluster.initial_master_nodes: "95.216.167.173:9300,95.216.195.161:9300,95.217.159.46:9300"
      discovery.seed_hosts: "95.216.167.173:9300,95.216.195.161:9300,95.217.159.46:9300"
      http.port: 9200
      node.data: true
      node.master: false
      bootstrap.memory_lock: false
      network.host: '0.0.0.0'
    es_plugins:
      - plugin: ingest-attachment

主题演讲:

  • Master.node设置为node.master 是的 和node.data 错误的
  • 数据节点具有node.data集 是的 和node.master 错误的
  • es_enable_xpack变量 错误的 用于安装ElasticSearch开源版本。
  • cluster.initial_master_nodes和discovery.seed_hosts引用主节点
  • / data / elasticsearch / data是存储Elasticsearch数据分片的位置。出于性能原因和可伸缩性,建议与操作系统安装分开使用单独的分区。
  • / data / elasticsearch / logs是存储Elasticsearch日志的位置。
  • 该目录由ansible任务自动创建。您只需要检查一下 /资料 这是Elasticsearch所需的数据存储的安装点。

对于其他自定义选项, 该项目的Github文档。

创建库存文件

创建一个新的清单文件。

$ vim hosts
[elk-master-nodes]
elk-master01
elk-master02
elk-master03

[elk-data-nodes]
elk-data01
elk-data02
elk-data03

一切设置完成后,运行手册。

$ ansible-playbook -i hosts elk.yml

执行开始。请耐心等待,因为这可能需要几分钟。

PLAY [elk-master-nodes] ********************************************************************************************************************************

TASK [Gathering Facts] *********************************************************************************************************************************
ok: [elk-master02]
ok: [elk-master01]
ok: [elk-master03]

TASK [elastic.elasticsearch : set_fact] ****************************************************************************************************************
ok: [elk-master02]
ok: [elk-master01]
ok: [elk-master03]

TASK [elastic.elasticsearch : os-specific vars] ********************************************************************************************************
ok: [elk-master01]
ok: [elk-master02]
ok: [elk-master03]
.......

如果ansible成功运行,您应该会看到类似以下的输出。

PLAY RECAP *********************************************************************************************************************************************
elk-data01                 : ok=38   changed=10   unreachable=0    failed=0    skipped=119  rescued=0    ignored=0   
elk-data02                 : ok=38   changed=10   unreachable=0    failed=0    skipped=118  rescued=0    ignored=0   
elk-data03                 : ok=38   changed=10   unreachable=0    failed=0    skipped=118  rescued=0    ignored=0   
elk-master01               : ok=38   changed=10   unreachable=0    failed=0    skipped=119  rescued=0    ignored=0   
elk-master02               : ok=38   changed=10   unreachable=0    failed=0    skipped=118  rescued=0    ignored=0   
elk-master03               : ok=38   changed=10   unreachable=0    failed=0    skipped=118  rescued=0    ignored=0   

请参见下面的屏幕截图。

步骤4:在Ubuntu / CentOS上验证Elasticsearch Cluster安装

登录到您的主节点之一。

$ elk-master01

检查集群运行状况。

$ curl http://localhost:9200/_cluster/health?pretty
{
  "cluster_name" : "elk-cluster",
  "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
}

请检查主节点。

$ curl -XGET 'http://localhost:9200/_cat/master'
G9X__pPXScqACWO6YzGx3Q 95.216.167.173 95.216.167.173 elk-master01

显示数据节点:

$ curl -XGET 'http://localhost:9200/_cat/nodes'
95.217.159.43   7 47 1 0.02 0.03 0.02 di - elk-data03
95.216.167.173 10 34 1 0.00 0.02 0.02 im * elk-master01
95.217.159.46  13 33 1 0.00 0.01 0.02 im - elk-master03
95.216.195.161 14 33 1 0.00 0.01 0.02 im - elk-master02
95.217.159.52   7 47 1 0.00 0.03 0.03 di - elk-data02
95.216.195.178  6 47 1 0.00 0.02 0.02 di - elk-data01

如您所见,我们现在在CentOS 8/7和Ubuntu 20.04 / 18.04 Linux系统上有了一个Clean Elasticsearch Cluster。

类似指南:

在CentOS 8 / RHEL 8 Linux上使用Elasticsearch 6.x安装Graylog 3

如何使用curl删除Elasticsearch Index数据

这是续集。
请从下面的链接下载并以PDF格式支持本文。

以PDF格式下载指南

关门
这是续集。

这是续集。
这是续集。

Sidebar