docker

Docker 制作 Elasticsearch 镜像

2019-10-29  本文已影响0人  神奇作手

1、拉取镜像及相关配置

1.1、拉取镜像
docker pull elasticsearch:6.8.3
1.2、启动容器
docker run --name=test_es -d -p 9200:9200 -p 9300:9300 docker.io/elasticsearch:6.8.3
1.3、查看容器启动情况
docker ps
1.4、如果启动成功则访问

你的ip:9200,可以访问则可以直接启动成功,不成功则进行如下操作

2、服务器中配置(主机配置)

2.1、查看启动报错日志(情况1)

2.1.1如果报如下错误
[2019-10-27T14:38:59,356][INFO ][o.e.n.Node               ] [kniXCrn] starting ...
[2019-10-27T14:38:59,712][INFO ][o.e.t.TransportService   ] [kniXCrn] publish_address {172.17.0.6:9300}, bound_addresses {[::]:9300}
[2019-10-27T14:38:59,754][INFO ][o.e.b.BootstrapChecks    ] [kniXCrn] bound or publishing to a non-loopback address, enforcing bootstrap checks
ERROR: [1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[2019-10-27T14:38:59,827][INFO ][o.e.n.Node               ] [kniXCrn] stopping ...
[2019-10-27T14:38:59,855][INFO ][o.e.n.Node 

出现此错误:ERROR: [1] bootstrap checks failed
则修改 /etc/sysctl.conf 配置,修改如下:

2.1.2、打开配置文件 sysctl.conf
vim /etc/sysctl.conf 

在配置文件最下面,添加如下配置:

vm.max_map_count=655360

修改完成后,执行此命令

sysctl -p

然后,重新启动elasticsearch,即可启动成功;

2.2、查看启动报错日志(情况2)

2.2.1、如果报如下错误
Java HotSpot(TM) 64-Bit Server VM warning: INFO:
os::commit_memory(0x0000000085330000, 2060255232, 0) failed;
error=’Cannot allocate memory’ (errno=12)

这是由于elasticsearch:tag 默认分配 jvm 空间太大,内存不足以分配导致。
解决方法就是修改jvm空间分配。

2.2.2、查找 jvm.options 文件
find /var/lib/ -name jvm.options
2.2.3、修改查找到的 jvm.options 文件
vim /var/lib/docker/overlay2/1ff5019ead459b4d090b4a72e95e3cc17dc7a8432ce0051e470a3c99ac35c4a6/diff/usr/share/elasticsearch/config/jvm.options
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

-Xms512m
-Xmx512m

################################################################
## Expert settings
################################################################

均改为 512m

保存退出,再次运行创建运行elasticsearch命令,成功启动。

2.2.3、在浏览其中访问

如果访问不了,在服务器中访问,测试一下是否启动起来了

curl localhost:9200

3、文件挂载及

3.1、文件挂载前准备

进入刚才启动的 test_es 容器中,找到配置文件所在位置,进入容器命令如下:

docker exec -it test_es bash

找到配置文件所在位置:/usr/share/elasticsearch/config 下,可以看的配置文件:elasticsearch.yml

拷贝配置文件到宿主机 /opt/elasticsearch/ 目录下

docker cp  test_es:/usr/share/elasticsearch/config/elasticsearch.yml  /opt/elasticsearch/

停止并且删除原来创建的容器

docker stop test_es 
docker rm  test_es
3.2、修改 /opt/elasticsearch/elasticsearch.yml 配置文件

  将 transport.host: 0.0.0.0 前的#去掉后保 存文件退出。其作用是允许任何ip地址访问elasticsearch 开发测试阶段可以这么做,生 产环境下指定具体的IP
在 elasticsearch.yml 配置文件中添加如下跨域访问,方便下面的可视化连接工具连接

cluster.name: "docker-cluster"
network.host: 0.0.0.0

#开启跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"
3.3、重新创建容器
docker run -d --name=tensquare_elasticsearch -p 9200:9200 -p 9300:9300 -v  /opt/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:6.8.3

3.4、系统调优

启动后发现启动失败了,这时什么原因呢?这与我们刚才修改的配置有关,因为 elasticsearch在启动的时候会进行一些检查,比如最多打开的文件的个数以及虚拟内存 区域数量等等,如果你放开了此配置,意味着需要打开更多的文件以及虚拟内存,所以 我们还需要系统调优。

一共需要修改两处

(1)修改 /etc/security/limits.conf

添加如下内容

* soft nofile 65536 
* hard nofile 65536

nofile是单个进程允许打开的最大文件个数
soft nofile 是软限制
hard nofile是硬限制

(2)修改 /etc/sysctl.conf

添加如下内容

vm.max_map_count=655360

限制一个进程可以拥有的VMA(虚拟内存区域)的数量;
执行下面命令 修改内核参数马上生效

sysctl -p

重新启动虚拟机,再次启动容器,发现已经可以启动并远程访问

在浏览其中输入http: //47.99.218.xxx:9200

4、ik 分词器安装

4.1、准备工作

(1)、先准备一个与 elasticsearch:6.8.3 相对对应的 ik 分词器 elasticsearch-analysis-ik-6.8.3.zip;
可在 GitHub上下载:https://github.com/medcl/elasticsearch-analysis-ik/releases

(2)、新建一个 ik683 文件夹,将 ik 分词器 elasticsearch-analysis-ik-6.8.3.zip 解压在里面;

(3)、添加一些配置一会测试用,在 ..\ik683\config\ 目录下添加一个 custom.dic 自己定制的词汇分词规则,如下


传智播客
传智
播客

注意:此文件必须保存为 utf-8 格式;内容中顶部预留一个空行,防止第一行忽略现象

(4)、在本目录下的 IKAnalyzer.cfg.xml 配置文件中进行配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <comment>IK Analyzer 扩展配置</comment>
    <!--用户可以在这里配置自己的扩展字典 -->
    <entry key="ext_dict">custom.dic</entry>
     <!--用户可以在这里配置自己的扩展停止词字典-->
    <entry key="ext_stopwords"></entry>
    <!--用户可以在这里配置远程扩展字典 -->
    <!-- <entry key="remote_ext_dict">words_location</entry> -->
    <!--用户可以在这里配置远程扩展停止词字典-->
    <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
4.2、将 ik683 文件上传

本人将 elasticsearch 相关的配置都放在liunx主机的 /opt/elasticsearch/ 下

[root@iZxz5n6q7bcnqgZ elasticsearch]# ll
total 8
-rwxrwxrwx 1 root root  127 Oct 28 10:03 elasticsearch.yml
drwxr-xr-x 3 root root 4096 Oct 28 22:31 ik683
[root@iZxz5n6q7bcnqgZ elasticsearch]# 
4.3、拷贝 ik683 到容器中
docker cp ik683  tensquare_elasticsearch:/usr/share/elasticsearch/plugins/
4.4、从新启动容器
 docker restart 6bc33fa55cce
4.5、测试 ik分词器

注意:es:6.x.x之后调用 ik分词器要使用 Get或 Post带 json形式的请求体

(1)、es 自带分词器

调用地址:http://47.99.xxx.xxx:9200/_analyze
内置划分,json参数:

{
    "analyzer": "chinese",
    "text": "传智播客"
}
(2)、使用 ik分词器

IK提供了两个分词算法: ik_smart (最少切分) 和 ik_max_word (最细粒度划分)
调用地址:http://47.99.xxx.xxx:9200/_analyze

①、最少切分,json参数:

{
    "analyzer": "ik_smart",
    "text": "传智播客"
}

②、最细粒度划分,json参数:

{
    "analyzer": "ik_max_word",
    "text": "传智播客"
}

5、elasticsearch-head 可视化工具使用

5.1、使用docker 拉取 elasticsearch-head

docker pull mobz/elasticsearch-head:5

5.2、创建相关容器

docker run --name=tensquare_es-head -d -p 9100:9100 docker.io/mobz/elasticsearch-head:5

5.3、页面访问

访问地址:http//自己ip:9100

在 1处 输入要显示的 elasticsearch 的访问路径

6、logstash 同步 mysql 数据库数据

待续......

上一篇下一篇

猜你喜欢

热点阅读