首页 > 其他分享 >Docker中使用elasticsearch

Docker中使用elasticsearch

时间:2023-11-23 15:37:53浏览次数:34  
标签:10 docker elasticsearch usr 使用 Docker es7.17 discovery

Docker中使用elasticsearch

1、docker拉取elasticsearch:7.17镜像

这里我们拉取7.17.10版本:docker pull elasticsearch:7.17.10

2、创建自己的配置文件并写入基础数据供后续挂载后直接启动使用

【非必选,在不指定挂载配置文件启动的情况下可不设置】

创建文件夹后,新建一个自己的elasticsearch.yml文件,并给与最基础的设置。
如果需要更多的设置,比如集群设置,则需要在遵循elasticsearch规则的基础上配置elasticsearch.yml文件

mkdir -p /usr/local/es7.17.10/config
mkdir -p /usr/local/es7.17.10/data
mkdir -p /usr/local/es7.17.10/plugins
echo "cluster.name: \"docker-es-cluster\"" >> /usr/local/es7.17.10/config/elasticsearch.yml
echo "http.host: 0.0.0.0" >> /usr/local/es7.17.10/config/elasticsearch.yml

3、修改外部宿主机的挂载文件夹权限【非必选,在不指定挂载配置文件的情况下可不设置】

由于docker内访问映射文件权限的问题,所以需要修改es文件夹的权限属性。

chmod -R 777 /usr/local/es7.17.10

4、启动elasticsearch容器

4.1 单节点启动

不需要es集群的情况下,可以选择单节点启动,docker下的es的最简单的默认配置不用修改,可以直接单节点启动。

启动代码如下:

docker run --name es7.17 --privileged=true -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e TZ='Asia/Shanghai' -e LANG="en_US.UTF-8" -d elasticsearch:7.17.10

启动代码分析:

docker run 
--name es7.17                                  //容器名字
--privileged=true                              //使docker容器的root拥有更大的权限,近乎于宿主机的root权限,便于容器内部操作宿主机系统文件和功能 
-p 9200:9200                                   //端口映射 
-p 9300:9300                                   //端口映射
-e "discovery.type=single-node"                //单节点启动,此模式下不可设置节点名称 
-e ES_JAVA_OPTS="-Xms512m -Xmx512m"            //容器的java虚拟机内存配置
-e TZ='Asia/Shanghai'                          //时区配置
-e LANG="en_US.UTF-8"                          //编码
-d elasticsearch:7.17.10                       //后台启动后跟镜像名

4.2 集群方式启动

集群方式启动,需要单独配置elasticsearch.yml文件。需要用到外部挂载的方式来配置我们自己的elasticsearch.yml文件,并告诉docker的elasticsearch启动加载的elasticsearch.yml路径。

  1. 简单启动一个es容器,然后复制出容器中的配置文件到宿主机的挂载目录下

    docker run --name es7.17-demo --privileged=true -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e TZ='Asia/Shanghai' -e LANG="en_US.UTF-8" -d elasticsearch:7.17.10
    docker cp es7.17-demo:/usr/share/elasticsearch/config /usr/local/es7.17.10/
    docker cp es7.17-demo:/usr/share/elasticsearch/data /usr/local/es7.17.10/
    docker cp es7.17-demo:/usr/share/elasticsearch/plugins /usr/local/es7.17.10/
    chmod 777 -R es7.17.10/
    
  2. 修改挂载目录下的elasticsearch.yml文件为自己的配置

    # ===== Elasticsearch Configuration =====
    #
    # 集群设置
    #
    # Use a descriptive name for your cluster:
    # 集群名
    cluster.name: elasticsearch
    #
    # 节点配置
    # -------- Node ---------
    #
    # Use a descriptive name for the node:
    # 节点名
    node.name: node-1
    #
    #
    # ------- Network -------
    #
    # Set the bind address to a specific IP (IPv4 or IPv6):
    # 绑定的本机的ip地址
    network.host: 0.0.0.0
    #
    # Set a custom port for HTTP:
    #
    http.port: 9200
    transport.tcp.port: 9300
    #
    # For more information, consult the network module documentation.
    # 节点发现模式配置,用于集群管理
    # ----- Discovery -----
    #
    # discovery.seed_hosts是一种列出集群中候选主节点地址,格式为IP:port
    # discovery.seed_hosts: ["host1:port", "host2:port"]
    #
    # initial_master_nodes仅在集群首次启动会使用,列出初始候选主节点的名称,后续启动可以不需要
    cluster.initial_master_nodes: ["node-1"]
    #
    #
    http.cors.enabled: true
    http.cors.allow-origin: '*'
    bootstrap.system_call_filter: false
    
  3. 通过宿主机的挂载目录config文件启动容器
    挂载后,内部的yml文件便是我们编辑过的自定义配置文件。
    通过docker命令启动容器。

    docker stop es7.17-demo
    docker rm es7.17-demo
    docker run --name es7.17 --privileged=true -p 9200:9200 -p 9300:9300 -v /usr/local/es7.17.10/config:/usr/share/elasticsearch/config -v /usr/local/es7.17.10/data:/usr/share/elasticsearch/data -v /usr/local/es7.17.10/plugins:/usr/share/elasticsearch/plugins -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e TZ='Asia/Shanghai' -e LANG="en_US.UTF-8" -d elasticsearch:7.17.10
    

