一、安装ElasticSearch
1、到 /usr/local/ 下执行下载命令:
root@jiguiquan:/usr/local# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.8.tar.gz
2、下载成功后解压:
root@jiguiquan:/usr/local# tar -zxvf elasticsearch-5.6.8.tar.gz
3、解压成功后,可以直接进入 .bin/ 目录下执行启动命令:
root@jiguiquan:/usr/local/elasticsearch-5.6.8/bin# ./elasticsearch Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot allocate memory' (errno=12) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 2060255232 bytes for committing reserved memory. # An error report file with more information is saved as: # /usr/local/elasticsearch-5.6.8/bin/hs_err_pid38314.log
明显,报错了,这是遇到的第一个坑,以下一步步地记录并解决坑:
坑一:
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot allocate memory' (errno=12) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 2060255232 bytes for committing reserved memory. # An error report file with more information is saved as: # /usr/local/elasticsearch-5.6.8/bin/hs_err_pid38314.log
原因分析,JVM内存不足,ES的启动参数要求太高,进入:
root@jiguiquan:/usr/local/elasticsearch-5.6.8/config# vi jvm.options 将 -Xms2g -Xmx2g 修改为 -Xms128M -Xmx128M
坑二:再次尝试启动ES:
root@jiguiquan:/usr/local/elasticsearch-5.6.8# ./bin/elasticsearch [2019-11-08T20:28:47,855][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:136) ~[elasticsearch-5.6.8.jar:5.6.8] at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:123) ~[elasticsearch-5.6.8.jar:5.6.8] at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:70) ~[elasticsearch-5.6.8.jar:5.6.8] at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134) ~[elasticsearch-5.6.8.jar:5.6.8] at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-5.6.8.jar:5.6.8] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) ~[elasticsearch-5.6.8.jar:5.6.8] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) ~[elasticsearch-5.6.8.jar:5.6.8] Caused by: java.lang.RuntimeException: can not run elasticsearch as root at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:106) ~[elasticsearch-5.6.8.jar:5.6.8] at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:195) ~[elasticsearch-5.6.8.jar:5.6.8] at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:342) ~[elasticsearch-5.6.8.jar:5.6.8] at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:132) ~[elasticsearch-5.6.8.jar:5.6.8] ... 6 more
原因分析:为了安装,ES默认是不可以使用 root 账户启动的,所以我们需要使用一个 非root 用户来启动它:
将ElasticSearch目录的所有权给jiguiquan用户,然后以jiguiquan用户进行操作:
root@jiguiquan:/usr/local# chown -R jiguiquan:jiguiquan elasticsearch-5.6.8
root@jiguiquan:/usr/local# su jiguiquan
jiguiquan@jiguiquan:/usr/local$ ll
total 33040
drwxr-xr-x 12 root root 4096 Nov 8 20:20 ./
drwxr-xr-x 10 root root 4096 Sep 30 18:45 ../
drwxr-xr-x 2 root root 4096 Apr 21 2016 bin/
drwxr-xr-x 8 jiguiquan jiguiquan 4096 Nov 8 20:28 elasticsearch-5.6.8/
-rw-r--r-- 1 root root 33781024 May 15 2018 elasticsearch-5.6.8.tar.gz
drwxr-xr-x 2 root root 4096 Apr 21 2016 etc/
drwxr-xr-x 2 root root 4096 Apr 21 2016 games/
drwxr-xr-x 2 root root 4096 Apr 21 2016 include/
drwxrwxrwx 3 root root 4096 Sep 30 12:44 java/
drwxr-xr-x 3 root root 4096 Sep 30 18:45 lib/
lrwxrwxrwx 1 root root 9 Sep 30 18:45 man -> share/man/
drwxr-xr-x 2 root root 4096 Apr 21 2016 sbin/
drwxr-xr-x 6 root root 4096 Sep 30 18:49 share/
drwxr-xr-x 2 root root 4096 Apr 21 2016 src/
坑三:再次启动,貌似就可以启动成功了,但是外部机器是访问不到此elasticSearch的9200端口的:
jiguiquan@jiguiquan:/usr/local/elasticsearch-5.6.8/bin$ ./elasticsearch [2019-11-08T20:37:47,440][INFO ][o.e.n.Node ] [] initializing ... [2019-11-08T20:37:47,612][INFO ][o.e.e.NodeEnvironment ] [zId8-Ym] using [1] data paths, mounts [[/ (/dev/mapper/jiguiquan--vg-root)]], net usable_space [24gb], net total_space [27.9gb], spins? [possibly], types [ext4] [2019-11-08T20:37:47,614][INFO ][o.e.e.NodeEnvironment ] [zId8-Ym] heap size [123.7mb], compressed ordinary object pointers [true] [2019-11-08T20:37:47,616][INFO ][o.e.n.Node ] node name [zId8-Ym] derived from node ID [zId8-Ym7TnOnVjKaumrA2g]; set [node.name] to override [2019-11-08T20:37:47,617][INFO ][o.e.n.Node ] version[5.6.8], pid[38455], build[688ecce/2018-02-16T16:46:30.010Z], OS[Linux/4.4.0-21-generic/amd64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_211/25.211-b12] [2019-11-08T20:37:47,618][INFO ][o.e.n.Node ] JVM arguments [-Xms128M, -Xmx128M, -XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -Djdk.io.permissionsUseCanonicalPath=true, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=0, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true, -Dlog4j.skipJansi=true, -XX:+HeapDumpOnOutOfMemoryError, -Des.path.home=/usr/local/elasticsearch-5.6.8] [2019-11-08T20:37:48,857][INFO ][o.e.p.PluginsService ] [zId8-Ym] loaded module [aggs-matrix-stats] [2019-11-08T20:37:48,858][INFO ][o.e.p.PluginsService ] [zId8-Ym] loaded module [ingest-common] [2019-11-08T20:37:48,859][INFO ][o.e.p.PluginsService ] [zId8-Ym] loaded module [lang-expression] [2019-11-08T20:37:48,860][INFO ][o.e.p.PluginsService ] [zId8-Ym] loaded module [lang-groovy] [2019-11-08T20:37:48,866][INFO ][o.e.p.PluginsService ] [zId8-Ym] loaded module [lang-mustache] [2019-11-08T20:37:48,867][INFO ][o.e.p.PluginsService ] [zId8-Ym] loaded module [lang-painless] [2019-11-08T20:37:48,868][INFO ][o.e.p.PluginsService ] [zId8-Ym] loaded module [parent-join] [2019-11-08T20:37:48,868][INFO ][o.e.p.PluginsService ] [zId8-Ym] loaded module [percolator]
但是外部机器无法访问到此ElasticSearch:
原因分析:一般情况下web服务都是默认监听本地的地址,例如ES会监听127.0.0.1:9200,如果从别的主机来访问,那就需要重新设置监听地址。因此需要修改ES配置文件更改其监听地址。具体修改如下:在ES的配置文件/config/elasticsearch.yml 中增加配置项:
network.host: 0.0.0.0
坑四:再次启动,又会报以下的错:
ERROR: [1] bootstrap checks failed [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] [2019-11-08T20:43:42,619][INFO ][o.e.n.Node ] [zId8-Ym] stopping ... [2019-11-08T20:43:42,638][INFO ][o.e.n.Node ] [zId8-Ym] stopped [2019-11-08T20:43:42,639][INFO ][o.e.n.Node ] [zId8-Ym] closing ... [2019-11-08T20:43:42,661][INFO ][o.e.n.Node ] [zId8-Ym] closed
原因分析:elasticsearch用户拥有的内存权限太小,至少需要262144;
调大即可: jiguiquan@jiguiquan:/usr/local/elasticsearch-5.6.8/bin$ sudo sysctl -w vm.max_map_count=262144 vm.max_map_count = 262144
再次运行:
jiguiquan@jiguiquan:/usr/local/elasticsearch-5.6.8/bin$ ./elasticsearch [2019-11-08T20:46:17,088][INFO ][o.e.n.Node ] [] initializing ... [2019-11-08T20:46:17,184][INFO ][o.e.e.NodeEnvironment ] [zId8-Ym] using [1] data paths, mounts [[/ (/dev/mapper/jiguiquan--vg-root)]], net usable_space [24gb], net total_space [27.9gb], spins? [possibly], types [ext4] [2019-11-08T20:46:17,185][INFO ][o.e.e.NodeEnvironment ] [zId8-Ym] heap size [123.7mb], compressed ordinary object pointers [true] [2019-11-08T20:46:17,187][INFO ][o.e.n.Node ] node name [zId8-Ym] derived from node ID [zId8-Ym7TnOnVjKaumrA2g]; set [node.name] to override [2019-11-08T20:46:17,188][INFO ][o.e.n.Node ] version[5.6.8], pid[38609], build[688ecce/2018-02-16T16:46:30.010Z], OS[Linux/4.4.0-21-generic/amd64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_211/25.211-b12] [2019-11-08T20:46:17,189][INFO ][o.e.n.Node ] JVM arguments [-Xms128M, -Xmx128M, -XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -Djdk.io.permissionsUseCanonicalPath=true, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=0, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true, -Dlog4j.skipJansi=true, -XX:+HeapDumpOnOutOfMemoryError, -Des.path.home=/usr/local/elasticsearch-5.6.8] [2019-11-08T20:46:18,274][INFO ][o.e.p.PluginsService ] [zId8-Ym] loaded module [aggs-matrix-stats]
正常启动,并且外部也可以直接访问此ElasticSearch啦:
安装终于完成,不容易!!!
简单使用还是方法下一篇吧!