zoukankan      html  css  js  c++  java
  • 五分钟搞定Docker安装ElasticSearch

    前言

    项目准备上ElasticSearch,为了后期开发不卡壳只能笨鸟先飞,在整个安装过程中遇到以下三个问题。

    • Docker安装非常慢
    • ElasticSearch-Head连接出现跨域
    • ElasticSearch-Head操作报出406错误码

    一、安装Docker

    目前咔咔对Docker的理解还只是个皮毛,对于不了解的东西就要多多使用,使用的多了自然而然也就会了。

    安装依赖包,执行命令yum install -y yum-utils device-mapper-persistent-data lvm2

    此时若直接执行安装docker命令就会发现是十分慢的,这个等待过程是漫长的。

    配置国内的源就可以解决问题yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo这里使用的是阿里云的源。

    接着再执行命令yum install docker-ce docker-ce-cli containerd.io安装docker即可。

    配置docker开机自启systemctl enable docker

    执行systemctl start docker命令启动docke

    查看docker版本看是否安装成功

    docker版本
    docker版本

    如若之前安装docker有问题,那么执行yum remove docker-ce来删除并且将/var/lib/docker下的所有东西全部删除干净。

    docker安装完成后咔咔就进行了创建容器,但遇到了一个问题WARNING: IPv4 forwarding is disabled. Networking will not work.

    拿着这个错误直接找度娘才知道,没有开启转发,网络桥接配置后,是需要开启转发的。

    若不开启转发就会出现上边的错误,显示没有网络。

    解决方案

    修改配置文件/etc/sysctl.conf,在里边加上net.ipv4.ip_forward=1,然后重启服务systemctl restart network,让配置生效。

    二、安装ElasticSearch

    使用docker直接获取es镜像,执行命令docker pull elasticsearch:7.7.0

    执行完成后,执行docker images即可看到上一步拉取的镜像。

    es镜像文章
    es镜像文章

    有了镜像,就可以开始创建容器了,接下来创建一个es的容器。

    执行docker run --name elasticsearch -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 elasticsearch:7.7.0

    --name 表示容器名称  

    -d: 后台运行容器,并返回容器ID;

    -e: 指定容器内的环境变量

    -p: 指定端口映射,格式为:主机(宿主)端口:容器端口

    命令执行完成会返回容器id,此时再执行docker ps -a列出所有的容器。

    es容器
    es容器

    es默认端口为9200,只用ip地址+端口号直接访问,就会返回如下图。出现这个界面就表示你安装成功了。

    返回结果
    返回结果

    到这里我们就非常快速的使用Docker安装完成了ElasticSearch,接下来再一起安装针对于ElasticSearch的客户端工具。

    三、安装ElasticSearch-Head

    同样也采用Docker进行快速安装,跟上边一样同样先拉取镜像,执行命令docker pull mobz/elasticsearch-head:5

    接着创建容器,执行docker create --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5

    安装ElasticSearch-Head插件
    安装ElasticSearch-Head插件

    为了保证图片的清晰度,图片就没有截取完全,同时也是咔咔接下来将要跟你讲的,注意俩次创建容器时的不同。

    安装ElasticSearch时是容器创建成功后直接在后台就运行了,但在安装ElasticSearch-Head时并没有保持一致。

    而是指定容器名,端口号就直接执行了,这样执行完成后是创建了一个容器,并没有运行。

    也就是咔咔在上图右下角的地方有一个框,这里就可以看到状态,会发现是create。

    所以还需要一个操作,那就是启动容器docker start 容器id

    安装完成直接使用域名加端口9100即可访问。

    跨域问题
    跨域问题

    处理跨域

    在连接ElasticSearch会发现无法连接,由于时前后端分离开发,所以会存在跨域问题,需要在服务端做跨域处理。

    执行命令docker exec -it elasticsearch /bin/bash 进入到第一步创建的ElasticSearch容器中,修改配置文件vi config/elasticsearch.yml即可。

    http.cors.enabled: true 
    http.cors.allow-origin: "*"

    将上边俩行写进配置文件中,注意这里是用yml的配置文件,简单普及一下此类配置文件的几点语法。

    • 冒号后边必须有一个空格
    • 使用空格的缩进标识层级关系,空格数据不重要,只要是左边对其的一列键即可。
    • 对大小写十分敏感
    • 缩进时不允许使用tab,只允许使用空格。

    配置修改完后需执行命令exit退出容器,接着执行docker restart 容器ID重启容器即可。

    处理报406错误

    此时通过ElasticSearch-Head可以成功连接ElasticSearch了,但进行数据操作时会报406错误。

    只需要修改ElasticSearch-Head容器中的配置即可,将配置文件复制到宿主机进行修改。

    执行docker cp 容器ID:/usr/src/app/_site/vendor.js /usr/local/ ,此命令会把docker容器中的文件复制到你的宿主机目录。

    进入到/usr/local即可看到从容器中复制出来的文件vendor.js。

    修改文件第6886、7574行,将"application/x-www-from-urlencodes"修改为"application/json;charset=UTF-8"即可

    修改后再将文件复制到容器中,从容器复制文件到宿主机命令已经使用过了,那么现在只不过是把俩个目录反过来即可执行docker cp /usr/local/vendor.js 容器ID:/usr/src/app/_site

    最后一步重启ElasticSearch-Head容器就结束了。

    四、安装IK分词器

    首先问一个问题,ElasticSearch中自带的有分词器为什么还要使用IK分词器?

    在ElasticSearch中的分词器会把中文分为一个一个的字,例如"今天是周五",会被分成“今”、“天”、“是”,“周”、“五”,这里很明显是不合适的,在大多数场景下需要的是词而不是字。

    所以就需要安装中文分词器IK来解决这个问题。

    IK提供了两个分词算法:ik_smart和ik_max_word,其中ik_smart为最少切分,ik_max_word为最细力度。分别都有什么区别会在下期文章中给大家提出来。

    这里需要注意安装的版本需要跟ElasticSearch版本一致。

    进入到ElasticSearch容器中docker exec -it 容器ID /bin/bash

    使用wget来进行安装,执行wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.7.0/elasticsearch-analysis-ik-7.7.0.zip即可。

    当你使用wget安装出现Unable to establish SSL connection时执行以下俩个命令即可。

    yum install opensslls

    yum install openssl-devel

    执行cd /usr/share/elasticsearch/plugins来到插件目录创建一个IK目录。

    将压缩包移动到IK目录中,执行解压指令elasticsearch-analysis-ik-7.7.0.zip

    接着删除压缩包即可,此时你可以看到一个config包和几个jar包

    解压后的包
    解压后的包

    最后退出容器,重启重启容器即可。

    六、总结

    本期文章将需要使用ElasticSearch所有的东西都已经准备齐全了,接下来的文章会带着你使用PHP的Laravel开始封装ElasticSearch的所有查询方法。

    后期也会在Go中封装一份,给自己的工具类添加一点内容。

    坚持学习、坚持写作、坚持分享是咔咔从业以来所秉持的信念。但愿文章在偌大的互联网上能给你带来一点帮助,我是咔咔,下期见。

  • 相关阅读:
    003 01 Android 零基础入门 01 Java基础语法 01 Java初识 03 Java程序的执行流程
    002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介
    001 01 Android 零基础入门 01 Java基础语法 01 Java初识 01 导学
    001 Android Studio 首次编译执行项目过程中遇到的几个常见问题
    Dora.Interception,为.NET Core度身打造的AOP框架 [2]:以约定的方式定义拦截器
    Dora.Interception,为.NET Core度身打造的AOP框架 [1]:更加简练的编程体验
    监视EntityFramework中的sql流转你需要知道的三种方式Log,SqlServerProfile, EFProfile
    轻量级ORM框架——第二篇:Dapper中的一些复杂操作和inner join应该注意的坑
    轻量级ORM框架——第一篇:Dapper快速学习
    CF888G Xor-MST(异或生成树模板)
  • 原文地址:https://www.cnblogs.com/fkaka/p/15205675.html
Copyright © 2011-2022 走看看