docker环境中安装ES、ES快照与恢复、docker ES修改配置文件后启动失败

安装ES的docker版本

  1. 拉取镜像
docker pull elasticsearch:7.2.0
  1. 创建并启动容器
docker run -d --name es -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" elasticsearch:7.2.0
创建时,调整内存的分配“ES_JAVA_OPTS=-Xms512m -Xmx512m”。
增加9200/9300的端口映射
  1. 检测是否可以正常访问
    在这里插入图片描述
  2. 进入容器修改配置文件
docker exec -it es /bin/bash
cd config
vi elasticsearch.yaml

在这里插入图片描述

  • cluster.name:自定义集群名称;
  • network.host:当前es节点绑定的ip地址;
  • http.cors.enabled:是否支持跨域,默认为false;
  • http.cors.allow-origin:当设置允许跨域,默认为*,表示支持所有域名,如果我们只是允许某些网站能访问,那么可以使用正则表达式。
  1. 重启容器
docker restart es

ES快照介绍

在这里插入图片描述
快照是对于一个正在运行的ES集群的备份,可以对于一个或多个索引进行快照,快照是增量的。这意味着,当创建索引快照时,Elasticsearch避免复制任何已存储在存储库中的数据。因此,可以非常频繁地为群集创建快照。

版本兼容性问题:

  • 在6.x中创建的索引快照可以恢复到7.x。

  • 在5.x中创建的索引快照可以恢复到6.x。

  • 在2.x中创建的索引快照可以恢复到5.x。

  • 可以将在1.x中创建的索引快照恢复到2.x。

  • 无法将1.X中创建的索引直接的恢复到5.x或6.x …

  • 同时不建议从后期版本向前期版本恢复快照,在某些情况下,无法还原,例如在在7.6.0中创建的快照无法还原到7.5.0。

存储库的安装

创建存储库

必须先注册快照存储库,才能执行快照和还原的操作,如果多个集群同时注册同一个快照存储库,只有一个可以有写权限,其余集群设置为readonly模式

PUT /_snapshot/my_backup
{
  "type": "fs",
  "settings": {
    "location": "my_backup_location"
  }
}

直接插入会提示错误
直接发送put命令会提示错误,需要再进行以下几步的操作:

  1. 首先进入容器,创建存储库地址,并修改文件夹所有者
进入指定容器
docker exec -it es /bin/bash
创建存储库地址
mkdir backup
使用修改文件夹所有者
chown -R elasticsearch backup 

在这里插入图片描述

  1. 查看文件在docker中所属的路径
查看文件在docker中所属路径
pwd

在这里插入图片描述

  1. 修改elasticsearch.yml文件
    在这里插入图片描述
增加设置
path.repo: ["/usr/share/elasticsearch/backup"]

在这里插入图片描述

  1. 重启容器
docker restart es
  1. 再次发送PUT命令已经可以正常创建存储库了

在这里插入图片描述
支持以下设置:

  • location 快照的位置。必选
  • compress 打开快照文件的压缩。压缩仅应用于元数据文件(索引映射和设置)。数据文件未压缩。默认为true。
  • chunk_size 如果需要,可以在快照过程中将大文件分解为多个块。指定块尺寸的值,并且单元,例如:1GB,10MB,5KB,500B。默认为null(无限制的块大小)。
  • max_restore_bytes_per_sec 每个节点的恢复速度。默认为40mb每秒。
  • max_snapshot_bytes_per_sec 每个节点的快照速率。默认为40mb每秒。
  • readonly 使存储库为只读。默认为false。
  1. 查看存储库的信息
GET /_snapshot/my_backup

在这里插入图片描述

所有的存储库信息
GET /_snapshot
或者
GET /_snapshot/_all

只读网址存储库

URL存储库支持以下协议:“ http”,“ https”,“ ftp”,“ file”和“ jar”。URL与储存库http:, https:以及ftp:网址必须由指定允许的URL被列入白名单repositories.url.allowed_urls设置。此设置在主机,路径,查询和片段的位置支持通配符。例如:

repositories.url.allowed_urls: ["http://www.example.org/root/*", "https://*.mydomain.com/*?*#*"]

源存储库

通过源存储库,您可以创建最少的仅源快照,这些磁盘占用的磁盘空间最多减少50%。仅源快照包含存储的字段和索引元数据。它们不包括索引或doc值结构,并且在还原后不可搜索。恢复的唯一来源快照后,必须重新索引 数据到一个新的索引

PUT _snapshot/my_src_only_repository
{
  "type": "source",
  "settings": {
    "delegate_type": "fs",
    "location": "my_backup_location"
  }
}

存储库的验证

