ELK - Win10上使用Docker搭建ES集群
Win10上使用Docker搭建ES集群
Elastic Search离线镜像包
链接: https://pan.baidu.com/s/1nbHWvUIKkAEFf5qIidB97g 提取码: 8ymw
ES可视化管理工具
http://www.elastic-view.cn/index.html
单机单节点
启动命令:
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e node.name=elasticsearch -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -v 自定义绝对路径\es\data:/usr/share/elasticsearch/data -v 自定义绝对路径\es\conf:/config docker.elastic.co/elasticsearch/elasticsearch:7.10.2
验证:
浏览器输入:localhost:9200
单机多节点
目录结构
配置文件
es_cluster\node1\conf\elasticsearch.yml
#集群名称 cluster.name: es_cluster #当前该节点的名称 node.name: node-1 #是不是有资格竞选主节点 node.master: true #是否存储数据 node.data: true #最大集群节点数 node.max_local_storage_nodes: 3 #给当前节点自定义属性(可以省略) #node.attr.rack: r1 #数据存档位置 path.data: /usr/share/elasticsearch/data #日志存放位置 path.logs: /usr/share/elasticsearch/log #是否开启时锁定内存(默认为是) #bootstrap.memory_lock: true #设置网关地址,这个地址我原先填写了自己的实际物理IP地址, #然后启动一直报无效的IP地址,无法注入9300端口,这里只需要填写0.0.0.0 network.host: 0.0.0.0 #设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址,设置当前物理机地址, #如果是docker安装节点的IP将会是配置的IP而不是docker网管ip network.publish_host: 本机ip #设置映射端口 http.port: 9200 #内部节点之间沟通端口 transport.tcp.port: 9300 #集群发现默认值为127.0.0.1:9300,如果要在其他主机上形成包含节点的群集,如果搭建集群则需要填写 #es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点,也就是说把所有的节点都写上 discovery.seed_hosts: ["本机ip:9300","本机ip:9301","本机ip:9302"] #当你在搭建集群的时候,选出合格的节点集群 #其实就是,让你选择比较好的几个节点,在你节点启动时,在这些节点中选一个做领导者, #如果你不设置,elasticsearch就会自己选举,这里我们把三个节点都写上 cluster.initial_master_nodes: ["node-1","node-2","node-3"] #在集群启动后,至少复活多少个节点以上,那么这个服务才可以被使用,否则不可以被使用, gateway.recover_after_nodes: 2 #删除索引是是否需要显示其名称,默认为显示 #action.destructive_requires_name: true
启动命令
docker run -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d -p 9200:9200 -p 9300:9300 -v 自定义绝对路径\es_cluster\node1\conf\elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v 自定义绝对路径\es_cluster\node1\plugins:/usr/share/elasticsearch/plugins -v 自定义绝对路径\es_cluster\node1\data:/usr/share/elasticsearch/data -v 自定义绝对路径\es_cluster\node1\log:/usr/share/elasticsearch/log --name es-node-1 docker.elastic.co/elasticsearch/elasticsearch:7.10.2
docker run -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d -p 9201:9201 -p 9301:9301 -v 自定义绝对路径\es_cluster\node2\conf\elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v 自定义绝对路径\es_cluster\node2\plugins:/usr/share/elasticsearch/plugins -v 自定义绝对路径\es_cluster\node2\data:/usr/share/elasticsearch/data -v 自定义绝对路径\es_cluster\node2\log:/usr/share/elasticsearch/log --name es-node-2 docker.elastic.co/elasticsearch/elasticsearch:7.10.2
docker run -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d -p 9202:9202 -p 9302:9302 -v 自定义绝对路径\es_cluster\node3\conf\elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v 自定义绝对路径\es_cluster\node3\plugins:/usr/share/elasticsearch/conf -v 自定义绝对路径\es_cluster\node3\data:/usr/share/elasticsearch/data -v 自定义绝对路径\es_cluster\node3\log:/usr/share/elasticsearch/log --name es-node-3 docker.elastic.co/elasticsearch/elasticsearch:7.10.2
验证:
浏览器输入:本机ip:9200,本机ip:9201,本机ip:9202
ES集群设置密码
进入docker容器,生成节点证书,生成证书的密码可以不填
/usr/share/elasticsearch/bin/elasticsearch-certutil ca -out config/certs/elastic-certificates.p12 -pass
把生成的证书从docker容器中拷贝出来
docker cp es-node-1:/usr/share/elasticsearch/config/certs 自定义绝对路径\es_cluster\node1\conf\
在原有的配置文件中新增如下配置
es_cluster\node1\conf\elasticsearch.yml
# 开启xpack xpack.security.enabled: true xpack.license.self_generated.type: basic xpack.security.transport.ssl.enabled: true # 证书配置 xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12 xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12 #跨域配置 http.cors.enabled: true http.cors.allow-origin: "*" http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
删除之前的容器,重新用新命令启动容器
docker run -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d -p 9200:9200 -p 9300:9300 -v 自定义绝对路径\es_cluster\node1\conf\elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v 自定义绝对路径\es_cluster\node1\conf\certs\elastic-certificates.p12:/usr/share/elasticsearch/config/certs/elastic-certificates.p12 -v 自定义绝对路径\es_cluster\node1\plugins:/usr/share/elasticsearch/plugins -v 自定义绝对路径\es_cluster\node1\data:/usr/share/elasticsearch/data -v 自定义绝对路径\es_cluster\node1\log:/usr/share/elasticsearch/log --name es-node-1 docker.elastic.co/elasticsearch/elasticsearch:7.10.2
docker run -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d -p 9201:9201 -p 9301:9301 -v 自定义绝对路径\es_cluster\node2\conf\elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v 自定义绝对路径\es_cluster\node2\conf\certs\elastic-certificates.p12:/usr/share/elasticsearch/config/certs/elastic-certificates.p12 -v 自定义绝对路径\es_cluster\node2\plugins:/usr/share/elasticsearch/plugins -v 自定义绝对路径\es_cluster\node2\data:/usr/share/elasticsearch/data -v 自定义绝对路径\es_cluster\node2\log:/usr/share/elasticsearch/log --name es-node-2 docker.elastic.co/elasticsearch/elasticsearch:7.10.2
docker run -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d -p 9202:9202 -p 9302:9302 -v 自定义绝对路径\es_cluster\node3\conf\elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v 自定义绝对路径\es_cluster\node3\conf\certs\elastic-certificates.p12:/usr/share/elasticsearch/config/certs/elastic-certificates.p12 -v 自定义绝对路径\es_cluster\node3\plugins:/usr/share/elasticsearch/plugins -v 自定义绝对路径\es_cluster\node3\data:/usr/share/elasticsearch/data -v 自定义绝对路径\es_cluster\node3\log:/usr/share/elasticsearch/log --name es-node-3 docker.elastic.co/elasticsearch/elasticsearch:7.10.2
不输入用户名密码就会401
进入容器生成密码
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto
分别打开三个验证链接,均需要用户名和密码,登录后获得节点信息
增加了用户名密码的ES,在使用API调用时需要在Header中添加验证信息
验证
可用性验证
- 在9200新增index,9201、9202均可查询到新增的index
- 在9200新增doc(随机id&指定id两种情况),9201、9202均可查询到新增的doc
- 在9200根据id修改doc,9201、9202均可查询到修改后的doc
- 在9200根据id删除doc,9201、9202均删除doc
- 在9200删除index,9201、9202上均删除index+doc
高可用验证
- 停止某一个子节点
- 分片会进行重新分配
- 剩余主节点和子节点均进行增删改查
- 重启子节点,分片重新分配
- 停止主节点
- 重新选举主节点
- 分片会进行重新分配,这一步会比停止子节点时的重新分配慢很多
- 剩余主节点和子节点均进行增删改查
- 重启子节点,分片重新分配
- 同时停止两个节点,集群不可用
- 单节点磁盘使用率超过85%则停止分片
问题
ES启动的时候会报错:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
原因:elasticsearch用户拥有的内存权限太小,至少需要262144。(查看当前值:sysctl -a|grep vm.max_map_count)
解决:编辑/etc/sysctl.conf(sudo vim /etc/sysctl.conf)文件,在最后添加一行:
vm.max_map_count=262144
运行 sysctl -p 重新加载配置
在Windows Docker Desktop下依次执行:
wsl -d docker-desktop sysctl -w vm.max_map_count=262144 exit
Windows单机集群搭建完毕之后,会因为“the node is above the low watermark cluster setting ”错误导致健康状态为yellow
原因:磁盘空间不足,导致无法指定副本分片位置
解决:增加磁盘空间。磁盘空间使用数量低于es设置预警水位,分片恢复正常,健康状态变为green