如何使用 Ansible 设置具有集群的生产 Elasticsearch 服务器


在本文中,我们将学习如何使用 Ansible 在 CentOS7 上配置和安装生产 Elasticsearch 集群,以确保 Elasticsearch 节点免受外部网络的攻击。我们将使用 VPN 服务连接到集群。

Elasticsearch 是一款非常流行的开源搜索服务器,可用于实时分布式搜索和数据分析,以提高性能、稳定性和可扩展性,我们需要将 Elasticsearch 作为集群部署在多台服务器上。

先决条件

我们需要至少三个具有私有网络的 CentOS 7 服务器环境,因为所需的 Elasticsearch 集群为 3 个主节点,如果我们计划使用一个主节点和一个数据节点,那么我们还需要为数据节点添加额外的服务器。请确保我们拥有唯一的 Ansible 清单主机名。

假设我们已经配置了 VPN 服务器,并且能够使用 VPN 连接到每台服务器,并且接口名称为“tun0”,或者我们可以更改 Elasticsearch 在不同接口上的监听,我们可以在 site.yml 文件中进行相应的更改。

下载 Ansible-Elasticsearch Playbook

Elasticsearch 提供了一个 Ansible 角色,可用于设置 Elasticsearch 集群,为此,我们需要将其添加到我们的 ansible-tinc playbook 中,并定义主机组并将适当的角色分配给这些组。

转到服务器中的 ansible-tinc 文件夹

# cd ~/ansible-tinc

我们需要克隆 Elastic 的 Github 存储库中的 ansible-elasticsearch 角色

# cd roles
# git clone https://github.com/elastic/ansible-elasticsearch
Initialized empty Git repository in /root/ansible-elasticsearch/.git/
remote: Counting objects: 1192, done.
remote: Total 1192 (delta 0), reused 0 (delta 0), pack-reused 1192
Receiving objects: 100% (1192/1192), 167.42 KiB | 86 KiB/s, done.
Resolving deltas: 100% (640/640), done.
# mv ansible-elasticsearch elasticsearch

更新 Ansible site.yml 中的主 playbook

我们需要将所有三个不同的 Elasticsearch 角色映射到三个不同的 Ansible 主机组,这将允许我们创建专用的主节点、专用的数据节点和主 Elasticsearch 节点。

映射组的 Elasticsearch 专用主角色

$ cd ~/ansible-playbook
$ vi site.yml
- 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"

此配置将在组中创建专用的主节点角色,其中值 **node.master: true** 和 **node.data: false** 定义相同。

现在,在 **elasticsearch_master_nodes** 中配置的主机被配置为专用的主 Elasticsearch 节点。

映射组中的 Elasticsearch 主/数据角色

在主 playbook site.yml 的底部,通过添加以下配置将主节点资格和数据 elasticsearch 角色映射到 elasticsearch_master-data_nodes 组。

- 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"

这将为主节点资格创建数据节点,值 **node.master: true** 和 **node.data: true** 定义相同。

将 **es_version** 设置为为专用主角色配置的相同值。

将 Elasticsearch 专用数据角色映射到组

我们需要将以下配置添加到主 playbook site.yml 中,以便为 elasticsearch_data_nodes 组中的专用数据 elasticsearch 角色。

- 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"

此角色将创建专用数据节点,因为它配置为节点的值 **node.master: false** 和 **node.data: true**。

保存配置文件并退出

更新主机清单文件

要创建 Elasticsearch 节点,只需将主机添加到 Ansible 清单文件中的主机文件中

# vi hosts
[vpn]
node01 vpn_ip=10.0.0.1 ansible_host=10.2.2.1
node02 vpn_ip=10.0.0.2 ansible_host=192.168.100.100
node03 vpn_ip=10.0.0.3 ansible_host=192.168.100.101
node04 vpn_ip=10.0.0.4 ansible_host=192.168.100.102
[removevpn]

现在我们必须添加三个在 site.yml 文件中映射的组

[elasticsearch_master_nodes]
[elasticsearch_master_data_nodes]
[elasticsearch_data_nodes]

Ansible 清单中的总主机文件应如下所示

[vpn] node01 vpn_ip=10.0.0.1 ansible_host=10.2.2.1 node02 vpn_ip=10.0.0.2 ansible_host=192.168.100.100 node03 vpn_ip=10.0.0.3 ansible_host=192.168.100.101 node04 vpn_ip=10.0.0.4 ansible_host=192.168.100.102 [removevpn] [elasticsearch_master_nodes] node01 node02 node03 [elasticsearch_master_data_nodes] [elasticsearch_data_nodes] node04

创建 Elasticseach 集群

由于我们已经配置了 Elasticsearch 集群服务器所需的所有设置,因此以下是创建 Elasticsearch 集群的命令

# ansible-playbook site.yml

Playbook 运行完成后,elasticsearch 集群应该已经启动并运行。

验证 Elasticsearch 集群状态

在任何三个服务器中,我们需要运行以下命令

# curl -XGET 'https://127.0.0.1:9200/_cluster/state?pretty'
Output:
Cluster State:
{
   "cluster_name" : "production",
   "version" : 8,
   "state_uuid" : "SgTyb0vNTTu2rdKPrc6tkQ",
   "master_node" : "OzqNzte9RYWSXS6OkGhveA",
   "blocks" : { },
   "nodes" : {
      "OzqMzte9RYWDXS6OkGhveA" : {
         "name" : "node02-node1",
         "transport_address" : "192.168.100.2:9300",
         "attributes" : {
            "data" : "false",
            "master" : "true"
         }
      },
      "7bohaaYVTee$HvSgBFp-2g" : {
         "name" : "node04-node1",
         "transport_address" : "192.168.100.4:9300",
         "attributes" : {
            "master" : "false"
         }
      },
      "cBat9IgPQwKU_GPF8L3Y1g" : {
         "name" : "node03-node1",
         "transport_address" : "192.168.100..3:9300",
         "attributes" : {
            "master" : "false"
         }
      },
...

如果我们能够看到上述输出,则 Elasticsearch 集群服务器工作正常并正在运行。

由于我们已经完成了配置和设置,因此我们可以配置 Elasticsearch 集群以运行在健康状态下,因为 Elasticsearch 还有许多其他功能和配置选项未涵盖,有关高级功能的更多信息,您可以参考官方文档。

更新于: 2019年10月18日

287 次查看

开启你的 职业生涯

通过完成课程获得认证

开始
广告