《Linux运维总结:elasticsearch2.x集群数据迁移elasticsearch6.x集群》

一、背景

由于elasticsearch2.0.0版本过低,且没有账号密码认证机制,所以客户要求我们将elasticsearch升级到elasticsearch7.13.0版本。将elasticsearch从2.x升级到7.x需要先升级到中间版本,然后再进行升级。您可以按照以下步骤进行操作:

# 先升级到elasticsearch 5.x ,并确保索引和查询仍能正常工作。
# 接着升级到elasticsearch 6.x ,并同样确保索引和查询仍能正常工作。
# 最后升级到elasticsearch 7.x ,并测试所有功能以确保完全正常。

需手动部署2.x、5.x、6.x版本的es集群,这里以两个节点实例为例,ip及端口规划如下:

节点主机IP版本HTTP端口TCP端口
节点1192.168.1.622.0.01920119301
节点2192.168.1.632.0.01920119301
节点主机IP版本HTTP端口TCP端口
节点1192.168.1.625.6161920219302
节点2192.168.1.635.6161920219302
节点主机IP版本HTTP端口TCP端口
节点1192.168.1.626.8.181920319303
节点2192.168.1.636.8.181920319303

其中,es2.x、5.x、6.x建议jdk为java 8以上版本


二、迁移方案

关于es数据迁移,可使用如下方式:

在这里插入图片描述

1、从elasticsearch 2.3.0开始, Reindex API被引入,2.0.0版本不支持Reindex API。
2、elasticsearch5.x索引支持多个mapping type类型,elasticsearch6.x索引只支持单个mapping type类型,所以5.x迁移至6.x,需要在es6.x中根据5.x中的索引多个mapping type,分别为每一个mapping type单独创建索引,然后将5.x中某一个索引type数据使用Reindex API方式同步到6.x对应的索引中。

根据实际情况,迁移方案如下所示:

源ES版本目标ES版本迁移方式
2.0.05.6.16snapshot
5.6.166.8.23 Reindex API
6.8.237.13.0snapshot

三、二进制部署es集群

《Linux运维总结:ubuntu20.04二进制部署elasticsearch6.8.23集群》


四、es集群迁移步骤

4.1、配置集群共享目录

说明:使用快照备份,需要将快照备份目录做集群共享,确保es集群各个节点有权限访问共享目录。这里使用NFS文件目录共享的方式来实现,具体操作如下:

1、NFS服务端,这里默认以节点1(192.168.1.62)为服务端

sudo apt install nfs-kernel-server
mkdir /data/es-cluster/elasticsearch-2.0.0/backup
mkdir /data/es-cluster/elasticsearch-5.6.16/backup
mkdir /data/es-cluster/elasticsearch-6.8.23/backup
chmod 777 /data/es-cluster/elasticsearch-2.0.0/backup -R
chmod 777 /data/es-cluster/elasticsearch-5.6.16/backup -R
chmod 777 /data/es-cluster/elasticsearch-6.8.23/backup -R

vim /etc/exports
/data/es-cluster/elasticsearch-2.0.0/backup 192.168.1.63(rw,sync,no_subtree_check)
/data/es-cluster/elasticsearch-5.6.16/backup 192.168.1.63(rw,sync,no_subtree_check)
/data/es-cluster/elasticsearch-6.8.23/backup 192.168.1.63(rw,sync,no_subtree_check)
sudo exportfs -ra
sudo systemctl restart nfs-kernel-server

2、NFS客户端,这里默认以节点2(192.168.1.63)为客户端

sudo apt install nfs-common
mkdir /data/es-cluster/elasticsearch-2.0.0/backup
mkdir /data/es-cluster/elasticsearch-5.6.16/backup
mkdir /data/es-cluster/elasticsearch-6.8.23/backup
chmod 777 /data/es-cluster/elasticsearch-2.0.0/backup -R
chmod 777 /data/es-cluster/elasticsearch-5.6.16/backup -R
chmod 777 /data/es-cluster/elasticsearch-6.8.23/backup -R
mount 192.168.1.62:/data/es-cluster/elasticsearch-2.0.0/backup /data/es-cluster/elasticsearch-2.0.0/backup/
mount 192.168.1.62:/data/es-cluster/elasticsearch-5.6.16/backup /data/es-cluster/elasticsearch-5.6.16/backup/
mount 192.168.1.62:/data/es-cluster/elasticsearch-6.8.23/backup /data/es-cluster/elasticsearch-6.8.23/backup/

4.1、es2.0.0集群快照备份

1、分别在es2.0.0集群各个节点上配置共享目录挂载的路径,并 重启es服务

vim elasticsearch-2.0.0/config/elasticsearch.ym
path.repo: ["/data/es-cluster/elasticsearch-2.0.0/backup"]

