Docker安装部署Elasticsearch
详细的Docker部署Elasticsearch的教程,新手可能会遇见的问题
前言
手把手教你如何使用docker部署elasticsearch,并有些常见问题给到大家。
一、准备工作
确保你已经安装了以下软件:
- Docker:在大多数主流操作系统上都可以安装 Docker,可以通过 Docker 官网 下载和安装。
- Docker Compose(可选):如果要运行多容器应用或配置复杂的服务,安装 Docker Compose 也是推荐的。
二、拉取 Elasticsearch 镜像
- 打开终端或命令提示符。(cmd)
- 使用以下命令从 Docker Hub 拉取官方的 Elasticsearch 镜像:
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.10.0
- 注意:这里以 8.10.0 版本为例,你可以根据需要替换成其他版本。可以写latest拉取最新版本。
三、配置 Elasticsearch 容器
Elasticsearch 使用默认的 9200 端口(REST API)和 9300 端口(集群通信),可以通过 docker run 命令进行简单配置和启动。
单节点配置
- 运行以下命令来启动单节点的 Elasticsearch 实例:
docker run -d --name es01 \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
docker.elastic.co/elasticsearch/elasticsearch:8.10.0
- --name es01:将容器命名为 es01。
- -p 9200:9200 和 -p 9300:9300:将本地主机的端口映射到容器的端口。
- -e "discovery.type=single-node":指定为单节点模式,适用于开发或测试环境。
- 启动成功后,你可以在浏览器中访问 http://localhost:9200 检查 Elasticsearch 是否正常启动。
多节点配置
如果需要配置集群,可以使用 Docker Compose 编写 docker-compose.yml 文件。
- 创建 docker-compose.yml 文件并添加以下内容:
version: '3'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:8.10.0
container_name: es01
environment:
- node.name=es01
- cluster.name=es-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ports:
- 9200:9200
networks:
- esnet
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:8.10.0
container_name: es02
environment:
- node.name=es02
- cluster.name=es-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
networks:
- esnet
es03:
image: docker.elastic.co/elasticsearch/elasticsearch:8.10.0
container_name: es03
environment:
- node.name=es03
- cluster.name=es-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
networks:
- esnet
networks:
esnet:
driver: bridge
node.name:每个节点的名称。cluster.name:集群名称。discovery.seed_hosts:定义集群中其他节点的 IP 地址或主机名。cluster.initial_master_nodes:初始化时的主节点。ES_JAVA_OPTS=-Xms512m -Xmx512m:设置 JVM 内存大小,根据机器的内存情况调整。- 运行以下命令启动多节点集群:
docker-compose up -d
- 启动完成后,你可以在浏览器中访问 http://localhost:9200 查看集群信息。
四、验证 Elasticsearch 是否正常运行
- 使用以下命令查看容器状态,确保所有节点都在运行:
docker ps -a #加入-a会显示异常容器,否则可能不显示异常容器,来自大神群友的指正!- 使用 curl 或直接在浏览器中访问 http://localhost:9200/_cat/nodes?v,查看集群节点信息:bashCopy codecurl -X GET "localhost:9200/_cat/nodes?v&pretty"
curl -X GET "localhost:9200/_cat/nodes?v&pretty"
总结
通过 Docker 部署 Elasticsearch 可以简化安装和配置,适用于快速搭建测试环境,也可以灵活配置成多节点集群。这些基础操作可以帮助你快速上手并进行基本数据操作。
常见问题总结及解决方案
Exit code 78: 内存设置不足
以下为解决方案,修改vm.max_map_count 即可,均在cmd中运行:
Linux
要查看当前 vm.max_map_count 的设置值,请运行以下命令:
grep vm.max_map_count /etc/sysctl.conf
输出示例:
vm.max_map_count=262144
在运行中的系统上临时应用该设置,运行:
sysctl -w vm.max_map_count=262144
要永久更改 vm.max_map_count 的值,可以在 /etc/sysctl.conf 文件中更新该设置。
macOS 使用 Docker for Mac
在 macOS 上,vm.max_map_count 设置需要在 xhyve 虚拟机中进行:
- 打开终端并运行以下命令:bashCopy codescreen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
- 按回车键,然后使用 sysctl 配置 vm.max_map_count:bashCopy codesysctl -w vm.max_map_count=262144
- 要退出 screen 会话,按 Ctrl + a,然后按 d。
Windows 和 macOS 使用 Docker
在 Windows 和 macOS 上运行 Docker 时,需要通过 docker-machine 设置 vm.max_map_count:
docker-machine ssh
sudo sysctl -w vm.max_map_count=262144
Python Client 连接用户密码及ca_cert
Python用SDK链接elasticsearch需要ca_cert,及用户名密码。
查看docker logs
docker logs es01
在log中应该会有如此字样:
elasticsearch password for the elastic user: <password>如果没有也可以手动重新设置,还是在cmd
docker exec -it elastic bin/elasticsearch-setup-passwords interactive
ca_certs位置
docker 客户端 Containers中点进去,这个文件下载下来,或者尝试直接用默认地址:
#/usr/share/elasticsearch/config/certs/http_ca.crt
#python示范
from elasticsearch import Elasticsearch
es = Elasticsearch(
"https://localhost:9200",
basic_auth=("elastic","xxxxxxxxx"),#用户名密码
ca_certs = "/usr/share/elasticsearch/config/certs/http_ca.crt")
评论
目录