在 Docker 环境中部署 Elasticsearch 集群,可以利用 Docker Compose 或 Kubernetes 等容器编排工具简化部署和管理过程。这里以 Docker Compose 为例,展示如何在 Docker 环境中部署一个简单的 Elasticsearch 集群。
1. 准备 Docker Compose 文件
创建一个名为 docker-compose.yml
的文件,定义 Elasticsearch 集群的服务、网络以及相关配置:
version: '3'
services:
elasticsearch-node1:
image: docker.elastic.co/elasticsearch/elasticsearch:7.1.png
container_name: elasticsearch-node1
environment:
- node.name=node1
- cluster.name=my-es-cluster
- discovery.seed_hosts=elasticsearch-node1,elasticsearch-node2
- cluster.initial_master_nodes=node1,node2
- bootstrap.memory_lock=true # 若要启用,还需宿主机配置支持
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 调整 JVM 堆大小
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es_data_node1:/usr/share/elasticsearch/data
ports:
- 9200:9200
- 9300:9300
networks:
- es-net
elasticsearch-node2:
image: docker.elastic.co/elasticsearch/elasticsearch:7.1.png
container_name: elasticsearch-node2
environment:
- node.name=node2
- cluster.name=my-es-cluster
- discovery.seed_hosts=elasticsearch-node1,elasticsearch-node2
- cluster.initial_master_nodes=node1,node2
- bootstrap.memory_lock=true # 若要启用,还需宿主机配置支持
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 调整 JVM 堆大小
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es_data_node2:/usr/share/elasticsearch/data
networks:
- es-net
volumes:
es_data_node1:
es_data_node2:
networks:
es-net:
这个配置文件定义了两个 Elasticsearch 节点(elasticsearch-node1
和 elasticsearch-node2
),它们共享相同的集群名称(my-es-cluster
)并相互发现。每个节点都有自己的数据卷(es_data_node1
和 es_data_node2
)用于持久化数据。还设置了必要的环境变量,如节点名称、集群名称、种子节点列表、初始主节点列表、内存锁定等。同时,为节点分配了端口映射,并将它们置于同一个自定义网络(es-net
)中。
2. 启动 Elasticsearch 集群
在包含 docker-compose.yml
文件的目录下,执行以下命令启动集群:
docker-compose up -d
-d
参数表示在后台运行(detached mode)。Docker Compose 将拉取所需的 Elasticsearch 镜像(如果尚未存在),然后创建并启动两个节点的容器。
3. 验证集群状态
等待几分钟,待集群初始化完成。然后,可以通过以下命令检查集群健康状态:
curl -X GET "localhost:9200/_cat/health?v"
您应该看到类似这样的输出,表示集群处于绿色(healthy)状态:
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1615324540 .jpg 11:Ⅴ3:05 my-es-cluster green 2 2 0 0 0 0 0 - 100.0%
(可选)增加节点
若要扩展集群,只需在 docker-compose.yml
文件中添加更多的节点服务,确保它们使用相同的集群名称和网络,并在 discovery.seed_hosts
和 cluster.initial_master_nodes
中包含现有节点。然后重新执行 docker-compose up -d
即可。
(可选)配置安全性
默认情况下,Elasticsearch 集群未启用任何安全性措施。在生产环境中,强烈建议启用身份验证、授权和加密传输。这通常涉及到配置 Elasticsearch 的 X-Pack 安全模块,设置用户名、密码、角色等,并在 Docker Compose 文件中传递相应的环境变量。具体配置请参考 Elasticsearch 官方文档。
通过以上步骤,您已经在 Docker 环境中成功部署了一个基本的 Elasticsearch 集群。后续可以根据需要调整配置、添加更多节点、设置监控等,以满足实际业务需求。