注册存储库后,需要在主节点和数据节点上对存储库进行验证,保证集群中存在的所有节点上都可以正常运行,会返回已经成功验证的节点列表,或验证失败的错误消息

PUT /_snapshot/my_unverified_backup?verify=false
{
  "type": "fs",
  "settings": {
    "location": "my_unverified_backup_location"
  }
}
或
POST /_snapshot/my_unverified_backup/_verify

在这里插入图片描述

执行快照操作

一个存储库可以包含同一个集群的许多快照,快照由集群中的唯一名称作为标识,创建一个名称为snapshot_1 的快照命令:

PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true

在这里插入图片描述
默认情况下回生成集群中所有打开和启动的索引,如果需要修改,使用一下的命令

PUT /_snapshot/my_backup/snapshot_2?wait_for_completion=true
{
  "indices": "index_1,index_2",
  "ignore_unavailable": true,
  "include_global_state": false
}
  • gnore_unavailable选项。将其设置为true将会导致快照创建期间不存在的索引被忽略。默认情况下,如果ignore_unavailable未设置选项并且缺少索引,则快照请求将失败。
  • include_global_state为false,可以防止将群集全局状态存储为快照的一部分。默认情况下,如果参与快照的一个或多个索引没有所有可用的主分片,则整个快照将失败。可以通过设置为partial来更改此行为true。

快照名称可以使用日期数学表达式自动导出,类似于创建新索引时。请注意,特殊字符需要进行URI编码。
例如,snapshot-2018.05.11可以使用以下命令来创建名称为like的当前日期的快照:

# PUT /_snapshot/my_backup/<snapshot-{now/d}>
PUT /_snapshot/my_backup/%3Csnapshot-%7Bnow%2Fd%7D%3E

索引快照过程是增量的。在制作索引快照的过程中,Elasticsearch分析已存储在存储库中的索引文件的列表,并仅复制自上次快照以来创建或更改的文件。这样可以将多个快照以紧凑的形式保存在存储库中。快照过程以非阻塞方式执行。可以继续对正在快照的索引执行所有索引和搜索操作。但是,快照代表的是时间点视图,在快照创建后添加进索引的记录,不会出现在快照中。

群集中任何时间都只能执行一个快照过程。在创建特定分片的快照时,该分片无法移动到另一个节点,这可能会干扰重新平衡过程和分配筛选。Elasticsearch等待快照完成后将分片移动到另一个节点

创建快照后,可以使用以下命令获取有关该快照的信息:

GET /_snapshot/my_backup/snapshot_1
  • IN_PROGRESS 快照当前正在运行。
  • SUCCESS 快照完成,所有分片已成功存储。
  • FAILED 快照以错误结束,无法存储任何数据。
  • PARTIAL 全局群集状态已存储,但至少一个分片的数据没有成功存储,在这种情况下,该部分应包含有关未正确处理的分片的更多详细信息。
  • INCOMPATIBLE 快照是使用旧版本的Elasticsearch创建的,因此与集群的当前版本不兼容。

在这里插入图片描述
与存储库类似,可以一次性查询有关多个快照的信息,并支持通配符:

GET /_snapshot/my_backup/snapshot_*,some_other_sn

查询所有
GET /_snapshot/my_backup/_all
如果某些快照不可用,该命令将失败。布尔参数ignore_unavailable可用于返回当前可用的所有快照。

查看正在运行的快照
GET /_snapshot/my_backup/_current

删除快照
DELETE /_snapshot/my_backup/snapshot_2

从存储库中删除快照后,Elasticsearch会删除与删除的快照相关联且未被其他任何快照使用的所有文件。如果在创建快照时执行了删除的快照操作,则快照过程将中止,并且将清理作为快照过程一部分创建的所有文件。因此,删除快照操作可用于取消误启动的长时间运行的快照操作。
可以使用以下命令注销存储库:

DELETE /_snapshot/my_backup

取消注册存储库后,Elasticsearch仅删除对该存储库存储快照的位置的引用。快照本身保持不变。

快照恢复

  1. 首先,拷贝出快照
# backup/. 会将backup的内容复制到外部backup文件夹中,如果不加/.就会导致backup文件夹到backup文件夹中变成  backup/backup/...
docker cp es:/usr/share/elasticsearch/backup/. /backup/

在这里插入图片描述

  1. 拷贝到本地打开看一下完全是看不懂
    在这里插入图片描述
    首先拷贝到第二台虚拟机中

在这里插入图片描述

  1. 重复一遍注册数据仓库的动作,创建仓库,查询无误
    在这里插入图片描述

  2. 拷贝快照文件夹至容器内部

docker cp /backup/. es:/usr/share/elasticsearch/backup/
  1. 查看是否拷贝成功
    在这里插入图片描述
  2. 先查看目前的ES中是否有数据
    在这里插入图片描述
  3. 进行恢复操作
