评论

收藏

[Linux] es6迁移到es7

服务系统 服务系统 发布于:2021-07-01 09:50 | 阅读数:401 | 评论:0

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端恢复索引快照;
  流程图
   DSC0000.jpg

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
DSC0001.jpg

  
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}}'
DSC0002.jpg

  目的端同样创建快照仓库
  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。
DSC0003.jpg

  已经创建过了,创建另外一个
DSC0004.jpg

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和数据
DSC0005.jpg

2) 查看备份状态
  查看快照仓库中的所有快照
  GET _snapshot/es6_bak20210607/_all?pretty
  查看备份存放的仓库状态
  GET _snapshot/es6_bak20210607?pretty
DSC0006.jpg

  查看备份的快照状态
  GET _snapshot/es6_bak20210607/es6_bakgpbl-parb?pretty
DSC0007.jpg

DSC0008.jpg

3) 备份数据迁移
  (将源集群的备份内容(/usr/local/elasticsearch/es6data里的所有文件),复制到迁移目标的集群仓库目录里/usr/local/elasticsearch/es7data)
  做了nfs的共享存储后这步骤直接省略,两个目录中的数据相同

1.5 目的Elasticsearch端恢复索引快照
1.5.1 恢复快照说明
  恢复一个快照 指定恢复哪些索引,默认恢复所有索引 跨集群恢复需要先创建仓库,将快照放进去,且不同大版本的快照不兼容。
  有的部分恢复快照前需要关闭索引。
1.5.2 修改配置
1)目的端新安装的es
  • 检查yml的配置文件快照仓库目录是否指定
  • 检查分词器是否同版本
  • 检查快照仓库目录是否挂载并同步
DSC0009.jpg

1.5.3 目的端创建快照仓库
DSC00010.jpg

  查看快照仓库中同步的快照
  get _snapshot/es7_bak20210607/_all
DSC00011.jpg

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和*了

  

关注下面的标签,发现更多相似文章