Skip to main content

3 posts tagged with "最佳实践"

View All Tags

· 8 min read
Ethan
引言

自己搭建Elasticsearch确实是一件相对简单的事情,特别是对于有一定技术基础的人来说。通过下载适当的安装包,按照官方文档或者一些优秀的教程进行步骤操作,就可以比较轻松地搭建起一个基本的Elasticsearch集群。

然而,尽管搭建过程可能相对简单,但在实际应用中,烦恼也会随之而来。

Elasticsearch on Windows

很多初学者为了图方便把Elasticsearch生产集群部署在windows上,导致集群的性能低下和不稳定性增加。

内核差异: Windows和Linux操作系统在内核设计和优化上存在显著差异。Linux内核针对服务器工作负载进行了优化,包括网络、磁盘I/O等方面,而Windows则更多地关注桌面用户和通用应用程序的需求。

文件系统: Elasticsearch对文件系统的使用非常频繁,包括索引数据的存储和搜索过程中的临时文件创建等。Linux的文件系统(如Ext4)在处理大量小文件时通常比Windows的NTFS文件系统更高效。

线程管理: Linux内核采用了完全抢占式调度模型,即任何时刻都可以强制性地中断当前运行的线程,并调度其他线程执行。这种调度模型可以更好地利用多核处理器,并提高系统的响应速度和并发性能。而Windows内核的线程调度算法可能更为保守,并不能适应Elasticsearch的高并发处理。

内存管理:Linux操作系统具有高度灵活的内存管理和调度机制。例如虚拟内存、页面置换算法、内存压缩等,以优化内存的使用和管理。Linux内核可以根据系统的负载情况和应用程序的需求,动态地分配和回收内存资源,以确保系统的性能和稳定性。Windows操作系统的内存调度策略和页面置换算法可能较为传统,并未采用最新的优化算法,从而会限制Elasticsearch对内存的利用率和性能。

结论

综合考虑 Linux操作系统更适合作为运行生产级Elasticsearch的平台,能够为Elasticsearch提供更好的性能和稳定性支持。

Linux部署优化

讲完了windows,在Linux下自建Elasticsearch时,也会面临一些潜在的挑战和坑,特别是对于初学者或者缺乏经验的用户。Linux内核有许多参数可以调整,以优化系统的性能和稳定性。例如,可以调整文件描述符限制、内核参数(如vm.max_map_count、vm.swappiness等)和TCP参数等。

  • 文件系统选择:在选择文件系统时,可以考虑使用性能较好的文件系统,如XFS或者ext4。同时,调整文件系统的挂载选项和缓冲策略,以提高磁盘IO性能。
  • JVM调优:Elasticsearch运行在Java虚拟机(JVM)上,因此需要对JVM进行调优以提高其性能。可以调整JVM的堆内存大小、垃圾回收器类型和参数,以及线程栈大小等。
  • Swappiness设置:在Linux系统上,可以通过调整swappiness值来控制内存页交换的频率。对于Elasticsearch来说,通常希望尽量减少内存交换,因此可以将swappiness值调整为较低的值。
  • 网络调优:针对Elasticsearch集群的通信和数据传输,可以调整Linux系统的网络参数以优化网络性能。这包括调整TCP缓冲区大小、TCP拥塞控制算法和网络队列大小等。
  • 安全设置:在优化操作系统时,也需要考虑安全性。确保系统的防火墙规则、用户权限和访问控制设置是合理的,并且系统是最新的补丁和安全更新。
  • 定时任务和系统服务:确保系统中没有不必要的定时任务和系统服务运行,以减少对系统资源的占用。可以禁用不需要的服务或者将其调整为按需启动。
  • 监控和日志管理:部署监控工具来实时监控系统的运行状况,并配置日志管理策略以便及时发现和解决问题。这包括收集和分析Elasticsearch的日志、指标和事件等。

总结

总结来说,对于许多不太熟悉的用户来说,选择更为专业的Elasticsearch Serverless是一个更好的选择。

  • 简化管理: 用户无需自行搭建和管理Elasticsearch集群,减少了部署和维护的工作量,降低了运维成本。
  • 弹性伸缩: Serverless架构可根据实际需求自动伸缩,无需手动调整集群规模,提供了更高的弹性和灵活性。
  • 成本节约: 用户仅需根据实际使用的资源量付费,避免了长期绑定资源造成的资源浪费,节约了成本。
  • 高可用性: Elasticsearch Serverless通常由云服务提供商管理,具备高可用性和可靠性,降低了单点故障的风险。
  • 专注业务需求: 用户可以更专注于业务需求,无需过多关注底层基础设施的管理和维护,提高了开发和运营效率。

综上所述,选择Elasticsearch Serverless能够帮助用户简化管理、提高弹性、节约成本、提高可用性,并使用户能够更专注于业务需求,从而获得更好的开发和使用体验。

