Elasticsearch安装及配置(Docker方式)

简介

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 支持一览表

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYAc0cg7' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片