Docker 部署分布式搜索引擎 Elastic Search的详细过程

yizhihongxing

下面我来为你详细讲解“Docker 部署分布式搜索引擎 Elastic Search的详细过程”。

什么是 Elastic Search

Elastic Search 是一个分布式的、可扩展的全文搜索引擎,可以帮助我们快速地索引、搜索数据。它基于Lucene搜索引擎构建,提供了 RESTful API 接口,可以对数据进行复杂的搜索。

Docker 安装 Elastic Search

首先我们需要安装 Docker,如果您已经安装,请跳过以下步骤:

  1. 在命令行运行以下命令,安装 Docker:

bash
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

  1. 运行以下命令,验证 Docker 是否正确安装:

bash
docker run hello-world

如果输出“Hello from Docker!”表示 Docker 安装成功。

  1. 运行以下命令,下载 Elastic Search Docker 镜像:

bash
docker pull elasticsearch:7.9.2

  1. 运行以下命令,启动 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 的环境变量。

  1. 运行以下命令,确认 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 集群的示例:

  1. 创建一个名为 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:

  1. 在命令行中运行以下命令启动 Elastic Search 集群:

bash
docker-compose up -d

  1. 运行以下命令检查 Elastic Search 集群的状态:

bash
curl http://localhost:9200/_cluster/state?pretty

如果集群状态正常,会返回包含集群信息的 JSON 数据。

2. 使用 Kubernetes

Kubernetes 是一个开源的容器编排系统,可以帮助我们管理和部署容器化的应用程序。

以下是一个使用 Kubernetes 部署 Elastic Search 集群的示例:

  1. 创建一个名为 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
```

  1. 在 Kubernetes 集群中运行以下命令,创建 Elastic Search 集群:

bash
kubectl apply -f elasticsearch.yml

  1. 运行以下命令检查 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技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • IOS开发之手势响应事件优先级的实例详解

    IOS开发之手势响应事件优先级的实例详解 1. 理解手势识别器的优先级 在IOS开发中,手势识别器(Gesture Recognizer)是用来识别和处理用户的手势操作的工具。当多个手势同时发生在某个视图上时,系统需要判断哪个手势应该被识别为有效手势。这个判断的过程就是手势识别器的优先级问题。 手势识别器的优先级是按照一个预定义的优先级顺序进行判断的,默认情…

    other 2023年6月28日
    00
  • 什么是ssrssr有什么用如何使用使用ssr

    什么是 SSR, SSR 有什么用,如何使用 SSR? 什么是 SSR? SSR (ShadowsocksR) 是一种基于 Socks5 代理技术的网络加速工具。它通过对网络流量进行加密和伪装,可以有效地隐藏数据传输过程中的敏感信息,提高安全性和隐私保护。同时,SSR 还能够绕过国家级别的网络封锁和限制,帮助用户快速高效地访问被屏蔽的网站和服务。 SSR 有…

    其他 2023年3月29日
    00
  • Android NDK开发之:配置环境的详解

    Android NDK开发之:配置环境的详解 什么是Android NDK Android NDK是Android Native Development Kit的缩写。 它是一个可以让开发人员用C和C ++编写本机代码的工具集,可用于在Android平台上进行高性能计算和渲染的应用程序。 使用NDK可以方便开发者迁移C/C++应用到Android系统平台中,…

    other 2023年6月27日
    00
  • mysql 8.0.28 winx64.zip安装配置方法图文教程

    MySQL 8.0.28 Winx64.zip安装配置方法图文教程 下载并安装MySQL 1.首先需要下载MySQL 8.0.28版的压缩包,我选择的是Winx64.zip。 2.将下载的压缩包解压到你打算安装MySQL的目录下,我选择的是D:\mysql-8.0.28-winx64。 3.进入解压后的目录,找到bin目录下的mysqld.exe文件,按住S…

    other 2023年6月20日
    00
  • c#-自定义控件锁定表单用户界面中的invokerequired

    C# – 自定义控件锁定表单用户界面中的InvokeRequired的完整攻略 在 C# 中,当我们在自定义控件中访问表单的 UI 元素时,会遇线程安全。为了解决这个问题,我们可以使用 InvokeRequired 属性和 Invoke() 方法来确保 UI 元素在的线程上访问。在本文中,我们将详细介绍如何使用 InvokeRequired 属性和 Invo…

    other 2023年5月8日
    00
  • DOS的重定向命令使用方法以及在安全方面的应用

    DOS的重定向命令可以将命令的输出流重定向为一个文件,同时也可以将文件内容重定向成输入流。 一、使用方法 DOS中有两个常用的重定向符号: >:表示将命令的输出重定向为一个文件。如果该文件不存在,则新建文件;如果文件已经存在,则清空文件内容然后再写入内容。 >>:表示将命令的输出追加到一个文件末尾。如果该文件不存在,则新建文件。 在使用这些…

    other 2023年6月26日
    00
  • Python3通过字符串访问和修改局部变量的方法实例

    Python3通过字符串访问和修改局部变量的方法实例 在Python中,我们可以通过字符串的方式来访问和修改局部变量。这种方法可以在某些情况下非常有用,特别是当我们需要动态地访问和修改变量时。下面是一个详细的攻略,包含了两个示例说明。 示例1:通过字符串访问局部变量 首先,我们需要了解如何通过字符串访问局部变量。我们可以使用locals()函数来获取当前作用…

    other 2023年7月29日
    00
  • Java图文分析之继承内存布局

    Java图文分析之继承内存布局攻略 Java中的继承是面向对象编程中非常重要的一部分,而了解继承内存布局的工作原理对于程序员而言也很重要。在本文中,我们将深入探讨继承内存布局的工作原理以及两个示例说明。 1. 继承内存布局的基本原理 1.1. 父类和子类的内存分配 当一个类继承自另一个类时,它会继承父类中的所有字段和方法。在Java中,子类的实例始终包含其父…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部