美文网首页
利用Docker快速实现ElasticSearch全文检索支持

利用Docker快速实现ElasticSearch全文检索支持

作者: cooooooooodeway | 来源:发表于2019-05-18 09:58 被阅读0次

    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 节点 github

    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 节点 github

    同样,Head容器也可通过已有Docker镜像直接启动。

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

    ElasticSearch-jdbc github

    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

    相关文章

      网友评论

          本文标题:利用Docker快速实现ElasticSearch全文检索支持

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