· 3 min read
Ethan
墨菲定理

“ 如果有什么可能出错,那么它就一定会出错。”

想象一下,你是一个公司的数据管理员,负责管理Elasticsearch里的所有数据。一天,你心血来潮,准备对一些旧数据进行清理。但是,不小心执行了 DELETE ,把一重要数据索引都给删掉了!

误删数据可不是闹着玩的。首先,你丢失了一堆宝贵的数据,像是客户信息、产品资料,甚至是销售报告。这就好像你把公司的保险柜里的宝藏都给扔了!另外,误删数据可能会给公司的业务造成严重影响,比如订单信息丢失导致混乱,或者客户资料丢失导致无法联系到重要客户。

“怎么办?” 你可能会尝试使用磁盘恢复工具或者从备份中恢复数据,但是往往事与愿违,因为元数据一旦被删,集群是无法识别这一堆二进制文件的。

要避免类似情况再次发生,首先我们需要建立安全意识,清楚误删数据的严重性以及如何避免这种情况的发生。同时,结合合适的工具也是必不可少的。为此,纳速云提供了一系列安全保护工具。

为重要索引设置为「 仅允许写入 」

进入纳速云控制台的 数据保护 , 为 account* 索引设置仅读写权限

设置权限后 account* 索引将会拒绝索引级和数据级的删除操作

总结

利用纳速云提供的安全功能来增强您的数据安全性。该模块还包括设置访问控制列表(ACL)、加密通信,读取混淆等功能,以保护数据免受未经授权的访问和操作。

通过建立安全意识并结合合适的工具,可以有效地降低误删数据的风险,并保护Elasticsearch中的数据安全和完整性。这样可以确保企业能够更加安全地管理和操作数据,避免因误操作而导致的损失和风险。

实现原理见 ES内核开发:数据权限实现原理

· 4 min read
擎天

日志记录可以在开发和排查问题时提供重要线索。Elasticsearch 的日志功能非常强大,可以捕捉许多有用的信息,包括应用错误日志,接口执行耗时,网络连接状态等。在开发环境中启用日志可以提高调试效率,而在生产环境中启用日志可以帮助快速定位和解决问题。

日志场景特点

  1. 写入吞吐高:持续写入数据量大,呈线性增长趋势;
  2. 存储数据量大:日志数据需要保留较长的存储周期,通常每月存储量在上百个GB;
  3. 冷热特性明显:日志排查倾向访问近期数据,历史数据常用于使用评率较低的统计分析;
  4. 实时性查询:日志场景通常会作为应用服务的问题排查,或监控数据的大盘展示,因此查询延迟的实时性直接影响用户端的体验;

优化策略

1.按照日期规划索引

索引名设计为按天翻滚的策略 log-2023.06.01log-2023.06.02log-2023.06.03 ...

带来的好处:

  • 如指定时段的日志分析,可通过前置过滤规避大量范围外的索引,提升检索效率。
  • 利于索引的生命周期管理,定期迁移冷热存储层及删除过期索引。

2. 合理设计索引结构

通过索引模板,统一规范日志索引结构化数据。

  1. 字符串字段:ES默认的行为会将字符串字段转化为keyword + text的嵌套结构字段,造成索引量翻倍。 我们可以通过dynamic_templates将字符串类型数据默认转化为keyword类型。大文本字段依旧采用text,节省存储空间。
  2. 数值字段 : ES的数值类型(long、integer)在term关键词查询的效率远低于keyword类型。因此具备数值特性的字段如果不需要范围查找,建议统一设置为keyword类型。
  3. 压缩优化 : "codec": "best_compression" 启用压缩算法提高存储效率节省空间。
  4. 写入优化 :"refresh_interval": "60s" 每隔60s刷新数据可见性,提升写入效率。

template示例
POST _template/log-template
{
"order": 0,
"index_patterns": [
"log-*"
],
"settings": {
"index": {
"number_of_shards": "1",
"refresh_interval": "60s",
"codec": "best_compression"
}
},
"mappings": {
"_doc": {
"dynamic_templates": [
{
"strings_as_keyword": {
"mapping": {
"ignore_above": 1024,
"type": "keyword"
},
"match_mapping_type": "string"
}
}
],
"properties": {
"message": {
"type": "text"
},
"@timestamp": {
"type": "date"
}
}
}
},
"aliases": {}
}

3. 设置索引生命周期

通过纳速云控制台-存储管理-生命周期管理,定期将日志索引数据进行冷热迁移并进行索引分段合并,降低存储成本。

tip

在纳速云平台冷存储相对热存储能节省近10倍的存储成本。

结语

综上所述,通过采取一些适当的日志场景优化措施,可以在保证日志记录准确性的前提下,减少日志的大小和数量,降低日志记录的成本和风险。