在CentOS 8/7上设置Elasticsearch群集|带有Ansible的Ubuntu 20.04/18.04
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 Cluster。使用的角色是ElasticSearch官方项目,它使我们可以灵活选择。
Elasticsearch节点类型
Elasticsearch节点有两种常见类型:
- 主节点:负责集群范围的操作,例如索引管理和将数据分片存储分配给数据节点。
- 数据节点:它们保存索引数据的实际分片,并处理所有CRUD,搜索和聚合操作。它们消耗更多的CPU,内存和I/O
设置要求
在开始之前,我们至少需要安装和更新三台CentOS 8/7服务器。需要具有sudo特权或者root用户的用户才能执行操作。我的设置基于以下节点结构。
服务器名称 | 规格 | 服务器角色 |
elk-master-01 | 16gb ram,8vpcus | Master |
elk-master-02 | 16gb ram,8vpcus | Master |
elk-master-03 | 16GB ram,8vpcus | Master |
elk-data01 | 32gb ram,16vpcus | Data |
elk-data02 | 32gb ram,16vpcus | Data |
elk-data03 | 32gb ram,16vpcus | Data |
注意:
- 对于小型环境,可以将节点用于数据和主操作。
存储注意事项
对于数据节点,建议在考虑可伸缩性的情况下正确配置存储。在我的实验室中,每个数据节点在/data下都装有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
在工作站上安装Ansible
我们将使用Ansible在CentOS 8/7上设置Elasticsearch Cluster。确保在计算机中安装了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 2017, 09:44:41) [GCC 9.2.1 20190827 (Red Hat 9.2.1-1)]
导入Elasticsearch ansible角色
安装Ansible后,我们现在可以使用星系将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/roles目录中。
$ls ~/.ansible/roles total 4.0K drwx------. 15 jkmutai jkmutai 4.0K Jan 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. [theitroad@localhost ~]#
如果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并运行它
现在已经配置了所有前提条件,现在让我们创建一个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
重要说明:
- 主节点的node.master设置为true,node.data设置为false。
- 数据节点的node.data设置为true,node.master设置为false。
- es_enable_xpack变量在安装ElasticSearch开源版本时设置为false。
- cluster.initial_master_nodes和discovery.seed_hosts指向主节点
- /data/elasticsearch/data是存储Elasticsearch数据分片的位置,出于性能和可伸缩性的原因,建议将其与OS安装分开放置。
- /data/elasticsearch/logs是存储Elasticsearch日志的位置。
- 目录将由ansible任务自动创建。我们只需要确保/data是Elasticsearch所需数据存储的安装点。
有关更多自定义选项,请查看项目github文档。
创建库存文件
创建一个新的列表文件。
$vim hosts [elk-master-nodes] elk-master01 elk-master02 elk-master03 [elk-data-nodes] elk-data01 elk-data02 elk-data03
设置全部后,运行Playbook。
$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
确认在Ubuntu/CentOS上安装Elasticsearch Cluster
登录到主节点之一。
$ssh 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。