INFINI Labs 产品更新 | Easysearch 优化字段压缩提升写入速度,Console 优化数据迁移和校验等功能
INFINI Labs 产品又更新啦~。本次更新概要如下:Easysearch 增强 source_reuse 压缩功能,并大幅提升写入速度;Console 优化了数据迁移和校验功能,新增了通用的数据列表和下拉等标准组件,化繁为简,实现可复用。
以下是本次更新的详细说明。
INFINI Easysearch v1.6.1
INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。
Easysearch 本次更新如下:
Features
- 增加 analysis-icu 插件
Bug fix
- 修复 JDK 17 及更高版本运行告警及异常
Improvements
- 安装脚本优化,避免脚本使用不当出现错误
- source_reuse 增加对 float,double,geo_point,half_float,ip 类型字段的压缩
- 优化启用 source_reuse 时的写入速度,压缩的字段越多,写入速度越快
INFINI Console v1.9.0
INFINI Console 是一款非常轻量级的多集群、跨版本的搜索基础设施统一管控平台。通过对流行的搜索引擎基础设施进行跨版本、多集群的集中纳管, 企业可以快速方便的统一管理企业内部的不同版本的多套搜索集群。
Console 在线体验: http://demo.infini.cloud (用户名/密码:readonly/readonly)。
Console 本次更新如下:
Features
- 支持正常结束的数据校验任务重跑
- 添加后端服务关闭错误提示
-
新增统一的数据列表展示标准组件,基于该组件,配置相关字段即可快速渲染数据列表 UI
- 新增下拉列表标准组件,支持搜索、多选、排序、过滤、分组、翻页等
Bug fix
- 修复开发工具不支持 update API 的问题
- 修复数据校验任务重跑之后不一致文档数显示不对的问题
Improvements
- 数据校验 UI 优化
- 集群、节点、索引下拉列表 UI 优化
- 数据迁移进度条优化
期待反馈
欢迎下载体验使用,如果您在使用过程中遇到如何疑问或者问题,欢迎前往 INFINI Labs Github(https://github.com/infinilabs) 中的对应项目中提交 Feature Request 或提交 Bug。
- INFINI Gateway: https://github.com/infinilabs/gateway/issues
- INFINI Console: https://github.com/infinilabs/console/issues
- 下载地址: https://www.infinilabs.com/download
您还可以通过邮件联系我们:hello@infini.ltd
或者拨打我们的热线电话:(+86) 400-139-9200
欢迎加入 Discord 聊天室:https://discord.gg/4tKTMkkvVX
也欢迎大家微信扫码添加小助手(INFINI-Labs),加入用户群一起讨论交流。
关于极限科技(INFINI Labs)
极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。
极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。
INFINI Labs 产品又更新啦~。本次更新概要如下:Easysearch 增强 source_reuse 压缩功能,并大幅提升写入速度;Console 优化了数据迁移和校验功能,新增了通用的数据列表和下拉等标准组件,化繁为简,实现可复用。
以下是本次更新的详细说明。
INFINI Easysearch v1.6.1
INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。
Easysearch 本次更新如下:
Features
- 增加 analysis-icu 插件
Bug fix
- 修复 JDK 17 及更高版本运行告警及异常
Improvements
- 安装脚本优化,避免脚本使用不当出现错误
- source_reuse 增加对 float,double,geo_point,half_float,ip 类型字段的压缩
- 优化启用 source_reuse 时的写入速度,压缩的字段越多,写入速度越快
INFINI Console v1.9.0
INFINI Console 是一款非常轻量级的多集群、跨版本的搜索基础设施统一管控平台。通过对流行的搜索引擎基础设施进行跨版本、多集群的集中纳管, 企业可以快速方便的统一管理企业内部的不同版本的多套搜索集群。
Console 在线体验: http://demo.infini.cloud (用户名/密码:readonly/readonly)。
Console 本次更新如下:
Features
- 支持正常结束的数据校验任务重跑
- 添加后端服务关闭错误提示
-
新增统一的数据列表展示标准组件,基于该组件,配置相关字段即可快速渲染数据列表 UI
- 新增下拉列表标准组件,支持搜索、多选、排序、过滤、分组、翻页等
Bug fix
- 修复开发工具不支持 update API 的问题
- 修复数据校验任务重跑之后不一致文档数显示不对的问题
Improvements
- 数据校验 UI 优化
- 集群、节点、索引下拉列表 UI 优化
- 数据迁移进度条优化
期待反馈
欢迎下载体验使用,如果您在使用过程中遇到如何疑问或者问题,欢迎前往 INFINI Labs Github(https://github.com/infinilabs) 中的对应项目中提交 Feature Request 或提交 Bug。
- INFINI Gateway: https://github.com/infinilabs/gateway/issues
- INFINI Console: https://github.com/infinilabs/console/issues
- 下载地址: https://www.infinilabs.com/download
您还可以通过邮件联系我们:hello@infini.ltd
或者拨打我们的热线电话:(+86) 400-139-9200
欢迎加入 Discord 聊天室:https://discord.gg/4tKTMkkvVX
也欢迎大家微信扫码添加小助手(INFINI-Labs),加入用户群一起讨论交流。
关于极限科技(INFINI Labs)
极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。
极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。
收起阅读 »
社区日报 第1720期 (2023-10-19)
https://mp.weixin.qq.com/s/tob1Ki6h96uCcN34_uNZjw
2.将 Amazon Bedrock 与 Elasticsearch 和 Langchain 结合使用
https://www.elastic.co/search- ... chain
3.如何为 Elasticsearch 创建自定义连接器
https://www.elastic.co/search- ... earch
编辑:Se7en
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili
https://mp.weixin.qq.com/s/tob1Ki6h96uCcN34_uNZjw
2.将 Amazon Bedrock 与 Elasticsearch 和 Langchain 结合使用
https://www.elastic.co/search- ... chain
3.如何为 Elasticsearch 创建自定义连接器
https://www.elastic.co/search- ... earch
编辑:Se7en
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili 收起阅读 »
社区日报 第1719期 (2023-10-18)
https://mp.weixin.qq.com/s/TPRkg_9_hqJZOX-vb1MgHQ
2. Elasticsearch 8.11 中的合并更少,摄取更快
https://blog.csdn.net/UbuntuTo ... 23791
3.检索系统: 位图索引
https://zhuanlan.zhihu.com/p/524337366
编辑:kin122
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili
https://mp.weixin.qq.com/s/TPRkg_9_hqJZOX-vb1MgHQ
2. Elasticsearch 8.11 中的合并更少,摄取更快
https://blog.csdn.net/UbuntuTo ... 23791
3.检索系统: 位图索引
https://zhuanlan.zhihu.com/p/524337366
编辑:kin122
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili 收起阅读 »
社区日报 第1718期 (2023-10-17)
1. Elasticsearch ORM框架,用起来够优雅
https://zhuanlan.zhihu.com/p/574639237?utm_id=0
2. MySQL、HBase、ElasticSearch三者对比
https://cloud.tencent.com/deve ... 38673
3. 基于ElasticSearch的ORM Easy-Es框架
https://blog.csdn.net/Octopus2 ... 88806
编辑:yuebancanghai
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili
1. Elasticsearch ORM框架,用起来够优雅
https://zhuanlan.zhihu.com/p/574639237?utm_id=0
2. MySQL、HBase、ElasticSearch三者对比
https://cloud.tencent.com/deve ... 38673
3. 基于ElasticSearch的ORM Easy-Es框架
https://blog.csdn.net/Octopus2 ... 88806
编辑:yuebancanghai
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili 收起阅读 »
社区日报 第1717期 (2023-10-16)
https://medium.com/cloud-nativ ... 70168
2. 围绕NodeJs的系统做个日志?🉑️!(需要梯子)
https://medium.com/%40hussaing ... 18c25
3. 用ES做语义搜索,你学废了没(需要梯子)
https://blog.gopenai.com/seman ... d116f
编辑:斯蒂文
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili
https://medium.com/cloud-nativ ... 70168
2. 围绕NodeJs的系统做个日志?🉑️!(需要梯子)
https://medium.com/%40hussaing ... 18c25
3. 用ES做语义搜索,你学废了没(需要梯子)
https://blog.gopenai.com/seman ... d116f
编辑:斯蒂文
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili
收起阅读 »
社区日报 第1715 期 (2023-10-12)
https://medium.com/geekculture ... 53ad6
2.Elasticsearch 排障指南
https://dev.to/moesif/how-to-d ... r-2ge
3.2023 年 6 门最适合初学者学习的 Elastic Stack 课程(需要梯子)
https://medium.com/javarevisit ... 015c4
编辑:Se7en
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili
https://medium.com/geekculture ... 53ad6
2.Elasticsearch 排障指南
https://dev.to/moesif/how-to-d ... r-2ge
3.2023 年 6 门最适合初学者学习的 Elastic Stack 课程(需要梯子)
https://medium.com/javarevisit ... 015c4
编辑:Se7en
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili 收起阅读 »
社区日报 第1714 期 (2023-10-10)
https://blog.csdn.net/UbuntuTo ... 43269
2. Lucene vs. Database
https://zhuanlan.zhihu.com/p/516008190
3.Lucene:理解TF/IDF模型
https://zhuanlan.zhihu.com/p/508534047
编辑:kin122
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili
https://blog.csdn.net/UbuntuTo ... 43269
2. Lucene vs. Database
https://zhuanlan.zhihu.com/p/516008190
3.Lucene:理解TF/IDF模型
https://zhuanlan.zhihu.com/p/508534047
编辑:kin122
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili 收起阅读 »
Easysearch 压缩功能的显著提升:从 8.7GB 到 1.4GB
引言
在海量数据的存储和处理中,索引膨胀率是一个不可忽视的关键指标。它直接影响了存储成本和查询性能。近期,Easysearch 在这方面取得了显著的进展,其压缩功能的效果远超过了之前的版本。本文将详细介绍这一进展。
Easysearch 各版本压缩性能对比
根据之前文章的数据,Easysearch v1.1 在处理相同数据时,其索引大小比 Elasticsearch v6.4.3 降低了 50%。但这还不是全部,最新的测试数据更是令人惊艳。
显著的压缩效果:实验数据解析
通过对比不同版本的存储大小,我们更直观地了解到 Easysearch 在压缩方面的优势:
- Easysearch 的原始版本,未开启压缩:存储大小为 8.7 GB。
- Easysearch v2 版本:经过第二版压缩后,存储大小显著减少到 2.7 GB。
- Easysearch v3 版本:第三版压缩后,存储大小进一步减少到 1.4 GB。
关键观察
Easysearch 之前提供的压缩版相比原始版本减少了约 69%的存储空间。
Easysearch v3 版则更为显著,相比原始版本减少了约 84%的存储空间。
第三版本压缩的秘密武器:数字类型字段的复用
第三版本压缩能达到如此高的效率,主要是因为在之前第二版对文档原文中 keyword 类型字段复用的基础上,增加了对数字类型字段的复用。这一策略进一步优化了存储结构,显著提高了压缩效率。
压缩策略:多元化选择
Easysearch 提供了多种压缩策略,包括 default、best_compression、ZSTD 和 index.source_reuse。其中,ZSTD 和 index.source_reuse 是新引入的压缩策略,能进一步降低索引膨胀率。
带来的好处
降低存储成本:显著降低的存储大小意味着在硬件和维护方面的成本将大幅度减少。 提高系统扩展性:更小的数据尺寸意味着在相同的硬件配置下,系统能够处理更多的数据。 数据备份和传输:由于索引文件更小,数据备份和传输的速度也将提升,同时减少带宽需求。
总结
Easysearch 在压缩效果上有显著提升,不仅降低了存储成本,还提高了查询性能和系统扩展性。这使得 Easysearch 在大数据环境下成为一种非常具有吸引力的搜索和存储解决方案
关于 Easysearch
INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。 与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。
官网文档:https://www.infinilabs.com/docs/latest/easysearch
下载地址:https://www.infinilabs.com/download
引言
在海量数据的存储和处理中,索引膨胀率是一个不可忽视的关键指标。它直接影响了存储成本和查询性能。近期,Easysearch 在这方面取得了显著的进展,其压缩功能的效果远超过了之前的版本。本文将详细介绍这一进展。
Easysearch 各版本压缩性能对比
根据之前文章的数据,Easysearch v1.1 在处理相同数据时,其索引大小比 Elasticsearch v6.4.3 降低了 50%。但这还不是全部,最新的测试数据更是令人惊艳。
显著的压缩效果:实验数据解析
通过对比不同版本的存储大小,我们更直观地了解到 Easysearch 在压缩方面的优势:
- Easysearch 的原始版本,未开启压缩:存储大小为 8.7 GB。
- Easysearch v2 版本:经过第二版压缩后,存储大小显著减少到 2.7 GB。
- Easysearch v3 版本:第三版压缩后,存储大小进一步减少到 1.4 GB。
关键观察
Easysearch 之前提供的压缩版相比原始版本减少了约 69%的存储空间。
Easysearch v3 版则更为显著,相比原始版本减少了约 84%的存储空间。
第三版本压缩的秘密武器:数字类型字段的复用
第三版本压缩能达到如此高的效率,主要是因为在之前第二版对文档原文中 keyword 类型字段复用的基础上,增加了对数字类型字段的复用。这一策略进一步优化了存储结构,显著提高了压缩效率。
压缩策略:多元化选择
Easysearch 提供了多种压缩策略,包括 default、best_compression、ZSTD 和 index.source_reuse。其中,ZSTD 和 index.source_reuse 是新引入的压缩策略,能进一步降低索引膨胀率。
带来的好处
降低存储成本:显著降低的存储大小意味着在硬件和维护方面的成本将大幅度减少。 提高系统扩展性:更小的数据尺寸意味着在相同的硬件配置下,系统能够处理更多的数据。 数据备份和传输:由于索引文件更小,数据备份和传输的速度也将提升,同时减少带宽需求。
总结
Easysearch 在压缩效果上有显著提升,不仅降低了存储成本,还提高了查询性能和系统扩展性。这使得 Easysearch 在大数据环境下成为一种非常具有吸引力的搜索和存储解决方案
关于 Easysearch
INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。 与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。
官网文档:https://www.infinilabs.com/docs/latest/easysearch
下载地址:https://www.infinilabs.com/download
收起阅读 »
Easysearch 压缩模式深度比较:ZSTD + source_reuse 的优势分析
引言
在使用 Easysearch 时,如何在存储和查询性能之间找到平衡是一个常见的挑战。Easysearch 具备多种压缩模式,各有千秋。本文将重点探讨一种特别的压缩模式:zstd + source_reuse
,我们最近重新优化了 source_reuse
,使得它在吞吐量和存储效率方面都表现出色。
测试概览
测试条件选用了 esrally 工具和 geonames 数据集来进行压力测试。数据集包含了 11396503 条记录,往单个 shard 写入,对以下几种压缩模式进行压测对比:
default
best_compression
zstd
-
zstd + source_reuse
下图是对 CPU 的监控,可以看到各个模式对 CPU 的使用是基本相近的。
default
best_compression
zstd
zstd+reuse
关键数据点
测试结果主要围绕两个指标:
- 中位吞吐量:单位为“每秒操作数”,数值越大表示性能越好。
- 存储大小:单位为 “GB”,数值越小表示存储更加高效。
测试数据如下: | 压缩模式 | 中位吞吐量 (docs/s) | 存储大小 (GB) |
---|---|---|---|
default | 37834 | 2.7 | |
best_compression | 37404 | 2.2 | |
zstd | 38878 | 2.1 | |
zstd + source_reuse | 38942 | 1.6 |
zstd + source_reuse:压缩原理
该模式采用了 source_reuse
压缩算法,该算法通过对 keyword
、long
、int
、short
、boolean
等类型的字段值进行复用,并结合 zstd 压缩算法,大大提高了存储效率。
压缩效率
zstd + source_reuse
在存储大小上的表现尤为出色,针对 geonames 数据集只需 1.6 GB 的存储空间,相比于 best_compression
模式的 2.2 GB,压缩效率显著提高
。
吞吐量表现
高压缩率并没有让 zstd + source_reuse
在吞吐量上做出妥协,因为高压缩率使得其需要持久化的数据大大减小,其中位吞吐量为 38942 docs/s,在 4 种模式中表现最好。
结论
zstd + source_reuse
压缩模式在存储效率和查询性能之间找到了一种极佳的平衡,强烈推荐各位在使用 Easysearch 时,当存储成本比较敏感时,考虑使用 zstd + source_reuse
压缩模式。无论是在存储成本还是写入性能方面,它都能为你带来显著的优势。
关于 Easysearch
INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。 与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。
官网文档:https://www.infinilabs.com/docs/latest/easysearch
下载地址:https://www.infinilabs.com/download
原文:https://www.infinilabs.com/blog/2023/deep-comparison-of-easysearch-compression-modes/
引言
在使用 Easysearch 时,如何在存储和查询性能之间找到平衡是一个常见的挑战。Easysearch 具备多种压缩模式,各有千秋。本文将重点探讨一种特别的压缩模式:zstd + source_reuse
,我们最近重新优化了 source_reuse
,使得它在吞吐量和存储效率方面都表现出色。
测试概览
测试条件选用了 esrally 工具和 geonames 数据集来进行压力测试。数据集包含了 11396503 条记录,往单个 shard 写入,对以下几种压缩模式进行压测对比:
default
best_compression
zstd
-
zstd + source_reuse
下图是对 CPU 的监控,可以看到各个模式对 CPU 的使用是基本相近的。
default
best_compression
zstd
zstd+reuse
关键数据点
测试结果主要围绕两个指标:
- 中位吞吐量:单位为“每秒操作数”,数值越大表示性能越好。
- 存储大小:单位为 “GB”,数值越小表示存储更加高效。
测试数据如下: | 压缩模式 | 中位吞吐量 (docs/s) | 存储大小 (GB) |
---|---|---|---|
default | 37834 | 2.7 | |
best_compression | 37404 | 2.2 | |
zstd | 38878 | 2.1 | |
zstd + source_reuse | 38942 | 1.6 |
zstd + source_reuse:压缩原理
该模式采用了 source_reuse
压缩算法,该算法通过对 keyword
、long
、int
、short
、boolean
等类型的字段值进行复用,并结合 zstd 压缩算法,大大提高了存储效率。
压缩效率
zstd + source_reuse
在存储大小上的表现尤为出色,针对 geonames 数据集只需 1.6 GB 的存储空间,相比于 best_compression
模式的 2.2 GB,压缩效率显著提高
。
吞吐量表现
高压缩率并没有让 zstd + source_reuse
在吞吐量上做出妥协,因为高压缩率使得其需要持久化的数据大大减小,其中位吞吐量为 38942 docs/s,在 4 种模式中表现最好。
结论
zstd + source_reuse
压缩模式在存储效率和查询性能之间找到了一种极佳的平衡,强烈推荐各位在使用 Easysearch 时,当存储成本比较敏感时,考虑使用 zstd + source_reuse
压缩模式。无论是在存储成本还是写入性能方面,它都能为你带来显著的优势。
关于 Easysearch
INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。 与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。
官网文档:https://www.infinilabs.com/docs/latest/easysearch
下载地址:https://www.infinilabs.com/download
收起阅读 »原文:https://www.infinilabs.com/blog/2023/deep-comparison-of-easysearch-compression-modes/
社区日报 第1713期 (2023-10-09)
https://mp.weixin.qq.com/s/4dCRJr1sS-10iMOuNMtFLA
2. Elasticsearch系列---并发控制及乐观锁实现原理
https://zhuanlan.zhihu.com/p/649371864
3. elasticsearch中的Translog详解 及其参数与调优
https://zhuanlan.zhihu.com/p/648751324
编辑:yuebancanghai
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili
https://mp.weixin.qq.com/s/4dCRJr1sS-10iMOuNMtFLA
2. Elasticsearch系列---并发控制及乐观锁实现原理
https://zhuanlan.zhihu.com/p/649371864
3. elasticsearch中的Translog详解 及其参数与调优
https://zhuanlan.zhihu.com/p/648751324
编辑:yuebancanghai
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili 收起阅读 »
ES 关于 remote_cluster 的一记小坑
最近有小伙伴找到我们说 Kibana 上添加不了 Remote Cluster,填完信息点 Save 直接跳回原界面了。具体页面,就和没添加前一样。
我们和小伙伴虽然隔着网线但还是进行了深入、详细的交流,梳理出来了如下信息:
- 两个集群:集群 A 和集群 B ,版本都是 7.10.0 ;
- 集群 A 没区分节点角色;
- 集群 B 设置了 独立的 master 节点、coordinator 节点和 data 节点,其中 data 节点还带 remote_cluster_client 角色;
- 在集群 A 的 Kibana 可以添加 集群 B 为远程集群;
- 在集群 B 添加 集群 A 就不行,Kibana 跳回之前的页面;
- 网络组确认已经放开策略,网络测试也正常;
翻看了 ES 和 Kibana 的日志, ES 日志中有连接失败的错误信息, Kibana 日志中无对应输出。
[2023-09-13T11:38:41,055][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.mode] from [SNIFF] to [sniff]
[2023-09-13T11:38:41,055][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.seeds] from [[]] to [["127.0.0.1:7102"]]
[2023-09-13T11:38:41,056][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.mode] from [SNIFF] to [sniff]
[2023-09-13T11:38:41,056][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.seeds] from [[]] to [["127.0.0.1:7102"]]
[2023-09-13T11:38:41,057][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.mode] from [SNIFF] to [sniff]
[2023-09-13T11:38:41,057][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.seeds] from [[]] to [["127.0.0.1:7102"]]
[2023-09-13T11:38:41,093][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.mode] from [SNIFF] to [sniff]
[2023-09-13T11:38:41,094][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.seeds] from [[]] to [["127.0.0.1:7102"]]
[2023-09-13T11:38:41,094][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.mode] from [SNIFF] to [sniff]
[2023-09-13T11:38:41,094][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.seeds] from [[]] to [["127.0.0.1:7102"]]
[2023-09-13T11:38:41,095][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.mode] from [SNIFF] to [sniff]
[2023-09-13T11:38:41,096][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.seeds] from [[]] to [["127.0.0.1:7102"]]
[2023-09-13T11:38:51,099][WARN ][o.e.t.RemoteClusterService] [710-1] failed to connect to new remote cluster test within 10s
[2023-09-13T11:39:11,101][WARN ][o.e.t.SniffConnectionStrategy] [710-1] fetching nodes from external cluster [test] failed
org.elasticsearch.transport.ConnectTransportException: [][127.0.0.1:7102] handshake_timeout[30s]
at org.elasticsearch.transport.TransportHandshaker.lambda$sendHandshake$1(TransportHandshaker.java:73) ~[elasticsearch-7.10.2.jar:7.10.2]
at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:684) ~[elasticsearch-7.10.2.jar:7.10.2]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) [?:?]
at java.lang.Thread.run(Thread.java:832) [?:?]
已经测试过网络是通的,开始尝试把集群 B 的角色配置统统去掉再尝试。
嘿,添加成功了。
接下来为了找出问题,开始一步一步给每个节点再加回原来的角色。而且如果节点原来没有 remote_cluster_client 角色,这次也一并加上。
操作过程
- 先从 data 节点开始,恢复角色,尝试添加远程集群,失败。
- 接着 coordinate 节点 , 恢复角色且新增 remote_cluster_client 角色,尝试添加远程集群,失败。
- 最后 master 节点,恢复角色且新增 remote_cluster_client 角色,尝试添加远程集群,成功。
最终直到所有节点都有 remote_cluster_client 角色后,才成功添加远程集群。
结论: ES 集群添加远程集群所有节点都必须拥有 remote_cluster_client 角色。
事情到这里,似乎没什么问题。但当我们对这个结论进行检验时,又有了新发现。
上面的场景忽视了一个因素 -- Kibana 。于是我们搭建了一个两个节点的集群,其中节点 A 是全角色节点,节点 B 只是 data 节点。让 Kibana 分别连接两个节点进行测试。
验证结果
- 当 Kibana 连接节点 A 时,可以正常添加。
- Kibana 连接节点 B 时,添加失败,跳回界面。
结论:ES 集群添加远程集群时,Kibana 连接的 ES 节点必须拥有 remote_cluster_client 角色。
很显然,这个结论更合理。
原因分析
我们是通过 Kibana 界面操作去添加远程集群的, Kibana 连接的节点就被当作 remote_client 。该节点要向远程集群发起连接并执行相关调用。但这一切有个前提,该节点必须有 remote_cluster_client 角色才能向远程集群发起连接。
引申
我们的 CCS 操作也必须发送到一个具有 remote_cluster_client 角色的节点,才能成功执行。
参考连接 https://www.elastic.co/guide/en/elasticsearch/reference/7.10/modules-node.html
最近有小伙伴找到我们说 Kibana 上添加不了 Remote Cluster,填完信息点 Save 直接跳回原界面了。具体页面,就和没添加前一样。
我们和小伙伴虽然隔着网线但还是进行了深入、详细的交流,梳理出来了如下信息:
- 两个集群:集群 A 和集群 B ,版本都是 7.10.0 ;
- 集群 A 没区分节点角色;
- 集群 B 设置了 独立的 master 节点、coordinator 节点和 data 节点,其中 data 节点还带 remote_cluster_client 角色;
- 在集群 A 的 Kibana 可以添加 集群 B 为远程集群;
- 在集群 B 添加 集群 A 就不行,Kibana 跳回之前的页面;
- 网络组确认已经放开策略,网络测试也正常;
翻看了 ES 和 Kibana 的日志, ES 日志中有连接失败的错误信息, Kibana 日志中无对应输出。
[2023-09-13T11:38:41,055][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.mode] from [SNIFF] to [sniff]
[2023-09-13T11:38:41,055][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.seeds] from [[]] to [["127.0.0.1:7102"]]
[2023-09-13T11:38:41,056][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.mode] from [SNIFF] to [sniff]
[2023-09-13T11:38:41,056][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.seeds] from [[]] to [["127.0.0.1:7102"]]
[2023-09-13T11:38:41,057][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.mode] from [SNIFF] to [sniff]
[2023-09-13T11:38:41,057][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.seeds] from [[]] to [["127.0.0.1:7102"]]
[2023-09-13T11:38:41,093][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.mode] from [SNIFF] to [sniff]
[2023-09-13T11:38:41,094][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.seeds] from [[]] to [["127.0.0.1:7102"]]
[2023-09-13T11:38:41,094][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.mode] from [SNIFF] to [sniff]
[2023-09-13T11:38:41,094][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.seeds] from [[]] to [["127.0.0.1:7102"]]
[2023-09-13T11:38:41,095][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.mode] from [SNIFF] to [sniff]
[2023-09-13T11:38:41,096][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.seeds] from [[]] to [["127.0.0.1:7102"]]
[2023-09-13T11:38:51,099][WARN ][o.e.t.RemoteClusterService] [710-1] failed to connect to new remote cluster test within 10s
[2023-09-13T11:39:11,101][WARN ][o.e.t.SniffConnectionStrategy] [710-1] fetching nodes from external cluster [test] failed
org.elasticsearch.transport.ConnectTransportException: [][127.0.0.1:7102] handshake_timeout[30s]
at org.elasticsearch.transport.TransportHandshaker.lambda$sendHandshake$1(TransportHandshaker.java:73) ~[elasticsearch-7.10.2.jar:7.10.2]
at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:684) ~[elasticsearch-7.10.2.jar:7.10.2]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) [?:?]
at java.lang.Thread.run(Thread.java:832) [?:?]
已经测试过网络是通的,开始尝试把集群 B 的角色配置统统去掉再尝试。
嘿,添加成功了。
接下来为了找出问题,开始一步一步给每个节点再加回原来的角色。而且如果节点原来没有 remote_cluster_client 角色,这次也一并加上。
操作过程
- 先从 data 节点开始,恢复角色,尝试添加远程集群,失败。
- 接着 coordinate 节点 , 恢复角色且新增 remote_cluster_client 角色,尝试添加远程集群,失败。
- 最后 master 节点,恢复角色且新增 remote_cluster_client 角色,尝试添加远程集群,成功。
最终直到所有节点都有 remote_cluster_client 角色后,才成功添加远程集群。
结论: ES 集群添加远程集群所有节点都必须拥有 remote_cluster_client 角色。
事情到这里,似乎没什么问题。但当我们对这个结论进行检验时,又有了新发现。
上面的场景忽视了一个因素 -- Kibana 。于是我们搭建了一个两个节点的集群,其中节点 A 是全角色节点,节点 B 只是 data 节点。让 Kibana 分别连接两个节点进行测试。
验证结果
- 当 Kibana 连接节点 A 时,可以正常添加。
- Kibana 连接节点 B 时,添加失败,跳回界面。
结论:ES 集群添加远程集群时,Kibana 连接的 ES 节点必须拥有 remote_cluster_client 角色。
很显然,这个结论更合理。
原因分析
我们是通过 Kibana 界面操作去添加远程集群的, Kibana 连接的节点就被当作 remote_client 。该节点要向远程集群发起连接并执行相关调用。但这一切有个前提,该节点必须有 remote_cluster_client 角色才能向远程集群发起连接。
引申
我们的 CCS 操作也必须发送到一个具有 remote_cluster_client 角色的节点,才能成功执行。
参考连接 https://www.elastic.co/guide/en/elasticsearch/reference/7.10/modules-node.html
收起阅读 »社区日报 第1712期 (2023-09-28)
https://mp.weixin.qq.com/s/nsGNFCSPKW-ayieSf5yRZQ
2.使用基于 Arm 的 Amazon EC2 M6g 实例优化您的 Elasticsearch 部署
https://community.arm.com/arm- ... 2-m6g
3.通过 Elastic Universal Profiling 解锁整个系统的可见性
https://www.elastic.co/blog/wh ... iling
编辑:Se7en
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili
https://mp.weixin.qq.com/s/nsGNFCSPKW-ayieSf5yRZQ
2.使用基于 Arm 的 Amazon EC2 M6g 实例优化您的 Elasticsearch 部署
https://community.arm.com/arm- ... 2-m6g
3.通过 Elastic Universal Profiling 解锁整个系统的可见性
https://www.elastic.co/blog/wh ... iling
编辑:Se7en
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili 收起阅读 »
社区日报 第1711期 (2023-09-27)
https://cloud.tencent.com/deve ... 75753
2. Elasticsearch:什么是向量和向量存储数据库,我们为什么关心?
https://blog.csdn.net/UbuntuTo ... 26501
3.使用HuggingFace和Elasticsearch进行语义搜索(需要梯子)
https://betterprogramming.pub/ ... 3dd9d
编辑:kin122
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili
https://cloud.tencent.com/deve ... 75753
2. Elasticsearch:什么是向量和向量存储数据库,我们为什么关心?
https://blog.csdn.net/UbuntuTo ... 26501
3.使用HuggingFace和Elasticsearch进行语义搜索(需要梯子)
https://betterprogramming.pub/ ... 3dd9d
编辑:kin122
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili
收起阅读 »
社区日报 第1710期 (2023-09-26)
https://medium.com/%40utkarsh- ... b89dd
https://blog.devops.dev/system ... 6bbff
https://blog.stackademic.com/s ... f372b
2. 围绕着 .Net core,我是怎么用ES家族搭建的日志平台的(需要梯子)
https://tohidhaghighi.medium.c ... 6b56a
3. 巅峰对决?OpenSearch VS ElasticSearch(需要梯子)
https://medium.com/%40bhongale ... e1482
编辑:斯蒂文
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili
https://medium.com/%40utkarsh- ... b89dd
https://blog.devops.dev/system ... 6bbff
https://blog.stackademic.com/s ... f372b
2. 围绕着 .Net core,我是怎么用ES家族搭建的日志平台的(需要梯子)
https://tohidhaghighi.medium.c ... 6b56a
3. 巅峰对决?OpenSearch VS ElasticSearch(需要梯子)
https://medium.com/%40bhongale ... e1482
编辑:斯蒂文
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili
收起阅读 »
通过 Helm Chart 部署 Easysearch
Easysearch 可以通过 Helm 快速部署了,快来看看吧!
Easysearch 的 Chart 仓库地址在这里 https://helm.infinilabs.com。
使用 Helm 部署 Easysearch 有两个前提条件:
我们先按照 Chart 仓库的说明来快速部署一下。
~ helm repo add infinilabs https://helm.infinilabs.com
~ cat << EOF | kubectl apply -n test -f -
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: easysearch-ca-issuer
spec:
selfSigned: {}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: easysearch-ca-certificate
spec:
commonName: easysearch-ca-certificate
duration: 87600h0m0s
isCA: true
issuerRef:
kind: Issuer
name: easysearch-ca-issuer
privateKey:
algorithm: ECDSA
size: 256
renewBefore: 2160h0m0s
secretName: easysearch-ca-secret
EOF
~ helm install easysearch infinilabs/easysearch -n test
执行上面的两个命令之后,查看一下部署情况
~ kubectl get pod -n test
NAME READY STATUS RESTARTS AGE
easysearch-0 1/1 Running 0 38s
~ kubectl get svc -n test
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
easysearch-svc-headless ClusterIP None <none> 9200/TCP,9300/TCP 67s
~ kubectl exec -n test easysearch-0 -it -- curl -ku'admin:admin' https://localhost:9200
Defaulted container "easysearch" out of: easysearch, init-config (init)
{
"name" : "easysearch-0",
"cluster_name" : "infinilabs",
"cluster_uuid" : "JwhwwWHMQKy8l6_US7rB1A",
"version" : {
"distribution" : "easysearch",
"number" : "1.5.0",
"distributor" : "INFINI Labs",
"build_hash" : "5b5b117bc43e6793e7bb0cd8bd83567a5ef35be0",
"build_date" : "2023-09-07T14:55:21.232870Z",
"build_snapshot" : false,
"lucene_version" : "8.11.2",
"minimum_wire_lucene_version" : "7.7.0",
"minimum_lucene_index_compatibility_version" : "7.7.0"
},
"tagline" : "You Know, For Easy Search!"
}
通过上面的验证,我们可以看到 Easysearch 已经部署完成,是不是很方便。
按照 Chart 仓库的指导说明部署的是一个单节点集群,那如果要部署多节点的要怎么办呢?下面让我们来研究一下 Easysearch Chart 包的源码 https://github.com/infinilabs/helm-charts/tree/main/charts/easysearch。
熟悉 Chart 包结构的小伙伴都清楚,Chart 包的变量配置一般都是在 values.yaml 文件中配置的。
我们先来看一下默认的 values.yaml 文件内容(这里只截选了一些可能需要变更的配置,完整内容请查阅源码):
- pod 副本数以及使用资源的配置
replicaCount: 1
resources:
limits:
cpu: 1000m
memory: 2Gi
requests:
cpu: 1000m
memory: 2Gi
- 使用存储类型以及容量的配置
storageClassName: local-path
dataVolumeStorage: 100Gi
- 集群名、主节点列表以及节点角色配置
clusterName: infinilabs
masterHosts: '"easysearch-0"'
discoverySeedHosts: '"easysearch-0.easysearch-svc-headless"'
nodeRoles: '"master","data","ingest","remote_cluster_client"'
根据研究源码的结果,多节点集群的部署只需要我们调整部署的 pod 副本数、集群名、主节点列表以及节点角色这几个配置。下面让我们来实践一下:
1、集群规划
集群名:es-test
规模:3 主节点 + 3 数据节点 + 2 协调节点
2、Chart 的版本名
主节点:es-test-master
数据节点:es-test-data
协调节点:es-test-coordinate
3、根据节点角色创建不同的 values.yaml 文件
- es-test-master.yaml
replicaCount: 3
clusterName: es-test
masterHosts: '"es-test-master-easysearch-0","es-test-master-easysearch-1","es-test-master-easysearch-2"'
discoverySeedHosts: '"es-test-master-easysearch-0.es-test-master-easysearch-svc-headless","es-test-master-easysearch-1.es-test-master-easysearch-svc-headless","es-test-master-easysearch-2.es-test-master-easysearch-svc-headless"'
nodeRoles: '"master","ingest","remote_cluster_client"'
- es-test-data.yaml
replicaCount: 3
clusterName: es-test
masterHosts: '"es-test-master-easysearch-0","es-test-master-easysearch-1","es-test-master-easysearch-2"'
discoverySeedHosts: '"es-test-master-easysearch-0.es-test-master-easysearch-svc-headless","es-test-master-easysearch-1.es-test-master-easysearch-svc-headless","es-test-master-easysearch-2.es-test-master-easysearch-svc-headless"'
nodeRoles: '"data","ingest","remote_cluster_client"'
- es-test-coordinate.yaml
replicaCount: 2
clusterName: es-test
masterHosts: '"es-test-master-easysearch-0","es-test-master-easysearch-1","es-test-master-easysearch-2"'
discoverySeedHosts: '"es-test-master-easysearch-0.es-test-master-easysearch-svc-headless","es-test-master-easysearch-1.es-test-master-easysearch-svc-headless","es-test-master-easysearch-2.es-test-master-easysearch-svc-headless"'
nodeRoles: ""
4、使用各节点角色的配置文件部署
~ helm install es-test-master infinilabs/easysearch -n test -f es-test-master.yaml
~ helm install es-test-data infinilabs/easysearch -n test -f es-test-data.yaml
~ helm install es-test-coordinate infinilabs/easysearch -n test -f es-test-coordinate.yaml
5、验证
~ kubectl get pod -n test|grep es-test
es-test-master-easysearch-0 1/1 Running 0 5m57s
es-test-data-easysearch-0 1/1 Running 0 5m29s
es-test-coordinate-easysearch-0 1/1 Running 0 5m10s
es-test-master-easysearch-1 1/1 Running 0 4m57s
es-test-data-easysearch-1 1/1 Running 0 4m29s
es-test-coordinate-easysearch-1 1/1 Running 0 4m10s
es-test-master-easysearch-2 1/1 Running 0 3m56s
es-test-data-easysearch-2 1/1 Running 0 3m29s
~ kubectl exec -n test es-test-master-easysearch-0 -it -- curl -ku'admin:admin' https://localhost:9200/_cat/nodes?v
Defaulted container "easysearch" out of: easysearch, init-config (init)
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
10.42.0.130 12 63 12 1.53 2.67 2.11 - - es-test-coordinate-easysearch-0
10.42.0.136 53 65 52 1.53 2.67 2.11 dir - es-test-data-easysearch-1
10.42.0.139 6 63 14 1.53 2.67 2.11 - - es-test-coordinate-easysearch-1
10.42.0.133 10 63 14 1.53 2.67 2.11 imr - es-test-master-easysearch-1
10.42.0.149 58 65 59 1.53 2.67 2.11 dir - es-test-data-easysearch-2
10.42.0.124 53 68 35 1.53 2.67 2.11 imr * es-test-master-easysearch-0
10.42.0.127 56 65 46 1.53 2.67 2.11 dir - es-test-data-easysearch-0
10.42.0.146 15 63 18 1.53 2.67 2.11 imr - es-test-master-easysearch-2
至此,多集群已部署完成。
关于 Easysearch
INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。 与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。
Easysearch 可以通过 Helm 快速部署了,快来看看吧!
Easysearch 的 Chart 仓库地址在这里 https://helm.infinilabs.com。
使用 Helm 部署 Easysearch 有两个前提条件:
我们先按照 Chart 仓库的说明来快速部署一下。
~ helm repo add infinilabs https://helm.infinilabs.com
~ cat << EOF | kubectl apply -n test -f -
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: easysearch-ca-issuer
spec:
selfSigned: {}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: easysearch-ca-certificate
spec:
commonName: easysearch-ca-certificate
duration: 87600h0m0s
isCA: true
issuerRef:
kind: Issuer
name: easysearch-ca-issuer
privateKey:
algorithm: ECDSA
size: 256
renewBefore: 2160h0m0s
secretName: easysearch-ca-secret
EOF
~ helm install easysearch infinilabs/easysearch -n test
执行上面的两个命令之后,查看一下部署情况
~ kubectl get pod -n test
NAME READY STATUS RESTARTS AGE
easysearch-0 1/1 Running 0 38s
~ kubectl get svc -n test
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
easysearch-svc-headless ClusterIP None <none> 9200/TCP,9300/TCP 67s
~ kubectl exec -n test easysearch-0 -it -- curl -ku'admin:admin' https://localhost:9200
Defaulted container "easysearch" out of: easysearch, init-config (init)
{
"name" : "easysearch-0",
"cluster_name" : "infinilabs",
"cluster_uuid" : "JwhwwWHMQKy8l6_US7rB1A",
"version" : {
"distribution" : "easysearch",
"number" : "1.5.0",
"distributor" : "INFINI Labs",
"build_hash" : "5b5b117bc43e6793e7bb0cd8bd83567a5ef35be0",
"build_date" : "2023-09-07T14:55:21.232870Z",
"build_snapshot" : false,
"lucene_version" : "8.11.2",
"minimum_wire_lucene_version" : "7.7.0",
"minimum_lucene_index_compatibility_version" : "7.7.0"
},
"tagline" : "You Know, For Easy Search!"
}
通过上面的验证,我们可以看到 Easysearch 已经部署完成,是不是很方便。
按照 Chart 仓库的指导说明部署的是一个单节点集群,那如果要部署多节点的要怎么办呢?下面让我们来研究一下 Easysearch Chart 包的源码 https://github.com/infinilabs/helm-charts/tree/main/charts/easysearch。
熟悉 Chart 包结构的小伙伴都清楚,Chart 包的变量配置一般都是在 values.yaml 文件中配置的。
我们先来看一下默认的 values.yaml 文件内容(这里只截选了一些可能需要变更的配置,完整内容请查阅源码):
- pod 副本数以及使用资源的配置
replicaCount: 1
resources:
limits:
cpu: 1000m
memory: 2Gi
requests:
cpu: 1000m
memory: 2Gi
- 使用存储类型以及容量的配置
storageClassName: local-path
dataVolumeStorage: 100Gi
- 集群名、主节点列表以及节点角色配置
clusterName: infinilabs
masterHosts: '"easysearch-0"'
discoverySeedHosts: '"easysearch-0.easysearch-svc-headless"'
nodeRoles: '"master","data","ingest","remote_cluster_client"'
根据研究源码的结果,多节点集群的部署只需要我们调整部署的 pod 副本数、集群名、主节点列表以及节点角色这几个配置。下面让我们来实践一下:
1、集群规划
集群名:es-test
规模:3 主节点 + 3 数据节点 + 2 协调节点
2、Chart 的版本名
主节点:es-test-master
数据节点:es-test-data
协调节点:es-test-coordinate
3、根据节点角色创建不同的 values.yaml 文件
- es-test-master.yaml
replicaCount: 3
clusterName: es-test
masterHosts: '"es-test-master-easysearch-0","es-test-master-easysearch-1","es-test-master-easysearch-2"'
discoverySeedHosts: '"es-test-master-easysearch-0.es-test-master-easysearch-svc-headless","es-test-master-easysearch-1.es-test-master-easysearch-svc-headless","es-test-master-easysearch-2.es-test-master-easysearch-svc-headless"'
nodeRoles: '"master","ingest","remote_cluster_client"'
- es-test-data.yaml
replicaCount: 3
clusterName: es-test
masterHosts: '"es-test-master-easysearch-0","es-test-master-easysearch-1","es-test-master-easysearch-2"'
discoverySeedHosts: '"es-test-master-easysearch-0.es-test-master-easysearch-svc-headless","es-test-master-easysearch-1.es-test-master-easysearch-svc-headless","es-test-master-easysearch-2.es-test-master-easysearch-svc-headless"'
nodeRoles: '"data","ingest","remote_cluster_client"'
- es-test-coordinate.yaml
replicaCount: 2
clusterName: es-test
masterHosts: '"es-test-master-easysearch-0","es-test-master-easysearch-1","es-test-master-easysearch-2"'
discoverySeedHosts: '"es-test-master-easysearch-0.es-test-master-easysearch-svc-headless","es-test-master-easysearch-1.es-test-master-easysearch-svc-headless","es-test-master-easysearch-2.es-test-master-easysearch-svc-headless"'
nodeRoles: ""
4、使用各节点角色的配置文件部署
~ helm install es-test-master infinilabs/easysearch -n test -f es-test-master.yaml
~ helm install es-test-data infinilabs/easysearch -n test -f es-test-data.yaml
~ helm install es-test-coordinate infinilabs/easysearch -n test -f es-test-coordinate.yaml
5、验证
~ kubectl get pod -n test|grep es-test
es-test-master-easysearch-0 1/1 Running 0 5m57s
es-test-data-easysearch-0 1/1 Running 0 5m29s
es-test-coordinate-easysearch-0 1/1 Running 0 5m10s
es-test-master-easysearch-1 1/1 Running 0 4m57s
es-test-data-easysearch-1 1/1 Running 0 4m29s
es-test-coordinate-easysearch-1 1/1 Running 0 4m10s
es-test-master-easysearch-2 1/1 Running 0 3m56s
es-test-data-easysearch-2 1/1 Running 0 3m29s
~ kubectl exec -n test es-test-master-easysearch-0 -it -- curl -ku'admin:admin' https://localhost:9200/_cat/nodes?v
Defaulted container "easysearch" out of: easysearch, init-config (init)
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
10.42.0.130 12 63 12 1.53 2.67 2.11 - - es-test-coordinate-easysearch-0
10.42.0.136 53 65 52 1.53 2.67 2.11 dir - es-test-data-easysearch-1
10.42.0.139 6 63 14 1.53 2.67 2.11 - - es-test-coordinate-easysearch-1
10.42.0.133 10 63 14 1.53 2.67 2.11 imr - es-test-master-easysearch-1
10.42.0.149 58 65 59 1.53 2.67 2.11 dir - es-test-data-easysearch-2
10.42.0.124 53 68 35 1.53 2.67 2.11 imr * es-test-master-easysearch-0
10.42.0.127 56 65 46 1.53 2.67 2.11 dir - es-test-data-easysearch-0
10.42.0.146 15 63 18 1.53 2.67 2.11 imr - es-test-master-easysearch-2
至此,多集群已部署完成。
关于 Easysearch
INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。 与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。
官网文档:https://www.infinilabs.com/docs/latest/easysearch
下载地址:https://www.infinilabs.com/download
收起阅读 »