2、在es2.0.0集群其中一个节点上创建快照仓库,es_backup可任意设置,无特殊意义

[root@localhost ~]#  curl -H "Content-Type: application/json" -XPUT http://192.168.1.62:19201/_snapshot/es_backup  -d '
{
    "type": "fs",
    "settings": {
        "location": "/data/es-cluster/elasticsearch-2.0.0/backup",
        "max_snapshot_bytes_per_sec": "500mb",
        "max_restore_bytes_per_sec": "500mb"
    }
}'

3、在es2.0.0集群其中一个节点上,查看快照仓库

[root@localhost ~]#  curl http://192.168.1.62:19201/_snapshot/es_backup?pretty

4、在es2.0.0集群其中一个节点上,备份索引快照,这里使用所有索引进行快照方式对es集群所有索引进行快照备份

[root@localhost ~]#  curl -XPUT "http://192.168.1.62:19201/_snapshot/es_backup/es_all_index?wait_for_completion=true?pretty"

5、在es2.0.0集群其中一个节点上,查看索引快照

[root@localhost ~]#  curl -XGET "http://192.168.1.62:19201/_snapshot/es_backup/es_all_index/?pretty"

6、将es2.0.0备份快照目录下的文件拷贝到es5.6.16备份快照目录下

[root@localhost ~]#  scp -r /data/es-cluster/elasticsearch-2.0.0/backup/*  elastic@192.168.1.62:/data/es-cluster/elasticsearch-5.6.16/backup

4.2、es2.0.0集群迁移至es5.6.16集群

1、分别在es5.6.16集群各个节点上配置共享目录挂载的路径,并 重启es服务

vim elasticsearch-5.6.16/config/elasticsearch.ym
path.repo: ["/data/es-cluster/elasticsearch-5.6.16/backup"]

2、在es5.6.16集群其中一个节点上创建快照仓库,es_backup可任意设置,无特殊意义

[root@localhost ~]# curl -H "Content-Type: application/json" -XPUT http://192.168.1.62:19202/_snapshot/es_backup  -d '
{
    "type": "fs",
    "settings": {
        "location": "/data/es-cluster/elasticsearch-5.6.16/backup",
        "max_snapshot_bytes_per_sec": "500mb",
        "max_restore_bytes_per_sec": "500mb"
    }
}'

3、在es5.6.16集群其中一个节点上,查看快照仓库

[root@localhost ~]#  curl http://192.168.1.62:19202/_snapshot/es_backup?pretty

4、在es5.6.16集群其中一个节点上,查看快照文件信息

[root@localhost ~]#  curl -XGET "http://192.168.1.62:19202/_snapshot/es_backup/es_all_index/?pretty"

5、在es5.6.16集群其中一个节点上,恢复所有索引快照

[root@localhost ~]#  curl -XPOST "http://192.168.1.62:19202/_snapshot/es_backup/es_all_index/_restore?wait_for_completion=true"

4.3、es5.6.16集群迁移至es6.8.23集群

1、在目标es集群6.8.23的elasticsearch.yml配置文件,设置远程es5.6.16集群的白名单,并 重启es服务

vim elasticsearch-6.8.23/config/elasticsearch.yml
reindex.remote.whitelist: ["192.168.1.62:19202", "192.168.1.63:19202"]

2、分别在es6.8.23集群各个节点上配置共享目录挂载的路径,并 重启es服务

vim elasticsearch-6.8.23/config/elasticsearch.yml
path.repo: ["/data/es-cluster/elasticsearch-6.8.23/backup"]

3、在es6.8.23集群其中一个节点上创建快照仓库,es_backup可任意设置,无特殊意义

[root@localhost ~]# curl -H "Content-Type: application/json" -XPUT http://192.168.1.62:19203/_snapshot/es_backup  -d '
{
    "type": "fs",
    "settings": {
        "location": "/data/es-cluster/elasticsearch-6.8.23/backup",
        "max_snapshot_bytes_per_sec": "500mb",
        "max_restore_bytes_per_sec": "500mb"
    }
}'

4、在es6.8.23集群其中一个节点上,查看快照仓库

[root@localhost ~]# curl http://192.168.1.62:19203/_snapshot/es_backup?pretty

5、整理es5.6.16集群中的对应索引mapping的类型,如下所示:

# 在es5.6.16集群其中一个节点上查看depart_person索引的mapping 信息
[root@localhost ~]# curl http://192.168.1.62:19202/depart_person/_mapping?pretty
ES版本索引名称mapping类型名称
5.6.16part_personlive_person
5.6.16global_personpost_data
5.6.16integralvisual_data
5.6.16integraltask_data
5.6.16integralreport_data

6、在es6.8.23集群其中一个节点上创建索引,如下所示:

由于es6.8.23索引结构只支持一种mapping类型,索引需要经es5.6.16中有多个mapping 类型的索引进行分拆,分别对这些mapping类型创建单独的索引,使之符合es6.8.23一个索引对应一个mapping类型的结构。

