es版本升级并迁移数据(代码片段)

RockyPeng3 RockyPeng3     2023-03-19     193

关键词:

ES6.2.3(3节点)460G数据迁移到ES7.4.1(5节点)

目标

现在有一个ES集群(3节点,3个节点既是master也是data),存储的数据约460G。现在需要升级ES版本为7.4.1,新集群采用12个节点(4个master,8个data节点)

演练

  1. 由于迁移的数据量蛮大的,基本不可能采用github的elasticdump工具,也不能采用es自带的数据备份恢复功能。
  2. 允许es停机(这是很重要的一点)

所以在演练中,采用下面的演练步骤

搭建ES6.2.3的3节点集群

由于es6.2.3版本docker官网没有现成的镜像,所以这里采用直接安装的方式。
es的配置和线上环境保持一样,稍微修改下端口什么的(因为在一台机子上),3个节点既是master也是data节点
具体配置如下:

cluster.name: es-cluster
node.name: node6.2.3-3
#node.attr.rack: r1
node.master: true
#cluster.initial_master_nodes: node-172.29.130.2

node.data: true
path.data: data
path.logs: logs
network.host: 0.0.0.0
http.port: 9202
transport.tcp.port: 9302
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300","127.0.0.1:9301","127.0.0.1:9302"]
discovery.zen.minimum_master_nodes: 2
#bootstrap.memory_lock: true
#gateway.recover_after_nodes: 3
#action.destructive_requires_name: true
# 如果没有足够大的内存,因为了elasticsearch引用文件,系统内存会大量用于系统cache(linux的内存管理机制)。
# 由于系统cache释放缓慢,而导致这个过程非常长,这有可能使你的节点GC非常频繁,从而导致集群不稳定。
# 建议把bootstrap.mlockall设为true
#bootstrap.mlockall: true
http.cors.enabled: true
http.cors.allow-origin: "*"

===========================================

cluster.name: es-cluster
node.name: node6.2.3-1
#node.attr.rack: r1
node.master: true
#cluster.initial_master_nodes: node-172.29.130.2

node.data: true
path.data: data
path.logs: logs
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300","127.0.0.1:9301","127.0.0.1:9302"]
discovery.zen.minimum_master_nodes: 2
#bootstrap.memory_lock: true
#gateway.recover_after_nodes: 3
#action.destructive_requires_name: true
# 如果没有足够大的内存,因为了elasticsearch引用文件,系统内存会大量用于系统cache(linux的内存管理机制)。
# 由于系统cache释放缓慢,而导致这个过程非常长,这有可能使你的节点GC非常频繁,从而导致集群不稳定。
# 建议把bootstrap.mlockall设为true
#bootstrap.mlockall: true
http.cors.enabled: true
http.cors.allow-origin: "*"

===========================================

cluster.name: es-cluster
node.name: node6.2.3-2
#node.attr.rack: r1
node.master: true
#cluster.initial_master_nodes: node-172.29.130.2

node.data: true
path.data: data
path.logs: logs
network.host: 0.0.0.0
http.port: 9201
transport.tcp.port: 9301
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300","127.0.0.1:9301","127.0.0.1:9302"]
discovery.zen.minimum_master_nodes: 2
#bootstrap.memory_lock: true
#gateway.recover_after_nodes: 3
#action.destructive_requires_name: true
# 如果没有足够大的内存,因为了elasticsearch引用文件,系统内存会大量用于系统cache(linux的内存管理机制)。
# 由于系统cache释放缓慢,而导致这个过程非常长,这有可能使你的节点GC非常频繁,从而导致集群不稳定。
# 建议把bootstrap.mlockall设为true
#bootstrap.mlockall: true
http.cors.enabled: true
http.cors.allow-origin: "*"


写入6G测试数据

这里采用es官方的压测工具esrally进行写入数据操作,采用的数据是esrally官方提供的geonames数据集。

esrally --pipeline=benchmark-only --target-hosts=127.0.0.1:9200 --track=geonames

这里测试默认情况不仅会测试数据写入,还有其他测试,所以可以根据自己情况修改track.json文件,删除不必要的challenge和operations

写入完成后记录集群信息:

搭建ES7.4.1的5节点集群

为了模拟真实的新集群,这里采用1个master,4个data节点的方式进行部署,同时采用docker方式。具体配置如下:

master:


# 这两个配置都写master节点的ip
cluster.initial_master_nodes: ["172.18.12.2"]
discovery.seed_hosts: ["172.18.12.2","172.18.12.6","172.18.12.7","172.18.12.8","172.18.12.9"]

# 节点名称,其余两个节点分别为node-ip
# 节点名称以node-开头,以当前节点IP结尾
node.name: master_172.18.12.2

