`

ElasticSearch Transaction Log

阅读更多

Transaction Log

正如前面提到过的,索引提交(commit)的开销实在太大,但是我们又必须通过提交操作来保证数据被可靠的持久化,如果拥有数据的节点突然崩溃的话,那么最后一次提交操作之后产生的数据操作将会丢失。

数据可靠性(Data Persistency)

ElasticSearch通过使用 transaction log (或预写日志(write ahead log)) 来解决这个问题,通过日志记录发生在索引上的各种操作,来保证就算没有调用commit操作也能保证数据的持久化。并且能够很自然的支持推送复制(push replication),因为我们能够让每个不同的shard都拥有 transaction log ,就算某些节点崩溃了,如果有必要,可以很轻松对日志操作进行重放(replay)。

Transaction log 周期性的将数据刷新(flushed)到磁盘,你可以通过 参数 来进行控制. 简单来说就是保存两次提交之间的连续数据操作的记录。

尽管你只运行了一个elasticsearch的服务节点(可能暂时不需要分布式),trasncation log也能够使你的es即使被强制结束进程( “kill -9” )也不会丢失任何数据。

当然,还不止这些!Transaction log还有一个重要的功能就是可以保证当你生成快照(shared gateway snapshot )、分片恢复( peer shard recovery )或是分片热迁移(shard “Hot” relocation)的时候,索引数据不会丢失。

Shared Gateway Snapshot

使用共享gateway时,会周期性的生成数据改变(changes)的快照 ( snapshots ) ,并存储到共享存储中(shared storage),并且transaction log也是持久化数据的一部分.

Peer Shard Reovery

当分片从一个节点迁移到另一个节点或者需要分配更多的分片(比如你 增加 了副本数) 的时候,数据会从某一个节点上取来进行恢复,而不是从gateway.

迁移数据时,首先我们保证不会删除Lucene的段文件(segment files),然后禁用flushing操作,这个时候保证不调用commit操作,然后开始迁移这些段文件,这个时候产生的索引改变,我们存放到transaction log中,一旦这个步骤结束(ie:索引索引文件拷贝完毕),我们开始对transaction log里面的日志在replica分片上进行重放操作(replay),完毕之后,我们就可以进行切换了,数据迁移成功!

迁移操作进行时,你仍然可以进行索引,仍然可以进行搜索,只有索引切换的时候会有一段很短的时间阻塞(blocking),但是直到切换前,迁移对你来说是完全透明的。

分享到:
评论

相关推荐

    ElasticSearch中文学习教程

    ### ElasticSearch中文学习教程知识点梳理 #### 一、总述 **1.1. 简介** ElasticSearch是一款基于Lucene构建的开源、分布式、RESTful搜索引擎。它专为云计算环境设计,具备实时搜索能力,且稳定、可靠、快速、...

    Elasticsearch如何保证数据不丢失1

    在Elasticsearch中,为了确保数据的持久性和可靠性,它引入了一种名为Transaction Log(简称Translog)的日志机制。 Translog是Elasticsearch内部用于记录所有未持久化的文档索引、更新和删除操作的关键组件。当...

    藏经阁-异步场景下的全栈溯源.pdf

    2. ElasticSearch:使用 ElasticSearch 来存储和分析日志。 3. APM:使用 APM 来监控应用性能。 4. Auto Instrument:使用 Auto Instrument 来自动监控应用性能。 5. Add TransactionId to Message Header:在消息头...

    KingbaseES的参数设置介绍(一).docx

    user 级别的参数是普通用户在线修改的参数,例如 statement_timeout、idle_in_transaction_session_timeout 等。这些参数控制着数据库的会话和事务管理。 查看参数可以使用以下命令: ``` kingbase=# SELECT name,...

    java提取并分析sqlserver的日志

    也可以考虑集成到现有的日志分析工具,如ELK(Elasticsearch、Logstash、Kibana)栈。 9. **性能优化**: 大规模日志处理时,要注意性能优化,比如批量读取文件、使用多线程并行处理等。 10. **源码和工具**: ...

    PHP商品秒杀问题解决方案实例详解【mysql与redis】

    $this->mysqli->begin_transaction(); $result=$this->mysqli->query("SELECT num FROM goods WHERE id=1 LIMIT 1 FOR UPDATE"); $row=$result->fetch_assoc(); $num=intval($row['num']); if($num>0){ usleep(100)...

    java图书管理系统

    这通常涉及到索引和查询优化,例如使用Lucene或Elasticsearch来建立全文搜索引擎,提高检索效率和准确性。 另外,为了保证数据一致性,系统会采用事务管理。Java的JTA(Java Transaction API)或Spring的声明式事务...

    spring-boot-reference.pdf

    30.6. Elasticsearch 30.6.1. Connecting to Elasticsearch by Using Jest 30.6.2. Connecting to Elasticsearch by Using Spring Data 30.6.3. Spring Data Elasticsearch Repositories 30.7. Cassandra 30.7.1. ...

    基于springboot的二手手机回收系统源码.zip

    同时,为了提高用户体验,可能会使用Elasticsearch进行全文搜索。 3. 订单管理:用户提交回收请求、商家报价、订单确认等流程。这里涉及到事务管理,SpringBoot配合Spring Transaction可以确保数据的一致性。 4. ...

    基于SpringBoot的购物中心系统源码.zip

    同时,ELK(Elasticsearch, Logstash, Kibana)堆栈或Prometheus+Grafana等监控工具可以实时展示系统运行状态。 8. **安全模块(security)**:可能集成了Spring Security或OAuth2,提供用户认证和授权功能,保护系统...

    连续性提升

    日志框架如Log4j、Logback提供详细的日志记录,而ELK(Elasticsearch, Logstash, Kibana)或 Splunk 则帮助收集、分析和可视化日志数据。 6. **微服务架构**:微服务化是一种构建大型应用的方式,每个服务独立部署...

    零银行

    12. **日志与监控**:使用Logback或Log4j记录系统日志,配合ELK Stack(Elasticsearch、Logstash、Kibana)或Prometheus+Grafana进行监控和分析。 通过对"零银行"项目的深入学习和实践,开发者可以掌握一套完整的...

    Payment-Billing

    11. **监控与报警**:使用如Prometheus和Grafana进行性能监控,ELK(Elasticsearch、Logstash、Kibana)堆栈用于日志分析,而发送报警通知可能依赖于Sentry或PagerDuty。 以上只是"Payment-Billing"系统开发中的一...

Global site tag (gtag.js) - Google Analytics