Docker 制作 Elasticsearch 镜像
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
重新启动虚拟机,再次启动容器,发现已经可以启动并远程访问
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 数据库数据
待续......