# 绑定的ip地址
network.host: 172.18.12.2

# 集群的名称
cluster.name: es-cluster-new

#node.attr.rack: r1

# 指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master
node.master: true

# 允许该节点存储数据(默认开启)
node.data: false

# 索引数据的存储路径
path.data: /opt/es/data

# 日志文件的存储路径
path.logs: /opt/es/logs

# 正式部署需要设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap
# bootstrap.memory_lock: true

# 设置对外服务的http端口,默认为9200
http.port: 9200

# 设置节点间交互的tcp端口,默认是9300
transport.tcp.port: 9300

# 如果没有足够大的内存,因为了elasticsearch引用文件,系统内存会大量用于系统cache(linux的内存管理机制)。
# 由于系统cache释放缓慢,而导致这个过程非常长,这有可能使你的节点GC非常频繁,从而导致集群不稳定。
# 建议把bootstrap.mlockall设为true
# bootstrap.mlockall: true
discovery.zen.minimum_master_nodes: 1

# 开启跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"

==================================================

data1:


# 这两个配置都写master节点的ip
cluster.initial_master_nodes: ["172.18.12.2"]
discovery.seed_hosts: ["172.18.12.2","172.18.12.6","172.18.12.7","172.18.12.8","172.18.12.9"]

# 节点名称,其余两个节点分别为node-ip
# 节点名称以node-开头,以当前节点IP结尾
node.name: datanode_172.18.12.6

# 绑定的ip地址
network.host: 172.18.12.6

# 集群的名称
cluster.name: es-cluster-new

#node.attr.rack: r1

# 指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master
node.master: false

# 允许该节点存储数据(默认开启)
node.data: true

# 索引数据的存储路径
path.data: /opt/es/data

# 日志文件的存储路径
path.logs: /opt/es/logs

# 正式部署需要设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap
# bootstrap.memory_lock: true

# 设置对外服务的http端口,默认为9200
http.port: 9200

# 设置节点间交互的tcp端口,默认是9300
transport.tcp.port: 9300

# 如果没有足够大的内存,因为了elasticsearch引用文件,系统内存会大量用于系统cache(linux的内存管理机制)。
# 由于系统cache释放缓慢,而导致这个过程非常长,这有可能使你的节点GC非常频繁,从而导致集群不稳定。
# 建议把bootstrap.mlockall设为true
# bootstrap.mlockall: true
discovery.zen.minimum_master_nodes: 1

# 开启跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"


======================================================

data2: 


# 这两个配置都写master节点的ip
cluster.initial_master_nodes: ["172.18.12.2"]
discovery.seed_hosts: ["172.18.12.2","172.18.12.6","172.18.12.7","172.18.12.8","172.18.12.9"]

# 节点名称,其余两个节点分别为node-ip
# 节点名称以node-开头,以当前节点IP结尾
node.name: datanode_172.18.12.7

# 绑定的ip地址
network.host: 172.18.12.7

# 集群的名称
cluster.name: es-cluster-new

#node.attr.rack: r1

# 指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master
node.master: false

# 允许该节点存储数据(默认开启)
node.data: true

# 索引数据的存储路径
path.data: /opt/es/data

# 日志文件的存储路径
path.logs: /opt/es/logs

# 正式部署需要设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap
# bootstrap.memory_lock: true

# 设置对外服务的http端口,默认为9200
http.port: 9200

# 设置节点间交互的tcp端口,默认是9300
transport.tcp.port: 9300

# 如果没有足够大的内存,因为了elasticsearch引用文件,系统内存会大量用于系统cache(linux的内存管理机制)。
# 由于系统cache释放缓慢,而导致这个过程非常长,这有可能使你的节点GC非常频繁,从而导致集群不稳定。
# 建议把bootstrap.mlockall设为true
# bootstrap.mlockall: true
discovery.zen.minimum_master_nodes: 1

# 开启跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"

======================================================

data3: 


# 这两个配置都写master节点的ip
cluster.initial_master_nodes: ["172.18.12.2"]
discovery.seed_hosts: ["172.18.12.2","172.18.12.6","172.18.12.7","172.18.12.8","172.18.12.9"]

# 节点名称,其余两个节点分别为node-ip
# 节点名称以node-开头,以当前节点IP结尾
node.name: datanode_172.18.12.8

# 绑定的ip地址
network.host: 172.18.12.8

# 集群的名称
cluster.name: es-cluster-new

#node.attr.rack: r1

# 指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master
node.master: false

# 允许该节点存储数据(默认开启)
node.data: true

# 索引数据的存储路径
path.data: /opt/es/data

# 日志文件的存储路径
path.logs: /opt/es/logs

# 正式部署需要设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap
# bootstrap.memory_lock: true

