作者介绍 yinanwu(吴沂楠),腾讯云 Elasticsearch 高级开发工程师 本文介绍通过开源社区提供的solr-to-es迁移工具,将Solr节点中的文档迁移到腾讯云ES中的方法。 使用限制 solr-to-es迁移工具仅支持迁移到腾讯云ES 6.4.3、6.8.2版本,迁移完成后可以在控 制台通过升级ES集群大版本升级到更高版本。 迁移数据,下面的语句把solr里的collections中通过*:*查询到的文档分页导入到腾讯云ES的指定的索引和doc type中。 " http://127.0.0.1:8983/solr/node http://10.2.2.23:9200 my_index my_type 上面语句迁移完成后可以在ES中查询: curl -XGET -u 'elastic:mypassword' http://10.2.2.23:9200/my_index/my_type/_search 免费体验活动专区 Elasticsearch 新用户可享 2核
ES对比Solr优势ES在高级查询上优化更多更高效ES本身是分布式的,而Solr需要配合Zookeeper使用实现分布式ES创建索引更快,而Solr创建索引会产生阻塞实时建立索引时,ES没有阻塞写入数据更快 )Python-3.6.8ES-7.14.2Solr安装1. solr用户添加sudo权限vi /etc/sudoers#在root ALL=(ALL) ALL下添加solr ALL=(ALL) ALLJDK-17安装过程省略2. ==3.6.0开始迁移solr-to-es --solr-query "*:*" http://127.0.0.1:8983/solr/my_core http://es-ip:9200 --es-user argument (2 given) [duplicate]join()函数仅支持输入一个参数,源码main.py文件中105-106用法如下,执行失败if response.status_code !
背景 在之前的文章Elasticsearch跨集群数据迁移之离线迁移中,我们介绍了如何在离线场景下把自建的ES集群或者在其它云厂商购买的ES集群迁移至腾讯云的ES, 但是如果在迁移过程中业务不能中断或者不能够暂停写操作 2020年5月份,腾讯云ES上线的新版本中,对集群节点所在的网络进行了优化,使得集群节点能够反向访问到用户VPC下的ip,因此采用集群融合的方式可以实现在线不停服地迁移自建ES集群至腾讯云ES。 ES的节点上,最后剔除掉自建ES的节点,实现平滑迁移。 ] 填写集群配置名,填入自建ES集群的名称(cluster_name), 该功能需要对腾讯云账号开启白名单方可使用 [edabb9e46a2c96c9832e0053c53d5eea.png] 集群融合 _name属性为自建ES集群节点的名称列表 观察数据迁移情况 数据迁移完毕后,在业务侧修改ES集群地址为腾讯云ES集群的vpc内网地址(先验证vpc内网地址访问无误,然后在业务压力小时切换ES集群地址)
方案名称 ES多轮分批融合迁移方案(ES索引级别融合迁移方案) 图片 方案风险 集群融合期间,云上集群不可进行变更,比如升降配置、版本升级,否则会有集群不可用的风险; 集群融合期间,不可新建索引,否则分片会被分配到云上 环境配置 自建ES环境 ● 版本 Elasticsearch版本:7.7.0 ● 配置 节点数量:3 内存:4G 硬盘:高性能云盘 50G CPU核心数:2 云上ES环境 ● 版本 Elasticsearch 1667919566003300032 es-fqetcgvk 二次融合迁移 2. : curl -H "Content-Type: application/json" -XPUT 10.0.0.10:9200/es_index-1,es_index-2,es_index-3,es_index 通过快照迁移数据 二次融合迁移之后,数据迁移到了云上新建的小集群里,但由于数据还需要整合到云上主集群,所以还有一步快照迁移的操作。
摘要 在上一篇中我们介绍了数据迁移的套路,但是没有介绍具体的方案,这篇着重介绍下具体的数据迁移方案 一. 设计目标 设计一个数据迁移的方案,需要实现以下目标 迁移速度 qps 需要达到1k,这样能保证1亿的数据能够在1~2天内跑完 迁移qps可控 迁移有可能对线上服务有影响,需要可动态调整qps 数据完整, 不丢失 不能遗漏数据,虽然事后我们有数据校验的过程,但是设计数据迁移方案时,需要尽可能的包装数据不丢失。 进度可控 迁移过程可中断,可重试。比如先迁移10分之一的数据,再继续来 二. 架构设计 数据迁移任务大致分为3个步骤,如下图所示 ? 可以可以将成功遍历完, 写入到任务队列的数据记录到某个存储,比如redis中,这样可以保证游标中断,或者服务重启后,可以从这个key中继续遍历,这样就实现了迁移的可中断 2.
Ss Sep25 2:17 /usr/sbin/keepalived -D root 73610 0.0 0.0 112500 2908 ? S Sep25 2:21 \_ /usr/sbin/keepalived -D root 73611 0.0 0.0 112484 2064 ?
://dest_es_ip:9200/index_name --type=settings 2)迁移索引的mapping: elasticdump --input=http://source_es_ip 2、snapshot snapshot api是ES提供的一组用于索引数据快速备份及恢复的api 接口,详细介绍可查看官方文档,利用该组api接口,我们可以通过将源es集群的数据备份到远程仓库,再在腾讯云 2. _name" : "用户节点名1, 用户节点名2..." } }' 通过上面的参数设置,就可以实现将客户集群上的数据在线迁移到腾讯云ES集群上来,注意这里的_name需是节点的名称。 参考文档 1、ES官方文档 2、记一次在线跨集群迁移ES数据 3、Elasticsearch跨集群数据迁移之离线迁移 4、使用 COS 进行备份及恢复 问答 Q、客户自建集群在使用snapshot的方式迁移到腾讯云
[mysql@slave02 bin]$ masterha_check_status --conf=/etc/app1.cnf app1 is stopped(2:NOT_RUNNING). [mysql@slave02 bin]$ ps faux | grep manager mysql 27192 0.0 0.0 103244 864 pts/2 S+ 00:23 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2:
线下es迁移至腾讯云ES实践案例1、首先我们先要准备好node环境,简便部署满足使用即可1.1下载node应用包后在本地数据目录解压# xz -d node-v10.16.3-linux-x64.tar.xzcd /bin/elasticdump --version6.14.13、准备导出本地es实例索引配置及数据3.1 使用导出本地文件的方式,同时也可以使用网络实时的迁移方式,需要依赖两端网络互通# . dump3.3 网络实时的迁移方式,需要依赖两端网络互通,腾讯云es实例支持开通公网虚拟地址以便打通网络。. elasticdump --input=http://源esIP地址:9200/索引名 --output=http://目的esIP地址:9200/索引名 --type=data3.4 带账号密码的数据迁移 elasticdump --input=http://10.130:9200/rdms--limit=1000 --output=http:/localhost:9200/rdms# 带账号密码的数据迁移
是基于时间戳最小粒度进行滚动而实现的时序翻页,所以时间自增字段需精确到毫秒,否则可能会有性能问题;为避免遗漏增量数据,采用闭区间滚动,每次滚动包含边界; 同步速率理论值为2000~12000/s; 为保证集群稳定性,默认限制了生产队列上限为2, 每个队列最多存储10000条; 如 solr 端历史数据发生改变,则无法增量同步至ES; ✧ 本工具有以下特点:以 Service 风格启停;高效时序翻页;支持断点续传;支持预估迁移耗时;支持观测迁移速率 准备工作 ● 服务器准备准备一台可以访问 Solr 及 ES 实例的服务器,其网络环境应该是互通的; 2. 执行方式 2.1. = elastices_password = ******collections = collection_1,collection_2,collection_3primary_key = iddelta_field url,形式需为 http://10.10.10.x:9200es_user es 用户名es_password es 密码collections solr
相比于:reindex跨集群操作,elasticdump无需在ES集群的配置文件elasteicsearch.yml中设置授权迁移访问地址(白名单)。 1.2、使用方式 elasticsearch-dump是一款开源的ES数据迁移工具,github地址: https://github.com/taskrabbit/elasticsearch-dump 1) 安装elasticsearch-dump elasticsearch-dump使用node.js开发,可使用npm包管理工具直接安装: npm install elasticdump -g 2) -output-index: 目标 ES 集群的索引 --type: 迁移类型,默认为 data,表明只迁移数据,可选 settings, analyzer, data, mapping, alias --limit:每次向目标ES集群写入数据的条数,不可设置的过大,以免bulk队列写满 3) 迁移单个索引 以下操作通过elasticdump命令将集群172.16.0.39中的companydatabase
Logstash 1.1、适合场景 数据体量不大,需要在线数据同步的场景(实际使用的是scroll,是执行瞬间的es快照,近实时的数据同步)。 input中为http://<阿里云ES公网地址>:<端口>:output中为http://腾讯云ES实例 user 访问ES服务的用户名 password 访问ES服务的密码 index 指定同步索引名 ,如果用到_routing这个字段,就需要迁移_routing,需要在logstash的output里指定routing字段,值是"%{@metadata}"(意思是保持跟来源索引一致),但同时也要在input spm=a2c4e.10696291.0.0.34dd19a4GGsCSh#_scheduling schedule => "* * * * *" 以上示例会每分钟触发抽取。 5) log4j2.properties log4j2库的相关设置。
1、Snapshot 1.1、适合场景 1) 迁移速度快,适用数据量大的场景; 2) 需占用源集群磁盘空间,或者借助于对象存储,实现友商ES到腾讯云ES,或自建ES到腾讯云ES的数据迁移。 6)兼容列表如下:在1.x中创建的索引快照可以恢复到2.x。在2.x中创建的索引快照可以恢复到5.x。 在5.x中创建的索引快照可以恢复到6.x。在6.x中创建的索引快照可以恢复到7.x。 1.3、腾讯云ES备份到COS使用方式 snapshot api 是 Elasticsearch用于对数据进行备份和恢复的一组 api 接口,可以通过 snapshot api 进行跨集群的数据迁移,原理就是从源 从自建 ES 集群迁移至腾讯云 ES 集群,可直接使用 fs 类型仓库,但需要在 ES 配置文件 elasticsearch.yml 中设置仓库路径。 集群迁移至腾讯云 ES 集群,或腾讯云内部的 ES 集群迁移,可使用对应云厂商提供的仓库类型,例如 AWS 的 S3、阿里云的 OSS 和腾讯云的 COS 等。
但仅限于腾讯云 ES 的实现方式(跨集群迁移需要elasticsearch.yml中加上ip白名单,并重启集群),所以腾讯云ES不支持 reindex 操作。 2) 调用 reindex api 以下操作表示从源 ES 集群中查询名为 test1 的索引,查询条件为 title 字段为 elasticsearch,将结果写入当前集群的 test2 索引。 2、方案对比 以上介绍了elasticsearch-dump、logstash、reindex、snapshot方式进行数据迁移,实际上这几种工具大体上可以分为两类: scroll query + bulk ES 集群 从源 ES 集群通过备份api创建数据快照,然后在目标 ES 集群中进行恢复 reindex是Elasticsearch提供的一个api接口,可以把数据从一个集群迁移到另外一个集群 网络要求 再迁移数据 复杂,需要提前在目标集群创建mapping和setting等,再迁移数据 简单 需要在目标ES集群中配置reindex.remote.whitelist参数,指明能够reindex的远程集群的白名单
-i ova centos-dev-test01-v2v.ova -o local -os /vmhost/dev/dev-test01 -of qcow2 [ 0.0] Opening the centos-dev-test01-v2v.xml <? 已开始 1.1.5 测试可用性 登陆迁移后的虚拟机测试 [root@clsn7 ~]# ssh root@192.168.19.123 The authenticity of host '192.168.19.123 [root@clsn7 ~]# virsh autostart centos-dev-test01-v2v 域 centos-dev-test01-v2v标记为自动开始 至此一台机器的迁移完成, 后续按照相同的方式将其他的虚拟机进行迁移即可。
-i ova centos-dev-test01-v2v.ova -o local -os /vmhost/dev/dev-test01 -of qcow2 [ 0.0] Opening the centos-dev-test01-v2v.xml <? 已开始 1.1.5 测试可用性 登陆迁移后的虚拟机测试 [root@clsn7 ~]# ssh root@192.168.19.123 The authenticity of host '192.168.19.123 [root@clsn7 ~]# virsh autostart centos-dev-test01-v2v 域 centos-dev-test01-v2v标记为自动开始 至此一台机器的迁移完成, 后续按照相同的方式将其他的虚拟机进行迁移即可。
融合迁移示意图如下图2所示。图片从上图2的迁移流程示意图中可以看出,整个迁移主要分为三步,即融合、迁移和下线。 2、自建ES集群上不能安装有云上集群不存在的插件在迁移之前需要先在自建集群节点上之行如下API来查看自建集群上都安装了哪些插件。 如果自建集群和腾讯云ES集群不在同一个地域,则可以采用云上云联网或者对等连接方案进行打通网络;2)IDC自建ES集群迁移到腾讯云ES如果客户的自建ES集群是在自己的IDC机房或者是其他云厂商云服务器中, _name" : "自建集群节点名称列表"}'2)集群融合(腾讯云侧操作)在这一步腾讯云ES迁移同学会调用后台接口,将自建ES集群节点追加到云上节点中,然后全量重启云上集群。 2、7.0以上版本迁移7.0以上版本的迁移是指客户自建ES集群版本和腾讯云ES集群版本都是7.0以上的版本或者云上集群是7.0以上版本,如客户版本是6.8.3,云上版本为7.5.1或者自建版本为7.5.2
因为当前使用的集群无法继续扩容了并且版本也较低(5.6.4), 所以需要把集群迁移到一个新的规模更大的集群,并且升级一下ES的版本,升级到6.4.3. 方案制定 迁移的需求是: 日志数据不能停止写入到ES 日志查询不受影响,延迟不能超过1分钟 参考之前写的关于数据迁移的文章Elasticsearch数据迁移与集群容灾,制定出的迁移方案为: 先使用logstash 2.使用logstash/snapshot全同步数据 如果数据规模较小,比如几十GB, 则可以使用logstash进行全量同步, logstash配置文件如下: input { elasticsearch 记录新集群中当天索引中数据的最新时间戳 存量的旧的索引不会再写入了,而当天的索引还在持续写入,在步骤2的全量同步数据完成之后(logstash执行完毕后会自动终止进程), 需要查询出当天索引的数据中已经同步完成的最新的时间戳 记录开始迁移的时间 在新的集群中执行以下查询,记录开始进行增量迁移的时间戳: GET es-runlog-2019-11-20/_search { "query": { "range":
数据备份 1、阿里云上创建 oss 存储桶 image.png 2、源 es 上创建镜像备份仓库 PUT _snapshot/my_backup/ { "type": "oss", 金山云 KS3 腾讯云 COS URL列表 AWS S3中国区 AWS S3国际站 华为云 OBS 1、进入对象存储迁移,创建一个任务,填写迁移信息 image.png 2、发起迁移,任务成功完成。 数据迁移的耗时除了考虑数据量大小,还需要考虑地域 image.png 3、查看腾讯云 cos,快照数据已迁移过来 image.png 数据恢复 1、在腾讯云的(目标)集群中创建一个备份仓库,注意:" compress": true, "chunk_size": "500mb", "base_path": "/snapshot1" } } image.png 2、 快照原理 es 的快照是基于 Lucene 实现,Lucene 快照针对的都是最后一个提交点的快照,没有增量概念,每一次都是全量快照,并且与快照相关的物理文件都不会删除;es 则负责数据拷贝、仓库管理、
mkdir -p es cd es mkdir -p conf mkdir -p data mkdir -p logs 下面看一下docker-compose.yml version: '3' services "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" } flinkx支持es2hive es2hive.json { "job" : { "content" : [ { "reader": { "name": "esreader", writer": { "name" : "hivewriter", "parameter" : { "jdbcUrl" : "jdbc:hive2: : 1 } } } } 运行命令 bin/flinkx \ -mode local \ -job /Users/wangkai/apps/install/flinkx/es2hive.json