简介
Elasticsearch 是一个分布式搜索与分析引擎,是 Elastic Stack 的核心。
在Elastic Stack 中,Logstash 和 Beats 进行收集、统计数据,然后将这些数据存储到 Elasticsearch。Kibana 则提供交互式操作、可视化,更好地解析数据,也可以用于管理和监控 Elastic Stack。
Elasticsearch 提供对各类数据的准实时搜索与分析。无论是有结构或无结构的文本,又或者是数值型数据、地理空间数据,Elasticsearch 都可以有效地快速存储与索引这些数据。
Elasticsearch版本
基于Elasticsearch 7.17,支持的操作系统及JVM
Java(JVM)版本
Elasticsearch基于Java构建,使用程序已内置的JVM运行,
如指定另外的JVM,则设置ES_JAVA_HOME
环境变量。
Docker安装Elasticsearch
拉取镜像
docker pull elasticsearch:7.17.0
以单节点启动
指定discovery.type=single-node
以绕过bootstrap checks
;
单节点通常用于开发或测试,高可用需以多节点集群启动。
- 9200端口是HTTP 协议的 RESTful 接口
- 9300端口是TCP 通讯端口,用于集群内节点通讯和 TCP Client
docker run -d \
-p 127.0.0.1:9200:9200 \
-p 127.0.0.1:9300:9300 \
-e "discovery.type=single-node" \
--name elasticsearch
elasticsearch:7.17.0
以多节点集群启动
1.创建docker-compose.yml
下例中使用了ES_JAVA_OPTS
来设置JVM参数;
但通常不建议在生产环境中使用,见:Manually set the heap size 。
version: '2.2'
services:
es01:
image: elasticsearch:7.17.0
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
volumes:
- data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
es02:
image: elasticsearch:7.17.0
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
volumes:
- data02:/usr/share/elasticsearch/data
networks:
- elastic
es03:
image: elasticsearch:7.17.0
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
volumes:
- data03:/usr/share/elasticsearch/data
networks:
- elastic
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
networks:
elastic:
driver: bridge
2.启动集群
docker-compose up -d
3.测试节点
curl -X GET "localhost:9200/_cat/nodes?v=true&pretty"
日志信息会输出到控制台并由Docker的日志驱动管理。默认的可以通过docker logs
访问日志。如果想要Elasticsearch容器将日志写入磁盘,则设置ES_LOG_STYLE
环境变量为file
。
要停掉集群,则运行docker compose down
。Docker 数据卷中的数据会保留,并会在重启集群时docker compose up
载入。若要在停掉集群时删除数据,则指定-v
选项:docker compose down -v
。
以生产级部署
设置vm.max_map_count
在生产中vm.max_map_count
内核设置必须至少为262144。
通过以下命令查看当前vm.max_map_count
。
grep vm.max_map_count /etc/sysctl.conf
vm.max_map_count=262144
设置vm.max_map_count
### 或者通过 /etc/sysctl.conf 永久修改
sysctl -w vm.max_map_count=262144
手动设置JVM堆大小
在前面的docker compose启动方式中,通过指定环境变量ES_JAVA_OPTS
来设置JVM参数;
Elasticsearch会根据节点主从和分配至容器的内存大小自动设置;
如果未通过环境变量指定,可通过配置文件/usr/share/elasticsearch/config/jvm.options.d
修改。
不使用loop-lvm模式
如果使用的是devicemapper
存储驱动器,最好不使用loop-lvm
;
推荐设置Docker引擎使用direct-lvm
模式。
配置Elasticsearch
Elasticsearch的配置相关文件位于/usr/share/elasticsearch/config/
Elasticsearch主配置:elasticsearch.yml
Elasticsearch JVM配置:jvm.options
Elasticsearch日志配置:log4j2.properties
### 集群名,对于节点设置所加入的集群
cluster.name: elasticsearch
### 节点名,默认是主机名
node.name: es-01
### 节点主机的网络地址
network.host: 0.0.0.0
预置用户
Elastic Stack 的安全特性提供预置的用户凭证用于应用启动运行。预置用户拥有一组固定的权限,且在密码重置前不可用于认证。elastic
用户可以用于设置所有预置用户的密码。elastic
,一个预置的超级用户。kibana_system
,Kibana 用于向 Elasticsearch 服务连接认证与通信的用户;logstash_system
,Logstash 用于向 Elasticsearch 存储监控信息的用户;beats_system
,Beats 用于向 Elasticsearch 存储监控信息的用户;apm_system
,APM 用于向 Elasticsearch 存储监控信息的用户;remote_monitoring_user
,Metricbeat 用于收集并向 Elasticsearch 存储监控信息的用户。
设置预置用户密码
elasticsearch-setup-passwords
工具是设置预置用户密码的最便捷方法。通过运行命令的interactive
模式,会引导设置密码;通过auto
模式则随机生成密码并输出到控制台。
1.interactive 模式
bin/elasticsearch-setup-passwords interactive
2.auto 模式
bin/elasticsearch-setup-passwords auto
3.通过Docker执行 auto 模式
docker exec -it elasticsearch elasticsearch-setup-passwords auto
为Kibana添加预置用户密码
在kibana_system
预置用户密码设置好之后,需要更新 Kibana 服务的新密码,
通过设置kibana.yml
配置文件的elasticsearch.password
配置项:
elasticsearch.password: kibanapassword
为Logstash添加预置用户密码
logstash_system
是在对 Logstash 的监控启用时,在 Logstash 内部使用的用户。
要启用 Logstash 的此项功能,需要更新 Logstash 配置中的密码,
通过设置logstash.yml
配置文件的xpack.monitoring.elasticsearch.password
配置项:
xpack.monitoring.elasticsearch.password: logstashpassword
为Beats添加预置用户密码
beats_system
是在对 Beats 的监控启用时,在 Logstash 内部使用的用户。
要启用 Beats 的此项功能,需要更新每个 Beats 配置中的对应用户和密码。例如:
xpack.monitoring.elasticsearch.username: beats_system
xpack.monitoring.elasticsearch.password: beatspassword
参考
[1] What is Elasticsearch
[2] Install Elasticsearch with Docker
[3] Important Elasticsearch configuration
[4] Built-in user
[5] elasticsearch-setup-passwordsedit
[6] Elastic 支持一览表