POST /_snapshot/my_backup/snapshot_1/_restore

返回true
在这里插入图片描述

  1. 再进行查询操作,第一台ES的数据已经被恢复到第二台ES中
    在这里插入图片描述
    默认情况下,将还原快照中的所有索引,并且不还原群集状态 。通过使用还原请求主体中的indices和include_global_state选项,可以选择应该还原的索引以及允许还原全局群集​​状态。索引列表支持多索引语法。该rename_pattern 和rename_replacement选项也可用于使用正则表达式重命名索引。设置include_aliases为false防止别名与关联索引一起还原
POST /_snapshot/my_backup/snapshot_1/_restore
{
  "indices": "index_1,index_2",
  "ignore_unavailable": true,
  "include_global_state": true,
  "rename_pattern": "index_(.+)",
  "rename_replacement": "restored_index_$1"
}

还原时改变设置

在还原过程中,可以覆盖大多数索引设置。例如,以下命令将index_1还原索引而不创建任何副本

POST /_snapshot/my_backup/snapshot_1/_restore
{
  "indices": "index_1",
  "index_settings": {
    "index.number_of_replicas": 0
  },
  "ignore_index_settings": [
    "index.refresh_interval"
  ]
}

监控快照或还原的进度

有几种方法可以监视快照的进度并在进程运行时还原它们。这两个操作都支持wait_for_completion阻塞客户端直到操作完成。这是最简单的方法,可用于获取有关操作完成的通知。
也可以通过定期调用快照信息来监视快照操作:

GET /_snapshot/my_backup/snapshot_1

请注意,快照信息操作使用与快照操作相同的资源和线程池。因此,在对大型碎片进行快照时执行快照信息操作可能会导致快照信息操作在返回结果之前等待可用资源。在很大的碎片上,等待时间可能很长。
要获取有关快照的更多即时信息和完整信息,可以改为使用快照状态命令:

GET / _snapshot / my_backup / snapshot_1 / _status 

启动失败和纠错过程

在第一次进行配置后,启动失败,在此记录一下排错的过程

  1. 查看容器日志
查看指定容器最后100行的日志
docker logs --tail 100 es

在这里插入图片描述
日志显示没有backup文件夹的访问权限
需要导出日志文件,恢复配置后导入,才能继续启动

导出
docker cp 容器id:docker容器中配置文件路径  主机路径
docker cp es:/usr/share/elasticsearch/config/elasticsearch.yml /backup
删除配置 path.repo
导入
docker cp /backup/elasticsearch.yml es:/usr/share/elasticsearch/config/elasticsearch.yml 

重新导入配置文件后执行docker start es,启动正常
在这里插入图片描述

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
以下是在Docker安装Elasticsearch并挂载配置文件的步骤: 1. 准备配置文件:首先,您需要准备好Elasticsearch的配置文件。您可以从Elasticsearch官方网站下载默认配置文件,并将其保存在本地文件系统。例如,将配置文件保存在`/path/to/elasticsearch.yml`。 2. 拉取Elasticsearch镜像:使用以下命令从Docker Hub上的官方Elasticsearch镜像拉取最新版本的Elasticsearch: ``` docker pull docker.elastic.co/elasticsearch/elasticsearch:7.14.0 ``` 注意:此命令会拉取Elasticsearch 7.14.0版本的镜像,您也可以根据需要使用其他版本。 3. 启动Elasticsearch容器:使用以下命令在Docker启动Elasticsearch容器,并将配置文件挂载到容器: ``` docker run -p 9200:9200 -p 9300:9300 -v /path/to/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml docker.elastic.co/elasticsearch/elasticsearch:7.14.0 ``` 该命令会启动一个Elasticsearch容器,并将容器的9200和9300端口映射到主机的9200和9300端口。`-v /path/to/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml`参数将本地文件系统上的配置文件挂载到容器的`/usr/share/elasticsearch/config/elasticsearch.yml`路径。 4. 验证Elasticsearch:在容器启动后,您可以在浏览器访问http://localhost:9200,如果看到以下输出,则表示Elasticsearch已成功安装并正在运行: ``` { "name" : "xxxxx", "cluster_name" : "docker-cluster", "cluster_uuid" : "xxxxx", "version" : { "number" : "7.14.0", "build_flavor" : "default", "build_type" : "docker", "build_hash" : "xxxxx", "build_date" : "xxxxx", "build_snapshot" : false, "lucene_version" : "8.9.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" } ``` 以上就是在Docker安装Elasticsearch并挂载配置文件的基本步骤。您可以根据需要自定义Elasticsearch容器的配置,并将其他文件挂载到容器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值