# 设置对外服务的http端口,默认为9200
http.port: 9200

# 设置节点间交互的tcp端口,默认是9300
transport.tcp.port: 9300

# 如果没有足够大的内存,因为了elasticsearch引用文件,系统内存会大量用于系统cache(linux的内存管理机制)。
# 由于系统cache释放缓慢,而导致这个过程非常长,这有可能使你的节点GC非常频繁,从而导致集群不稳定。
# 建议把bootstrap.mlockall设为true
# bootstrap.mlockall: true
discovery.zen.minimum_master_nodes: 1

# 开启跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"

======================================================

data4: 


# 这两个配置都写master节点的ip
cluster.initial_master_nodes: ["172.18.12.2"]
discovery.seed_hosts: ["172.18.12.2","172.18.12.6","172.18.12.7","172.18.12.8","172.18.12.9"]

# 节点名称,其余两个节点分别为node-ip
# 节点名称以node-开头,以当前节点IP结尾
node.name: datanode_172.18.12.9

# 绑定的ip地址
network.host: 172.18.12.9

# 集群的名称
cluster.name: es-cluster-new

#node.attr.rack: r1

# 指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master
node.master: false

# 允许该节点存储数据(默认开启)
node.data: true

# 索引数据的存储路径
path.data: /opt/es/data

# 日志文件的存储路径
path.logs: /opt/es/logs

# 正式部署需要设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap
# bootstrap.memory_lock: true

# 设置对外服务的http端口,默认为9200
http.port: 9200

# 设置节点间交互的tcp端口,默认是9300
transport.tcp.port: 9300

# 如果没有足够大的内存,因为了elasticsearch引用文件,系统内存会大量用于系统cache(linux的内存管理机制)。
# 由于系统cache释放缓慢,而导致这个过程非常长,这有可能使你的节点GC非常频繁,从而导致集群不稳定。
# 建议把bootstrap.mlockall设为true
# bootstrap.mlockall: true
discovery.zen.minimum_master_nodes: 1

# 开启跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"

配置好了后,可以先启动一下看看是否正常,先不拷贝数据,我这里之前已经测试过了。

其中一个启动命令如下:

docker run -d -P -h node172.18.12.7 --name node172.18.12.7 --network=mynet --ip=172.18.12.7 -v ~/Desktop/es-cluster/node172.18.12.7/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v ~/Desktop/es-cluster/node172.18.12.7/es:/opt/es -p 32777:9200 elasticsearch:7.4.1

拷贝物理文件到新集群

把es6.2.3的3节点数据分别拷贝到es7.4.1的3个data节点中。(为了避免cluster.uuid出现不一致,需先将新集群的data数据清空,然后先启动3个data节点,再启动master节点,观察es集群状态

再启动第4个data节点,观察es数据。然后停掉一个到多个data节点,观察es数据(es会自动重新分配数据的分配情况)

在启动一个master节点(模拟线上多个master的情况)

es版本升级并迁移数据(代码片段)

...ster也是data),存储的数据约460G。现在需要升级ES版本为7.4.1,新集群采用12个节点(4个master,8个data节点)演练由于迁移的数据量蛮大的,基本不可能采用github的elasticdump工具,也不能采用es自带的... 查看详情

elasticsearch数据迁移或者版本升级,如何快速提升迁移效率?(代码片段)

目录1.es数据迁移工具1.1.ElasticDump简介1.2.安装ElasticDump1.3迁移工具使用1.4如何提供效率?2.常见问题2.1elasticdump报SyntaxError:Unexpectedidentifier1.es数据迁移工具1.1.ElasticDump简介ElasticDump是一个ElasticSearch的数据导入导出开源工具包ÿ... 查看详情

gitlab升级和迁移(代码片段)

...是卡顿和出现其他问题,然后也很久没有升级过了,现在版本还是8.10.5,而官网最新版本已经是11.2了。另一个原因是gitlab所在的这台服务器快到期了,想换一台配置更好些的服务器,故对此进行升级和迁移。  升级思路:先... 查看详情

android使用room操作数据库进行数据库版本的升级和迁移(代码片段)

前言:还是在上篇文章的基础上进行数据库版本的升级和迁移前面几篇关于Room操作数据库的文章没看的可以先去看一下:Android使用Room操作SQLite数据库让其变得无比高效和简洁(教程一)Android使用Room操作SQLite数据库让其变... 查看详情

logstash迁移es数据(代码片段)

任务:从es集群a,b,c。。。把数据迁移到新es集群d,e,f  迁移数据只是复制需要额外3台服务器,分别部署新es集群d,e,f 和 单点logstash是迁移通道和kibana查询工具  (集群es复制到单点es,没试过,改天试一下)... 查看详情

gitlab迁移及版本升级(代码片段)

