docker部署单机es
#拉取镜像
docker pull elasticsearch:6.5.4
#创建容器
docker create --name elasticsearch --net host -e "discovery.type=single-node" -e "network.host=192.168.88.101" elasticsearch:6.5.4
#启动
docker start elasticsearch
#查看日志
docker logs -f elasticsearch
启动和查看日志也能够两个命令一块写
docker start elasticsearch && docker logs -f elasticsearch
访问http://192.168.88.101:9200端口,查看安装是否成功
es图形化界面elasticsearch-head 的安装
#拉取镜像
docker pull mobz/elasticsearch-head:5
#创建容器
docker create --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5
#启动容器
docker start elasticsearch-head && docker logs -f elasticsearch-head
访问http://192.168.88.101:9100端口,查看安装是否成功
安装后可能出现的两个问题
1.由于前后端分离开发,所以会存在跨域问题,需要在服务端做CORS的配置
我们需要进入elasticsearch容器内部,修改配置文件elasticsearch.yml
解决方式
#拿到运行容器elasticsearch 的 id
docker ps -a
#进入正在运行的容器/bin/bash
目录
docker exec -it ******(容器id) /bin/bash
进入配置文件
cd ./config
修改配置文件,在配置文件中添加允许跨域信息
vi elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
重启 elasticsearch-head容器
docker restart elasticsearch-head
2.通过es-head新增索引时如果新建索引时,报错{“error”:“Content-Type header [application/x-www-form-urlencoded] is not supported”,“status”:406}
解决方法:
1、进入head安装目录;docker exec是进入正在运行的容器
docker exec -it 镜像id /bin/bash
2、打开文件夹_site,
cd _site/
3、编辑vendor.js 共有两处
①. 6886行 contentType: "application/x-www-form-urlencoded改成contentType: “application/json;charset=UTF-8”
②. 7574行 var inspectData = s.contentType === “application/x-www-form-urlencoded” &&改成var inspectData = s.contentType === “application/json;charset=UTF-8” &&
Docker内部是不能使用vi命令的,如果要编辑可以先把文件拷贝出来,修改后拷贝进去即可
我容器的vendor.js的路径是/usr/src/app/_site/vendor.js
,我将其拷贝到了root目录下
注意两个语法的不同
docker cp b09b1c2bece8:/usr/src/app/_site/vendor.js /root
修改之后拷贝进去
docker cp /root/vendor.js b09b1c2bece8:/usr/src/app/_site/vendor.js
然后重新启动header插件即可
docker restart b09b1c2bece8
es集群安装
新建集群目录,存储集群信息
mkdir /haoke/es-cluster
cd /haoke/es-cluster
mkdir node01
mkdir node02
#将elasticsearch6.5.4的tar.gz包上传解压复制安装目录下的elasticsearch.yml、jvm.options文件,
cp elasticsearch.yml jvm.options /haoke/es-cluster/node01
cp elasticsearch.yml jvm.options /haoke/es-cluster/node02
做如下修改
#node01的配置:
cluster.name: es-itcast-cluster
node.name: node01
node.master: true
node.data: true
network.host: 192.168.88.101
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.88.101"]
discovery.zen.minimum_master_nodes: 1
http.cors.enabled: true
http.cors.allow-origin: "*"
#node02的配置:
cluster.name: es-itcast-cluster
node.name: node02
node.master: false
node.data: true
network.host: 192.168.88.101
http.port: 9201
discovery.zen.ping.unicast.hosts: ["192.168.88.101"]
discovery.zen.minimum_master_nodes: 1
http.cors.enabled: true
http.cors.allow-origin: "*"
将jvm.options文件修改初始和最大堆内存大小
-Xms128m
-Xmx128m
#创建容器
docker create --name es-node01 --net host -v /haoke/es-cluster/node01/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /haoke/es-cluster/node01/jvm.options:/usr/share/elasticsearch/config/jvm.options -v /haoke/es-cluster/node01/data:/usr/share/elasticsearch/data elasticsearch:6.5.4
docker create --name es-node02 --net host -v /haoke/es-cluster/node02/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /haoke/es-cluster/node02/jvm.options:/usr/share/elasticsearch/config/jvm.options -v /haoke/es-cluster/node02/data:/usr/share/elasticsearch/data elasticsearch:6.5.4
#启动容器
docker start es-node01 && docker logs -f es-node01
docker start es-node02 && docker logs -f es-node02
启动时会报文件无权限操作的错误
需要对node01和node02进行chmod 777 的操作,防止容器启动时需要访问root用户下面的文件夹因没有权限而报错
cd node01/
-R是递归 指定任何一个人都可以对该目录进行修改
chmod 777 data -R
如果出现max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
1.在配置文件中添加vm.max_map_count=655360
vi /etc/sysctl.conf
vm.max_map_count=655360
2.加载系统参数
sysctl -p
3.重新启动
docker restart es-node01 && docker logs -f es-node01
docker restart es-node02 && docker logs -f es-node02