安装ElasticSearch

环境

CentOS 7(最小安装)(/etc/redhat-release: CentOS Linux release 7.2.1511 (Core))
ElasticSearch(5.3.0)

安装ElasticSearch。

查看公式。

环境准备

Java: Java (Java programming language)

CentOS7(精简版)的默认系统中没有安装Java。
需要从官方网站下载安装文件,并进行使用。
本次选择使用“jdk-8u121-linux-x64.rpm”版本。通过以下命令进行安装并确认:
# yum localinstall jdk-8u121-linux-x64.rpm
`# java -version’

在/etc/profile中写下以下内容。
导出 JAVA_HOME=/usr/bin/java

创建用户

根据参考,似乎无法使用root用户启动elasticsearch。会出现以下错误。

[root@apricot bin]# ./elasticsearch
[2017-04-04T10:28:32,850][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:127) ~[elasticsearch-5.3.0.jar:5.3.0]
    at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:114) ~[elasticsearch-5.3.0.jar:5.3.0]
    at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:58) ~[elasticsearch-5.3.0.jar:5.3.0]
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122) ~[elasticsearch-5.3.0.jar:5.3.0]
    at org.elasticsearch.cli.Command.main(Command.java:88) ~[elasticsearch-5.3.0.jar:5.3.0]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) ~[elasticsearch-5.3.0.jar:5.3.0]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) ~[elasticsearch-5.3.0.jar:5.3.0]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root

因此,创建一个名为“elasticsearch”的用户用于elasticsearch。
useradd elasticsearch
passwd elasticsearch

禁用防火墙

这是一个测试环境,所以我将其禁用。由于我使用的是CentOS 7,所以我将使用firewalld来进行设置。
# systemctl停止firewalld
# systemctl禁用firewalld

确认如下。

[root@apricot ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Tue 2017-04-04 18:11:27 JST; 20s ago
  Process: 601 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 601 (code=exited, status=0/SUCCESS)

Apr 04 17:41:36 apricot.ngy.local systemd[1]: Starting firewalld - dynamic firewall daemon...
Apr 04 17:41:36 apricot.ngy.local systemd[1]: Started firewalld - dynamic firewall daemon.
Apr 04 18:11:27 apricot.ngy.local systemd[1]: Stopping firewalld - dynamic firewall daemon...
Apr 04 18:11:27 apricot.ngy.local systemd[1]: Stopped firewalld - dynamic firewall daemon.
[root@apricot ~]# systemctl is-enabled firewalld
disabled

禁用IPv6

[root@apricot ~]# ss -ant
State      Recv-Q Send-Q                                 Local Address:Port                                                Peer Address:Port
LISTEN     0      128                                                *:9100                                                           *:*
LISTEN     0      128                                                *:22                                                             *:*
LISTEN     0      100                                        127.0.0.1:25                                                             *:*
ESTAB      0      96                                    192.168.11.121:22                                                 152.62.23.123:61133
ESTAB      0      0                                     192.168.11.121:22                                                 152.62.23.123:61089
ESTAB      0      0                                     192.168.11.121:22                                                 152.62.23.123:61097
LISTEN     0      128                                               :::9200                                                          :::*
LISTEN     0      128                                               :::9300                                                          :::*
LISTEN     0      128                                               :::22                                                            :::*
LISTEN     0      100                                              ::1:25                                                            :::*

根据似乎绑定了IPv6,所以要先停用它。

[root@apricot ~]# cat /etc/sysctl.conf
# Added by User
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

这样一来,就不再需要在IPv6上监听了。

[root@apricot ~]# ss -ant
State       Recv-Q Send-Q                              Local Address:Port                                             Peer Address:Port
LISTEN      0      128                                             *:9100                                                        *:*
LISTEN      0      128                                             *:9200                                                        *:*
LISTEN      0      128                                             *:9300                                                        *:*
LISTEN      0      128                                             *:22                                                          *:*
ESTAB       0      0                                  192.168.11.121:22                                              152.62.23.123:61425
ESTAB       0      0                                  192.168.11.121:22                                              152.62.23.123:61441
LISTEN      0      128                                            :::22                                                         :::*

各种参数设置 (Gè

即使在安装过程中没有修改任何内容,该公式立即启动,但实际上需要在启动之前根据各种参数进行修改,否则可能会由于内存等问题而无法成功启动。

/sysctl.conf文件

vm.max_map_count是可以在一个进程中使用的内存映射(页面)的数量。每个线程会消耗两个页面,因此可用线程数似乎为该值的一半。为了与官方建议保持一致,可以增加这个值。默认值为65530。

据说每个页面是4096字节=4kB(可以通过getconf PAGESIZE进行确认),因此官方建议的262144大约是1GB。

可以使用以下命令将其设置为推荐值:
# sysctl -w vm.max_map_count=262144

为了确保重启后也不会更改,

vm.max_map_count = 262144

我会留下备用。请看下面确认。

[elasticsearch@apricot elasticsearch-5.3.0]$ sysctl -a | grep max_map
vm.max_map_count = 262144

/etc/security/limits.conf 可以被简述为”安全/限制配置文件”。

1行目:文件描述符的设置。这是打开文件的限制。对于elasticsearch用户,将其增加从4096到65536。仅仅写在这里是无效的,所以需要重新启动或者在下面暂时增加值。
# ulimit -n 65536
2行目和3行目是为elasticsearch启动用户设置锁定内存的权限。如果没有这些配置,启动时会显示无法锁定内存的错误,并导致启动失败(见后文)。

# Added by User
elasticsearch  -  nofile  65536
elasticsearch - memlock unlimited
root - memlock unlimited

下載並啟動ElasticSearch。

在elasticsearch用户中执行。
$ curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.0.tar.gz
$ tar xvf elasticsearch-5.3.0.tar.gz

为了使外部服务器能够通过浏览器访问,需要修改elasticsearch.yml文件中的network.host参数。可以将其设为0.0.0.0。
此外,需要在该文件中设置禁用交换空间(bootstrap.memory_lock: true)。
通过这个设置,可以将进程的地址空间限制在RAM大小范围内。部分手册和网站可能会将其称作mlockall,这可能会引起一些混淆。

network.host: 192.168.11.121
bootstrap.memory_lock: true

JVM 的堆大小的最大值和最小值。

默认值为2GB,保持不变。

Xms2g
Xmx2g

启动

我把设置做到这一步后,为了保险起见重新启动了一次。启动后,

[elasticsearch@apricot elasticsearch-5.3.0]$ cd bin
[elasticsearch@apricot bin]$ ./elasticsearch
[2017-04-04T10:56:30,691][INFO ][o.e.n.Node               ] [] initializing ...
(中略)
[2017-04-04T10:56:43,019][INFO ][o.e.n.Node               ] [XpOt1qN] started

确认行动

[root@apricot ~]# curl -XGET 'localhost:9200/_cat/health?v&pretty'
epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1491271143 10:59:03  elasticsearch green           1         1      0   0    0    0        0             0                  -                100.0%
[root@apricot ~]#
[root@apricot ~]# curl -XGET 'localhost:9200/_cat/nodes?v&pretty'
ip        heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
127.0.0.1            2          96   2    0.03    0.07     0.07 mdi       *      XpOt1qN

由于在这种状态下必须始终打开控制台,所以先按Ctrl+C将其作为守护进程启动。

[elasticsearch@apricot elasticsearch-5.3.0]$ ./bin/elasticsearch -d -p pid
[elasticsearch@apricot elasticsearch-5.3.0]$ cat pid
10376

停止需要

kill `cat pid`

解决问题

启动时,内存不会被锁定。

尽管我自己也有这个问题,但在在线平台上,有很多不同的说法。

ERROR: bootstrap checks failed
memory locking requested for elasticsearch process but memory is not locked
    • 公式のアプローチ

 

    • export ES_JAVA_OPTS=”$ES_JAVA_OPTS -Djava.io.tmpdir=/path/to/temp/dir”

 

    • 変化なし

 

    • SElinux無効化

 

    • shell-session:/etc/selinux/config

 

    SELINUX=disabled

最終結果は空振りだった。
在我的情况下,最终结果是这个:
http://mrzard.github.io/blog/2015/03/25/elasticsearch-enable-mlockall-in-centos-7/

elasticsearch - memlock unlimited
root - memlock unlimited

我在追加的内容中解决了这个问题。在上面的描述中一开始就写了。虽然官方已经写得很清楚了,但我没有注意到。

如果那样还是不行的话

如果机器的内存不足,似乎也会出现以下错误而失败。根据当前的设置,2GB的内存是不够的,所以至少需要3GB左右才是必要的。
错误:启动检查失败,要求锁定 Elasticsearch 进程的内存,但内存未被锁定。

安装ElasticSearch-Head插件。

5.x版本之后,Git成为一个独立运行的Web服务器,而不是一个插件。

在Root下,
可以使用以下命令安装git:
yum install git

在Elasticsearch中创建一个适当的目录,并在该目录下克隆git。
$ mkdir es-head;cd es-head
$ git init
$ git clone https://github.com/mobz/elasticsearch-head.git

安装依赖模块

再次以root身份登录
# yum安装epel-release
# yum安装npm
npm: Node.js的软件包管理工具(EPEL仓库是必需的)
同时会安装nodejs。

# 安装 bzip2
如果不安装它,执行 npm install 时会出现以下错误。

npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "install"
npm ERR! node v6.9.4
npm ERR! npm  v3.10.10
npm ERR! code ELIFECYCLE

npm ERR! phantomjs-prebuilt@2.1.14 install: `node install.js`
npm ERR! Exit status 1

开启

[elasticsearch@apricot ~]$ cd git/es-head/elasticsearch-head/
[elasticsearch@apricot elasticsearch-head]$ cat package.json    # package.jsonのあるディレクトリに移動
{
  "name": "elasticsearch-head",
  (中略)
}
[elasticsearch@apricot elasticsearch-head]$ npm install
(中略)
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.1.1: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN elasticsearch-head@0.0.0 license should be a valid SPDX license expression
[elasticsearch@apricot elasticsearch-head]$ npm run start
> elasticsearch-head@0.0.0 start /home/elasticsearch/git/es-head/elasticsearch-head
> grunt server
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
image
image

给定

这次就到这里了,下一步是填入数据,最后在Kibana上进行可视化。

广告
将在 10 秒后关闭
bannerAds