美文网首页
ElasticSearch

ElasticSearch

作者: catalina_ | 来源:发表于2017-11-05 19:32 被阅读87次

    最近在搞elasticsearch,之前我安装了1.7版本的,很顺利。后来我准备装个5.6的,结果遇到了各种坑,所以还是总结下我跳过的每一个坑把。。。

    ElasticSearch跟solr一样也是一个基于Lucene的搜索服务器,solr搭建集群的时候还需要依赖zookeeper进行集群的管理,而elasticsearch自身就带有分布式管理功能,在处理实时搜索应用时效率明显高于solr。elasticsearch和solrCloud都有索引index,和分片shard的概念,我理解的就是一个index由多个shard组成,每个shard又有多个副本,分配到每个节点上,从而缓解在一台服务器的压力,也能实现分布式搜索。

    elasticsearch5.x版本比之前比较坑的就是他多了很多的环境校验,首先JDK必须1.8以上的,所以我们需要先下载JDK1.8,并配置环境变量,配置环境变量这里需要注意JAVA_HOME一定要放在最前面,否则不会生效。


    然后别忘了执行 source etc/profile 使环境变量配置生效,再执行java -version 查看JDK版本。

    下载elasticsearch 5.6.3 tar包并解压,为了方便我先建了一个集群的目录 mkdir elasticsearchCloud01,并将解压后的文件在这个目录下复制三份模拟三个节点,命令是

    cp  -R elasticsearch-5.6.3/. /elasticsearchCloud/elasticsearch01 

    cp  -R elasticsearch-5.6.3/. /elasticsearchCloud/elasticsearch02

    cp  -R elasticsearch-5.6.3/. /elasticsearchCloud/elasticsearch03

    然后就是修改每个的配置文件 vim config/elasticsearch.yml

    主要是修改:cluster.name: vnb  这个是集群的名字,每个节点这个名字要一致

    node.name: node-1 节点名字,其他两个我配置的是node-2,node-3

    network.host: 192.168.200.5  这里是服务器的ip

    http.port: 9200 端口号,其他两个我分别配置的是8200,和7200

    http.cors.enabled: true  允许跨域 REST 请求,配置这里主要是让head插件可以跨域访问es

    http.cors.allow-origin: "*"  指定rest请求来自何处,这里配置的是*

    node.master: true  是否是主节点,这个设置true ,其他两个设置false

    node.data: true  指示节点是否为数据节点

    配置好后,接下来我就启动主节点,cd到elasticsearch01下,启动./bin/elasticsearch,然后第一个坑开始了,启动报错如下:


    什么?elasticsearch5.x版本竟然不允许用root用户启动?什么逻辑?没办法我只能切换到普通用户,su wang,然后用wang这个用户启动elasticsearch,结果报错如下:


    好吧,wang这个用户没有权限,我的错。。切换到root用户,赋予elasticsearchCloud01目录下的所有文件和目录的主给wang:

    chown -R wang ../elasticsearchCloud01

    然后再次切换到wang用户,启动elasticsearch,结果报错如下:


    问题是无法创建本地线程问题,用户最大可创建线程数太小,好吧,切换到root用户,vi /etc/security/limits.d/90-nproc.conf,修改* soft nproc 2048

    注意上面有两个问题,第二个system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

    问题原因:因为Centos6不支持SecComp,而ES5.x默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动,所以在elasticsearch.yml里更改

    bootstrap.memory_lock: false

    bootstrap.system_call_filter: false

    再次切换到wang用户,启动elasticsearch,然后又报这个错


    elasticsearch5.x默认分配jvm空间大小为2g,所以修改jvm空间分配,vim config/jvm.options,修改为:

    -Xms512m

    -Xmx512m

    在重新启动,结果还是不行。。。


    vim config/elasticsearch.yml

    增加配置:node.max_local_storage_nodes: 256 保存退出,重新启动:这回终于好了,浏览器返回如下信息:


    接下来就是配置head插件了,具体配置可以参考,http://blog.csdn.net/m0_37886429/article/details/68924087,讲的蛮详细的。。。

    head插件配置好后,启动三个ES,再启动head插件,然后在浏览器访问可以看到ES界面:

    那些年我遇到的坑:


    这个是我复制个节点的时候,把data下了数据也一起复制过来了,解决办法,删除data下的数据。

    config/elasticsearch.yml配置说明:

    cluster.name:elasticsearch #集群的名称,同一个集群该值必须设置成相同的

    node.name:"es2" #该节点的名字

    node.master:true #该节点有机会成为master节点

    node.data:true #该节点可以存储数据

    node.rack:rack2 #该节点所属的机架

    index.number_of_shards:5 #shard的数目

    index.number_of_replicas:3 #数据副本的数目

    network.bind_host:0.0.0.0 #设置绑定的IP地址,可以是IPV4或者IPV6

    network.publish_host:10.0.0.209 #设置其他节点与该节点交互的IP地址

    network.host:10.0.0.209 #该参数用于同时设置bind_host和publish_host

    transport.tcp.port:9300 #设置节点之间交互的端口号

    transport.tcp.compress:true #设置是否压缩tcp上交互传输的数据

    http.port:9200 #设置对外服务的http端口号

    http.max_content_length:100mb #设置http内容的最大大小

    http.enabled:true #是否开启http服务对外提供服务

    discovery.zen.minimum_master_nodes:2 #设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)

    discovery.zen.ping.timeout:120s #设置集群中自动发现其他节点时ping连接的超时时间

    discovery.zen.ping.multicast.enabled:true #设置是否打开多播发现节点

    discovery.zen.ping.unicast.hosts:["10.0.0.209:9300","10.0.0.206:9300","10.0.0.208:9300"] #设置集群中的Master节点的初始列表,可以通过这些节点来自动发现其他新加入集群的节点

    接下来就是在java代码中实现了,我在本地搭建了一个springboot的工程,结合api实现也是很简单的。

    相关文章

      网友评论

          本文标题:ElasticSearch

          本文链接:https://www.haomeiwen.com/subject/fsxtmxtx.html