本篇文章只记录本人这个菜鸟学习的笔记以及遇到的问题,如有不对,欢迎指正!
要在Docker中安装ES,首先需要拉取ES的镜像
docker pull elasticsearch:5.6.8
我在学习的时候用的为ES5.6.8,其他版本应该通用
然后创建容器
docker run ‐di ‐‐name=ES5.6.8 ‐p 9200:9200 ‐p 9300:9300
elasticsearch:5.6.`在这里插入代码片`8
通过本地浏览器访问
http://你的虚拟机IP:9200/
看到以下json数据,为创建成功
{
"name" : "WmBn0H‐",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "2g‐VVbm9Rty7J4sksZNJEg",
"version" : {
"number" : "5.6.8",
"build_hash" : "688ecce",
"build_date" : "2018‐02‐16T16:46:30.010Z",
"build_snapshot" : false,
"lucene_version" : "6.6.1"
},
"tagline" : "You Know, for Search"
}
<================================================================================>
发现的问题
但是通过Postman来给SpringCloud项目发送请求,发现Docker中的ES的9300端口不可用
NoNodeAvailableException[None of the configured nodes are available:
[{
#transport#‐1}{exvgJLR‐RlCNMJy‐hzKtnA}{192.168.10.136}
{
192.168.10.136:9300}]
]
at
org.elasticsearch.client.transport.TransportClientNodesService.ensureNodes
AreAvailable(TransportClientNodesService.java:347)
at
org.elasticsearch.client.transport.TransportClientNodesService.execute(Tra
nsportClientNodesService.java:245)
at
org.elasticsearch.client.transport.TransportProxyClient.execute(TransportP
roxyClient.java:59)
这是因为elasticsearch从5版本以后默认不开启远程连接,需要修改配置文件
修改配置文件需要进入容器内部
docker exec ‐it ES5.6.8 /bin/bash
使用ls命令可以看到config文件夹,进入config可以看到elasticsearch.yml文件
但是我们无法使用vi命令来操作,所以只能选择将配置文件挂载到容器外部
退出容器,将elasticsearch.yml文件拷贝到宿主机
docker cp ES5.6.8:/usr/share/elasticsearch/config/elasticsearch.yml
/usr/share/elasticsearch.yml
停止,删除原来的容器
docker stop tensquare_elasticsearch
docker rm tensquare_elasticsearch
重新创建容器
docker run ‐di ‐‐name=ES5.6.8 ‐p 9200:9200 ‐p 9300:9300 ‐v
/usr/share/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch
.yml elasticsearch:5.6.8
修改/usr/share/elasticsearch.yml 将 transport.host: 0.0.0.0 前的#去掉后保
存文件退出。其作用是允许任何ip地址访问elasticsearch .开发测试阶段可以这么做,生
产环境下指定具体的IP。
重新启动
docker restart ES5.6.8
重启后,一直使用来查看是否启动成功
docker ps
我们会发现启动失败了,这是为啥?
这与我们刚才修改的配置有关,因为elasticsearch在启动的时候会进行一些检查,比如最多打开的文件的个数以及虚拟内存区域数量等等,如果你放开了此配置,意味着需要打开更多的文件以及虚拟内存,所以我们还需要系统调优。
一共需要修改两个文件
修改/etc/security/limits.conf ,追加内容
* soft nofile 65536
* hard nofile 65536
#nofile是单个进程允许打开的最大文件个数
#soft nofile 是软限制
#hard nofile是硬限制
修改/etc/sysctl.conf,追加内容
vm.max_map_count=655360
#限制一个进程可以拥有的VMA(虚拟内存区域)的数量
修改后执行下面命令
#修改内核参数后,立马生效
sysctl ‐p
重新启动虚拟机,再次启动容器
再次通过项目来访问,发现已经可以远程访问了
<================================================================================>
IK分词器以及head插件的安装在LInux中以及Windows中的安装大同小异
直接将IK的文件夹放置在ES的plugin中即可
只是head插件需要在docker中创建容器