目录
1 软件部署
1.1 概述
本次安装使用安装程序完成,总体思路为:
- 环境准备;
- 执行安装程序;
- 配置、优化;
本套件包含的版本如下:
软 件 |
源版本 |
目的版本 |
Elasticsearch |
6.5.4 |
7.6.2 |
1.2 环境准备
说明:此处为推荐配置,可根据实际情况进行配置。
服务器端配置要求:
- 处 理 器:CentOS Linux release 7.2.1511
- 内 存:4Cpu 16G
- 硬 盘:SSD 500G
1.3 软件介绍
Elasticsearch
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它主要是集中存储数据。
快照仓库
ES是通过快照的方式来实现数据备份,并且是以增量的方式。为了做快照,那么就需要注册一个快照仓库,告诉ES我们的快照应该如何保存以及将快照保存到哪里。
快照的方式中仓库类型type有如下几种类型:
fs: 共享文件系统,将快照文件存放于文件系统中
url: 指定文件系统的URL路径,支持协议:http,https,ftp,file,jar
s3: AWS的S3对象存储,快照存放于S3中,以插件形式支持
hdfs: 快照存放于hdfs中,以插件形式支持
cos: 快照存放于腾讯云COS对象存储中,以插件形式支持
微软 Azure的存储
Google Cloud 的存储
索引快照备份恢复流程
- 在源端和目的端服务器中安装NFS服务,使用NFS服务将服务器中的备份目录共享;
- 使用mount命令将服务器的备份路径共享;
3.修改Elasticsearch的配置文件指定备份的输出路径并重启Elasticsearch服务;
- 分别在源端和目的端的Elasticsearch服务器上创建索引快照仓库;
- 在Elasticsearch源端生成索引快照;
- 在目的Elasticsearch端恢复索引快照;
流程图
1.4 安装部署
1.4.1 部署Elasticsearch
上个文章有部署
1)修改es配置文件
vim elasticsearch.yml |
添加如下信息
path.repo: ["/usr/local/elasticsearch/es6data"] |
其中es6是源,es7是目的,两边设置的一样也可以省略很多麻烦,为了区分我将目的端的路径设置为path.repo: ["/usr/local/elasticsearch/es7data"]
配置完后重启elasticsearch服务。
注意网上有部分用的是data.repo但是我用的时候发现并不识别,所以用了path.repo
path.repo: ["/usr/local/elasticsearch/es7data"]
#data.repo: ["/usr/local/elasticsearch/es7data"]
1.4.2 部署NFS
1) YUM仓库直接安装
yum install nfs-utils -y |
2)修改配置文件
vim /etc/exports |
添加以下配置,其中的目录是自己设置的没有要求,空间够用即可
/usr/local/elasticsearch/es6data 192.168.8.*(rw,sync,no_root_squash) |
3)使exports的修改即时生效
exportfs -r |
4)启动程序
systemctl start nfs-utils systemctl start nfs systemctl enable nfs-utils systemctl enable nfs |
5)查看共享目录
showmount -e /usr/local/elasticsearch/es6data 192.168.8.* |
在目标端使用mount挂载该目录
mount 192.168.8.115:/usr/local/elasticsearch/es6data /usr/local/elasticsearch/es7data
1.4.3 创建快照仓库
1) 创建快照仓库
其中es6_bak20210607是快照仓库的名称,可以自己取名
PUT _snapshot/es6_bak20210607 { "type": "fs", "settings": { "location": "/usr/local/elasticsearch/es6data", "compress": true, "max_restore_bytes_per_sec": "50mb", "max_snapshot_bytes_per_sec": "50mb" } } |
两种方法一种是在控制台,一种是在后台
curl -XPUT http://192.168.8.115:9200/_snapshot/back -H 'Content-Type: application/json' -d '{"type": "fs","settings": {"location": "/usr/local/elasticsearch/es6data"}}'
修改目标仓库的配置,主要是更改快照恢复、生成的速度和压缩
curl -XPOST http://192.168.8.115:9200/_snapshot/back -d '{"type":"fs","settings":{"location":"/usr/local/elasticsearch/es6data","max_snapshot_bytes_per_sec":"50mb","max_restore_bytes_per_sec":"50mb","compress":true}}'
目的端同样创建快照仓库
PUT _snapshot/es7_bak20210607
{
"type": "fs",
"settings": {
"location": "/usr/local/elasticsearch/es7data",
"compress": true,
"max_restore_bytes_per_sec": "50mb",
"max_snapshot_bytes_per_sec": "50mb"
}
}
1.4.4 Elasticsearch源端生成索引快照
1) 生成快照
PUT _snapshot/es6_bak20210607/es6_bakgpbl-parb { "indices": "gpbl-parb*", "ignore_unavailable": true, "include_global_state": true } |
以gpbl-parb数据为例
// 针对具体的index创建快照备份
es6_bak20210607是快照仓库的名称
es6_bakgpbl-parb是代表快照的名称
gpbl-parb是代表要创建的index的名称
indices :指定了需要备份的索引,而不用整个集群备份。值中可以加逗号隔开多个索引
ignore_unavailable :设置是否忽略不存在的索引,为true的话,即使指定的索引不存在也不报错。
include_global_state :是否备份cluster global state。阻止cluster的全局state也作为snapshot的一部分被备份#防止集群的全局状态被作为快照的一部分存储起来
partial:默认情况下,如果索引的部分primary分片不可用,会导致整个备份失败。设置为true,可只备份可用的primary shard。
已经创建过了,创建另外一个
1) 查看日志
[2021-06-07T15:27:19,832][INFO ][o.e.s.SnapshotsService ] [4_uxj7I] snapshot [es6_bak20210607:bid_info/CmPOrEZNTq2I2IYZy4gZ_Q] started [2021-06-07T16:03:23,439][INFO ][o.e.s.SnapshotsService ] [4_uxj7I] snapshot [es6_bak20210607:bid_info/CmPOrEZNTq2I2IYZy4gZ_Q] completed with state [SUCCESS] |
在创建时,可以使用tail -f 参数实时查看es的日志
创建备份之后,在共享目录里是这样的,包含了id和数据
2) 查看备份状态
查看快照仓库中的所有快照
GET _snapshot/es6_bak20210607/_all?pretty |
查看备份存放的仓库状态
GET _snapshot/es6_bak20210607?pretty |
查看备份的快照状态
GET _snapshot/es6_bak20210607/es6_bakgpbl-parb?pretty
3) 备份数据迁移
(将源集群的备份内容(/usr/local/elasticsearch/es6data里的所有文件),复制到迁移目标的集群仓库目录里/usr/local/elasticsearch/es7data)
做了nfs的共享存储后这步骤直接省略,两个目录中的数据相同
1.5 目的Elasticsearch端恢复索引快照
1.5.1 恢复快照说明
恢复一个快照 指定恢复哪些索引,默认恢复所有索引 跨集群恢复需要先创建仓库,将快照放进去,且不同大版本的快照不兼容。
有的部分恢复快照前需要关闭索引。
1.5.2 修改配置
1)目的端新安装的es
- 检查yml的配置文件快照仓库目录是否指定
- 检查分词器是否同版本
- 检查快照仓库目录是否挂载并同步
1.5.3 目的端创建快照仓库
查看快照仓库中同步的快照
get _snapshot/es7_bak20210607/_all
1.5.4 恢复快照
恢复快照的目标es中不能有重名的index
POST _snapshot/es7_bak20210607/es6_bakgpbl-parb/_restore |
在恢复快照时,可以使用tail -f 参数实时查看es的日志
[2021-06-07T16:14:00,262][INFO ][o.e.c.m.MetaDataDeleteIndexService] [es7] [bid_info_supplier/MltM8uBnSWO2G2bdru7tuQ] deleting index [2021-06-07T16:14:24,916][INFO ][o.e.c.r.a.DiskThresholdMonitor] [es7] releasing read-only-allow-delete block on indices: [[bid_info_supplier, bid_info]] [2021-06-07T16:40:09,523][INFO ][o.e.c.r.a.AllocationService] [es7] Cluster health status changed from [YELLOW] to [GREEN] (reason: [shards started [[bid_info][4]]]). |
1.6 F&Q
具体问题:
{
"error" : {
"root_cause" : [
{
"type" : "mapper_parsing_exception",
"reason" : "analyzer [ik_max_word] not found for field [lawDetail]"
}
],
"type" : "mapper_parsing_exception",
"reason" : "Failed to parse mapping [bl_law]: analyzer [ik_max_word] not found for field [lawDetail]",
"caused_by" : {
"type" : "mapper_parsing_exception",
"reason" : "analyzer [ik_max_word] not found for field [lawDetail]"
}
},
"status" : 400
}
产生原因:
分词器没有安装
解决办法:
安装匹配版本的分词器即可
注意:
在控制台删除直接使用delete bid_info
DELETE _snapshot/back/es-2021060814 //删除快照
单个删除索引:
curl -XDELETE -u elastic:密码 http://localhost:9200/es-message-2021.08.14
删除多个索引,中间有逗号隔开:
curl -XDELETE -u elastic:密码 http://localhost:9200/abis-info-2021.08.09,abis-error-2021.08.10
模糊匹配删除:
curl -XDELETE -u elastic:密码 http://localhost:9200/abis-*
删除所有索引:
curl -XDELETE http://localhost:9200/_all
或 curl -XDELETE http://localhost:9200/*
_all ,* 通配所有的索引
通常不建议使用通配符,误删了后果就很严重了,所有的index都被删除了
禁止通配符为了安全起见,可以在elasticsearch.yml配置文件中设置禁用_all和*通配符
action.destructive_requires_name = true
这样就不能使用_all和*了