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
参考
网友评论