ELK - Win10上使用Docker搭建ES集群

Win10上使用Docker搭建ES集群

Elastic Search离线镜像包

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

 

posted @ 2024-03-22 15:06  Helios_Fz  阅读(97)  评论(0编辑  收藏  举报