zoukankan      html  css  js  c++  java
  • Docker安装ElasticSearch

    Docker安装ElasticSearch

    一、使用Docker的ElasticSearch镜像

    前置技能是学会Docker使用,这里就不具体说Docker如何使用了,默认读者掌握了Docker技能

    1、查看Docker仓库中的ElasticSearch

    首先查看Docker仓库中的ElasticSearch,选用自己要用的elaseticsearch

    [root@iZ1ejkkkxu2looZ ~]# docker search elasticsearch
    

    2、拉去镜像到本地

    选用自己要用的版本,下载到本地

    [root@iZ1ejkkkxu2looZ ~]# docker pull elasticsearch
    

    这里由于我之前已经下载了7.6.1的版本,有部分镜像文件就不需要下载了。并且这个作为演示,就没有写版本号,自动下载最新版。

    各位同学如果要下载指定版本,记得 elasticsearch:版本号

    检查一下,镜像已经被下载好了

    3、运行镜像

    运行镜像的时候,要记得指定运行环境,因为elaticsearch的默认占用内存是1G,而我的这个小学生机只能最多也就1G的空间,要是打开那绝对当场暴毙。需要ES_JAVA_OPTS=-Xms512m -Xmx512m 指定占用内存

    另外还需要指定discovery.type=single-node

    docker run -it --name myes -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" 5acf0e8da90b
    

    这样就启动起来啦~

    通过http://ip:9200 进行访问也是可以的~

    二、配置跨域

    其实配置跨域还是比较简单的,仅需要修改一下config文件夹中的elasticsearch.yml文件的参数即可,但是在docker的镜像中修改却有些问题,原因在于官方提供的镜像是没有vim的,无法进行文件修改。

    对此,我们有两种办法解决。

    方法1

    当我们在容器中使用 vim指令时,会得到

    root@3961c96d3af4:/usr/share/elasticsearch# ls
    NOTICE.txt  README.textile  bin  config  data  lib  logs  modules  plugins
    root@3961c96d3af4:/usr/share/elasticsearch# cd config
    root@3961c96d3af4:/usr/share/elasticsearch/config# vim elasticsearch.yml 
    bash: vim: command not found
    

    既然容器中没有vim,那么我们就自己下载一个即可。

    可是怎么下载呢?

    当我第一次安装的时候,网上搜了很多,说是使用apt-get updateapt-get vim命令即可,但是我输入的时候却提示没有该命令。后来搜到说centos的软件安装工具不是apt-get而是yum,于是我尝试了下yum vim结果成功了!

    不过在我演示的时候,下了最新版的elasticsearch,却发现apt-get命令可以使用了,人都傻了,容器的底层操作系统都给换了吗???不明白。

    更新好vim后,即可进入elastcsearch.yml进行操作。

    cluster.name: "qfcwx-cluster"   
    network.host: 0.0.0.0
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    

    一、二行的应该是本来就有的,而三、四行是我们自己加的。

    第三行的意思是设置允许跨域,第四行的意思是允许所有的网址跨域请求,*是通配符嘛。

    就此,我们的跨域也就配置好了。

    方法2

    使用容器数据卷来共享数据,在容器外修改以达到修改的目的。

    我们要挂载的就是config/elasticsearch.yml文件。

    # 0、现在宿主机上创建好对应的文件。
    touch elasticsearch.yml
    # 1、使用命令在run容器的时候挂载数据卷 -v命令挂载数据卷
    docker run -d --name myes_v05 -p 9203:9200 -p 9303:9300 -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -v /home/myEs02/elastcsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml   5acf0e8da90b
    # 2、然后在宿主机上进行相应的修改
    vim elasticsearch.yml
    输入:
    cluster.name: "qfcwx-cluster"   
    network.host: 0.0.0.0
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    # 3、编辑好了之后 运行docker即可
    docker start  ad82d782f79a
    

    大功告成!!

    这里得着重说一下这里有几个坑点。

    由于我对docker不是很熟悉,所以犯了很多错误。在这里写出来,希望大家能引以为戒。

    坑点1:

    一开始我没有做第0步,就是直接执行docker run的语句,结果报错了。

    docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused "rootfs_linux.go:58: mounting \"/home/myEs03/elastcsearch.yml\" to rootfs \"/var/lib/docker/overlay2/ebdec218f44d495d05b5f265745fec5e53c57a1e3d43858f5f338d92a52ccc34/merged\" at \"/var/lib/docker/overlay2/ebdec218f44d495d05b5f265745fec5e53c57a1e3d43858f5f338d92a52ccc34/merged/usr/share/elasticsearch/config/elasticsearch.yml\" caused \"not a directory\""": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.
    

    对这个结果我很疑惑为什么会这样呢?看了错误提示,他说试图将目录挂载到文件上,我有些蒙蔽,我明明是制定了.yml文件的呀!

    然后我就去了相应目录看了

    结果是这样的。按道理说结合上面的错误提示和这个蓝色的标识,我就应该想到这个.yml文件其实是一个文件夹!

    然而由于我对linux不熟悉,还以为文件就是这样的,然后又在网上查啊查,查了好久才发现,我这个.yml是个文件夹!不得不说太具有迷惑性了。。。我怪我自己对linux系统太不熟悉,以至于搞出这样的笑话。

    于是我touch了一个正常的yml,这才不报这个错误,然而又一个错误不期而至。

    坑点2:

    解决了坑点1之后,我就准备看看运行成功后的结果啦,然而事情又有波折。

    再次报错:

    [2020-06-13T08:19:44,278][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
    org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException: unknown setting [uster.name] did you mean [clust
    	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[elasticsearch-5.6.12.jar:5.6.12]
    	at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:123) ~[elasticsearch-5.6.12.jar:5.6.12]
    	at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:70) ~[elasticsearch-5.6.12.jar:5.6.1
    	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134) ~[elasticsearch-5.6.12.jar:5.6.12]
    	at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-5.6.12.jar:5.6.12]
    	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) ~[elasticsearch-5.6.12.jar:5.6.12]
    	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) ~[elasticsearch-5.6.12.jar:5.6.12]
    Caused by: java.lang.IllegalArgumentException: unknown setting [uster.name] did you mean [cluster.name]?
    	at org.elasticsearch.common.settings.AbstractScopedSettings.validate(AbstractScopedSettings.java:293) ~[elasticsearch-5.6.
    	at org.elasticsearch.common.settings.AbstractScopedSettings.validate(AbstractScopedSettings.java:256) ~[elasticsearch-5.6.
    	at org.elasticsearch.common.settings.SettingsModule.<init>(SettingsModule.java:139) ~[elasticsearch-5.6.12.jar:5.6.12]
    	at org.elasticsearch.node.Node.<init>(Node.java:344) ~[elasticsearch-5.6.12.jar:5.6.12]
    	at org.elasticsearch.node.Node.<init>(Node.java:245) ~[elasticsearch-5.6.12.jar:5.6.12]
    	at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:233) ~[elasticsearch-5.6.12.jar:5.6.12]
    	at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:233) ~[elasticsearch-5.6.12.jar:5.6.12]
    	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:342) ~[elasticsearch-5.6.12.jar:5.6.12]
    	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:132) ~[elasticsearch-5.6.12.jar:5.6.12]
    	... 6 more
    

    核心的报错是unknown setting [uster.name] did you mean [clust

    经过研究后发现,可能是我的空格引起的,yml中的配置我是直接复制的,可能我的文本编辑环境的空格和linux的空格不一样,所以产生这种情况。

    我再次打开yml文件,将里面的空格重新输入了一遍就解决了这个问题!

    坑点3:

    解决了坑点2之后,我就准备看看运行成功后的结果啦,然而事情又有波折。

    我在执行docker run之后,又报了错误。

    ERROR: [1] bootstrap checks failed
    [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
    

    这次的报错也简单易懂,拥有的内存分配太少了

    但是我不知道为什么会这样,之前运行都是直接运行的,从来没有报过这种错误。有没有大佬能告诉下为什么会这样呢?

    不过这个报错还好解决,百度了下,只需要设置一下即可。

    切换到root用户
    执行命令:
    sysctl -w vm.max_map_count=262144
    查看结果:
    sysctl -a|grep vm.max_map_count
    显示:
    vm.max_map_count = 262144
    

    三个坑点解决之后,我就成功运行起了elasticsearch!

    大功告成~

    NICE!

  • 相关阅读:
    Interview with BOA
    Java Main Differences between HashMap HashTable and ConcurrentHashMap
    Java Main Differences between Java and C++
    LeetCode 33. Search in Rotated Sorted Array
    LeetCode 154. Find Minimum in Rotated Sorted Array II
    LeetCode 153. Find Minimum in Rotated Sorted Array
    LeetCode 75. Sort Colors
    LeetCode 31. Next Permutation
    LeetCode 60. Permutation Sequence
    LeetCode 216. Combination Sum III
  • 原文地址:https://www.cnblogs.com/wu199723/p/13118390.html
Copyright © 2011-2022 走看看