作者介绍 yinanwu(吴沂楠),腾讯云 Elasticsearch 高级开发工程师 本文介绍通过开源社区提供的solr-to-es迁移工具,将Solr节点中的文档迁移到腾讯云ES中的方法。 使用限制 solr-to-es迁移工具仅支持迁移到腾讯云ES 6.4.3、6.8.2版本,迁移完成后可以在控 制台通过升级ES集群大版本升级到更高版本。 在CVM上安装Python 3版本(如3.7.3),通过pip安装elasticsearch 6.8.2版本、 pysolr 3.9.0版本: pip3 install elasticsearch ==6.8.2pip3 install pysolr==3.9.0 在CVM上拉取solr-to-es源码,并安装: git clone https://github.com/o19s/solr-to-es.gitcd solr-to-espython3 setup.py install 使用solr-to-es迁移数据,下面的语句把solr里的collections中通过*:*查询到的文档分页导入到腾讯云ES的指定的索引和
ES对比Solr优势ES在高级查询上优化更多更高效ES本身是分布式的,而Solr需要配合Zookeeper使用实现分布式ES创建索引更快,而Solr创建索引会产生阻塞实时建立索引时,ES没有阻塞写入数据更快 )Python-3.6.8ES-7.14.2Solr安装1. 安装yum install gitgit clone https://github.com/o19s/solr-to-es.gitcd solr-to-espython3 setup.py install 依赖安装ES依赖安装对应版本原本安装的pysolr-3.9.3发生了依赖冲突,降低至3.6.0正常可用pip3 install elasticsearch==7.14.2pip3 install pysolr ==3.6.0开始迁移solr-to-es --solr-query "*:*" http://127.0.0.1:8983/solr/my_core http://es-ip:9200 --es-user
然而,ES有个众所周知的‘硬伤’:一旦字段的mapping设定,就无法直接修改! 这意味着每次模型升级带来的字段调整,都绕不开一个耗时费力的过程——重建索引并迁移数据(Reindex)。 ": index_name}, "dest":{"index": new_index_name}}# 关键:wait_for_completion=False 表示异步执行response = es.reindex task_status['completed']: # 检查任务是否完成 break time.sleep(60) # 等待1min再次检查2.性能飞跃:ReIndex调优三板斧(实测提速3倍 在我们的数据集上,使用以下操作后再进行reindex能有接近3倍的速度提升,千万量级的索引,可以在2~3个小时刷完。关闭副本分片 (释放写入压力):副本分片是主分片的完整拷贝,用于数据冗余和高可用。 下次当你面对恼人的ES mapping变更时,不必再头疼停机窗口和漫长的等待时间了。用好这些技巧,让你的索引升级变得高效且优雅吧!
背景 在之前的文章Elasticsearch跨集群数据迁移之离线迁移中,我们介绍了如何在离线场景下把自建的ES集群或者在其它云厂商购买的ES集群迁移至腾讯云的ES, 但是如果在迁移过程中业务不能中断或者不能够暂停写操作 2020年5月份,腾讯云ES上线的新版本中,对集群节点所在的网络进行了优化,使得集群节点能够反向访问到用户VPC下的ip,因此采用集群融合的方式可以实现在线不停服地迁移自建ES集群至腾讯云ES。 ES的节点上,最后剔除掉自建ES的节点,实现平滑迁移。 ES控制台升级到白金版 [60e50a8aa55493e74ae39f9f52a906b3.png] 选择和自建ES集群节点所在的VPC [902427662fb5a58517482d61ab53df0b.png _name属性为自建ES集群节点的名称列表 观察数据迁移情况 数据迁移完毕后,在业务侧修改ES集群地址为腾讯云ES集群的vpc内网地址(先验证vpc内网地址访问无误,然后在业务压力小时切换ES集群地址)
方案名称 ES多轮分批融合迁移方案(ES索引级别融合迁移方案) 图片 方案风险 集群融合期间,云上集群不可进行变更,比如升降配置、版本升级,否则会有集群不可用的风险; 集群融合期间,不可新建索引,否则分片会被分配到云上 环境配置 自建ES环境 ● 版本 Elasticsearch版本:7.7.0 ● 配置 节点数量:3 内存:4G 硬盘:高性能云盘 50G CPU核心数:2 云上ES环境 ● 版本 Elasticsearch 自建集群情况 集群情况: 一共3个节点 图片 索引情况: 一共20个索引,数据在持续写入 图片 3. : curl -H "Content-Type: application/json" -XPUT 10.0.0.10:9200/es_index-1,es_index-2,es_index-3,es_index -15,es_index-16,es_index-17,es_index-18,es_index-19" } 图片 备份成功: 图片 3、在云上主集群创建快照仓库 图片 4、发起快照恢复 POST _snapshot
ECMAScript es3(ECMAScript 1999) 1999年,ECMAScript第三个版本 es4(ECMAScript 2007) ECMAScript第四个版本,废弃 es5(ECMAScript 在ES2015中,非对象的参数将被强制转换为一个对象。 Promises es7(ECMAScript 2016) 2016年,ECMAScript第七个版本 Array.prototype.includes() es8(ECMAScript 2017) 假设我们要遍历如下对象obj的所有值: const obj = {a: 1, b: 2, c: 3}; 不使用Object.values() :ES6 const obj = {a: 1, b: 2, () :ES8 const obj = {a: 1, b: 2, c: 3}; const values = Object.values(obj); console.log(values);//[1,
:9200/index_name --output=http://dest_es_ip:9200/index_name --type=mapping 3)迁移索引的doc数据: elasticdump s3:AWS S3 对象存储,快照存放于 S3 中,以插件形式支持,安装插件 repository-s3。 region:COS Bucket 地域,此地域必须与 ES 集群为同一地域。地域编码可参考 地域和可用区。 base_path:备份目录。 3. 查看快照恢复状态 GET index_1/_recovery 3、Logstash迁移 Logstash是Elastic 公司提供的一款专门用于应用程序日志、事件的传输、处理、管理的产品。 参考文档 1、ES官方文档 2、记一次在线跨集群迁移ES数据 3、Elasticsearch跨集群数据迁移之离线迁移 4、使用 COS 进行备份及恢复 问答 Q、客户自建集群在使用snapshot的方式迁移到腾讯云
Configuration File for keepalived global_defs { router_id LVS_slave01 } vrrp_instance VI_3 { state MASTER interface eth0 virtual_router_id 3 priority 85 advert_int 1 authentication
线下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# 带账号密码的数据迁移
再次检查,确认备份数据 这是最后一次备份原数据的机会 ---- 切换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 来观察i
说明Bi Fang(毕方) 是为 Linux 开发的 Solr to ES 数据同步工具,并在 Centos 和 Ubuntu 上进行了积极测试。 ; ✧ 本工具有以下特点:以 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
时隔一年多,gevent 的作者 Denis Bilenko 终于从创业的百忙之中,抽出时间打算 review 我在 2012 年的时候完成的 gevent 到 Python 3 的迁移工作。 我尝试了做 merge,发现结果不是很理想,再加上对当时修改又不是很满意了,于是乎,我选择了参考原来的改动,重新迁移一次。 插叙一段小插曲。 接下来我分段介绍我这几个月用业余时间几乎做完的第二次迁移工作,希望能对也在做向 Python 3 迁移工作的同学们有点帮助。 Denis 对迁移工作的要求是,用同一套代码,同时支持 Python 2.6, 2.7 和 3.3。 这个美好的功能在这次 gevent 的迁移最后引来了好大一个麻烦,等讲到时再细说。 (未完待续,附项目地址:https://github.com/fantix/gevent)
相比于: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集群写入数据的条数,不可设置的过大 ,以免bulk队列写满 3) 迁移单个索引 以下操作通过elasticdump命令将集群172.16.0.39中的companydatabase索引迁移至集群172.16.0.20。
Logstash 1.1、适合场景 数据体量不大,需要在线数据同步的场景(实际使用的是scroll,是执行瞬间的es快照,近实时的数据同步)。 1.3、Logstash处理流程 Logstash处理流程大致可分为3个阶段,Input---->Filter---->Output(数据采集----->数据分析/解析---->数据输出),具体的处理流程可以查看下图 3) 性能对比: PQ性能要低于内存中的queue的,但是差别不是很大。如果不是特殊需求,建议打开PQ。 input中为http://<阿里云ES公网地址>:<端口>:output中为http://腾讯云ES实例 user 访问ES服务的用户名 password 访问ES服务的密码 index 指定同步索引名 ,如果用到_routing这个字段,就需要迁移_routing,需要在logstash的output里指定routing字段,值是"%{@metadata}"(意思是保持跟来源索引一致),但同时也要在input
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的数据迁移。 1.3、腾讯云ES备份到COS使用方式 snapshot api 是 Elasticsearch用于对数据进行备份和恢复的一组 api 接口,可以通过 snapshot api 进行跨集群的数据迁移,原理就是从源 s3:AWS S3 对象存储,快照存放于 S3 中,以插件形式支持,安装插件 repository-s3(https://www.elastic.co/guide/en/elasticsearch/plugins 从自建 ES 集群迁移至腾讯云 ES 集群,可直接使用 fs 类型仓库,但需要在 ES 配置文件 elasticsearch.yml 中设置仓库路径。 集群迁移至腾讯云 ES 集群,或腾讯云内部的 ES 集群迁移,可使用对应云厂商提供的仓库类型,例如 AWS 的 S3、阿里云的 OSS 和腾讯云的 COS 等。
3、对版本要求较低,只需云上集群版本不低于自建集群即可在线融合迁移对集群版本的要求是只需要云上集群版本不低于自建集群版本即可。 图片3、需确保自建ES集群和云上集群网络互联互通这里说的网络互联互通是要求云上的节点能够可以直接访问到自建集群的节点,同样自建集群节点也能够可以直接访问到云上集群节点,中间不可以有任何代理Proxy。 9300\", \"10.0.0.xx:9300\",, \"10.0.0.xx:9300\"]" }, "restart_type": "full_cluster_restart"}'3) /bin/elasticsearch-node detach-cluster (选择y)3)数据迁移(腾讯云侧操作)这一步和7.0以下版本操作是一样的,主要目的是让分片从自建集群节点上逐步平滑迁移到云上节点上来 3、客户端在融合前需确保已关闭嗅探功能客户端开启嗅探Sniff功能是为了能够让Client端自动发现集群侧ES节点的动态变更。
三、迁移 原则上迁移也只需要以下几步操作: 在新的Jenkins服务器上安装配置好Jenkins(先不要启动Jenkins') 停掉老的Jenkins服务,并将老Jenkins服务器上的$JENKINS_HOME 跑一个项目,测试迁移是否成功 由于每个公司Jenkins的配置不一样,所以在步骤a中配置也不一样。这里以我们公司Jinkensi环境为例,看看我们配置Jenkins需要做哪些事情。 Jenkins启动后去更改 B、拷贝settings.xml文件 在Jenkins服务器上随便运行一个mvn命令,例如#mvn -v,这样会在家目录下生成一个.m2的隐藏目录 drwxr-xr-x 3
因为当前使用的集群无法继续扩容了并且版本也较低(5.6.4), 所以需要把集群迁移到一个新的规模更大的集群,并且升级一下ES的版本,升级到6.4.3. 方案制定 迁移的需求是: 日志数据不能停止写入到ES 日志查询不受影响,延迟不能超过1分钟 参考之前写的关于数据迁移的文章Elasticsearch数据迁移与集群容灾,制定出的迁移方案为: 先使用logstash 或者snapshot全量同步一次数据到新集群中 使用logstash追平当天的日志索引后,查询入口切换到新的ES集群 日志写入入口切换到新的ES集群 实施步骤 1. 3. 记录开始迁移的时间 在新的集群中执行以下查询,记录开始进行增量迁移的时间戳: 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、在腾讯云的(目标)集群中创建一个备份仓库,注意:" index_(.+)", "rename_replacement": "restored_index_$1" } image.png 目标集群中可看到这个索引已存在 image.png 注意:ES 快照原理 es 的快照是基于 Lucene 实现,Lucene 快照针对的都是最后一个提交点的快照,没有增量概念,每一次都是全量快照,并且与快照相关的物理文件都不会删除;es 则负责数据拷贝、仓库管理、