ES版本索引名称mapping类型名称
6.8.23part_personlive_person
6.8.23global_personpost_data
6.8.23visual_datavisual_data
6.8.23task_datatask_data
6.8.23report_datareport_data

在上述es5.6.16索引名称中,part_person、global_person这两个索引符合es6.8.23的mapping类型结构,可以不用拆分,integral索引对应有三个mapping类型,可分别拆分为三个索引,1个索引对应一个mapping类型,即如上所示。

7、在es6.8.23集群其中一个节点上创建索引

#!/bin/bash
var_arrs=(part_person global_person visual_data task_data report_data)
for var in ${var_arrs[@]}
do
    curl -u elastic:eKVSEne3Re7yrWOOXVYg -XPUT http://192.168.1.62:19203/$var
done

8、在es6.8.23集群其中一个节点基于reindex迁移数据

#!/bin/bash
ES_SOURCE_SERVER="http://192.168.1.62:19202"
ES_DEST_SERVER="http://192.168.1.62:19203"
ES_DEST_PASSWD="eKVSEne3Re7yrWOOXVYg"
ES_SOURCE_MULTI_MAPPING_INDEX="integral"
var1_arrs=(part_person global_person)
var2_arrs=(visual_data task_data report_data)
# ----------------------------------------------------------------------------------------------------------
# 开始恢复时间
start_time=`date +"%Y-%m-%d %H:%M:%S"`
start_time_unix=`date +%s`
# ----------------------------------------------------------------------------------------------------------
for var in ${var1_arrs[@]}
do
    curl -u elastic:$ES_DEST_PASSWD -X POST $ES_DEST_SERVER/_reindex -H 'Content-Type: application/json' -d'
{
  "source": {
    "remote": {
      "host": "$ES_SOURCE_SERVER"
    },
    "index": "$var1_arrs"
  },
  "dest": {
    "index": "$var1_arrs"
  }
}'

done

for var in ${var2_arrs[@]}
do
    curl -u elastic:$ES_DEST_PASSWD -X POST $ES_DEST_SERVER/_reindex -H 'Content-Type: application/json' -d'
{
  "source": {
    "remote": {
      "host": "$ES_SOURCE_SERVER"
    },
    "index": "$ES_SOURCE_MULTI_MAPPING_INDEX",
    "query": {
      "match": {
        "_type": "$var2_arrs"
      }
  }
  },
  "dest": {
    "index": "$var2_arrs"
  }
}'
done
# ----------------------------------------------------------------------------------------------------------
# 计算恢复时间
end_time=`date +"%Y-%m-%d %H:%M:%S"`
end_time_unix=`date +%s`
cha=`expr ${end_time_unix} - ${start_time_unix}`
re=`expr ${cha} / 60`
sre=`expr ${cha} % 60`
echo "恢复开始于:${start_time}"
echo "恢复结束于:${end_time}"
echo -e  "恢复总耗时:${re}分钟 ${sre}\n"                                     

如无报错,则数据迁移成功!


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:Linux运维实战总结

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Elasticsearch是一个开源的分布式搜索和分析引擎,用于处理大规模数据的实时搜索和分析。Kubernetes(简称K8S)是一个用于自动化部署、扩展和管理容器化应用程序的开源平台。 要在Kubernetes上部署Elasticsearch 8.x集群,可以按照以下步骤进行操作: 1. 创建Kubernetes集群:首先,需要在Kubernetes上创建一个可用的集群。可以使用云服务提供商(如AWS、Azure、GCP)或自己搭建的Kubernetes集群。 2. 安装Elasticsearch Operator:Elasticsearch Operator是一个Kubernetes控制器,用于管理Elasticsearch集群的生命周期。可以通过在Kubernetes上安装Elasticsearch Operator来简化集群的管理。 3. 创建Elasticsearch集群配置:使用Elasticsearch Operator创建一个Elasticsearch集群配置文件。配置文件中包含了集群的规模、存储需求、网络设置等信息。 4. 部署Elasticsearch集群:使用kubectl命令或Kubernetes Dashboard将Elasticsearch集群配置文件部署到Kubernetes集群中。Kubernetes会自动创建和管理Elasticsearch节点的Pod。 5. 配置Elasticsearch集群:根据需求,可以配置Elasticsearch集群的参数,如节点数量、副本数、内存和存储资源等。 6. 监控和日志收集:为了监控和管理Elasticsearch集群,可以使用Kubernetes提供的监控和日志收集工具,如Prometheus、Grafana和Elasticsearch自带的监控插件。 7. 高可用性和扩展性:为了实现高可用性和扩展性,可以使用Kubernetes的特性,如水平扩展、自动伸缩和故障转移等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东城绝神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值