ES 虽然是基于 JVM 上运行的 Java 项目,但它在启动、运行时会对一些环境参数,如虚拟 内存数、文件句柄等有所要求。
在运行时,ES 会占用大量的内存进行一系列的数据处理。建议开启内存锁定的配置,将它所占 用的内存进行锁定。在docker中通过以下方式开启:
ulimits:
memlock:
soft: -1
hard: -1
在 Linux 里万物皆文件,线程也可以看作一种特殊的文件。在启动时 ES 会要求系统中可打开 的文件句柄数超过 65535。在docker中通过以下方式打开:
ulimits:
nofile:
soft: 65536
hard: 65536
ES 节点在启动时,会根据集群的信息以及自己的身份(配置在 $ES_HOME/config/elasticsear ch.yml 里)尝试加入集群,其主要参数为:
node.name 节点自身的标记,集群内唯一。
discovery.seed_hosts 集群节点发现会尝试访问的节点列表。
cluster.initial_master_nodes 集群第一次初始化时的候选 master 节点列表。 2、discovery.seed_hosts 集群节点发现会尝试访问的节点列表。
cluster.name 集群名称,节点会在同一网段中尝试找到和自己同一个集群的其他节点组建/ 加入现有集群。
环境变量
.env
### ElasticSearch 7.17 ########################
ELASTICSEARCH_PATH=./data/elasticsearch/
ELASTICSEARCH_LOG=./logs/elasticsearch/
### Kibana 7.17 ########################
KIBANA_PORT=5601
ELASTICSEARCH_USERNAME=elastic
ELASTICSEARCH_PASSWORD=123456
### IPV4_ADDRESS ##############################
SUBNET=172.19.0.0/16
KIBANA_IP=172.19.0.6
ES01_IP=172.19.0.7
ES02_IP=172.19.0.8
ES03_IP=172.19.0.9
ElasticSearch
elasticsearch/Dockerfile
FROM docker.elastic.co/elasticsearch/elasticsearch:7.17.0
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
Kibana
kibana/Dockerfile
FROM docker.elastic.co/kibana/kibana:7.17.0
Yaml 文件
compose.yml
version: '3.8'
services:
### ElasticSearch ######################################################################
es01:
build:
context: ./elasticsearch
container_name: es01
environment:
- node.name=es01
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- cluster.name=docker-cluster
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- xpack.security.enabled=false
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
cap_add:
- IPC_LOCK
volumes:
- ${ELASTICSEARCH_PATH}/01/data:/usr/share/elasticsearch/data
- ${ELASTICSEARCH_PATH}/01/plugins:/usr/share/elasticsearch/plugins
- ${ELASTICSEARCH_LOG}/01:/usr/share/elasticsearch/logs
ports:
- 9200:9200
networks:
backend:
ipv4_address: ${ES01_IP}
es02:
build:
context: ./elasticsearch
container_name: es02
environment:
- node.name=es02
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- xpack.security.enabled=false
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
cap_add:
- IPC_LOCK
volumes:
- ${ELASTICSEARCH_PATH}/02/data:/usr/share/elasticsearch/data
- ${ELASTICSEARCH_PATH}/02/plugins:/usr/share/elasticsearch/plugins
- ${ELASTICSEARCH_LOG}/02:/usr/share/elasticsearch/logs
networks:
backend:
ipv4_address: ${ES02_IP}
es03:
build:
context: ./elasticsearch
container_name: es03
environment:
- node.name=es03
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- xpack.security.enabled=false
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
cap_add:
- IPC_LOCK
volumes:
- ${ELASTICSEARCH_PATH}/03/data:/usr/share/elasticsearch/data
- ${ELASTICSEARCH_PATH}/03/plugins:/usr/share/elasticsearch/plugins
- ${ELASTICSEARCH_LOG}/03:/usr/share/elasticsearch/logs
networks:
backend:
ipv4_address: ${ES03_IP}
### kibana ############################################################################
kibana:
build:
context: ./kibana
container_name: kibana
environment:
- SERVER_NAME=kibana
- XPACK_MONITORING_ENABLED=true
- ELASTICSEARCH_HOSTS=http://es01:9200
- I18N_LOCALE=zh-CN
- ELASTICSEARCH_USERNAME=${ELASTICSEARCH_USERNAME}
- ELASTICSEARCH_PASSWORD="${ELASTICSEARCH_PASSWORD}"
ports:
- ${KIBANA_PORT}:5601
networks:
backend:
ipv4_address: ${KIBANA_IP}
networks:
backend:
driver: bridge
ipam:
config:
- subnet: ${SUBNET}
启动
[root@ogenes01 docker-elk]# docker-compose up -d
[+] Running 4/0
⠿ Container es03 Running 0.0s
⠿ Container es02 Running 0.0s
⠿ Container es01 Running 0.0s
⠿ Container kibana Running 0.0s
测试
127.0.0.1:9200
127.0.0.1:5600
版权声明:本文为weixin_39857866原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。