5、报错处理

5.1 启动后报错:Exited (78) 19 seconds ago

查看log如下:

ERROR: [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.
bootstrap check failure [1] of [1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

翻译过来就是:导程序检查失败:默认发现设置不适合生产使用;必须至少配置[discovery.seed_hosts、discovery.seed_providers、cluster.initial_master_nodes]中的一个

elasticsearch默认是集群启动,如果没有加-e "discovery.type=single-node"会报错。
这是因为Elasticsearch 7.x 集群的话必须制定节点的发现方式或初始化节点列表:

  • discovery.seed_hosts: 列出集群中候选主节点地址,格式为IP:port。
    设置如下:discovery.seed_hosts: ["172.168.10.111:9300", "172.168.10.112:9300"]

  • discovery.seed_providers: 以文件的方式提供出候选主节点列表,可以动态加载,格式为文件名。
    设置如下:discovery.seed_providers: file

  • cluster.initial_master_nodes: 仅在集群首次启动会使用,列出初始候选主节点的名称,后续启动可以不需要。
    设置如下:cluster.initial_master_nodes: ["node1", "node2"]

标签:10,docker,elasticsearch,usr,使用,Docker,es7.17,discovery
From: https://www.cnblogs.com/yysocket/p/17851641.html

相关文章

  • ElasticSearch的安装和使用
    ElasticSearch的安装和使用elasticsearch安装步骤1、下载elasticsearch-7.2.0并解压缩将elasticsearch解压缩到/usr/localtar-zxvfelasticsearch.tar.gz-C/usr/local/2、创建es的用户和用户组由于es不能通过root用户来启动,所以需要创建一个非root的es用户和用户组grou......
  • 刘金玉QT学习笔记:6-sqlite简易入门+QT结合使用
    //第一篇,测试一下1.Sqlite-linux自带-轻量级-关系型数据库2.安装-进入官网后点击Downloads-下载下图的两个zip,解压后把里面的文件放到C盘下自创一个sqlite的文件夹3.通过命令行使用sqlite3.exe来使用数据库-配环境变量作用:不用进入路径位置就可以打开(sqlite)4.基本......
  • 使用jasypt对springboot配置信息加密
    1.pom文件增加依赖<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.5</version> </dependency>2.修改启动......
  • 在Vue中使用Mock.js虚拟接口数据实例详解
     在Vue项目中使用Mock.js可以方便地模拟接口数据,用于前端开发和测试。Mock.js是一个生成随机数据的库,可以帮助我们快速构建虚拟接口数据。在本文中,我将通过一个实例来详细讲解在Vue中使用Mock.js虚拟接口数据的方法。首先,我们需要创建一个Vue项目。可以使用VueCLI来快速创建......
  • 利用 docker 实现JMeter分布式压测
    为什么需要分布式?在工作中经常需要对一些关键接口做高QPS的压测,JMeter是由Java语言开发,没创建一个线程(虚拟用户),JVM默认会为每个线程分配1M的堆栈内存空间。受限于单台试压机的配置很难实现太高的并发。所以,通过JMeter实现分布式,可以整合多台主机的硬件资源,实现同时对被测试接口......
  • Python 使用XlsxWriter操作Excel
    在数据处理和报告生成的领域中,Excel文件一直是广泛使用的标准格式。为了让Python开发者能够轻松创建和修改Excel文件,XlsxWriter库应运而生。XlsxWriter是一个功能强大的Python模块,专门用于生成MicrosoftExcel2007及以上版本(.xlsx格式)的电子表格文件。本文将对XlsxWri......
  • Spring中@Mapper和@Repository的区别与使用
    本文根据文章:https://blog.csdn.net/m0_45210394/article/details/126223145进行修改@Mapper是mybatis的注解,标注在dao层接口上,可以通过动态代理生成接口的实例bean(编译之后能生成相应的接口实现类)@Repository是spring的注解,也标注在dao层接口上,但是@Repository注解只是表明这......
  • 使用 MSYS2+MinGW 编译win程序
    在跨平台开发场景下,MinGW为那些习惯于使用GNU工具(例如gcc、gdb、make等)的开发者提供了一个便利:它允许他们在Windows平台上使用相同的工具链。这种做法有助于保持在不同操作系统间的开发一致性。此外,当某个应用依赖于Unix系统下的特定库,而这些库在Windows下没有直接的替代品时,MSYS2......
  • 使用Python调用API接口获取小红书笔记详情数据
    本文将详细介绍如何使用Python编程语言调用小红书API接口,以获取小红书笔记的详情数据。我们将从以下几个方面展开讨论:1)API接口简介;2)Python环境准备;3)API密钥获取;4)使用Requests库发送API请求;5)解析响应数据;6)异常处理与错误排查。一、API接口简介API(应用程序编程接口)是一种......
  • 使用centos 7 的系统应该升级了
    目前企业内部对于使用centos的用户还是不少,但是目前越来越多的软件(尤其是开源软件)都在减少对于centos7的支持比如大家使用比较多的nodejs从18开始也不支持centos7了(并不是不直接不支持,而且相关依赖引起的不支持)一些可选的替代方案实际上可选替代方案很多,选择上还是一些比较符......