背景描述:
在某婚恋客户合作过程中,由于以前该客户的所有基础架构环境全部部署在客户自己的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方式,实现数据的迁移。
https://www.elastic.co/guide/en/elasticsearch/reference/5.6/shards-allocation.html
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。