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

下面我来为你详细讲解“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日

相关文章

  • PowerBuilder学习笔记之3应用对象

    PowerBuilder学习笔记之3应用对象的完整攻略 PowerBuilder是一种流行的客户端开发工具,可以用于开发Windows应用程序和Web应用程序。应用对象是PowerBuilder中的一个重要概念,它是一种可重用的代码模块,可以在应用程序中多次使用。本文将为您提供一份完整攻略,介绍如何使用PowerBuilder应用对象,并提供两个示例说明。 …

    other 2023年5月5日
    00
  • linux信号机制

    Linux信号机制 什么是信号 在Linux系统中,信号是一种软中断,它会在进程之间传递。当进程接收到一个信号时,它就会停止正在执行的工作,切换到信号处理函数执行,等待信号处理完成后再返回到原来的进程继续执行。 信号的种类 Linux系统中的信号种类非常多,但是其中比较常见的信号有以下几种: SIGINT: 当用户按下”Ctrl+C”时会向进程发送这个信号,…

    其他 2023年3月28日
    00
  • 在python中获取桌面路径

    在Python中获取桌面路径 在Python中,有时需要获取桌面路径以便进行文件操作。本文将详细讲解如何在Python中获取桌面路径,包括两种方法和示例说明。 方法一:使用os模块 可以使用Python的os模块来获取桌面路径。具体步骤如下: import os desktop_path = os.path.join(os.path.expanduser(&…

    other 2023年5月8日
    00
  • Swift教程之继承详解

    Swift教程之继承详解 简介 在面向对象编程语言中,继承是一个重要的概念。它可以让一个类拥有另一个类的属性和方法,并且还可以扩展自己的功能。在Swift中,继承是通过class关键字来实现的。 继承的语法 一个类可以继承另一个类,通过在类名后面加上一个冒号”:”以及被继承的类的名称,例如: class SubClass: SuperClass { // 代…

    other 2023年6月26日
    00
  • 浅谈java继承中是否创建父类对象

    当我们在Java中使用继承时,我们可能会面临这样一个问题:是否必须为父类显式地创建一个对象。本文将深度探讨该问题,以及在不同情况下我们应该选择创建或不创建父类对象。 1. 创建父类对象的情况 在大多数情况下,我们都需要为父类创建一个对象。这是因为子类继承了父类的成员变量和方法,子类中如果需要使用这些成员变量和方法,就必须先创建一个父类对象。 public c…

    other 2023年6月27日
    00
  • synergy–跨平台的键鼠共享工具

    Synergy–跨平台的键鼠共享工具 Synergy是一款跨平台的键鼠共享工具,可以让多台计算机共享同一套键盘和鼠标,提高工作效率。本文将介绍Synergy的完整攻略,包括安装、配置和使用方法,以及两个示例说明。 安装 Synergy支持Windows、macOS和Linux等多个平台,可以从官网下载对应平台的安装包进行安装。安装过程比较简单,按提示一步步…

    other 2023年5月8日
    00
  • 深入解析MS-SQL锁机制

    深入解析 MS-SQL 锁机制 什么是锁机制 MS-SQL锁机制是指在多个会话同时访问同一数据库资源时,由数据库管理系统负责协调控制对该资源的访问。其目的是确保数据库的一致性和完整性,防止数据冲突和数据损坏。 锁的类型 MS-SQL提供了多种锁类型,包括共享锁、排他锁、意向共享锁、意向排他锁等等。下面将分别对这些锁类型进行介绍。 共享锁 共享锁(Shared…

    other 2023年6月27日
    00
  • Android实现沉浸式状态栏功能

    Android实现沉浸式状态栏功能攻略 沉浸式状态栏是一种在Android应用中隐藏系统状态栏并使应用内容占据整个屏幕的功能。下面是实现沉浸式状态栏功能的完整攻略。 步骤一:设置主题样式 首先,在styles.xml文件中定义一个新的主题样式,用于设置沉浸式状态栏的属性。示例代码如下: <style name=\"AppTheme\&quot…

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