【INFINI 动手实战训练营-北京站】海量数据不再头疼,使用 Easysearch 来实现降本增效,硬件直接减半
liaosy 发表了文章 • 0 个评论 • 2764 次浏览 • 2024-01-16 00:44
您是否遇到过以下问题?
- 当前部分原始日志压缩归档存放到 HDFS,但不能直接灵活查询;
- 使用 Elasticsearch 存储日志,开销较大,硬件资源投入较高;
- 当前日志集群不断增长,存储接近 PB 量级,且还在不断接入新的数据;
- 希望降低日志保留成本,同时满足按需查询的需求,平衡性能和成本;
- 集群规模大,分片过多,管理存在挑战,希望降低维护成本等。
针对使用 Elasticsearch 来作为日志存储的以上痛点,INFINI Labs 推出的 Easysearch 提供了若干存储优化的解决方案:
- 优化措施一:集成高效压缩算法
Easysearch 采用业界最先进的 Zstd 压缩算法,高压缩率,低 CPU 消耗,针对 Doc Values、Store 字段进行高度无缝压缩,不影响正常的使用体验,可以降低 50% 的存储开销。 - 优化措施二:无缝去除 Source 字段
Easysearch 利用 DocValues 和 BKD Tree 来重建 Source,合并冗余存储,不影响日志的正常检索和查看,可以大幅降低存储需求,在一些指标场景,甚至可以降低 80% 的存储开销。 - 优化措施三:归档数据直接检索
您是否还在通过关闭索引来降低海量数据带来的集群压力,或者您是否已经将快照备份直接放到 S3 或者 HDFS 中了,现在通过 Easysearch 提供的归档数据的直接检索能力,可以进一步释放本地节点的磁盘空间,进而释放物理机器资源,并根据需要按需查询归档索引,而不需要恢复归档再查询,简单方便。
通过以上优化举措,我们可以用不到一半的机器即可承载原有的数据,并且结合 Easysearch 内置其它的内核优化,索引和查询性能也将大幅提升,同时集群更加稳定可靠。
快来与 INFINI Labs 的技术专家面对面,第一时间了解极限实验室的发布最新产品和功能特性,通过动手实战,快速掌握最前沿的搜索技术,并用于实际项目中。活动免费,欢迎报名参加。
活动时间:2024 年 1 月 18 日 13:30~17:30
活动地点:北京市海淀区 Wework 辉煌时代大厦 3 楼 3E 会议室
分享议题
- Easysearch 总体介绍及搭建实战
- Easysearch 存储优化原理与实践
- Elasticsearch -> Easysearch 在线迁移实操
- Console、Gateway、Loadgen 及 INFINI Labs 其他工具介绍与使用
参会提示
- 请务必自备电脑(Windows 系统环境请提前安装好 Linux 虚拟机)
- 请提前在 INFINI Labs 官网下载对应平台最新安装包(INFINI Easysearch、INFINI Gateway、INFINI Console)
- 下载地址:[https://www.infinilabs.com/download](https://www.infinilabs.com/download)
- 如有任何疑问可添加 INFINI Labs 小助手(微信号: INFINI-Labs)进行联系
![微信号: INFINI-Labs](https://www.infinilabs.com/img ... de.png)
活动报名
名额有限,对 Easysearch 搜索引擎感兴趣的朋友们速度报名(扫描海报中二维码或点击此处 [链接](https://www.huodongxing.com/event/6733634533000) 即可免费报名)。
开启安全功能 ES 集群就安全了吗?
yangmf2040 发表了文章 • 0 个评论 • 3625 次浏览 • 2023-12-27 10:38
背景
经常跟 ES 打交道的朋友都知道,现在主流的 ES 集群安全方案是:RBAC + TLS for Internal + HTTPS 。
![](https://www.infinilabs.com/img ... ge.png)
作为终端用户一般只需要关心用户名和密码就行了。作为管理和运维 ES 的人员来说,可能希望 ES 能提供密码策略来强制密码强度和密码使用周期。遗憾的是 ES 对密码强度和密码使用周期没有任何强制要求。如果不注意,可能我们天天都在使用“弱密码”或从不修改的密码(直到无法登录)。而且 ES 对连续的认证失败,不会做任何处理,这让 ES 很容易遭受暴力破解的入侵。
那还有没有别的办法,进一步提高安全呢? 其实,网关可以来帮忙。
虽然网关无法强制提高密码复杂度,但可以提高 ES 集群被暴力破解的难度。
大家都知道,暴力破解--本质就是不停的“猜”你的密码。以现在的 CPU 算力,一秒钟“猜”个几千上万次不过是洒洒水,而且 CPU 监控都不带波动的,很难发现异常。从这里入手,一方面,网关可以延长认证失败的过程--延迟返回结果,让破解不再暴力。另一方面,网关可以记录认证失败的情况,做到实时监控,有条件的告警。一旦出现苗头,可以使用网关阻断该 IP 或用户发来的任何请求。
场景模拟
首先,用网关代理 ES 集群,并在 default_flow 中增加一段 [response_status_filter](https://www.infinilabs.com/doc ... ilter/) 过滤器配置,对返回码是 401 的请求,跳转到 rate_limit_flow 进行降速,延迟 5 秒返回。
```
- name: default_flow
filter:
- elasticsearch:
elasticsearch: prod
max_connection_per_node: 1000 - response_status_filter:
exclude:
- 401
action: redirect_flow
flow: rate_limit_flow
- 401
- elasticsearch:
- name: rate_limit_flow
filter:
- sleep:
sleep_in_million_seconds: 5000
```
![](https://www.infinilabs.com/img ... 29.png)
其次,对于失败的认证,我们可以通过 Console 来做个看板实时分析,展示。
折线图、饼图图、柱状图等,多种展示方式,大家可充分发挥。
最后,可在 Console 的告警中心,配置对应的告警规则,实时监控该类事件,方便及时跟进处置。
效果测试
先带上正确的用户名密码测试,看看返回速度。
![](https://www.infinilabs.com/img ... image(2).png)
0.011 秒返回。再使用错误的密码测试。
![](https://www.infinilabs.com/img ... image(3).png)
整整 5 秒多后,才回返结果。如果要暴力破解,每 5 秒钟甚至更久才尝试一个密码,这还叫暴力吗?
看板示例
此处仅仅是抛砖引玉,欢迎大家发挥想象。
![](https://www.infinilabs.com/img ... image(4).png)
告警示例
建立告警规则,用户 1 分钟内超过 3 次登录失败,就产生告警。
![](https://www.infinilabs.com/img ... image(5).png)
可在告警中心查看详情,也可将告警推送至微信、钉钉、飞书、邮件等。
![](https://www.infinilabs.com/img ... image(6).png)
查看告警详情,是 es 用户触发了告警。
![](https://www.infinilabs.com/img ... image(7).png)
最后,剩下的工作就是对该账号的处置了。如果有需要可以考虑阻止该用户或 IP 的请求,对应的过滤器文档在[这里](https://www.infinilabs.com/doc ... ilter/),老规矩加到 default_flow 里就行了。
如果小伙伴有其他办法提升 ES 集群安全,欢迎和我们一起讨论、交流。我们的宗旨是:让搜索更简单!
- sleep:
INFINI Gateway 如何防止大跨度查询
yangmf2040 发表了文章 • 0 个评论 • 3058 次浏览 • 2023-12-19 23:54
背景
业务每天生成一个日期后缀的索引,写入当日数据。
业务查询有时会查询好多天的数据,导致负载告警。
现在想对查询进行限制--只允许查询一天的数据(不限定是哪天),如果想查询多天的数据就走申请。
技术分析
在每天一个索引的情况下,要进行多天的数据查询,有三种途径:
- 查询时,指定多个索引
- 查询时,写前缀+*号,模糊匹配多个索引
- 查询别名,别名关联多个索引
需求实现
我们只需用网关代理 ES 集群,并在 default_flow 中增加一段 [request_path_filter](https://www.infinilabs.com/doc ... ilter/) 过滤器的配置,只允许查询一个索引且格式如 "xxx-2023-12-06", "xxx.2023.12.06", "xxx20231206" 。
```- request_path_filter:
message: "Query scope exceeds limit, please contact the administrator for application."
must:
suffix:
- _search
regex: - \/[a-z]+[-.]?\d{4}[-.]?\d{1,2}[-.]?\d{1,2}\/
```
![](https://www.infinilabs.com/img ... /1.png)
如果需要指定其他格式,请自行修改 regex 的正则表达式。
创建测试索引
在 [INFINI Console](https://www.infinilabs.com/docs/latest/console/) 开发工具中执行下列语句:
<br /> POST test-2023-12-06/_doc<br /> {<br /> "test":"test"<br /> }<br /> <br /> POST test-2023-12-6/_doc<br /> {<br /> "test":"test"<br /> }<br /> POST test.2023.12.06/_doc<br /> {<br /> "test":"test"<br /> }<br /> POST test.2023.12.6/_doc<br /> {<br /> "test":"test"<br /> }<br /> <br /> POST test20231206/_doc<br /> {<br /> "test":"test"<br /> }<br /> <br /> POST test/_doc<br /> {<br /> "test":"test"<br /> }<br />
查询测试语句
```预计成功的查询
curl localhost:8000/test-2023-12-06/_search?pretty
curl localhost:8000/test-2023-12-6/_search?pretty
curl localhost:8000/test.2023.12.06/_search?pretty
curl localhost:8000/test.2023.12.6/_search?pretty
curl localhost:8000/test20231206/_search?pretty预计失败的查询
curl localhost:8000/test-2023-12-06,test-2023-12-6/_search?pretty
curl localhost:8000/test-2023-12/_search?pretty
curl localhost:8000/test/_search?pretty
curl localhost:8000/*/_search?pretty
```
查询结果
预计成功的查询
![](https://www.infinilabs.com/img ... /2.png)
预计失败的查询
![](https://www.infinilabs.com/img ... /3.png)
此外,我们在 Console 中的 Request Analysis 看板中也能看到,哪些请求被拒绝,哪些请求被“放行”。
![](https://www.infinilabs.com/img ... /4.png)
查询多个索引(多天)
现在我们已经实现了业务只能查一个索引,即一天的数据。当业务需要查询多天的索引时,我们只需创建一个别名,关联多个索引就行了。注意别名也要符合格式要求:字母开头 + 日期格式后缀。
下面我们创建一个 test-1111-1-1 的别名,关联前面的三个测试索引。
<br /> POST /_aliases<br /> {<br /> "actions" : [<br /> { "add" : { "indices" : ["test-2023-12-06", "test.2023.12.06","test-2023-12-6"], "alias" : "test-1111-1-1" } }<br /> ]<br /> }<br />
查询别名
![](https://www.infinilabs.com/img ... /5.png)
待业务查询用完之后,删除别名即可。
<br /> POST /_aliases<br /> {<br /> "actions" : [<br /> { "remove": { "indices" : ["test-2023-12-06", "test.2023.12.06","test-2023-12-6"], "alias" : "test-1111-1-1" } }<br /> ]<br /> }<br />
最后,我们只需严格控制别名的创建,就能实现我们最初的需求了。
- _search
- request_path_filter:
INFINI Labs 产品更新 | Easysearch 新增快照搜索功能,Console 支持 OpenSearch 存储
liaosy 发表了文章 • 0 个评论 • 2711 次浏览 • 2023-12-15 23:14
![release](https://www.infinilabs.com/img ... er.png)
INFINI Labs 产品又更新啦~,包括 Easysearch v1.7.0、Console v1.13.0。本次各产品更新了 Easysearch 快照搜索功能;Console 支持 OpenSearch 集群存储系统数据、优化了初始化安装向导流程等。
以下是本次更新的详细说明。
INFINI Easysearch v1.7.0
INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。
Easysearch 本次更新如下:
Features
发布快照搜索功能 Beta 版本,此功能旨在提高对已备份数据的使用效率。让用户利用对象存储(如 AWS S3、MinIO、Microsoft Azure Storage、Google Cloud Storage 等)技术来大幅降低存储成本。
Bug fix
- 修复单个节点场景下,从快照恢复多个 shard 的索引时,恢复不完整的问题
- 修复无法删除索引已关联的 ILM 策略问题
Improvements
- 初始化脚本优化,新增重复执行判断
INFINI Console v1.12.0
INFINI Console 是一款非常轻量级的多集群、跨版本的搜索基础设施统一管控平台。通过对流行的搜索引擎基础设施进行跨版本、多集群的集中纳管, 企业可以快速方便的统一管理企业内部的不同版本的多套搜索集群。
Console 在线体验: <http://demo.infini.cloud> (用户名/密码:readonly/readonly)。
Console 本次更新如下:
Features
支持 OpenSearch 集群存储系统数据
Bug fix
- 优化初始化安装流程
- 新增探针初始化配置
- 安装向导,新增凭据检查功能
- 安装向导,新增管理员密码重置功能
- 探针管理,支持自动关联 Auto Enroll
期待反馈
欢迎下载体验使用,如果您在使用过程中遇到如何疑问或者问题,欢迎前往 INFINI Labs Github(<https://github.com/infinilabs>) 中的对应项目中提交 Feature Request 或提交 Bug。
- 下载地址: <https://www.infinilabs.com/download>
您还可以通过邮件联系我们:hello@infini.ltd
或者拨打我们的热线电话:(+86) 400-139-9200
欢迎加入 Discord 聊天室:<https://discord.gg/4tKTMkkvVX>
也欢迎大家微信扫码添加小助手(INFINI-Labs),加入用户群一起讨论交流。
![联系我们](https://www.infinilabs.com/img ... ew.jpg)
关于极限科技(INFINI Labs)
![INFINI Labs](https://www.infinilabs.com/img ... bs.png)
极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。
极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。
官网:<https://www.infinilabs.com>
使用极限网关助力 ES 集群无缝升级、迁移上/下云
yangmf2040 发表了文章 • 0 个评论 • 2761 次浏览 • 2023-12-04 08:22
在工作中大家可能会遇到以下这些场景:
- 自建 ES 集群需要平滑迁移到 XX 云;
- 从 XX 云将 ES 集群迁移到自建机房;
- ES 集群进行跨版本升级,同时保留回退能力;
这些场景往往都还有个共同的需求:迁移过程要保证业务的最小停机时间。
幸运的是,在这三个场景中,我们都能使用极限网关来帮助我们进行更丝滑的迁移或升级。下面,我们以迁移 ES 集群上云为例,介绍下整个工作过程。 - 自建版本: 5.4.2
- 云上版本: 5.6.16
- Gateway 和 Console 建议用最新版本
迁移架构
通过将应用端流量走网关的方式,请求同步转发给自建 ES,网关记录所有的写入请求,并确保顺序在 XX 云 ES 上重放请求,两侧集群的各种故障都妥善进行了处理,从而实现透明的集群双写,实现安全无缝的数据迁移。
![](https://www.infinilabs.com/img ... /1.jpg)
业务端如果已经部署在云上,可以使用云上的 SLB 服务来访问网关,确保后端网关的高可用,如果业务端和极限网关还在企业内网,可以使用极限网关自带的 4 层浮动 IP 来确保网关的 [高可用](https://www.infinilabs.com/doc ... ng_ip/) 。执行步骤
部署 INFINI Gateway
为了保证数据的无缝透明迁移,通过网关来进行双写。
- [系统调优](https://gateway.infinilabs.com ... ation/)
- [安装 INFINI Gateway](https://www.infinilabs.com/doc ... stall/)
- 修改网关配置
在此 [下载](https://github.com/infinilabs/ ... sk.yml) 网关双写配置,默认网关会加载配置文件 gateway.yml 。如果要指定其他配置文件使用 -config 选项。
配置文件内容较多,下面仅展示必要部分。
<br /> #primary<br /> PRIMARY_ENDPOINT: <a href="http://192.168.56.3:7171" rel="nofollow" target="_blank">http://192.168.56.3:7171</a><br /> PRIMARY_USERNAME: elastic<br /> PRIMARY_PASSWORD: password<br /> PRIMARY_MAX_QPS_PER_NODE: 10000<br /> PRIMARY_MAX_BYTES_PER_NODE: 104857600 #100MB/s<br /> PRIMARY_MAX_CONNECTION_PER_NODE: 200<br /> PRIMARY_DISCOVERY_ENABLED: false<br /> PRIMARY_DISCOVERY_REFRESH_ENABLED: false<br /> #backup<br /> BACKUP_ENDPOINT: <a href="http://192.168.56.3:9200" rel="nofollow" target="_blank">http://192.168.56.3:9200</a><br /> BACKUP_USERNAME: admin<br /> BACKUP_PASSWORD: admin<br /> BACKUP_MAX_QPS_PER_NODE: 10000<br /> BACKUP_MAX_BYTES_PER_NODE: 104857600 #100MB/s<br /> BACKUP_MAX_CONNECTION_PER_NODE: 200<br /> BACKUP_DISCOVERY_ENABLED: false<br /> BACKUP_DISCOVERY_REFRESH_ENABLED: false<br />
PRIMARY_ENDPOINT:配置主集群地址和端口
PRIMARY_USERNAME、PRIMARY_PASSWORD: 访问主集群的用户信息
BACKUP_ENDPOINT:配置备集群地址和端口
BACKUP_USERNAME、BACKUP_PASSWORD: 访问备集群的用户信息 - 启动网关
启动网关并指定刚刚创建的配置,如下:
./gateway-linux-amd64 -config replication_via-disk.yml.yml
部署 INFINI Console
为了方便在多个集群之间快速切换,管理网关消费任务、查看队列等。使用 [INFINI Console](https://www.infinilabs.com/docs/latest/console/) 来进行管理。
- [下载安装](https://www.infinilabs.com/doc ... stall/)
- 启动服务
./console-linux-amd64 -service install
./console-linux-amd64 -service start
- 注册资源
将 ES 集群、极限网关都注册到 Console 中。
- [注册 ES 集群](https://www.infinilabs.com/doc ... uster/):方便切换集群,执行命令。除了新旧集群外,将网关也在此注册一次,方便验证网关功能。
- [注册 Gateway](https://www.infinilabs.com/doc ... teway/):管理网关任务、队列。
测试 INFINI Gateway
为了验证网关是否正常工作,我们通过 INFINI Console 来快速验证一下。
首先通过走网关的接口来创建一个索引,并写入一个文档,如下:
![](https://www.infinilabs.com/img ... /2.png)
查看 5.4.2 集群的数据情况,如下:
![](https://www.infinilabs.com/img ... /3.png)
查看集群 5.6.16 的数据情况,如下:
![](https://www.infinilabs.com/img ... /4.png)
数据一致,说明网关配置都正常,验证结束。调整网关的消费策略
因为我们需要在全量数据迁移之后,才能进行增量数据的追加,在全量数据迁移完成之前,我们应该暂停增量数据的消费。修改网关配置里面 Pipeline
consume-queue_backup-bulk_request_ingestion-to-backup
的参数auto_start
为false
,表示不自动启动该任务,具体配置方法如下:
![](https://www.infinilabs.com/img ... /5.png)
修改完配置之后,需要重新启动网关。
由于之前已经注册了网关,待全量迁移完成之后,可以通过后台的 Task 管理来进行后续的任务启动、停止,如下:
![](https://www.infinilabs.com/img ... /6.png)切换流量
接下来,将业务正常写的流量切换到网关,也就是需要把之前指向 ES 5.4.2 的地址指向网关的地址,如果 5.4.2 集群开启了身份验证,业务端代码同样需要传递身份信息,和 5.4.2 之前的用法保持不变。
![](https://www.infinilabs.com/img ... /7.png)
切换流量到网关之后,用户的请求还是以同步的方式正常访问自建集群,网关记录到的请求会按顺序记录到 MQ 里面,但是消费是暂停状态。
如果业务端代码使用的 ES 的 SDK 支持 Sniff,并且业务代码开启了 Sniff,那么应该关闭 Sniff,避免业务端通过 Sniff 直接链接到后端的 ES 节点,所有的流量现在应该都只通过网关来进行访问。全量数据迁移
在流量迁移到网关之后,我们开始对自建 Elasticsearch 集群的数据进行全量迁移到 XX 云 Elasticsearch 集群。
![](https://www.infinilabs.com/img ... /8.jpg)
全量迁移已有的数据的方式有很多种:
- [系统调优](https://gateway.infinilabs.com ... ation/)
- 通过快照的方式进行恢复
- 使用 INFINI Console 进行[数据迁移](https://www.infinilabs.com/doc ... ation/)
增量数据迁移
在全量导入的过程中,可能存在数据的增量修改,不过这部分请求都已经完整记录下来了,我们只需要开启网关的消费任务即可将积压的请求应用到云端的 ES 集群。
![](https://www.infinilabs.com/img ... /9.jpg)
示例操作如下:
![](https://www.infinilabs.com/img ... 10.png)
通过观察队列是否消费完成来判断增量数据是否做完,如下:
![](https://www.infinilabs.com/img ... 11.png)执行数据比对
由于集群内部的数据可能比较多,我们需要进行一个完整的比对才能确保数据的完整性,可以通过 INFINI Console 的[数据比对](https://www.infinilabs.com/doc ... rison/) 工具来进行。
切换集群
如果验证完之后,两个集群的数据已经完全一致了,可以将程序切换到新集群,或者将网关的配置里面的主备进行互换,仍旧写两个集群,先写云端集群,再写自建集群。
![](https://www.infinilabs.com/img ... 12.jpg)
双集群在线运行一段时间,待业务完全验证之后,再安全下线老集群,如遇到问题,也可以随时回切到老集群。小结
通过使用极限网关,自建 ES 集群可以安全无缝的迁移上云,在迁移的过程中,两套集群通过网关进行了解耦,两套集群的版本也可以不一样,在迁移的过程中还能实现版本的无缝升级。
工作流程图
![](https://www.infinilabs.com/img ... 12.png)
INFINI Labs 产品更新 | 修复 Easysearch 跨集群复制索引同步问题,Gateway 内存异常增长等问题
liaosy 发表了文章 • 0 个评论 • 2620 次浏览 • 2023-12-01 18:45
![release](https://www.infinilabs.com/img ... er.png)
INFINI Labs 产品又更新啦~,本次更新主要对 Easysearch、Gateway、Console、Agent 等产品功能进行优化和相关 Bug 修复,解决了内存异常增长等问题,以下是详细说明。
INFINI Easysearch v1.6.2
INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。
Easysearch 本次更新如下:
Bug fix
- 修复跨集群复制(CCR)不能对自动滚动生成的索引进行同步的问题
Improvements
- 优化初始化脚本,增加-s/-slient 参数,自动安装。
- 新增含 jdk/plugins 的 bundle 安装包
INFINI Gateway v1.20.0
INFINI Gateway 是一个面向搜索场景的高性能数据网关,所有请求都经过网关处理后再转发到后端的搜索业务集群。基于 INFINI Gateway 可以实现索引级别的限速限流、常见查询的缓存加速、查询请求的审计、查询结果的动态修改等等。
Gateway 本次更新如下:
Bug fix
- 修复由 Framework Bug 造成连接数不释放、内存异常增长的问题
Improvements
- 增加配置,允许设置 fasthttp client 相关参数
INFINI Console v1.12.0
INFINI Console 是一款非常轻量级的多集群、跨版本的搜索基础设施统一管控平台。通过对流行的搜索引擎基础设施进行跨版本、多集群的集中纳管, 企业可以快速方便的统一管理企业内部的不同版本的多套搜索集群。
Console 在线体验: <http://demo.infini.cloud> (用户名/密码:readonly/readonly)。
Console 本次更新如下:
Bug fix
- 修复数据探索 multi fields 字段计算 top values 报错的问题
- 修复由 Framework Bug 造成连接数不释放、内存异常增长的问题
- 修复内网模式下静态资源远程加载的问题
- 修复数据看板数据源配置校验异常的问题
Improvements
- 优化数据探索计算 top values,使用先采样后,后取 top values
- 可通过配置参数 http_client.read_buffer_size 设置读取缓存大小,解决开发工具执行命令时,默认缓存太小的问题
INFINI Agent v0.7.1
INFINI Agent 是 INFINI Console 的一个可选探针组件,负责采集和上传集群指标和日志等信息,并可通过 Console 管理。Agent 支持主流操作系统和平台,安装包轻量且无任何外部依赖,可以快速方便地安装。
Agent 本次更新如下:
Features
- 添加 http processor
Bug fix
- 修复由 Framework Bug 造成连接数不释放、内存异常增长的问题
Improvements
- 进一步优化内存占用,降到 50M 以下
INFINI Framework
INFINI Framework 是 INFINI Labs 各产品依赖的内部核心公共代码库。
Framework 本次更新如下:
- fix: fix the issue of disk queue was blocked
- chore: checkout specify branch before pull
期待反馈
欢迎下载体验使用,如果您在使用过程中遇到如何疑问或者问题,欢迎前往 INFINI Labs Github(<https://github.com/infinilabs>) 中的对应项目中提交 Feature Request 或提交 Bug。
- 下载地址: <https://www.infinilabs.com/download>
您还可以通过邮件联系我们:hello@infini.ltd
或者拨打我们的热线电话:(+86) 400-139-9200
欢迎加入 Discord 聊天室:<https://discord.gg/4tKTMkkvVX>
也欢迎大家微信扫码添加小助手(INFINI-Labs),加入用户群一起讨论交流。
![联系我们](https://www.infinilabs.com/img ... ew.jpg)
关于极限科技(INFINI Labs)
![INFINI Labs](https://www.infinilabs.com/img ... bs.png)
极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。
极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。
官网:<https://www.infinilabs.com>
通过 Canal 将 MySQL 数据实时同步到 Easysearch
yangmf2040 发表了文章 • 0 个评论 • 2685 次浏览 • 2023-11-20 09:55
Canal 是阿里巴巴集团提供的一个开源产品,能够通过解析数据库的增量日志,提供增量数据的订阅和消费功能。使用 Canal 模拟成 MySQL 的 Slave,实时接收 MySQL 的增量数据 binlog,然后通过 RESTful API 将数据写入到 Easysearch 中。
前提条件
- 部署 Easysearch 集群。
- 部署 MySQL 数据库。
- 部署 Gateway,Canal Adapter 不支持使用 HTTPS 协议连接,使用 Gateway 代理 Easysearch 。
- 部署 Console,方便查看 Easysearch 数据。
对于自建 MySQL , 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf 中配置如下:
<br /> [mysqld]<br /> log-bin=mysql-bin # 开启 binlog<br /> binlog-format=ROW # 选择 ROW 模式<br /> server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复<br />
创建 canal 用户,授权 canal 连接 MySQL 具有作为 MySQL slave 的权限。
<br /> CREATE USER canal IDENTIFIED BY 'canal';<br /> GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';<br /> -- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;<br /> FLUSH PRIVILEGES;<br />
操作步骤
在进行数据同步时支持自定义索引 Mapping,但需保证 Mapping 中定义的字段(名称+类型)与 MySQL 中一致。
1. 准备 MySQL 数据源
<br /> create database canal;<br /> use canal;<br /> CREATE TABLE `test` (<br /> `id` bigint(32) NOT NULL,<br /> `name` text NOT NULL,<br /> `age` smallint NOT NULL,<br /> PRIMARY KEY (`id`)<br /> ) ENGINE=InnoDB<br /> DEFAULT CHARACTER SET=utf8;<br />
2. Easysearch 创建索引
<br /> PUT test<br /> {<br /> "settings" : {<br /> "index" : {<br /> "number_of_shards" : "1",<br /> "number_of_replicas" : "1"<br /> }<br /> },<br /> "mappings" : {<br /> "properties" : {<br /> "id": {<br /> "type": "integer"<br /> },<br /> "name": {<br /> "type" : "text"<br /> },<br /> "age" : {<br /> "type" : "integer"<br /> }<br /> }<br /> }<br /> }<br />
3. 安装并启动 Canal-server
下载:[https://github.com/alibaba/can ... ar.gz](https://github.com/alibaba/can ... tar.gz)
修改配置文件
vi conf/example/instance.properties
![](https://www.infinilabs.com/img ... /1.png)
启动 canal
sh bin/startup.sh
启动成功日志信息,logs/canal/canal.log
![](https://www.infinilabs.com/img ... /2.png)
关闭 canal
sh bin/stop.sh
4. 安装并启动 Canal-adapter
下载:[https://github.com/alibaba/can ... ar.gz](https://github.com/alibaba/can ... tar.gz)
修改配置文件:application.yml
<br /> server:<br /> port: 8081<br /> spring:<br /> jackson:<br /> date-format: yyyy-MM-dd HH:mm:ss<br /> time-zone: GMT+8<br /> default-property-inclusion: non_null<br /> canal.conf:<br /> flatMessage: true<br /> syncBatchSize: 1000<br /> retries: -1<br /> timeout:<br /> accessKey:<br /> secretKey:<br /> consumerProperties:<br /> canal.tcp.server.host: 127.0.0.1:11111<br /> canal.tcp.batch.size: 500<br /> srcDataSources:<br /> defaultDS:<br /> url: jdbc:mysql://127.0.0.1:3306/canal?useUnicode=true<br /> username: canal<br /> password: canal<br /> canalAdapters:<br /> groups:<br /> - groupId: g1<br /> outerAdapters:<br /> - name: logger<br /> - name: es7<br /> properties:<br /> security.auth: admin:4ad8f8f792e81cd0a6de<br /> cluster.name: easysearch<br />
新增 canal-adapter/conf/es7/test.yml,配置索引和表的映射关系。
<br /> dataSourceKey: defaultDS<br /> destination: example<br /> groupId: g1<br /> esMapping:<br /> _index: test # es 的索引名称<br /> _id: _id # es 的_id, 如果不配置该项必须配置下面的pk项_id则会由es自动分配<br /> # sql映射<br /> sql: " select a.id as _id,a.id,a.name,a.age from test a "<br /> etlCondition: "where a.id>={}"<br /> commitBatch: 3000 # 提交批大小<br />
启动 canal-adapter
./bin/startup.sh
![](https://www.infinilabs.com/img ... /3.png)5. 验证增量数据同步
在 MySQL 数据库中,对 test 表插入两条数据。
insert
test(
id,
name,
age) values(1,'canal_test1',11);
insert
test(
id,
name,
age) values(2,'canal_test2',22);
6. 在 Console 中,执行以下命令查询数据
![](https://www.infinilabs.com/img ... /4.png)
最后
Canal 同步的是增量数据,不会同步之前的存量数据。要同步存量数据可参考[《使用 Logstash 同步 MySQL 到 Easysearch》](https://www.infinilabs.com/blo ... stash/)
INFINI Labs 产品更新 | 发布 Easysearch Java 客户端,Console 支持 SQL 查询等功能
liaosy 发表了文章 • 0 个评论 • 3278 次浏览 • 2023-11-17 18:56
![release](https://www.infinilabs.com/img ... er.png)
INFINI Labs 产品又更新啦~,本次更新概要如下:发布 Easysearch-client Java 客户端,开发者通过 client 与 Easysearch 集群的交互变得更加简洁和直观;Console 开发工具新增 SQL 特性,支持 SELECT 查询等语法高亮和自动提示等;Gateway 的系统 API 添加了基于基本身份验证的安全功能。
以下是本次更新的详细说明。
INFINI Easysearch-client v1.0.1
正式发布 Easysearch Java 客户端。
这一里程碑式的更新为开发人员带来了前所未有的便利性,使得与 Easysearch 集群的交互变得更加简洁和直观。现在,通过 Easysearch-client 客户端,开发者可以直接使用 Java 方法和数据结构来进行交互,而不再需要依赖于传统的 HTTP 方法和 JSON。这一变化大大简化了操作流程,使得数据管理和索引更加高效。高级客户端的功能范围包括处理数据操作,管理集群,包括查看和维护集群的健康状态,并对 Security 模块全面兼容。它提供了一系列 API,用于管理角色、用户、权限、角色映射和账户。这意味着安全性和访问控制现在可以更加细粒度地管理,确保了数据的安全性和合规性。
使用说明参见:[快速开始](https://www.infinilabs.com/doc ... client)
INFINI Console v1.11.0
INFINI Console 是一款非常轻量级的多集群、跨版本的搜索基础设施统一管控平台。通过对流行的搜索引擎基础设施进行跨版本、多集群的集中纳管, 企业可以快速方便的统一管理企业内部的不同版本的多套搜索集群。
Console 在线体验: <http://demo.infini.cloud> (用户名/密码:readonly/readonly)。
Console 本次更新如下:
Features
- 开发工具 SQL 查询支持
- 支持 SELECT 查询及语法高亮
- 支持索引和字段自动提示
- 支持 FROM 前置语法
![](https://infinilabs.com/img/blo ... /1.png)
Bug fix
- 支持 SELECT 查询及语法高亮
- 修复平台概览集群指标为空的问题
Improvements
- LDAP 支持从 DN 中解析 OU 属性
- 集群动态优化显示,新增节点名称和索引名称的聚合统计过滤
INFINI Gateway v1.19.0
INFINI Gateway 是一个面向搜索场景的高性能数据网关,所有请求都经过网关处理后再转发到后端的搜索业务集群。基于 INFINI Gateway 可以实现索引级别的限速限流、常见查询的缓存加速、查询请求的审计、查询结果的动态修改等等。
Gateway 本次更新如下:
Features
- 添加
http
处理器 - 在 API 模块中添加基于基本身份验证的安全性
- 允许将自身注册到配置管理器
- 允许在配置错误时触发 panic
Bug fix
- 修复
rewrite_to_bulk
在较新版本中缺少_type
的问题 - 修复
rewrite_to_bulk
,支持无索引文档操作
Improvements
- 更新测试,断言解析结果
期待反馈
欢迎下载体验使用,如果您在使用过程中遇到如何疑问或者问题,欢迎前往 INFINI Labs Github(<https://github.com/infinilabs>) 中的对应项目中提交 Feature Request 或提交 Bug。
- 下载地址: <https://www.infinilabs.com/download>
您还可以通过邮件联系我们:hello@infini.ltd
或者拨打我们的热线电话:(+86) 400-139-9200
欢迎加入 Discord 聊天室:<https://discord.gg/4tKTMkkvVX>
也欢迎大家微信扫码添加小助手(INFINI-Labs),加入用户群一起讨论交流。
![联系我们](https://www.infinilabs.com/img ... ew.jpg)
关于极限科技(INFINI Labs)
![INFINI Labs](https://www.infinilabs.com/img ... bs.png)
极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。
极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。
官网:<https://www.infinilabs.com>
使用 Filebeat+Easysearch+Console 打造日志管理平台
yangmf2040 发表了文章 • 0 个评论 • 2981 次浏览 • 2023-11-17 16:51
近年来,日志管理平台越来越流行。使用日志管理平台可以实时地、统一地、方便地管理和查看日志,挖掘日志数据价值,驱动运维、运营,提升服务管理效率。
方案架构
![](https://infinilabs.com/img/blo ... /1.png)
- Beats 是轻量级采集器,包括 Filebeat、Metricbeat 等。
- Easysearch 是个分布式搜索引擎,提供搜集、分析、存储数据等主要功能。
- Console 是一个可视化工具,提供可视化查询,制作报表等功能。
本文将搭建一个统一日志管理平台。使用 Filebeat 采集 OS 中的日志(其他日志大同小异),发送到 Easysearch 中。最后通过 Console 进行日志的可视化查询与分析。
操作步骤
- 准备工作
- 部署 Easysearch
- 编辑 easysearch.yml 文件,打开注释 elasticsearch.api_compatibility: true
- 部署 Console
- 部署 Easysearch
- 安装并配置 Filebeat
- 下载 Filebeat,版本建议选择 7.10.2。下载地址:[https://www.elastic.co/cn/down ... -10-2](https://www.elastic.co/cn/down ... 7-10-2)
- 修改配置 filebeat.yml 文件
<br /> setup.template.name: "filebeat"<br /> setup.template.pattern: "system-log*"<br /> setup.template.fields: "${path.config}/fields.yml"<br /> <br /> output.elasticsearch:<br /> hosts: ["localhost:9200"]<br /> protocol: "https"<br /> ssl.verification_mode: none<br /> username: "admin"<br /> password: "4ad8f8f792e81cd0a6de"<br /> index: "system-log"<br />
- 下载 Filebeat,版本建议选择 7.10.2。下载地址:[https://www.elastic.co/cn/down ... -10-2](https://www.elastic.co/cn/down ... 7-10-2)
- 启用 system 模块并导入 pipeline
./filebeat modules enable system
./filebeat setup --pipelines --modules system
- 创建索引模板及初始索引,使用 [ZSTD+SOURCE_REUSE](https://www.infinilabs.com/blo ... ssion/) 技术节省磁盘空间
<br /> PUT _template/system_log<br /> {<br /> "order": 100,<br /> "index_patterns": [<br /> "system_log*"<br /> ],<br /> "settings": {<br /> "index": {<br /> "format": "7",<br /> "lifecycle": {<br /> "name": "ilm_.infini_metrics-30days-retention",<br /> "rollover_alias": "system_log"<br /> },<br /> "codec": "ZSTD",<br /> "source_reuse": true,<br /> "number_of_shards": "1",<br /> "translog": {<br /> "durability": "async"<br /> }<br /> }<br /> },<br /> "mappings": {<br /> "dynamic_templates": [<br /> {<br /> "strings": {<br /> "mapping": {<br /> "ignore_above": 256,<br /> "type": "keyword"<br /> },<br /> "match_mapping_type": "string"<br /> }<br /> }<br /> ]<br /> }<br /> }<br /> <br /> PUT system-log-00001<br /> {<br /> "aliases":{<br /> "system-log":{<br /> "is_write_index":true<br /> }<br /> }<br /> }<br />
- 启动 filebeat
nohup ./filebeat -c filebeat.yml 2>&1>/dev/null &
- 进入 Console 查看、搜索日志
![](https://infinilabs.com/img/blo ... /2.png) - 进入 Console 创建 dashboard 进行日志分析
![](https://infinilabs.com/img/blo ... /3.png)
- 准备工作
Easysearch 容量规划建议
liaosy 发表了文章 • 0 个评论 • 2893 次浏览 • 2023-10-31 10:51
你是否还在纠结怎么规划 Easysearch 集群存储容量,这篇文章将从容量估算、搜索吞吐量估算等场景为你提供详细的规划建议。
基于容量估算
主要问题:
- 每天将索引多少原始数据(GB)?保留数据多少天?
- 原始数据膨胀率
- 您将强制执行多少个副本分片?
- 您将为每个数据节点分配多少内存?
- 您的内存:数据比例是多少?
原则
- 保留 +15% 以保持在磁盘水位以下。
- 保留 +5% 用于误差和后台活动的余量。
- 保留相当于一个数据节点的资源来处理故障。
公式:
总数据量 GB = 原始数据 GB/天 * 保留天数 * 膨胀率 * (副本数 + 1)
总存储 GB = 总数据 GB * 1.15(包括磁盘 watermark threshold 和误差范围)
总数据节点数 = ROUNDUP(总存储 GB / (每个数据节点的内存 * 内存/数据比例)) + 1(用于故障转移)
举例:
假设 需要存储的源数据 50TB 大小
膨胀率 10% 副本数 1
每个节点 256G 内存
计算出:
总数据量 TB
= 50TB * (1 + 0.10) * (1 + 1)
= 110TB
总存储 TB
= 110TB * 1.15(考虑磁盘 watermark threshold 和误差范围)
= 126.5TB
如果有 256GB 的物理内存,128GB 会用于 JVM 堆,剩下的 128GB 将用于操作系统、文件缓存和其他系统进程。
按照常见的 1:30 的 RAM 到磁盘比例来计算,那么每个节点能处理的数据存储大约是:
256GB 内存 * 30 = 7680GB,大约等于 7.68TB
总数据节点数
= ROUNDUP(126.5TB / 7.68TB) + 1(用于故障转移)
= ROUNDUP(16.47) + 1
= 18
基于搜索吞吐量估算
在存储容量层面之外,还要考虑搜索响应时间和搜索吞吐量的目标,这些目标可能需要更多的内存和计算资源。
搜索响应时间受太多变量的影响,无法预测任何给定容量计划会如何影响它。但通过经验性测试搜索响应时间并估计预期的搜索吞吐量,我们可以估算出满足这些需求所需的集群资源。
主要问题:
- 你每秒的最高搜索次数是多少?
- 你的平均搜索响应时间(毫秒)是多少?
- 你的数据节点上有多少个核心和每个核心有多少个线程
经验方法:
与其确定资源将如何影响搜索速度,不如将搜索速度视为一个常数,通过在计划的硬件上进行测量来处理。然后确定集群需要多少个核心来处理预期的搜索吞吐量峰值。最终目标是防止线程池队列增长速度超过它们被消耗的速度。如果计算资源不足,搜索请求有被丢弃的风险。
公式:
峰值线程数 = 向上取整(每秒的峰值搜索次数 * 平均搜索响应时间(毫秒) / 1000 毫秒)
线程池大小 = 向上取整((每个节点的物理核心数 * 每个核心的线程数 * 3 / 2) + 1)
总数据节点数 = 向上取整(峰值线程数 / 线程池大小)
举例:
假设每秒 2 万搜索请求,平均响应时间 50 毫秒,每个节点有 16 个线程数,计算需要多少节点
峰值线程数 = 20000 * 50 /1000 = 1000
线程池大小 = (16 * 1 * 3/2) + 1 = 25
总数据节点数 = 1000 / 25 = 40
大概需要 40 个数据节点来处理每秒 2 万的搜索请求,平均响应时间为 50 毫秒,每个节点有 16 个线程。这是一个粗略的估计,实际需求可能会因多种因素而有所不同。建议进行实际测试以确认这些数字。
Hot, Warm, Frozen
根据索引使用情况不同,通常分为种存储。
这是一种经济高效的方法,用于存储大量数据,同时优化了对较新数据的性能。在容量规划期间,每个层次必须独立进行规模确定,然后进行合并。
| 层面 | 目标 | 示例存储 | 示例内存:存储比 |
| ------ | -------- | --------------------------- | ---------------- |
| Hot | 搜索为主 | SSD DAS/SAN (>200Gb/s) | 1:30 |
| Warm | 存储为主 | HDD DAS/SAN (~100Gb/s) | 1:100 |
| Frozen | 存档为主 | Cheapest DAS/SAN (<100Gb/s) | 1:500 |
实际情况要把搜索吞吐量估算和容量估算结合考虑。
关于 Easysearch
![about easysearch](https://www.infinilabs.com/img ... er.png)
INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。 与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。
官网文档:<https://www.infinilabs.com/doc ... gt%3B
下载地址:<https://www.infinilabs.com/download>
原文:<https://www.infinilabs.com/blo ... gt%3B
Easysearch Chart 0.2.0 都有哪些变化
liaosy 发表了文章 • 0 个评论 • 2249 次浏览 • 2023-10-20 20:32
Easysearch Chart 包更新了,让我们来看看都有哪些变化:
- Docker 镜像升级
![](https://infinilabs.com/img/blo ... 01.png)
- Service 名称调整,支持 NodePort 模式部署
![](https://infinilabs.com/img/blo ... 02.png)
![](https://infinilabs.com/img/blo ... 03.png)
![](https://infinilabs.com/img/blo ... 04.png)
现在让我们用 NodePort 模式部署一下:
```bash
helm search repo infinilabs
NAME CHART VERSION APP VERSION DESCRIPTION
infinilabs/console 0.2.0 1.8.0-1259 A Helm chart for Kubernetes
infinilabs/easysearch 0.2.0 1.6.0-59 A Helm chart for Kubernetes
infinilabs/gateway 0.1.0 1.18.0-1123 A Helm chart for Kubernetes
cat es-nodeport.yaml
service:
type: NodePort
http: 9200
transport: 9300
httpNodeport: 30920
transNodeport: 30930
helm install easysearch infinilabs/easysearch -n infini -f es-nodeport.yaml
NAME: easysearch
LAST DEPLOYED: Mon Oct 9 08:38:28 2023
NAMESPACE: infini
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:- Get the application URL by running these commands:
export NODE_PORT=$(kubectl get --namespace infini -o jsonpath="{.spec.ports[0].nodePort}" services easysearch)
export NODE_IP=$(kubectl get nodes --namespace infini -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
kubectl get svc -n infini
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
easysearch NodePort 10.43.175.2459200:30920/TCP,9300:30930/TCP 25s
kubectl get pod -n infini
NAME READY STATUS RESTARTS AGE
easysearch-0 1/1 Running 0 40s
curl -ku'admin:admin' https://10.0.0.1:30920
{
"name" : "easysearch-0",
"cluster_name" : "infinilabs",
"cluster_uuid" : "2cPioaONRVWp6BydbGuXDw",
"version" : {
"distribution" : "easysearch",
"number" : "1.6.0",
"distributor" : "INFINI Labs",
"build_hash" : "e5d1ff9067b3dd696d52c61fbca1f8daed931fb7",
"build_date" : "2023-09-22T00:55:32.292580Z",
"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
![about easysearch](https://www.infinilabs.com/img ... er.png)
INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。 与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。
官网文档:<https://www.infinilabs.com/doc ... gt%3B
下载地址:<https://www.infinilabs.com/download>
原文:<https://www.infinilabs.com/blo ... gt%3B
- Get the application URL by running these commands:
Easysearch 压缩功能的显著提升:从 8.7GB 到 1.4GB
liaosy 发表了文章 • 0 个评论 • 2273 次浏览 • 2023-10-09 17:11
引言
在海量数据的存储和处理中,索引膨胀率是一个不可忽视的关键指标。它直接影响了存储成本和查询性能。近期,Easysearch 在这方面取得了显著的进展,其压缩功能的效果远超过了之前的版本。本文将详细介绍这一进展。
Easysearch 各版本压缩性能对比
根据之前文章的数据,Easysearch v1.1 在处理相同数据时,其索引大小比 Elasticsearch v6.4.3 降低了 50%。但这还不是全部,最新的测试数据更是令人惊艳。
![](https://infinilabs.com/img/blo ... ge.png)
显著的压缩效果:实验数据解析
通过对比不同版本的存储大小,我们更直观地了解到 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
![about easysearch](https://www.infinilabs.com/img ... er.png)
INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。 与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。
官网文档:<https://www.infinilabs.com/doc ... gt%3B
下载地址:<https://www.infinilabs.com/download>
原文:https://www.infinilabs.com/blo ... .4GB/
Easysearch 压缩模式深度比较:ZSTD + source_reuse 的优势分析
liaosy 发表了文章 • 0 个评论 • 2320 次浏览 • 2023-10-09 17:08
引言
在使用 Easysearch 时,如何在存储和查询性能之间找到平衡是一个常见的挑战。Easysearch 具备多种压缩模式,各有千秋。本文将重点探讨一种特别的压缩模式:zstd + source_reuse
,我们最近重新优化了 source_reuse
,使得它在吞吐量和存储效率方面都表现出色。
测试概览
测试条件选用了 esrally 工具和 geonames 数据集来进行压力测试。数据集包含了 11396503 条记录,往单个 shard 写入,对以下几种压缩模式进行压测对比:
default
best_compression
zstd
zstd + source_reuse
![](https://infinilabs.com/img/blo ... ge.png)
下图是对 CPU 的监控,可以看到各个模式对 CPU 的使用是基本相近的。
default
![](https://infinilabs.com/img/blo ... e2.png)best_compression
![](https://infinilabs.com/img/blo ... e3.png)zstd
![](https://infinilabs.com/img/blo ... e4.png)zstd+reuse
![](https://infinilabs.com/img/blo ... e5.png)
关键数据点
测试结果主要围绕两个指标:
- 中位吞吐量:单位为“每秒操作数”,数值越大表示性能越好。
- 存储大小:单位为 “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
![about easysearch](https://www.infinilabs.com/img ... er.png)
INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。 与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。
官网文档:<https://www.infinilabs.com/doc ... gt%3B
下载地址:<https://www.infinilabs.com/download>
原文:https://www.infinilabs.com/blo ... odes/
INFINI Easysearch 在墨天轮搜索型数据库排名中荣登榜首
liaosy 发表了文章 • 0 个评论 • 2176 次浏览 • 2023-09-13 15:30
近日,2023 年 9 月的 [墨天轮中国数据库流行度排行](https://www.modb.pro/dbRank) 火热出炉,本月共有 287 个数据库参与排名,中国数据库行业竞争日益激烈。其中,极限科技旗下软件产品 [INFINI Easysearch](https://www.infinilabs.com/products/easysearch/) 在 搜索型数据库 分类排名中脱颖而出,荣登榜首,获得了第一名的好成绩。
![第一名](https://infinilabs.com/img/blo ... /1.png)
同时在国内整个数据库排行中进入了前 50 的行列。
![前50名](https://infinilabs.com/img/blo ... /2.png)
[INFINI Easysearch](https://www.infinilabs.com/products/easysearch/) 是一个分布式的近实时搜索与分析引擎,同时也是一款具备自主可控的分布式近实时搜索型数据库产品,具备高性能、高可用、弹性伸缩、高安全性等特性,具备支持丰富的个性化搜索及聚合分析能力,可部署在物理机、虚拟机、容器、私有云和公有云,能承载 PB 级别的海量业务数据,为金融核心系统、运营商、制造业和政企业务系统提供安全、稳定、可靠的快速检索和实时数据探索分析能力,可满足不同业务场景的各项复杂需求。
![Easysearch](https://infinilabs.com/img/blo ... er.png)
[Easysearch](https://www.infinilabs.com/products/easysearch/) 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。 与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。
国内搜索型数据库最近几年发展迅速,关键技术逐渐突破,应用场景和数据规模也逐年上升,已经成为企业必不可少的核心基础设施,产业生态也日益繁荣。极限科技作为国内搜索型数据库产品厂商第一梯队的杰出代表,同时也是行业标准的起草单位之一,此次在墨天轮中国数据库流行度排行搜索型数据库分类中荣登榜首,不仅代表着对 [INFINI Easysearch](https://www.infinilabs.com/products/easysearch/) 搜索型数据库的肯定,更代表着极限科技在“搜索数据库”产品的研究与创新上,取得了新的里程碑。
未来,极限科技将持续专注于打造国产搜索型数据库产品,致力于为用户提供更加优质、稳定、高效、安全的数据搜索服务和分析体验。
关于极限科技(INFINI Labs)
![关于极限科技](https://infinilabs.com/img/blo ... bs.png)
极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。
极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。
官网:<https://www.infinilabs.com>
让 Easysearch 运行在 LoongArch(3C5000L) 上
Hardy 发表了文章 • 3 个评论 • 1863 次浏览 • 2023-09-11 12:53
简介
在上一次,我介绍了在国产操作系统 Kylin V10 (Lance)-aarch64 上安装单机版 Easysearch/Console/Agent/Gateway/Loadgen,小伙伴们可[查看原文](https://elasticsearch.cn/article/14908)。今天我重点介绍下在 Loongnix-Server Linux release 8.4.1 (3C5000L)上安装 Easysearch。
系统配置
在安装之前,需要先进行系统参数调整并创建操作用户,以下命令均需要使用 root 用户操作。
```bash
配置nofile和memlock
tee /etc/security/limits.d/21-infini.conf <<-'EOF'
- soft nofile 1048576
- hard nofile 1048576
- soft memlock unlimited
- hard memlock unlimited
root soft nofile 1048576
root hard nofile 1048576
root soft memlock unlimited
root hard memlock unlimited
EOF
关闭THP
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
grep -i HugePages_Total /proc/meminfo
grep -wq transparent_hugepage /etc/rc.local || cat <<-'EOF' >> /etc/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
chmod 755 /etc/rc.local
内核调优
tee /etc/sysctl.d/70-infini.conf <<-'EOF'
vm.max_map_count = 262145
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_timestamps=1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 900
net.ipv4.tcp_max_tw_buckets = 2000000
net.ipv4.ip_local_port_range = 1024 65535
EOF
sysctl -p /etc/sysctl.d/70-infini.conf
```
用户配置
```bash创建Easysearch操作用户
groupadd -g 602 es
useradd -u 602 -g es -m -d /home/es -c 'easysearch' -s /bin/bash es
```
配置 JDK
```bash在各个节点上分别操作
wget -N http://ftp.loongnix.cn/Java/op ... ar.gz -P /usr/src
mkdir -p /usr/local/jdk
tar -zxf /usr/src/loongson*.tar.gz -C /usr/local/jdk --strip-components 1
tee /etc/profile.d/java.sh <<-'EOF'set java environment
JAVA_HOME=/usr/local/jdk
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib
PATH=$JAVA_HOME/bin:$PATH
export PATH JAVA_HOME CLASSPATH
EOF
source /etc/profile
java -version
```
Easysearch 部署
部署及密码配置
```bash在线安装
curl -sSL http://get.infini.sh | bash -s -- -p easysearch -d /data/easysearch
初始化证书(若不采用默认证书,如需要调整证书可修改证书生成文件)
cd /data/easysearch
默认会生成随机密码
bin/initialize.sh
ll /data/easysearch/config/{.crt,.key,*.pem}
```
配置文件及 JVM 调整
```bash
cat </data/easysearch/config/easysearch.yml
cluster.name: infinilabs
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
transport.port: 9300
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
cluster.initial_master_nodes: ["node-1"]
path.home: /data/easysearch
path.data: /data/easysearch/data
path.logs: /data/easysearch/logs
http.compression: true
security.enabled: true
security.audit.type: noop
security.ssl.transport.cert_file: instance.crt
security.ssl.transport.key_file: instance.key
security.ssl.transport.ca_file: ca.crt
security.ssl.transport.skip_domain_verify: true
security.ssl.http.enabled: true
security.ssl.http.cert_file: instance.crt
security.ssl.http.key_file: instance.key
security.ssl.http.ca_file: ca.crt
security.allow_default_init_securityindex: true
security.nodes_dn:- 'CN=infini.cloud,OU=UNIT,O=ORG,L=NI,ST=FI,C=IN'
security.restapi.roles_enabled: [ "superuser", "security_rest_api_access" ]
security.system_indices.enabled: true
security.ssl.http.clientauth_mode: OPTIONAL
security.system_indices.indices: [".infini-*"]
for admin dn
specify admin certs to operate against system indices, basic_auth is not required
curl -k --cert config/admin.crt --key config/admin.key -XDELETE 'https://localhost:9200/.infini-*/'
security.authcz.admin_dn:
- 'CN=admin.infini.cloud,OU=UNIT,O=ORG,L=NI,ST=FI,C=IN'
EOF
根据实际机器内存的大小进行配置,推荐配置为机器内存一半,且不超过31G
sed -i "s/1g/4g/g" $ES_HOME/config/jvm.options
```
备份目录及权限调整
```bash创建备份目录
mkdir -p /data/easysearch/backup
更新目录权限
chown -R es.es /data/easysearch
```
环境变量及启动服务
```bash
su - es
grep -wq easysearch ~/.bashrc || cat<> ~/.bashrc
export ES_HOME=/data/easysearch
EOF
source ~/.bashrc
jna替换<龙芯平台有独立的jna实现>
rm -rvf $ES_HOME/lib/jna*.jar
wget -N https://release.infinilabs.com ... 1.jar -P $ES_HOME/lib
以后台方式启动服务
$ES_HOME/bin/easysearch -d
```
Easysearch 验证
bash<br /> curl -ku "admin:$pass" <a href="https://127.0.0.1:9200" rel="nofollow" target="_blank">https://127.0.0.1:9200</a><br /> curl -ku "admin:$pass" <a href="https://127.0.0.1:9200/_cluster/health?pretty" rel="nofollow" target="_blank">https://127.0.0.1:9200/_cluster/health?pretty</a><br /> curl -ku "admin:$pass" <a href="https://127.0.0.1:9200/_cat/nodes?v" rel="nofollow" target="_blank">https://127.0.0.1:9200/_cat/nodes?v</a><br />
![Easysearch信息](https://infinilabs.com/img/blo ... ch.jpg)
部署 Console
```bash
curl -sSL http://get.infini.sh | bash -s -- -p console
安装服务并启动
cd /opt/console
./console-linux-loong64 -service install
./console-linux-loong64 -service start
验证
systemctl status console
```
部署 Agent
```bash
curl -sSL http://get.infini.sh | bash -s -- -p agent
修改Agent配置文件
cd /opt/agent
sed -i "/ES_ENDPOINT:/ s|(.\: ).|\1$https://localhost:9200|" agent.yml
sed -i "/ES_USER:/ s|(.\: ).|\1admin|" agent.yml
sed -i "/ES_PASS:/ s|(.\: ).|\1$pass|" gateway.yml
sed -i "/API_BINDING:/ s|(.\: ).|\1\"0.0.0.0:8080\"|" agent.yml
head -n 5 agent.yml
安装服务并启动
./agent-linux-loong64 -service install
./agent-linux-loong64 -service start
验证
systemctl status agent
```
部署 Gateway
```bash
curl -sSL http://get.infini.sh | bash -s -- -p gateway
cd /opt/gateway
修改Gateway配置文件
sed -i "/ES_PASS:/ s|(.\: ).|\1$pass|" gateway.yml
head -n 10 gateway.yml
安装服务并启动
./gateway-linux-loong64 -service install
./gateway-linux-loong64 -service start
检查服务
systemctl status gateway
curl -u "admin:$pass" http://127.0.0.1:8000
```
部署 Loadgen
```bash
curl -sSL http://get.infini.sh | bash -s -- -p loadgen
写入数据测试
cd /opt/loadgen
mkdir -p mock
cat <mock/nginx.log
175.10.75.216 - - [28/Jul/2020:21:20:26 +0800] "GET / HTTP/1.1" 200 8676 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
175.10.75.216 - - [28/Jul/2020:21:20:26 +0800] "GET /vendor/bootstrap/css/bootstrap.css HTTP/1.1" 200 17235 "<a href="http://dl-console.elasticsearch.cn/"" rel="nofollow" target="_blank">http://dl-console.elasticsearch.cn/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
175.10.75.216 - - [28/Jul/2020:21:20:26 +0800] "GET /vendor/daterangepicker/daterangepicker.css HTTP/1.1" 200 1700 "<a href="http://dl-console.elasticsearch.cn/"" rel="nofollow" target="_blank">http://dl-console.elasticsearch.cn/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
175.10.75.216 - - [28/Jul/2020:21:20:26 +0800] "GET /vendor/fork-awesome/css/v5-compat.css HTTP/1.1" 200 2091 "<a href="http://dl-console.elasticsearch.cn/"" rel="nofollow" target="_blank">http://dl-console.elasticsearch.cn/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
175.10.75.216 - - [28/Jul/2020:21:20:26 +0800] "GET /assets/font/raleway.css HTTP/1.1" 200 145 "<a href="http://dl-console.elasticsearch.cn/"" rel="nofollow" target="_blank">http://dl-console.elasticsearch.cn/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
175.10.75.216 - - [28/Jul/2020:21:20:26 +0800] "GET /vendor/fork-awesome/css/fork-awesome.css HTTP/1.1" 200 8401 "<a href="http://dl-console.elasticsearch.cn/"" rel="nofollow" target="_blank">http://dl-console.elasticsearch.cn/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
175.10.75.216 - - [28/Jul/2020:21:20:26 +0800] "GET /assets/css/overrides.css HTTP/1.1" 200 2524 "<a href="http://dl-console.elasticsearch.cn/"" rel="nofollow" target="_blank">http://dl-console.elasticsearch.cn/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
175.10.75.216 - - [28/Jul/2020:21:20:26 +0800] "GET /assets/css/theme.css HTTP/1.1" 200 306 "<a href="http://dl-console.elasticsearch.cn/"" rel="nofollow" target="_blank">http://dl-console.elasticsearch.cn/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
175.10.75.216 - - [28/Jul/2020:21:20:26 +0800] "GET /vendor/fancytree/css/ui.fancytree.css HTTP/1.1" 200 3456 "<a href="http://dl-console.elasticsearch.cn/"" rel="nofollow" target="_blank">http://dl-console.elasticsearch.cn/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
175.10.75.216 - - [28/Jul/2020:21:20:26 +0800] "GET /syncthing/development/logbar.js HTTP/1.1" 200 486 "<a href="http://dl-console.elasticsearch.cn/"" rel="nofollow" target="_blank">http://dl-console.elasticsearch.cn/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
EOF
cat <loadgen.yml
env:
ES_USERNAME: admin
ES_PASSWORD: $pass
ES_ENDPOINT: http://localhost:8000
runner:total_rounds: 1
no_warm: false
Whether to log all requests
log_requests: false
Whether to log all requests with the specified response status
log_status_codes:
- 0
- 500
assert_invalid: false
assert_error: false
variables: - name: ip
type: file
path: dict/ip.txt - name: message
type: file
path: mock/nginx.log
replace: # replace special characters in the value
'"': '\"'
'\': '\' - name: user
type: file
path: dict/user.txt - name: id
type: sequence - name: uuid
type: uuid - name: now_local
type: now_local - name: now_utc
type: now_utc - name: now_unix
type: now_unix - name: suffix
type: range
from: 10
to: 13
requests: - request:
method: POST
runtime_variables:
batch_no: uuid
runtime_body_line_variables:
routing_no: uuid
basic_auth:
username: $[[env.ES_USERNAME]]
password: $[[env.ES_PASSWORD]]
url: $[[env.ES_ENDPOINT]]/_bulk
body_repeat_times: 5000
body: |
{ "index" : { "_index" : "test-$[[suffix]]", "_id" : "$[[uuid]]" } }
{ "id" : "$[[uuid]]","routing_no" : "$[[routing_no]]","batch_number" : "$[[batch_no]]","message" : "$[[message]]","random_no" : "$[[suffix]]","ip" : "$[[ip]]","now_local" : "$[[now_local]]","now_unix" : "$[[now_unix]]" }
EOF
执行测试
./loadgen-linux-loong64 -c 6 -d 6 --compress
检查测试索引文档
curl -u "admin:$pass" http://127.0.0.1:8000/_cat/indices/test*?v
```
至此,完成在 LoongArch(3C5000L)上安装单机版 Easysearch/Console/Agent/Gateway/Loadgen。通过浏览器 http://机器域名:9000/ 即可访问 Console,对 Easysearch 进行配置管理。
可能遇到的问题
![连接被拒绝](https://infinilabs.com/img/blo ... ct.jpg)
检查下配置文件中监听的地址是否正确,防火墙是否有关闭。
![防火墙状态](https://infinilabs.com/img/blo ... ll.jpg)
关于 Easysearch
![about easysearch](https://www.infinilabs.com/img ... er.png)
INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。 与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。
官网文档:<https://www.infinilabs.com/doc ... gt%3B
下载地址:<https://www.infinilabs.com/download>
- 'CN=infini.cloud,OU=UNIT,O=ORG,L=NI,ST=FI,C=IN'