作者介绍 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 'elastic:mypassword' http://10.2.2.23:9200/my_index/my_type/_search 免费体验活动专区 Elasticsearch 新用户可享 2核4G
ES对比Solr优势ES在高级查询上优化更多更高效ES本身是分布式的,而Solr需要配合Zookeeper使用实现分布式ES创建索引更快,而Solr创建索引会产生阻塞实时建立索引时,ES没有阻塞写入数据更快 ES的查询速度几乎不受数据量增加的影响,而Solr会越来越慢劣势针对已有的数据查询时,Sor速度更快Solr接受的数据格式更丰富Solr比较成熟稳定环境配置Solr-9.3.0JDK-17(建议不低于JDK8 )Python-3.6.8ES-7.14.2Solr安装1. ==3.6.0开始迁移solr-to-es --solr-query "*:*" http://127.0.0.1:8983/solr/my_core http://es-ip:9200 --es-user 'elastic' --es-password '*****' es_indexname _doc出现代码执行报错,参数数量冲突TypeError: join() takes exactly one
切换keepalived ip 变更新master keepalived优先级,重载的方式切换 [root@new-master ~]# vim /etc/keepalived/keepalived.conf [root@new-master ~]# /etc/init.d/keepalived reload ; watch -n .2 ip a 使用给新master keepalived 升优先级重载的方式切IP 使用 watch 来观察ip变化 ---- 从两边密切监控观察检查应用与数据库状态 使用n
确认备份数据 在销毁slave和原master前,这是最后一次可以备份原库统计数据的机会 生产数据已经陈旧,不一致了 确认后可以进行下一步 ---- 备份新master以便重建 [root@new-master nfs]# time nohup /usr/bin/innobackupex --defaults-file=/etc/my.cnf --user=root --password=xxxxxxxxxx /data/nfs/test_full_backup >> /data/nfs/full_
背景 在之前的文章Elasticsearch跨集群数据迁移之离线迁移中,我们介绍了如何在离线场景下把自建的ES集群或者在其它云厂商购买的ES集群迁移至腾讯云的ES, 但是如果在迁移过程中业务不能中断或者不能够暂停写操作 2020年5月份,腾讯云ES上线的新版本中,对集群节点所在的网络进行了优化,使得集群节点能够反向访问到用户VPC下的ip,因此采用集群融合的方式可以实现在线不停服地迁移自建ES集群至腾讯云ES。 ES的节点上,最后剔除掉自建ES的节点,实现平滑迁移。 实施步骤 购买腾讯云ES 在腾讯云官网控制台上购买ES, 需要特别注意以下几点: 选择和自建ES相同大版本的ES,高级特性根据需要可选基础版和开源版,注意白金版在当前场景下不可选,在完成迁移后可以在腾讯云 _name属性为自建ES集群节点的名称列表 观察数据迁移情况 数据迁移完毕后,在业务侧修改ES集群地址为腾讯云ES集群的vpc内网地址(先验证vpc内网地址访问无误,然后在业务压力小时切换ES集群地址)
/bin/elasticsearch-node detach-cluster (选择y) 图片 初始化完云上集群元数据之后,自建与云上集群融合成功 图片 4、开始迁移数据 这里首次融合迁移我们只迁5个索引 -4,es_index-5/_settings? 图片 4. /bin/elasticsearch-node detach-cluster (选择y) 图片 初始化完云上集群元数据之后,自建与云上集群融合成功 图片 4、开始迁移数据 二次融合迁移我们迁7个索引: -15,es_index-16,es_index-17,es_index-18,es_index-19" } 图片 备份成功: 图片 3、在云上主集群创建快照仓库 图片 4、发起快照恢复 POST _snapshot
越来越多的客户将自建的ES集群或者部署在其他云厂商的 ES 集群迁移到腾讯云上来。为了更加方便快捷地帮助客户完成集群迁移工作,下面简单介绍下可提供的两种迁移方案,离线迁移和在线迁移。 _1 { "indices": "index_1,index_2" } 4. ": "[\"node1_ip:9300\", \"node2_ip:9300\",\"node3_ip:9300\", \"node4_ip:9300\"]" }, "restart_type 4)设置集群参数,将客户自建ES集群节点exclude掉(腾讯云后台操作) curl -H "Content-Type: application/json" -XPUT source_es_ip:9200 参考文档 1、ES官方文档 2、记一次在线跨集群迁移ES数据 3、Elasticsearch跨集群数据迁移之离线迁移 4、使用 COS 进行备份及恢复 问答 Q、客户自建集群在使用snapshot的方式迁移到腾讯云
线下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 带账号密码的数据迁移 password@192.168.1.2:9200/test --output=http://username@password@192.168.1.3:9200/test --type=内容类型4、
说明Bi Fang(毕方) 是为 Linux 开发的 Solr to ES 数据同步工具,并在 Centos 和 Ubuntu 上进行了积极测试。 ; ✧ 本工具有以下特点:以 Service 风格启停;高效时序翻页;支持断点续传;支持预估迁移耗时;支持观测迁移速率、趋势、进度;引入生产者-消费者独立线程模式,在密集时序场景下可以提升同步效率;支持观测每个 准备工作 ● 服务器准备准备一台可以访问 Solr 及 ES 实例的服务器,其网络环境应该是互通的; 2. 执行方式 2.1. url,形式需为 http://10.10.10.x:9200es_user es 用户名es_password es 密码collections solr ● 如发现 ES 数据条数超过了 Solr,则以 Solr 端的时间区间为准进行 checksum,如 Solr 端的时间区间内两端的数据一致,则认为数据一致。
相比于:reindex跨集群操作,elasticdump无需在ES集群的配置文件elasteicsearch.yml中设置授权迁移访问地址(白名单)。 1.2、使用方式 elasticsearch-dump是一款开源的ES数据迁移工具,github地址: https://github.com/taskrabbit/elasticsearch-dump ,可为 ES 集群地址 URL、文件或 stdout,可指定索引,格式为:{protocol}://{host}:{port}/{index} --output-index: 目标 ES 集群的索引 - -type: 迁移类型,默认为 data,表明只迁移数据,可选 settings, analyzer, data, mapping, alias --limit:每次向目标ES集群写入数据的条数,不可设置的过大 http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=data 4)
input中为http://<阿里云ES公网地址>:<端口>:output中为http://腾讯云ES实例 user 访问ES服务的用户名 password 访问ES服务的密码 index 指定同步索引名 ,如果用到_routing这个字段,就需要迁移_routing,需要在logstash的output里指定routing字段,值是"%{@metadata}"(意思是保持跟来源索引一致),但同时也要在input spm=a2c4e.10696291.0.0.2ffa19a4VAMGwN input { elasticsearch { hosts => "http://xxxxxxxx:9200" user spm=a2c4e.10696291.0.0.34dd19a4GGsCSh#_scheduling schedule => "* * * * *" 以上示例会每分钟触发抽取。 4) jvm.options 定义JVM的总堆空间的最小值和最大值,也就是内存使用量,默认是1G。 5) log4j2.properties log4j2库的相关设置。
1、reindex reindex 是 ES 提供的一个 api 接口,可以把数据从源 ES 集群导入到当前 ES 集群,实现集群内部或跨集群同步数据。 但仅限于腾讯云 ES 的实现方式(跨集群迁移需要elasticsearch.yml中加上ip白名单,并重启集群),所以腾讯云ES不支持 reindex 操作。 ES 集群 从源 ES 集群通过备份api创建数据快照,然后在目标 ES 集群中进行恢复 reindex是Elasticsearch提供的一个api接口,可以把数据从一个集群迁移到另外一个集群 网络要求 再迁移数据 复杂,需要提前在目标集群创建mapping和setting等,再迁移数据 简单 需要在目标ES集群中配置reindex.remote.whitelist参数,指明能够reindex的远程集群的白名单 适合场景 适用于数据量小的场景 适用于数据量一般,近实时数据传输 适用于数据量大,接受离线数据迁移的场景 本地索引更新Mapping实现索引层面迁移,或者跨集群的索引迁移
1、Snapshot 1.1、适合场景 1) 迁移速度快,适用数据量大的场景; 2) 需占用源集群磁盘空间,或者借助于对象存储,实现友商ES到腾讯云ES,或自建ES到腾讯云ES的数据迁移。 4)如果您的集群启用了Elasticsearch安全功能,则在备份数据时,必须授权快照API调用。 从自建 ES 集群迁移至腾讯云 ES 集群,可直接使用 fs 类型仓库,但需要在 ES 配置文件 elasticsearch.yml 中设置仓库路径。 集群迁移至腾讯云 ES 集群,或腾讯云内部的 ES 集群迁移,可使用对应云厂商提供的仓库类型,例如 AWS 的 S3、阿里云的 OSS 和腾讯云的 COS 等。 4) 移动源 ES 集群 snapshot 至目标 ES 集群的仓库 把源 ES 集群创建好的 snapshot 上传至目标 ES 集群创建好的仓库中。
alembic是用来做ORM模型与数据库的迁移与映射。 charset=utf8 (4)将models所在的目录路径添加到env.py,并指定target_metadata import sys,os # 1. #2.os.path.dirname(__file__):获取当前文件的目录 #3.os.path.dirname(os.path.dirname(__file__)):获取当前文件目录的上一级目录 #4. -m:本次迁移做了哪些修改 upgrade:将指定版本的迁移文件映射到数据库中,会执行版本文件中的upgrade函数 head:代表当前的迁移脚本的版本号 downgrade:会执行指定版本的迁移文件中的 if __name__ == '__main__': app.run() (3)初始化 alembic init alembic (4)alembic.ini sqlalchemy.url =
4、极大节约人力成本和运维成本之所以说能够极大节约人力成本和运维成本,主要原因是离线迁移方案涉及到的方方面面实在太多,比如需要提前跟业务同学沟通可接受停服时间和停服时长,大部分业务低峰期都是在凌晨,因此离线迁移对迁移时间要求比较苛刻 下图4是云上ES集群支持安装的插件列表。 4、需确保自建ES集群没有开启security通常情况下,客户的自建集群都是开源版本的,如果是基础版且开启了security的话,则需要先将security关闭后才能发起融合。 4)集群分离(客户侧操作)检查数据都迁移到云上节点后,客户需要将自建集群节点进行停机下线,将两个融合的集群进行分离。 4)集群分离(客户侧操作)这一步和7.0以下版本操作是一样的,具体操作详情可参考上面步骤。
因为当前使用的集群无法继续扩容了并且版本也较低(5.6.4), 所以需要把集群迁移到一个新的规模更大的集群,并且升级一下ES的版本,升级到6.4.3. 方案制定 迁移的需求是: 日志数据不能停止写入到ES 日志查询不受影响,延迟不能超过1分钟 参考之前写的关于数据迁移的文章Elasticsearch数据迁移与集群容灾,制定出的迁移方案为: 先使用logstash 或者snapshot全量同步一次数据到新集群中 使用logstash追平当天的日志索引后,查询入口切换到新的ES集群 日志写入入口切换到新的ES集群 实施步骤 1. {} }, "size": 1, "sort": [ { "@timestamp": "desc" } ] } 记执行上述查询获取到的时间戳为start. 4. 记录开始迁移的时间 在新的集群中执行以下查询,记录开始进行增量迁移的时间戳: GET es-runlog-2019-11-20/_search { "query": { "range":
snapshot/shani_backup1/snapshot_1 image.png 查看快照信息 PUT _snapshot/shani_backup1/snapshot_1 image.png 4、 查看 oss,可发现刚刚完成备份的快照 image.png 数据迁移 使用腾讯云提供的传输工具,将存储在阿里云 oss 中的镜像传输至腾讯云 cos 当前腾讯云支持的对象存储迁移源有如下几家: 阿里云 ,填写迁移信息 image.png 2、发起迁移,任务成功完成。 数据迁移的耗时除了考虑数据量大小,还需要考虑地域 image.png 3、查看腾讯云 cos,快照数据已迁移过来 image.png 数据恢复 1、在腾讯云的(目标)集群中创建一个备份仓库,注意:" 快照原理 es 的快照是基于 Lucene 实现,Lucene 快照针对的都是最后一个提交点的快照,没有增量概念,每一次都是全量快照,并且与快照相关的物理文件都不会删除;es 则负责数据拷贝、仓库管理、
MongoDB分片迁移原理与源码 异步删除数据 在from shard将迁移结果提交到config服务器成功后,from shard就会执行删除原数据的操作;如果迁移的参数"_waitForDelete 孤儿文档会造成数据的不一致,甚至一个数据块迁移了一部分然后被打断,后续相同的数据块重新迁移的时候,有可能造成迁移始终不成功的问题。 4.0 版本中迁移触发的阈值太低,导致迁移产生的性能问题太高 该问题主要从参考文献中得出来的结论。 详情可参考《MongoDB疑难解析:为什么升级之后负载升高了》 除此之外,由于整个迁移不是原子的,且存在异步过程,导致中间失败,产生其他问题的可能。 由数据迁移至MongoDB导致的数据不一致问题及解决方案
一.前言 IdentityServer4 4.x已经正式发布了,根据官方的 Release Note,3.1.x 到 4.x 的变更也是非常多,今天在将代码迁移到 4.x 遇到了一些问题在此记录下来,我使用的 IdentityServer4 的各种数据持久化,比如 ClientStore,ResourceStore 等,都是完全自定义的,非 EntityFramework,如果你是使用的 EF 那么官方提供了迁移脚本 4.x: ? 4.IResourceStore 的变化 ? 五.总结 以上就是我在 IdentityServer4 3.1.x 到 4.x 迁移所遇到的各个问题,所有问题都解决了并且成功运行。 官方开了一个 issues 记录迁移的问题,如果大家有难以解决的问题,不妨去提交:https://github.com/IdentityServer/IdentityServer4/issues/4592
有关迁移的入门资料,请查看 the topic guide. 数据迁移和多数据库 在使用多个数据库时,需要解决是否针对某个特定数据库运行迁移。例如,你可能 只 想在某个特定数据库上运行迁移。 在这个例子中,我们默认使用uuid.uuid4。 运行 makemigrations 命令。 编辑创建的迁移文件。 name='uuid', field=models.UUIDField(max_length=32, unique=True, default=uuid.uuid4) apps.get_model('myapp', 'MyModel') for row in MyModel.objects.all(): row.uuid = uuid.uuid4( model_name='mymodel', name='uuid', field=models.UUIDField(default=uuid.uuid4,