ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。它是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级全文搜索引擎。ElasticSearch被设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

目标

我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,能有一个零配置和一个完全免费的搜索模式,能够简单地使用JSON通过HTTP来索引数据。同时,我们的搜索服务器始终可用,能够从一台开始并扩展到数百台,可以实现实时搜索。因此我们利用Elasticsearch来解决所有这些问题及可能出现的更多其它问题。

在ElasticSearch部署时,主要包括elasticsearch 主节点, elasticsearch-jdbc, elasticsearch-head 三类模块。elasticsearch 主节点构成集群主体;jdbc 用于将MySQL数据库中的数据同步到elasticsearch; head用于管理elasticsearch 集群和数据。

本系列基于Docker容器技术,实现ElasticSearch的快速部署。本文实现集群中的每个节点容器。

ElasticSearch 节点[git]

ElasticSearch提供了官方容器,可以直接运行

docker run -d --name es-node -p 9200:9200 -p 9300:9300 elasticsearch:${version}

启动一个节点。此节点只包含基础的es功能,我们需要为其安装插件,实现更丰富的功能,比如中文支持等等。因此,在官方镜像基础上,我们需要构造自定义的容器镜像。具体Dockerfile文件如下,有注释不再赘述。

#基础镜像使用elasticsearch:2.3.4;因为后面需要es-jdbc进行数据同步,而其只支持到2.3.4.也可以#选择官方推荐的logstash-jdbc-input 其使用Ruby语言实现
FROM elasticsearch:2.3.4
#作者
MAINTAINER codeway <wong.ch@foxmail.com>

ENV IK_VERSION 1.9.4
#安装扩展插件 注意其版本对应
RUN plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v${IK_VERSION}/elasticsearch-analysis-ik-${IK_VERSION}.zip 

运行docker build命令,此时,自定义的es节点镜像就配置好了。在启动此镜像时,需要注意,要提供相应的配置文件路径,例如:

docker run -d --name es-node -p 9200:9200 -p 9300:9300 \
        -v /usr/server/elastic/node/elasticsearch/config:/usr/share/elasticsearch/config \
        -v /usr/server/elastic/node/elasticsearch/data:/usr/share/elasticsearch/data \
        -v /usr/server/elastic/node/elasticsearch/logs:/usr/share/elasticsearch/logs \
    es-ik-node

对应的配置文件放在/usr/server/elastic/node/elasticsearch/config目录下。如果启动过程出错,可以使用-i 选项输出日志,查看错误详细信息,并对配置文件进行调整。

docker start -i es-node

ElasticSearch-Head[git]

同样,Head容器也可通过官方镜像直接启动。

#注意对应的版本为2
docker run -d --name es-head -p 9100:9100 mobz/elasticsearch-head:2

ElasticSearch-jdbc[git]

jdbc未提供对应的官方容器,需要我们自己定义,Dockerfile文件如下:

#jdbc基于Java环境
FROM java:8-jre 
MAINTAINER codeway <wong.ch@foxmail.com>
    
# 注意版本匹配
ENV JDBC_VERSION 2.3.4.0
# 安装工具库
#RUN apt-get -y update \
# && apt-get install -y unzip wget
RUN apt-get install -y unzip wget
# 安装 dockerize
RUN wget -O /tmp/dockerize-linux-amd64-v0.0.4.tar.gz https://github.com/jwilder/dockerize/releases/download/v0.0.4/dockerize-linux-amd64-v0.0.4.tar.gz \
 && tar -C /usr/local/bin -xzvf /tmp/dockerize-linux-amd64-v0.0.4.tar.gz

# 安装elasticsearch-jdbc
RUN wget -O /tmp/elasticsearch-jdbc-${JDBC_VERSION}.zip  http://xbib.org/repository/org/xbib/elasticsearch/importer/elasticsearch-jdbc/${JDBC_VERSION}/elasticsearch-jdbc-${JDBC_VERSION}-dist.zip \
 && unzip -d /opt /tmp/elasticsearch-jdbc-${JDBC_VERSION}.zip \
 && ln -s /opt/elasticsearch-jdbc-${JDBC_VERSION} /opt/elasticsearch-jdbc

# 安装 postgresql 9.4 jdbc驱动,如果是mysql数据库,注释掉,系统默认安装mysql驱动
#RUN wget -O /opt/elasticsearch-jdbc-${JDBC_VERSION}/lib/postgresql-9.4-1205.jdbc42.jar https://jdbc.postgresql.org/download/postgresql-9.4-1205.jdbc42.jar

# 创建日志文件
RUN mkdir -p /opt/elasticsearch-jdbc/logs \
 && touch /opt/elasticsearch-jdbc/logs/jdbc.log

# 清理临时文件
RUN apt-get remove -y unzip wget \
 && apt-get autoremove -y \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# 加入config.json 配置文件
ADD config.json /
# 配置工作目录
WORKDIR /opt/elasticsearch-jdbc

CMD dockerize \
    -template /config.json:/tmp/config.json \
    -stdout /opt/elasticsearch-jdbc/logs/jdbc.log \
    -stdout /statefile.json \
     java \
    -cp "/opt/elasticsearch-jdbc/lib/*" \
    -Dlog4j.configurationFile=/opt/elasticsearch-jdbc/bin/log4j2.xml \
    org.xbib.tools.Runner \
    org.xbib.tools.JDBCImporter \
    /tmp/config.json

参考:

  1. https://blog.csdn.net/boling_cavalry/article/details/86669450
  2. https://blog.csdn.net/jinyidong/article/details/80475320
  3. https://github.com/mobz/elasticsearch-head
  4. https://github.com/elastic/elasticsearch
  5. https://github.com/medcl/elasticsearch-analysis-ik
  6. https://github.com/jprante/elasticsearch-jdbc