首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >某项目中客户自建Elastic Search向腾讯云上迁移总结(一)

某项目中客户自建Elastic Search向腾讯云上迁移总结(一)

原创
作者头像
张小波
修改2018-10-29 18:32:27
1.1K1
修改2018-10-29 18:32:27
举报
文章被收录于专栏:云之翼云之翼

背景描述:

在某婚恋客户合作过程中,由于以前该客户的所有基础架构环境全部部署在客户自己的IDC中,但是该IDC建设于10年前,IDC已经使用很久了,而且是运营商IDC,外网带宽有限,资源机架扩展有很大局限,还出现过多次DDOS攻击,而且客户的技术团队人员基本都在深圳,在北京还配备了一个单独的机房本地巡检维护团队,因此该客户基于云的很多好处,考虑将业务迁移到腾讯云。

本文主要聚焦于ElasticSearch的迁移,客户在IDC现有环境自建ElasticSearch分片集群(数据量500G以内),迁移到云上的虚拟机自建ES集群。

ELK生态基本介绍:

ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。

Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。如下是一种常见的ELK架构:

由于本文聚焦于ElasticSearch本身和其上数据的迁移,因此ELK本身不展开更多描述,网上有更详尽的描述。

ElasticSearch基本结构和数据存储:

 索引(Index)

   ES将数据存储于一个或多个索引中,索引是具有类似特性的文档的集合。类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据库,或者一个数据存储方案(schema)。索引由其名称(必须为全小写字符)进行标识,并通过引用此名称完成文档的创建、搜索、更新及删除操作。一个ES集群中可以按需创建任意数目的索引。

 类型(Type)

   类型是索引内部的逻辑分区(category/partition),然而其意义完全取决于用户需求。因此,一个索引内部可定义一个或多个类型(type)。一般来说,类型就是为那些拥有相同的域的文档做的预定义。例如,在索引中,可以定义一个用于存储用户数据的类型,一个存储日志数据的类型,以及一个存储评论数据的类型。类比传统的关系型数据库领域来说,类型相当于“表”。

 文档(Document)

   文档是Lucene索引和搜索的原子单位,它是包含了一个或多个域的容器,基于JSON格式进行表示。文档由一个或多个域组成,每个域拥有一个名字及一个或多个值,有多个值的域通常称为“多值域”。每个文档可以存储不同的域集,但同一类型下的文档至应该有某种程度上的相似之处。

ElasticSearch存储结构(很重要):

分片(Shard)和副本(Replica)    ES的“分片(shard)”机制可将一个索引内部的数据分布地存储于多个节点,它通过将一个索引切分为多个底层物理的Lucene索引完成索引数据的分割存储功能,这每一个物理的Lucene索引称为一个分片(shard)。每个分片其内部都是一个全功能且独立的索引,因此可由集群中的任何主机存储。创建索引时,用户可指定其分片的数量,默认数量为5个。 

   Shard有两种类型:primary和replica,即主shard及副本shard。Primary shard用于文档存储,每个新的索引会自动创建5个Primary shard,当然此数量可在索引创建之前通过配置自行定义,不过,一旦创建完成,其Primary shard的数量将不可更改。Replica shard是Primary Shard的副本,用于冗余数据及提高搜索性能。每个Primary shard默认配置了一个Replica shard,但也可以配置多个,且其数量可动态更改。ES会根据需要自动增加或减少这些Replica shard的数量。

   ES集群可由多个节点组成,各Shard分布式地存储于这些节点上。

ES可自动在节点间按需要移动shard,例如增加节点或节点故障时。简而言之,分片实现了集群的分布式存储,而副本实现了其分布式处理及冗余功能。

此部分内容请参考:http://www.cnblogs.com/wenBlog/p/8482326.html

Elastic数据的读出与写入:

ES提供restful接口API和客户端以及工具交互,如下所示:

curl -X<VERB> '<PROTOCOL>://<HOST>/<PATH>?<QUERY_STRING>' -d '<BODY>'

VERB:HTTP协议的请求方法,常用的有GET、POST、PUT、HEAD以及DELETE;

PROTOCOL:协议类型,http或https;

HOST:ES集群中的任一主机的主机名;

PORT:ES服务监听的端口,默认为9200;

QUERY_STRING:查询参数,例如?pretty表示使用易读的JSON格式输出;

BODY:JSON格式的请求主体;

通过前面介绍,总结几种常见的ElasticSearch迁移方式:

ElasticSearch迁移:

1.ElasticSearch Reindex/logstash方式迁移,本质是将ES中的数据读出,再写入的过程,由于本文中没有使用该方式,暂时不详细介绍。

2.使用ES集群的Rebalance方式,实现数据的迁移。

  • 在腾讯云构建一套与idc elasticsearch版本一致的es集群;
  • 配置idc机房的elasticsearch的数据allocation参数,对数据迁移进⾏行限流,主要参数包括:
    1. cluster.routing.allocation.enable 该参数用来控制允许分配哪种分片。默认是 all,可选项还包括 primaries 和 new_primaries,none 则彻底拒绝分片。
    2. cluster.routing.allocation.allow_rebalance 该参数用来控制什么时候允许数据均衡。默认是 indices_all_active,即要求所有分⽚片都正常启动成功以后,才可以进行数据均衡操作,否则的话,在集群重启阶段,会浪费太多流量了。
    3. cluster.routing.allocation.cluster_concurrent_rebalance 该参数用来控制集群内同时运行的数据均衡任务个数,默认是 2 个,如果有节点增减,且集群负载压力不高的时候,可以适当加大。 参考:

https://www.elastic.co/guide/en/elasticsearch/reference/5.6/shards-allocation.html

  • 将腾讯云的elasticsearch服务加入到idc的elasticsearch集群,关键配置项:discovery.zen.ping.unicast.hosts,不需要重启elasticsearch的集群即可加入;等待部分数据自动迁移到腾讯云的elasticsearch节点,备注:数据在没有人工干预的情况下,不会全部迁移到腾讯云的节点;
  • 通过elasticsearch的api,分单台或者分批次下线idc的elasticsearch节点,api为:cluster.routing.allocation.exclude._ip,备注:此处ip可以是list,但是只执行最后一次的exclude,所以如果节点数据未彻底迁移完成,请勿执行第二次的下线节点操作;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档