`
kfcman
  • 浏览: 400051 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ElasticSearch的部署、同步与调优

 
阅读更多

ElasticSearch是一个强大的搜索服务器,基于Apache Lucene的全文搜索引擎开发,具有高性能、分布式和零配置的优点。在当前的项目中,我们希望ES能承担亿级文档的搜索,而ES也证明了即便面对这样的数据规模,也能实现十分迅速的搜索响应。

概念

  • 节点(Node):节点是一个ES的实例,一般一台主机上部署一个节点-
  • 集群(Cluster):集群由若干节点组成,和任意节点的通信等价于和集群的通信
  • 分片(Shard):一个索引会分成多个分片存储,分片数量在索引建立后不可更改
  • 副本(Replica):副本是分片的一个拷贝,目的在于提高系统的容错性和搜索的效率
  • 索引(Index):类似数据库的库
  • 类型(Type):类似数据库的表
  • 文档(Document):类似数据库的行,包含一个或多个Field
  • 字段(Field):搜索的最小单元,可通过Mapping定义不同的属性(比如可否被搜索)

部署

ElasticSearch 1.5.0版本为例

ES的使用很简单,从官网下载压缩包后,解压后输入如下指令:

./bin/elasticsearch -d --cluster.name [your_cluster_name] --node.name [your_node_name]

一旦在多台主机上启动拥有同一个cluster.name的ES实例,它们会自动组成一个集群。

elasticsearch-head

elasticsearch-head是一个必装的插件,它提供了一个web界面,显示集群和索引的状态,同时具备浏览和搜索文档的功能。只需要通过ES的plugin指令安装就OK了:

./bin/plugin -install mobz/elasticsearch-head

同步

通常线上系统都不会使用ES作为主存储,从主存储创建索引的效率是我们关心的。ES的bulk API能支持批量操作,大大提升了创建索引的效率。以下是使用pyelasticsearch(非官方的一个Python客户端)批量创建索引的范例:

from pyelasticsearch import ElasticSearch
from pyelasticsearch import bulk_chunks

es = ElasticSearch()

def documents():
    for _doc in docs:
        yield es.index_op(doc=_doc, id=doc['id'])

for chunk in bulk_chunks(documents(), docs_per_chunk=500, bytes_per_chunk=10000):
    es.bulk(chunk, index='index-test', doc_type='doc')

单机索引200万条记录的耗时约10分钟。

中文

ES支持中文的前提是安装正确的分词组件,比如elasticsearch-analysis-ik。但貌似该组件的最新版本(1.2.9)不支持plugin指令直接安装,只能通过Maven重新编译了:

git clone https://github.com/medcl/elasticsearch-analysis-ik.git --depth 1
cd elasticsearch-analysis-ik/
# 真心希望你的网络棒棒嗒
mvn package
unzip ./target/releases/elasticsearch-analysis-ik-1.2.9.zip

zip解压得到5个jar包:

  • elasticsearch-analysis-ik-1.2.9.jar
  • httpclient-4.3.5.jar
  • httpcore-4.3.2.jar
  • commons-logging-1.1.3.jar
  • commons-codec-1.6.jar

返回ES目录,新建路径./plugins/analysis-ik并把上述jar包全部移进去。
第二步,把elasticsearch-analysis-ik/config/ik文件夹(IK自带的词典)复制到ES目录的./config路径下。
第三步,在./config/elasticsearch.yml文件的最后加上:

index:
  analysis:
    analyzer:
      ik:
          alias: [news_analyzer_ik,ik_analyzer]
          type: org.elasticsearch.index.analysis.IkAnalyzerProvider

index.analysis.analyzer.default.type : "ik"

至此大功告成。注意配置分词组件必须在创建索引之前,否则是无效的。

调优

ES的调优分两个层面,一是Java层面的调优,包括加大JVM的可用内存及单线程内存。

对Unix系统,可修改./bin/elasticsearch.in.sh文件:

# 一般分配主机1/4-1/2的内存
if [ "x$ES_MIN_MEM" = "x" ]; then
    ES_MIN_MEM=12g
fi
if [ "x$ES_MAX_MEM" = "x" ]; then
    ES_MAX_MEM=12g
fi

JAVA_OPTS="$JAVA_OPTS -Xms${ES_MIN_MEM}"
JAVA_OPTS="$JAVA_OPTS -Xmx${ES_MAX_MEM}"
# 线程大小, ES单线程承载的数据量比较大
JAVA_OPTS="$JAVA_OPTS -Xss128m"

调优的第二个层面是ES本身的调优,修改./config/elasticsearch.yml文件,关键的项目如下所示:

# 分片数量,推荐分片数*副本数=集群数量
# 分片会带来额外的分割和合并的损耗,理论上分片数越少,搜索的效率越高
index.number_of_shards: 20
# 锁定内存,不让JVM写入swapping,避免降低ES的性能
bootstrap.mlockall: true
# 缓存类型设置为Soft Reference,只有当内存不够时才会进行回收
index.cache.field.max_size: 50000
index.cache.field.expire: 10m
index.cache.field.type: soft
分享到:
评论

相关推荐

    canal实现mysql到ES数据实时同步

    MySQL到Elasticsearch(ES)的数据实时同步是大数据领域中常见的需求,用于实现实时数据分析和检索。Canal是一款由阿里巴巴开源的数据库增量日志抽取工具,它能够监听MySQL的数据变更,然后将这些变更实时地同步到...

    Elasticsearch数据库全套教程+安装部署+框架原理+开发调用+性能调优等

    Elasticsearch数据库:Elasticsearch与Kubernetes集成技术教程.pdf Elasticsearch数据库:Elasticsearch在实时日志分析中的应用.pdf ...Elasticsearch数据库:分布式搜索与数据同步技术教程.pdf Elas

    基于canal的mysql和elasticsearch实时同步源代码.zip

    MySQL到Elasticsearch的实时数据同步是大数据领域中常见的需求,尤其在日志分析、监控系统和全文搜索引擎等场景下。Canal是阿里巴巴开源的一款针对MySQL数据库的数据增量订阅与消费组件,它能够实时捕获并解析MySQL...

    canal-mysql-elasticsearch-sync20201010.rar

    《阿里Canal与Elasticsearch数据同步实践》 在当今大数据时代,实时数据同步成为企业信息系统中的关键一环。阿里Canal作为一款高效、轻量级的MySQL数据库增量日志订阅与消费组件,广泛应用于数据实时同步场景。而...

    Elasticsearch 学习资料集合

    文档可能涵盖了设置Elasticsearch-HBase River(桥梁)的步骤,数据同步机制,以及可能遇到的问题和解决方案。 "Elasticsearch技术解析与实战.pdf" 是一份深入的技术指南,它可能涵盖Elasticsearch的索引结构、查询...

    KingbaseES V8R2 集群部署手册

    3. **数据复制与同步**:KingbaseES采用日志复制技术,主节点将事务日志发送到备节点,备节点根据日志进行数据更新。这种实时复制方式能确保数据一致性,同时提供了快速故障恢复的能力。 4. **故障检测与切换**:...

    02-EElasticsearch 升级和双活架构实践 - 徐胜 上海 2025.5.25

    - **方案简介**:在两个数据中心分别部署一套完整的 Elasticsearch 集群,并通过专门的同步工具或自定义脚本实现数据的双向同步。 - **优点**:灵活性高,可以根据实际需求调整同步策略。 - **挑战**:实现复杂度较...

    elasticsearch实战及使用ppt,私有资源自己 看的

    1. **分布式**:Elasticsearch可以在多台机器上部署,形成集群,提供高可用性和可扩展性。 2. **实时**:尽管“准实时”,但ES的索引和搜索响应时间非常快。 3. **稳定性**:经过了广泛的社区测试和企业级验证,ES在...

    ElasticSearch写入原理及优化.docx

    Elasticsearch(ES)是一种流行的分布式搜索引擎和分析引擎,它以高效、实时的特性而闻名。本文主要探讨了Elasticsearch的写入、读取、检索数据的底层原理以及性能调优策略。 **Elasticsearch 写入数据流程** 1. ...

    ES123123123

    根据提供的信息,我们可以深入探讨如何进行Elasticsearch(简称ES)集群的搭建与部署。Elasticsearch是一款基于Lucene的开源搜索和分析引擎,适用于所有类型的数据,特别是文本数据。它能够提供分布式、多租户能力的...

    【朝夕教育】2021春招ElasticSearch高频面试题1

    Elasticsearch 是一个分布式、开源的搜索引擎,广泛应用于日志分析、实时数据分析和全文检索等场景。在面试中,理解其核心概念和技术细节是非常重要的。下面将针对提供的面试题进行详细解答。 1. **Elasticsearch ...

    canal 同步数据 从mysql到kafka

    - **工作原理**:通过监听MySQL的binlog(二进制日志),解析出数据变更事件,然后将这些事件推送到下游消费者,如Kafka、Elasticsearch等。 - **特性**:支持GTID(全局事务ID)模式,能够实现无间隙的数据同步;...

    zookeeper部署所需包

    ELK则是Elasticsearch、Logstash和Kibana三者的缩写,它们共同构成了一个强大的日志分析和可视化解决方案。 在“zookeeper部署所需包”中,Zookeeper的安装和配置是核心内容。以下将详细解释Zookeeper的部署步骤和...

    Laravel开发-elasticquent

    6. **事件监听**:通过监听Eloquent的生命周期事件,如`created`、`updated`、`deleted`,Elasticquent能自动保持Elasticsearch中的数据与数据库同步。 7. **自定义映射**:开发者可以自定义模型字段在Elastic...

    Linux运维集群部署实战视频老段-5

    - **日志分析**:利用Logstash、Elasticsearch等工具收集并分析集群产生的日志,及时发现并解决问题。 - **容灾备份**:制定合理的数据备份策略,定期进行数据备份和灾难恢复演练。 #### 五、最佳实践案例分享 - **...

    KingbaseES.pdf

    人大金仓KingbaseES是一款由中国自主研发的数据库管理系统,v8版本是该软件的一个重要更新,它支持了广泛的功能和特性,包括对SQL语言的深入支持、服务器编程、客户端编程、数据库管理、高可用配置、性能调优、...

    canal.adapter-1.1.6.zip

    1. **Canal组件**:Canal是一款基于数据库Binlog解析的实时数据同步工具,可以实现MySQL到其他数据库(如MongoDB、Elasticsearch、HBase等)或者应用程序(如消息队列、大数据平台)的数据实时同步。 2. **适配器...

    Dubbo分布式系统架构支付系统项目工程全套源码(含数据库和部署脚本等等).zip

    5. **软件/插件**:项目中可能包含了用于构建、测试、监控的各类工具或插件,如Maven或Gradle用于构建管理,JUnit或Mockito用于单元测试,JMeter用于性能测试,以及Elasticsearch、Logstash、Kibana(ELK)堆栈用于...

    canal.deployer_1.1.2.zip

    通过解析MySQL的binlog日志,Canal可以捕获到数据库中的增删改查操作,进而将这些变更事件传递给订阅者,如消息队列、Elasticsearch、HBase等。 2. **Linux环境准备**: 在Linux环境中部署Canal Deployer前,确保...

Global site tag (gtag.js) - Google Analytics