最终的文件目录截图给大家参考:
start.cmd可以没有,其他两个txt文件也只是我自己记录操作步骤和运行命令的,可以没有。
建一个docker-compose.yml文件,贴入以下内容:
version: '3.0'
services:
es01:
image: elasticsearch:7.6.2
container_name: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
deploy:
resources:
limits:
memory: 1G
reservations:
memory: 512M
volumes:
- ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- ./elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
ports:
- 9200:9200
networks:
- elastic
es02:
image: elasticsearch:7.6.2
container_name: es02
environment:
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
deploy:
resources:
limits:
memory: 1G
reservations:
memory: 512M
volumes:
- ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- ./elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
ports:
- 9201:9200
networks:
- elastic
es03:
image: elasticsearch:7.6.2
container_name: es03
environment:
- node.name=es03
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
deploy:
resources:
limits:
memory: 1G
reservations:
memory: 512M
volumes:
- ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- ./elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
ports:
- 9202:9200
networks:
- elastic
# 管理工具
kibana:
depends_on:
- es01
image: kibana:7.6.2
container_name: kibana
ports:
- 5601:5601
environment:
- elasticsearch.url=http://es01:9200
- elasticsearch.hosts=http://es01:9200
- i18n.locale=zh-CN
- TZ=Asia/Shanghai
volumes:
- ./kibana.yml:/usr/share/kibana/config/kibana.yml
- /etc/localtime:/etc/localtime
networks:
- elastic
# 管理工具(推荐使用)
elastic-hd:
image: containerize/elastichd:latest
container_name: es-hd
ports:
- "9800:9800"
depends_on:
- "es01"
links:
- "es01"
networks:
- elastic
# 虚拟局域网
networks:
elastic:
driver: bridge
随便运行一个单机版的es实例,镜像版本跟集群版本的一致
docker run -dit --name=es elasticsearch:7.6.2 /bin/bash
进入容器
docker exec -it es /bin/bash
生成密钥,分别执行这两个命令,期间遇到需要输入密码的,回车即可
./bin/elasticsearch-certutil ca
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
退出容器,执行docker拷贝命令;下面的示例命令是拷贝到当前目录,具体使用方法可查阅docker官网;
docker cp es:/usr/share/elasticsearch/elastic-certificates.p12 .
到这里我们就得到一个密钥,后续搭建集群的时候共享这个密钥即可。当前这个es实例就可以删除了。
也可以参考其他网友的生成方式。所有的集群共享这个密钥即可
新建一个elasticsearch.yml文件,贴入下面的内容,不需要做任何修改
network.host: 0.0.0.0
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.keystore.type: PKCS12
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.type: PKCS12
xpack.security.audit.enabled: true
http.cors.enabled: true
http.cors.allow-origin: "*"
这一步可以先随便配置一个密码,等集群起来了,重置密码后再补充,毕竟此时我们也不知道es的密码是多少;因为kibana只是管理工具,不影响集群的启动,只是暂时无法连接集群而已。
建一个 kibana.yml
server.name: kibana
server.host: "0"
kibana.index: ".kibana"
elasticsearch.hosts: [ "http://【宿主机IP】:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: zh-CN
elasticsearch.username: 'kibana'
elasticsearch.password: '【密码】'
docker compose up
进入容器,执行密码重启命令;根据提示输入自己喜欢的密码
然后回到上面的kibana配置文件,填入这个密码;kibana即可连接到集群
docker exec -it es01 bash
./bin/elasticsearch-setup-passwords interactive
elasticHD这个管理工具我是比较推荐的,依赖性没有那么强,而且界面操作简单,好看。
具体使用哪一款管理工具都不影响我们集群的搭建。
由于本集群是配置了密码的,所以默认的是连不上集群的。
官网原话:
ElasticSearch server that supports privileged authentication, URL format:http://user:password@host:port
大概的意思就是,如果ElasticSearch server配置了认证,可以使用这样的url方式
例如:
http://elastic:【密码】@【宿主机ip】:9200
到此,我们的es集群应该就算搭建完成了!
过程中哪一步没有做到的,可以单独查阅其他网友的教程;而不要局限与本教程。毕竟实际场景中有很多因素,比如有些小伙伴的宿主机给docker分配的JVM内存太小,导致集群起不来就不是本文的范畴了。
最后,祝大家都顺利起飞!