...gitlab迁移到vmwareesxi虚拟机上。在迁移成功后,将gitlab版本升级到最新的14.2.3。以前系统为centos7.8,新的系统为centos7.9。建议通gitlab官方的文档来进行相应操作,文章中命令存在非官方推荐操作方式相关文章CentOS7上安... 查看详情

es实战es集群节点迁移与缩容(代码片段)

ES集群节点迁移与缩容文章目录ES集群节点迁移与缩容master节点迁移场景一场景二场景三data节点迁移数据迁移操作1、查询集群原来的配置2、清空节点数据3、检查是否排空数据迁移原则缩容前置检查项master节点迁移场景一集群上... 查看详情

room中的数据库自动迁移功能(代码片段)

在不同Room之间轻松移动数据库表自2.4.0-alpha01版本开始,Room库里新加入了自动迁移的功能,这让数据库迁移的实现变得更简单。以往每当您的数据库schema发生变化时,您都必须实现一个Migration类,并将实际变化告... 查看详情

es7.6.2集群迁移(从一套es集群迁移数据到另一套集群)(代码片段)

有时有需要从ES集群中去除多个节点的需求,比如迁移一套ES集群到另外一套ES集群,这时可以先将新的ES节点加入到现有集群里,再将老ES节点下线。一实验环境 ​​​​​二实验步骤2.1集群扩容-添加新节点可参考ES... 查看详情

es7.6.2集群迁移(从一套es集群迁移数据到另一套集群)(代码片段)

有时有需要从ES集群中去除多个节点的需求,比如迁移一套ES集群到另外一套ES集群,这时可以先将新的ES节点加入到现有集群里,再将老ES节点下线。一实验环境 ​​​​​二实验步骤2.1集群扩容-添加新节点可参考ES... 查看详情

es7.7.0数据迁移(代码片段)

...0-linux-x64/bin$source/etc/profile1.2、Windows安装选择对应的windows版本一路下一步即可,以下是64位的安装包标注:2、安装elasticdumplinux和windows基本相同,建议全局安装下:#本地安装和全局安装的区别在于它是否自动给你... 查看详情

elasticsearch6.2版本升级至6.4版本服务启动报错(代码片段)

升级后发现es服务无法启动,发现报错如下:升级原因:kibana升级至6.4无法正常启动连接6.2版本es集群数据;x-pack插件错误:[2018-09-19T17:12:54,555][ERROR][o.e.b.Bootstrap]Exceptionjava.lang.IllegalArgumentException:property[name]ismissingin[/usr/share/e 查看详情

es实战es集群节点迁移与缩容(代码片段)

ES集群节点迁移与缩容文章目录ES集群节点迁移与缩容master节点迁移场景一场景二场景三data节点迁移数据迁移操作1、查询集群原来的配置2、清空节点数据3、检查是否排空数据迁移原则缩容前置检查项master节点迁移场景一集群上... 查看详情

efcodefirst数据迁移与防数据库删除(代码片段)

1开启migrations功能enable-migrations-force2添加迁移版本add-migration名称后缀我们每次修改实体后,都应该使用这个add-migration来升级历史版本3更新数据库update-database4生产迁移计划,即SQL语句Update-Database-Script-SourceMigration:$InitialDatabase-... 查看详情

centos6.×下低版本gitlab安装,备份,升级,迁移踩坑实践(代码片段)

背景:公司Gitlab版本较老(8.12.2)且部署在阿里云低版本的系统(CentOS6.8),领导要求将所有阿里云机器迁移至华为云,迁移服务不支持CentOS7以下的版本,镜像服务又过于麻烦,故决定手动对其升级并迁移。经过各种踩坑,总结最佳实践。思... 查看详情

hbase大批量数据迁移之bulkload(代码片段)

一、概述:最近做底层架构升级,满足高并发需求。底层架构由ES转到Hbase,之前往ES里面写数据的时候,直接通过Hive工具即可完成写入。经过测试,用Hive提供的通过MR写入Hbase,在字段过多和数据量过大的... 查看详情

es数据库重建索引——reindex(数据迁移)(代码片段)

一、应用背景  ES在创建好索引后,mapping的properties属性类型是不能更改的,只能添加。如果说需要修改字段就需要重新建立索引然后把旧数据导到新索引。1、当你的数据量过大,而你的索引最初创建的分片数量不... 查看详情

elasticsearch数据迁移(代码片段)

现需要将某集群下一个索引下的所有数据迁移到另一个集群上,elasticsearch-dump,Elasticsearch-Exporter试了一下都不好使,只能老实的写代码来实现importosimportsysimportpyesimportdatetimeindex_list=[["alias-offer","offer"]]ES_URL="http://ip1:9200/"NEW_ES_UR 查看详情