分享

Elasticsearch实践(一)用Docker搭建Elasticsearch集群【面试+工作】

 Java帮帮 2020-01-02

Elasticsearch实践(一)用Docker搭建Elasticsearch集群【面试+工作】

搜索服务简述

结合业务的场景,在目前的商品体系需要构建搜索服务,主要是为了提供用户更丰富的检索场景以及高速,实时及性能稳定的搜索服务。作为使用Java技术栈的团队来说,可以选择使用比较好上手的三方搜索服务。另外一种选则就是搭建自己的搜索集群。结合自己公司的业务和场景来说,搭建搜索集群在投入使用后的成本可控,搜索服务和线上的其他微服务可以通过集群的内网IP通讯。

安装Elasticsearch的Docker镜像

目前Elasticsearch 版本到了5.X, Springboot 目前不支持5.X以上的elasticsearch。所以还是选择了2.2.4。

Dockerfile

关于ES的镜像,可以直接去Dockerhub上pull.但是官方版本一般都是ES的基础镜像,在实际的需求场景下,还需要安装一些插件,(比如ES的删除api插件。分词器插件等)所以可以选择pull基础镜像后,再重新tag,push到自己的镜像仓库中之后,用Dokcerfile重新build一个定制版的ES镜像。 
如下就是一个基于基础镜像的,安装了analysis-ik分词器,以及ES官方的delete-by-query插件的dockerfile。定制完之后,重新tag然后push到自己的docker仓库就可以了。

分词器

关于分词器的选择,还是要根据不同的场景去判断。因为ES对于中文分词做的比较差,所以中文分词一般都需要另外安装其他分词器插件。本文以分词器ik为例。 
需要注意的是Analysis-ik 的官方的插件版本需要和安装的Elasticsearch版本一致。具体的使用版本可以在官方的版本列表中查询: 
Analysis-ik版本 https://github.com/medcl/elasticsearch-analysis-ik

Elasticsearch其他插件

在上述的Dockerfile 中添加了 delete-by-query插件。delete-by-query插件提供了对于多个Document的删除API。还可以选择的插件有:Elasticsearch API extension plugins 。 https://www./guide/en/elasticsearch/plugins/2.0/api.html。 
添加方式也是类似,在Dockerfile中添加 RUN /usr/share/elasticsearch/bin/plugin install XX 即可。

elasticsearch.yml配置

Elasticsearch 最重要的配置文件就是elasticsearch.yml了。在elasticsearch.yml 中需要配置ES集群的信息。具体配置内容如下(一下只是一个举例: 
配置Elasticsearch的集群名称,默认是elasticsearch

对于集群环境的配置,需要注意的点整理了一下:

  1. network.publish_host:对外通信的ip,这里设置成宿主机的内网IP,如果使用默认值 你会发现当其他节点找到了这台宿主机和端口 就是连接不上这个节点

  2. discovery.zen.ping.unicast.hosts:主节点搜索列表 建议最好带上端口号 比如[“127.0.0.1:9300”,”host1:9300”] 
    Elasticsearch默认使用服务发现(Zen discovery)作为集群节点间发现和通信的机制。Azure、EC2和GCE也有使用其他的发现机制。服务发现由discovery.zen.*开头的一系列属性控制。

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

  4. index.number_of_shards:这里只是一个全局的索引分片数的默认值。默认是5,可以在创建索引的时候重新定义分片数量 。分片越多检索越快,索引能力越强,但不表示写入更快

  5. index.number_of_replicas:同上,也是全局的默认值,可以在创建索引时重新定义值 。属于数据备份数,防止数据丢失。通过url:http://localhost:9200/A/_status 可以查询指定索引的状态。

Docker-Compose在集群node的配置

在所有的集群的节点,可以使用docker compose来启动容器。通过volumes变量配置映射的本地配置以及本地的备份数据data目录。基础镜像就是已经build好的,带有分词器插件的镜像。最好tag后缀和基础镜像区别开,如用elasticsearch:2.4.4_ik

启动好了之后,可以通过http的健康检查请求来查看集群的配置。 
http://your_domain:9200/_cluster/health?pretty=true 返回如下:

Logstash & Kibana

为了方便数据的全量,增量的同步,可以在搜索服务基础上增加Logstash。Losstash也可以使用Docker容器进行部署。相关可以查看:Logstash-docker  https://hub./_/logstash/  以及 增量数据同步-logstash 介绍 https://www./guide/en/logstash/2.4/index.html  如要和mysql数据库进行数据同步,需要安装logstash-input-jdbc插件。具体的部署方式可以看: 
migrating-mysql-data-into-elasticsearch-using-logstash  https:///blog/migrating-mysql-data-into-elasticsearch-using-logstash  。 
和Elasticsearch以及Logstash可以搭配使用的还有Kibana,Kibana可以提供可视化的索引数据管理。网上关于E.L.K的文章也比较多,这里不再具体介绍了。Kibana 是为 Elasticsearch 设计的开源分析和可视化平台。你可以使用 Kibana 来搜索,查看存储在 Elasticsearch 索引中的数据并与之交互。你可以很容易实现高级的数据分析和可视化,以图标的形式展现出来。Kibana的docker部署可以查看:Configuring Kibana on Docker  https://www./guide/en/kibana/current/_configuring_kibana_on_docker.html  ,相关配置: 
Kibana Default settings  https://www./guide/en/kibana/current/settings.html

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多