• 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!

  • 相关阅读:
    hdu4135(容斥原理求质数,队列实现)
    poj2559(单调栈)
    poj2796(单调栈)
    icpc2018焦作Transport Ship(背包思想)
    icpc2018焦作Mathematical Curse(动态规划)
    2018icpc徐州OnlineA Hard to prepare
    icpc2018徐州OnlineG-Trace(线段树)
    hdu3499(分层图最短路 or 反向建图)
    MINE
    数论(Mathmatics)总结[1]
  • 原文地址:https://www.cnblogs.com/wu199723/p/13118390.html
Copyright © 2020-2023  润新知