下面我来为你详细讲解“Docker 部署分布式搜索引擎 Elastic Search的详细过程”。
什么是 Elastic Search
Elastic Search 是一个分布式的、可扩展的全文搜索引擎,可以帮助我们快速地索引、搜索数据。它基于Lucene搜索引擎构建,提供了 RESTful API 接口,可以对数据进行复杂的搜索。
Docker 安装 Elastic Search
首先我们需要安装 Docker,如果您已经安装,请跳过以下步骤:
- 在命令行运行以下命令,安装 Docker:
bash
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
- 运行以下命令,验证 Docker 是否正确安装:
bash
docker run hello-world
如果输出“Hello from Docker!”表示 Docker 安装成功。
- 运行以下命令,下载 Elastic Search Docker 镜像:
bash
docker pull elasticsearch:7.9.2
- 运行以下命令,启动 Elastic Search 容器:
bash
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.9.2
这里我们使用了 Docker 的 -p
参数来映射容器中的端口到宿主机的端口上,方便我们访问 Elastic Search。而 -e
参数则是用来设置 Elastic Search 的环境变量。
- 运行以下命令,确认 Elastic Search 容器已经启动成功:
bash
docker ps
输出如下信息表示容器启动成功:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5b0e62cff449 elasticsearch:7.9.2 "/usr/local/bin/dock…" 31 seconds ago Up 31 seconds 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch
创建 Elastic Search 集群
创建 Elastic Search 集群可以帮助我们实现高可用和负载均衡。以下是两种不同的方式:
1. 使用 Docker Compose
Docker Compose 是 Docker 的一个工具,可以帮助我们定义和运行多个 Docker 容器。
以下是一个使用 Docker Compose 部署 Elastic Search 集群的示例:
- 创建一个名为
docker-compose.yml
的文件,定义 Elastic Search 集群和 Kibana(Elastic Search 的可视化工具):
yaml
version: '3'
services:
elasticsearch1:
image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
container_name: elasticsearch1
environment:
- node.name=elasticsearch1
- cluster.name=es-cluster
- discovery.seed_hosts=elasticsearch2,elasticsearch3
- cluster.initial_master_nodes=elasticsearch1,elasticsearch2,elasticsearch3
- network.publish_host=elasticsearch1
- ES_JAVA_OPTS=-Xms512m -Xmx512m
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
volumes:
- esdata1:/usr/share/elasticsearch/data
- ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
- 9200:9200
- 9300:9300
elasticsearch2:
image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
container_name: elasticsearch2
environment:
- node.name=elasticsearch2
- cluster.name=es-cluster
- discovery.seed_hosts=elasticsearch1,elasticsearch3
- cluster.initial_master_nodes=elasticsearch1,elasticsearch2,elasticsearch3
- network.publish_host=elasticsearch2
- ES_JAVA_OPTS=-Xms512m -Xmx512m
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
volumes:
- esdata2:/usr/share/elasticsearch/data
- ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
elasticsearch3:
image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
container_name: elasticsearch3
environment:
- node.name=elasticsearch3
- cluster.name=es-cluster
- discovery.seed_hosts=elasticsearch1,elasticsearch2
- cluster.initial_master_nodes=elasticsearch1,elasticsearch2,elasticsearch3
- network.publish_host=elasticsearch3
- ES_JAVA_OPTS=-Xms512m -Xmx512m
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
volumes:
- esdata3:/usr/share/elasticsearch/data
- ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
kibana:
image: docker.elastic.co/kibana/kibana:7.9.2
container_name: kibana
environment:
- "ELASTICSEARCH_HOSTS=http://elasticsearch1:9200,http://elasticsearch2:9200,http://elasticsearch3:9200"
- "XPACK_SECURITY_ENABLED=false"
ports:
- "5601:5601"
depends_on:
- elasticsearch1
- elasticsearch2
- elasticsearch3
volumes:
esdata1:
esdata2:
esdata3:
- 在命令行中运行以下命令启动 Elastic Search 集群:
bash
docker-compose up -d
- 运行以下命令检查 Elastic Search 集群的状态:
bash
curl http://localhost:9200/_cluster/state?pretty
如果集群状态正常,会返回包含集群信息的 JSON 数据。
2. 使用 Kubernetes
Kubernetes 是一个开源的容器编排系统,可以帮助我们管理和部署容器化的应用程序。
以下是一个使用 Kubernetes 部署 Elastic Search 集群的示例:
- 创建一个名为
elasticsearch.yml
的文件,定义 Elastic Search 集群:
```yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: elasticsearch
spec:
serviceName: elasticsearch
replicas: 3
selector:
matchLabels:
app: elasticsearch
updateStrategy:
type: RollingUpdate
template:
metadata:
labels:
app: elasticsearch
spec:
terminationGracePeriodSeconds: 10
containers:
- name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
ports:
- containerPort: 9200
name: http
- containerPort: 9300
name: transport
env:
- name: cluster.name
value: elasticsearch-cluster
- name: discovery.seed_hosts
value: "elasticsearch-0.elasticsearch,elasticsearch-1.elasticsearch,elasticsearch-2.elasticsearch"
- name: cluster.initial_master_nodes
value: "elasticsearch-0,elasticsearch-1,elasticsearch-2"
volumeMounts:
- name: data
mountPath: /usr/share/elasticsearch/data
resources:
limits:
cpu: 1000m
memory: 2Gi
requests:
cpu: 500m
memory: 1Gi
volumes:
- name: data
persistentVolumeClaim:
claimName: elastic-pvc
apiVersion: v1
kind: Service
metadata:
name: elasticsearch
spec:
selector:
app: elasticsearch
ports:
- name: http
protocol: TCP
port: 9200
targetPort: http
- name: transport
protocol: TCP
port: 9300
targetPort: transport
clusterIP: None
```
- 在 Kubernetes 集群中运行以下命令,创建 Elastic Search 集群:
bash
kubectl apply -f elasticsearch.yml
- 运行以下命令检查 Elastic Search 集群的状态:
bash
kubectl get statefulsets
kubectl get pods
kubectl describe pod elasticsearch-0
kubectl exec -it elasticsearch-0 -- /bin/bash
./bin/elasticsearch-cluster-health.sh
总结
以上就是 Dcoker 部署分布式搜索引擎 Elastic Search 的详细过程。通过以上步骤我们可以快速高效地搭建我们的 Elastic Search 集群,提高我们的工作效率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker 部署分布式搜索引擎 Elastic Search的详细过程 - Python技术站