在AWS上部署弹性堆栈

首先

由于有机会接触到Elastic Stack,因此我打算留下一些笔记。这些是在2017年9月的工作。

Elastic Stack是一种可以分析和可视化日志等内容的工具,但由于本次省略了解释,请您确认官方等信息。

我想设计一个结构

在AWS的VPC环境中,将Elasticsearch安装在3台虚拟机上并进行集群化。接着,在其中一台上安装Kibana,通过浏览器查看集群的状态。

ES01.jpeg

有关AWS侧的设置

我已经对AWS进行了以下设置。

虚拟私有云:192.100.0.0/24
虚拟私有云子网:192.100.0.0/27
虚拟机:Amazon Linux
虚拟机配置:m4.large
虚拟机数量:3台
srv1:192.100.0.4(带有弹性IP)
srv2:192.100.0.5(带有弹性IP)
srv3:192.100.0.6(带有弹性IP)

安全组
由于完全开放存在安全问题,所以我们进行了一定程度的限制。
– 用于虚拟机操作
SSH (22) TCP (6) 22 [SSH访问的IP地址]
– 用于访问Elasticsearch
自定义TCP规则 TCP (6) 9200 [访问Elasticsearch的IP地址]
– 用于Elasticsearch内部通信
自定义TCP规则 TCP (6) 9300 192.100.0.0/27
– 用于访问kibana
自定义TCP规则 TCP (6) 5601 [访问kibana的IP地址]

那么,我们开始制作。

构建工作

事前准备

1. 在3台虚拟机上安装Java 8(OpenJDK)(共同操作)

由于Amazon Linux上安装了Java 1.7.0版本,现在需要删除1.7.0并安装1.8.0版本。
虽然我认为不需要使用调试功能,但出于规范考虑,我将安装它。

# yum -y remove java-1.7.0-openjdk
# yum -y install java-1.8.0-openjdk-devel
# yum -y install java-1.8.0-openjdk-debuginfo --enablerepo=*debug*

将Elasticsearch的yum安装过程包括GPG密钥导入和仓库创建(适用于3台虚拟机)。

# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
# vi /etc/yum.repos.d/elastic.repo
[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

2. 安装和启动 Elasticsearch

以集群模式启动Elasticsearch。

2-1. 安装Elasticsearch(适用于三台虚拟机的共同操作)。

安装非常容易,这真是太好了。

# yum install -y elasticsearch

安装完Elasticsearch后,目录的情况如下所示。

/var/run/elasticsearch
/var/log/elasticsearch
/var/lib/elasticsearch
/var/lib/yum/yumdb/e/e7a7bc22f961d4dd3889c0cac8f668512fe3d2c0-elasticsearch-5.6.2-1-noarch
/var/lib/yum/repos/x86_64/latest/elasticsearch-5.x
/var/cache/yum/x86_64/latest/elasticsearch-5.x
/etc/elasticsearch
/etc/elasticsearch/elasticsearch.yml
/etc/sysconfig/elasticsearch
/etc/rc.d/init.d/elasticsearch
/usr/lib/systemd/system/elasticsearch.service
/usr/lib/sysctl.d/elasticsearch.conf
/usr/lib/tmpfiles.d/elasticsearch.conf
/usr/share/elasticsearch
/usr/share/elasticsearch/lib/elasticsearch-5.6.2.jar
/usr/share/elasticsearch/modules/reindex/elasticsearch-rest-client-5.6.2.jar
/usr/share/elasticsearch/bin/elasticsearch
/usr/share/elasticsearch/bin/elasticsearch.in.sh
/usr/share/elasticsearch/bin/elasticsearch-keystore
/usr/share/elasticsearch/bin/elasticsearch-systemd-pre-exec
/usr/share/elasticsearch/bin/elasticsearch-translog
/usr/share/elasticsearch/bin/elasticsearch-plugin

2.2.elasticsearch.yml的配置(每个虚拟机的配置)

elasticsearch.yml的默认设置已经被注释掉了,如果要添加内容,只需在后面追加即可。
要添加的内容如下:

cluster.name [cluster-name]:クラスタ名。入力しないとデフォルトの名前になる。
node.name [node-name]:elasticsearchノードの名前。自身の識別に利用する。
discovery.zen.ping.unicast.hosts ["IPADDRESS","IPADDRESS","IPADDRESS"]:クラスタを構成する相手ホスト名をユニキャストで検索する。(3台構成なので3つ書く)
network.host: 0.0.0.0:通信許可設定。通信の制御はAWSのセキュリティグループで行う為、こちらは全許可で記載します。

将上述设置添加到每个服务器的elasticsearch.yml文件中。

# vi /etc/elasticsearch/elasticsearch.yml
cluster.name: my-cluster
node.name: node001
network.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["192.100.0.4","192.100.0.5","192.100.0.6"]
# vi /etc/elasticsearch/elasticsearch.yml
cluster.name: my-cluster
node.name: node002
network.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["192.100.0.4","192.100.0.5","192.100.0.6"]
# vi /etc/elasticsearch/elasticsearch.yml
cluster.name: my-cluster
node.name: node003
network.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["192.100.0.4","192.100.0.5","192.100.0.6"]

2.3. Elasticsearch启动(3台虚拟机共同操作)

一同启动各服务器上的Elasticsearch服务。请确保在同时启动命令后,节点识别没有出现问题。请等待服务完全启动后逐台启动。

# /etc/init.d/elasticsearch start

2.4. 检查群集状态

可以在任何一个虚拟机上执行以下命令,以确认节点的状态。

# curl localhost:9200/_cat/nodes
192.100.0.5 8 43 0 0.00 0.00 0.00 mdi - node002
192.100.0.6 7 43 0 0.00 0.02 0.00 mdi - node003
192.100.0.4 8 44 0 0.00 0.01 0.04 mdi * node001
※クラスタ化ができていない場合は自分のノード名しか表示されません。

群集化成功得很容易。
您可以通过检查日志来确认是否添加了节点。
日志将如下所示输出。

[2017-xx-xxTxx:xx:xx,043][INFO ][o.e.g.GatewayService     ] [node001] recovered [0] indices into cluster_state
[2017-xx-xxTxx:xx:xx,815][INFO ][o.e.c.s.ClusterService   ] [node001] added {{node002}{UTINV4wuTd6UfgLByoG4gQ}{E5ptnPZ0SG-xc629ayXK_Q}{192.100.0.5}{192.100.0.5:9300},}, 
reason: zen-disco-node-join[{node002}{UTINV4wuTd6UfgLByoG4gQ}{E5ptnPZ0SG-xc629ayXK_Q}{192.100.0.5}{192.100.0.5:9300}]

2.5. 自動启动设置(三台虚拟机共同操作)

因为我们已经成功地将无事务聚类化,所以我将设置Elasticsearch服务自动启动。

# chkconfig --add elasticsearch
# chkconfig --list elasticsearch
elasticsearch   0:off   1:off   2:on    3:on    4:on    5:on    6:off

3. 安装Kibana和x-pack。

接下来我们将安装可视化工具Kibana。
另外,为了监控集群状态,我们还将引入x-pack。
这项工作已在srv1上完成。

3.1.安装Kibana

Kibana的安装非常简单。

# yum -y install kibana

编辑3.2.kibana.yml文件

由于kibana 5.0.0 不接受来自远程主机的访问,如果需要远程主机连接,则需要修改配置文件 ” /etc/kibana/kibana.yml ” 中的 “server.host”。由于我们想要从浏览器中进行确认,因此进行了修正。

# vi /etc/kibana/kibana.yml
server.host: "0.0.0.0"

kibana.yml的默认设置已经全部注释掉了,所以只需追加想要添加的内容即可。

3.3.启动Kibana

# /etc/init.d/kibana start

访问到3.4的Kibana

我会尝试从浏览器访问第一号机的URL。

http://[srv1のEIP]/5601

暂时只要页面能显示出来就没有问题。因为还没有达到原本的目的,所以先不显示图片了。

3.5.自动启动设置 – wǔ zhì

我会将 Kibana 设为自动启动。

# chkconfig --add kibana
# chkconfig --list kibana
kibana          0:off   1:off   2:on    3:on    4:on    5:on    6:off

安装3.6.x-pack(虚拟机三台共同操作)。

为了实现这次的目标,我们将安装 x-pack 插件来在 Kibana 中检查集群的状态。首先安装 Elasticsearch 对应的 x-pack。

停止Kibana后,安装x-pack。

# /etc/init.d/kibana stop
# /usr/share/elasticsearch/bin/elasticsearch-plugin install x-pack

为了需要输入“是”的表达,我将整段内容都附上。

-> Downloading x-pack from elastic
[=================================================] 100%??
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@     WARNING: plugin requires additional permissions     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.io.FilePermission \\.\pipe\* read,write
* java.lang.RuntimePermission accessClassInPackage.com.sun.activation.registries
* java.lang.RuntimePermission getClassLoader
* java.lang.RuntimePermission setContextClassLoader
* java.lang.RuntimePermission setFactory
* java.security.SecurityPermission createPolicy.JavaPolicy
* java.security.SecurityPermission getPolicy
* java.security.SecurityPermission putProviderProperty.BC
* java.security.SecurityPermission setPolicy
* java.util.PropertyPermission * read,write
* java.util.PropertyPermission sun.nio.ch.bugLevel write
* javax.net.ssl.SSLPermission setHostnameVerifier
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.

Continue with installation? [y/N]y
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@        WARNING: plugin forks a native controller        @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
This plugin launches a native controller that is not subject to the Java
security manager nor to system call filters.

Continue with installation? [y/N]y
-> Installed x-pack

禁用 Elasticsearch 的 x-pack 安全功能(三台虚拟机通用操作)。

x-pack附带了各种功能,如果未正确设置security功能,Kibana将无法启动。鉴于本次目的与之无关,我们将通过禁用security功能来避免此问题。

# vi /etc/elasticsearch/elasticsearch.yml
xpack.security.enabled: false
※上記を最下行に追記

追記後Elasticsearchを再起動して反映
# /etc/init.d/elasticsearch restart

3.8. 安装 Kibana 的 X-Pack。

我会在Kibana上安装x-pack。

# /usr/share/kibana/bin/kibana-plugin install x-pack
Attempting to transfer from x-pack
Attempting to transfer from https://artifacts.elastic.co/downloads/kibana-plugins/x-pack/x-pack-5.6.2.zip
Transferring 119528829 bytes....................
Transfer complete
Retrieving metadata from plugin archive
Extracting plugin archive
Extraction complete
Optimizing and caching browser bundles...
Plugin installation complete

我有过那种会想着是否已经停下来了的时候,没有任何反应的情况,但只要不在意并放任它,一切都会好的。

启动Kibana应用程序。

由于设置已经完成,现在启动Kibana。

# /etc/init.d/kibana start

将设置后的插件状态和许可证状态进行备忘。您可以在任意一个服务器上执行命令以进行确认。

# curl -XGET -u elastic:changeme 'http://localhost:9200/_cat/plugins?v'
name    component         version
node003 analysis-kuromoji 5.6.2
node003 x-pack            5.6.2
node002 analysis-kuromoji 5.6.2
node002 x-pack            5.6.2
node001 analysis-kuromoji 5.6.2
node001 x-pack            5.6.2
# curl -XGET -u elastic:changeme 'http://localhost:9200/_xpack/license'
{
  "license" : {
    "status" : "active",
    "uid" : "7977deb4-d253-4ef4-8fd1-bf01e1d86315",
    "type" : "trial",
    "issue_date" : "2017-xx-xxTxx:xx:xx.537Z",
    "issue_date_in_millis" : 1506590395537,
    "expiry_date" : "2017-xx-xxTxx:xx:xx.537Z",
    "expiry_date_in_millis" : 1509182395537,
    "max_nodes" : 1000,
    "issued_to" : "my-cluster",
    "issuer" : "elasticsearch",
    "start_date_in_millis" : -1
  }
}

用 Kibana 确认集群状态。

现在我们来确认一下Kibana界面。

通过浏览器访问1号机的URL。
http://[srv1的EIP]:5601

es-monitoring.png
es-monitoring2.png
es-monitoring3.png

当可以在 Kibana 的界面上确认时,感觉非常完成。
下次我想要记下关键的日志数据导入等。

广告
将在 10 秒后关闭
bannerAds