安装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
给定
这次就到这里了,下一步是填入数据,最后在Kibana上进行可视化。