嘿~ 今天天气不错嘛
Elasticsearch

Elasticsearch

从 Redis 开源协议变更到 ES 国产化:一次技术自主的机遇

EasysearchMuses 发表了文章 • 0 个评论 • 2834 次浏览 • 2024-04-11 16:05 • 来自相关话题

引言

近日,Redis Labs 宣布其主导的开源项目 Redis 将采用双重源代码可用许可证(RSALv2)和服务器端公共许可证(SSPLv1)。这一重大决策标志着 Redis 从传统的 BSD 许可证向更加严格的控制权转变,同时也引发了广泛的社区和行业讨论。这不仅是一个关于许可证变更的故事,更是关于开源社区如何响应,以及这一变化如何激发对国产技术探索和发展的深刻思考。Redis,作为最受欢迎的开源键值存储数据库之一,其开源协议的变更反映了开源软件在商业化道路上的挑战和压力。Redis Labs 的 CEO Rowan Trollope 指出,这一变化旨在防止云服务提供商免费使用 Redis 代码,同时促进 Redis 社区的可持续发展和创新。

Redis 协议变更的深远影响

Redis 决定放弃 BSD 协议,转而采用双重源代码可用许可证(RSALv2 和 SSPLv1),标志着开源界的一个重要转折点。这一变化不仅影响了 Redis 本身,更引发了社区成员和技术行业的激烈讨论,许多人担心这将限制 Redis 的开源精神和广泛应用。然而,也有声音认为,这为其他开源项目,如 KeyDB、Dragonfly 和 Garnet 等,提供了发展的机遇,尤其是在提供与 Redis 兼容的替代解决方案方面。尽管 Redis 的这一变更在技术和法律上引发了争议,它也激发了开源社区对于如何在维护开源精神和寻求商业可持续性之间找到平衡的探索。此外,Redis 团队对于保持客户端库的开源许可和继续支持开源社区版的承诺,展示了一种尝试在新的许可模式下保持开放性和可接入性的方法。由于 Redis 的广泛应用,其协议变更对云服务商、Linux 发行版,甚至整个开源软件生态都产生了不小的冲击。一方面,云服务提供商需要重新评估其服务模型;另一方面,一些 Linux 发行版可能需要考虑将 Redis 从其软件仓库中移除。

ES 国产化的契机

Redis 开源协议的变更同时也让人们重新审视其他关键技术,特别是 Elasticsearch(ES)的依赖和发展。ES 作为一个强大的搜索和数据分析引擎,在全球范围内被广泛使用。随着对开源项目商业化模式的重新考量,中国开发者和企业开始寻求国产化的 ES 替代品,旨在减少对外部技术的依赖,同时推动国内技术生态的多元化和自主创新。但是国产化的探索并非没有挑战。从技术兼容性、性能优化到社区生态建设,每一步都需要深思熟虑和持续的努力。然而,Redis 的许可证变更为国内技术自主提供了一个独特的视角,鼓励开发者、企业乃至政府机构更加积极地参与到开源技术的本土化和创新中来。Redis 开源协议的变更引发的讨论和行动,凸显了开源社区对于自身未来发展方向的深刻反思。这一变革不仅关乎一个项目的许可模式转变,更触及到开源项目如何在保持开放和自由的同时,寻找到可持续发展的道路。此外,它也促使更多的开源项目和企业思考如何在全球化的技术生态中保持竞争力和影响力。

Easysearch:国产化的新选择

针对这一需求,极限科技 隆重推出了 Easysearch 搜索引擎软件,旨在提供一个与 Elasticsearch 兼容的国产化解决方案。Easysearch 不仅支持原生 Elasticsearch 的 DSL 查询语法,还提供了诸多企业级功能的增强,如更高的性能、稳定性和扩展性,以及更加丰富的安全管理和数据压缩功能。这表明,国产化技术的发展不仅是为了替代,更是在原有基础上进行创新和优化。ES 国产化解决方案 Easysearch 的推出,是响应国家对信创、自主可控战略布局的具体行动。通过提供兼容性强、功能丰富且稳定的国产技术替代品,不仅有助于减少对外部技术的依赖,也为国内技术生态的繁荣和创新贡献力量。这一过程中,既涵盖了对现有技术的深入理解和应用,也包含了对新技术、新方法的探索和实践。

结语

Redis 开源协议的变更和 Elasticsearch 国产化解决方案的兴起,共同反映了当前技术世界中开源与商业、国际与国产之间复杂而微妙的关系。这一趋势不仅仅是技术领域的变化,更是全球化背景下,各国在技术自主、安全与发展方面所做出的战略性调整。随着更多开源项目和技术面临类似的挑战,我们或许可以预见,技术自主和开源创新将成为推动未来技术发展的两大关键力量。

参考

关于极限科技(INFINI Labs)

关于极限科技

极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。

极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。

官网:https://www.infinilabs.com

3月26日 OpenSearch Community Meeting 视频回放

OpenSearchCharele 回复了问题 • 2 人关注 • 1 个回复 • 3671 次浏览 • 2024-04-05 16:58 • 来自相关话题

记某客户的一次 Elasticsearch 无缝数据迁移

Elasticsearchyangmf2040 发表了文章 • 0 个评论 • 3420 次浏览 • 2024-04-02 14:16 • 来自相关话题

背景

客户需要将 Elasticsearch 集群无缝迁移到移动云,迁移过程要保证业务的最小停机时间。

实现方式

通过采用成熟的 INFINI 网关来进行数据的双写,在集群的切换恢复过程中来记录数据变更,待全量数据恢复之后再追平后面增量数据,追平增量之后,进行校验确保数据一致再进行流量的切换。

总体流程

总体迁移流程如下:

  1. 客户业务代码,切流量,双写。(新增的变更都会记录在网关本地,但是暂停消费到移动云)
  2. 暂停网关移动云这边的增量数据消费。
  3. 迁移 11 月的数据,快照,快照上传到 S3;
  4. 下载 S3 的文件到移动云。
  5. 恢复快照到移动云的 11 月份的索引。
  6. 开启网关移动云这边的增量消费。
  7. 等待增量追平(接近追平)。
  8. 按照时间条件(如:时间 A,当前时间往前 30 分钟),验证文档数据量,Hash 校验等等。
  9. 停业务的写入,网关,腾讯云的写入(10 分钟)。
  10. 等待剩余的增量追完。
  11. 对时间 A 之后的,增量进行校验。
  12. 切换所有流量到移动云,业务端直接访问移动云 ES。

总体的迁移时间:

  1. 11 月备份时间(30 分钟)19 号开始
  2. 备份下载到移动云的时间(2-3 天)
  3. 备份恢复到移动云集群的时间(30 分钟)
  4. 11 月份增量备份(20 分钟)(双写开始)(21 号)
  5. 11 月份增量下载到移动云(6 小时)
  6. 11 月份增量恢复时间(20 分钟)
  7. 追增量数据(8 个小时产生的数据,需要 1 个小时)
  8. 校验比对(存量 1 个小时)
  9. 流量暂停,增量的校验(10 分钟)
  10. 切换(1 分钟)

总体流程如下示意图:

ES 集群信息

  1. ES 版本 7.10.1
  2. 2个热节点 3个温节点  总数 1.9 TB
  3. 索引   1041, 分片2085
  4. 无自定义插件
  5. 有 update_bu_query 使用
  6. 有 delete_by_query 使用
  7. 吞吐量没有测试过,当前日增文档数 1 千多万,目标日增加上亿  

    迁移操作手册(参考)

    环境

  • 自建 ES 5.4.2
  • 自建 ES 5.6.8
  • 自建 ES 7.5.0
  • 极限网关服务器 1
  • 极限网关服务器 2
  • 云端负载均衡 1 (监听 9200 端口,指向极限网关服务器 1/2 的 8000 端口)
  • 云端负载均衡 2 (监听 9200 端口,指向极限网关服务器 1/2 的 8001 端口)

    场景描述

    若干个自建 Elasticsearch 集群需要平滑迁移到移动云,业务不停写、不做代码改动。

    数据架构

    通过将应用端流量走网关的方式,请求同步转发给自建 ES,网关记录所有的写入请求,并确保顺序在云端 ES 上重放请求,两侧集群的各种故障都妥善进行了处理,从而实现透明的集群双写,实现安全无缝的数据迁移。 业务端如果已经部署在云上,可以使用云上的 SLB 服务来访问网关,确保后端网关的高可用,如果业务端和极限网关还在企业内网,可以使用极限网关自带的 4 层浮动 IP 来确保网关的高可用

数据描述

以数据从自建集群 5.4.2 迁移到云上的 5.6.16 为例进行说明,执行步骤依次说明。

执行步骤

部署 INFINI Gateway

为了保证数据的无缝透明迁移,通过 INFINI Gateway 来进行双写。

  1. 系统调优

    参考此文档

  2. 下载程序
    
    [root@iZbp1gxkifg8uetb33pvcoZ ~]# mkdir /opt/gateway
    [root@iZbp1gxkifg8uetb33pvcoZ ~]# cd /opt/gateway/
    [root@iZbp1gxkifg8uetb33pvcoZ gateway]# wget http://release.infinilabs.com/gateway/snapshot/gateway-1.6.0_SNAPSHOT-649-linux-amd64.tar.gz
    --2022-05-19 10:16:25--  http://release.infinilabs.com/gateway/snapshot/gateway-1.6.0_SNAPSHOT-649-linux-amd64.tar.gz
    正在解析主机 release.infinilabs.com (release.infinilabs.com)... 120.79.205.193
    正在连接 release.infinilabs.com (release.infinilabs.com)|120.79.205.193|:80... 已连接。
    已发出 HTTP 请求,正在等待回应... 200 OK
    长度:7430568 (7.1M) [application/octet-stream]
    正在保存至: “gateway-1.6.0_SNAPSHOT-649-linux-amd64.tar.gz”

100%[==============================================================================================================================================>] 7,430,568 22.8MB/s 用时 0.3s

2022-05-19 10:16:25 (22.8 MB/s) - 已保存 “gateway-1.6.0_SNAPSHOT-649-linux-amd64.tar.gz” [7430568/7430568])

[root@iZbp1gxkifg8uetb33pvcoZ gateway]# tar vxzf gateway-1.6.0_SNAPSHOT-649-linux-amd64.tar.gz gateway-linux-amd64 gateway.yml sample-configs/ sample-configs/elasticsearch-with-ldap.yml sample-configs/indices-replace.yml sample-configs/record_and_play.yml sample-configs/cross-cluster-search.yml sample-configs/kibana-proxy.yml sample-configs/elasticsearch-proxy.yml sample-configs/v8-bulk-indexing-compatibility.yml sample-configs/use_old_style_search_response.yml sample-configs/context-update.yml sample-configs/elasticsearch-route-by-index.yml sample-configs/hello_world.yml sample-configs/entry-with-tls.yml sample-configs/javascript.yml sample-configs/log4j-request-filter.yml sample-configs/request-filter.yml sample-configs/condition.yml sample-configs/cross-cluster-replication.yml sample-configs/secured-elasticsearch-proxy.yml sample-configs/fast-bulk-indexing.yml sample-configs/es_migration.yml sample-configs/index-docs-diff.yml sample-configs/rate-limiter.yml sample-configs/async-bulk-indexing.yml sample-configs/elasticssearch-request-logging.yml sample-configs/router_rules.yml sample-configs/auth.yml sample-configs/index-backup.yml


3. 修改配置

将网关提供的示例配置拷贝,并根据实际集群的信息进行相应的修改,如下:

[root@iZbp1gxkifg8uetb33pvcoZ gateway]# cp sample-configs/cross-cluster-replication.yml 5.4.2TO5.6.16.yml

首先修改集群的身份信息,如下:
![](https://www.infinilabs.com/img/blog/2024/seamless-data-migration/3.png)

然后修改集群的注册信息,如下:
![](https://www.infinilabs.com/img/blog/2024/seamless-data-migration/4.png)

根据需要修改网关监听的端口,以及是否开启 TLS (如果应用客户端通过 http 协议访问 ES,请将entry.tls.enabled 值改为 false),如下:
![](https://www.infinilabs.com/img/blog/2024/seamless-data-migration/5.png)
不同的集群可以使用不同的配置,分别监听不同的端口,用于业务的分开访问。

4. 启动网关

启动网关并指定刚刚创建的配置,如下:

[root@iZbp1gxkifg8uetb33pvcoZ gateway]# ./gateway-linux-amd64 -config 5.4.2TO5.6.16.yml


/ \ /\ / \/\/ / /\ \ \/\ /_/\ / /\///\ / /\/\ \ \/ \/ //\_ / / /\/ \/ / // \ /\ / \/ \ ___/\/ \/\/ \/ \/ \/_/ _/_/

[GATEWAY] A light-weight, powerful and high-performance elasticsearch gateway. [GATEWAY] 1.6.0_SNAPSHOT, 2022-05-18 11:09:54, 2023-12-31 10:10:10, 73408e82a0f96352075f4c7d2974fd274eeafe11 [05-19 13:35:43] [INF] [app.go:174] initializing gateway. [05-19 13:35:43] [INF] [app.go:175] using config: /opt/gateway/5.4.2TO5.6.16.yml. [05-19 13:35:43] [INF] [instance.go:72] workspace: /opt/gateway/data1/gateway/nodes/ca2tc22j7ad0gneois80 [05-19 13:35:43] [INF] [app.go:283] gateway is up and running now. [05-19 13:35:50] [INF] [actions.go:358] elasticsearch [primary] is available [05-19 13:35:50] [INF] [api.go:262] api listen at: http://0.0.0.0:2900 [05-19 13:35:50] [INF] [reverseproxy.go:261] elasticsearch [primary] hosts: [] => [192.168.0.19:9200] [05-19 13:35:50] [INF] [reverseproxy.go:261] elasticsearch [backup] hosts: [] => [es-cn-tl32p9fkk0006m56k.elasticsearch.aliyuncs.com:9200] [05-19 13:35:50] [INF] [reverseproxy.go:261] elasticsearch [primary] hosts: [] => [192.168.0.19:9200] [05-19 13:35:50] [INF] [reverseproxy.go:261] elasticsearch [backup] hosts: [] => [es-cn-tl32p9fkk0006m56k.elasticsearch.aliyuncs.com:9200] [05-19 13:35:50] [INF] [reverseproxy.go:261] elasticsearch [primary] hosts: [] => [192.168.0.19:9200] [05-19 13:35:50] [INF] [entry.go:322] entry [my_es_entry/] listen at: https://0.0.0.0:8000 [05-19 13:35:50] [INF] [module.go:116] all modules are started


5. 后台运行

[root@iZbp1gxkifg8uetb33pvcoZ gateway]# nohup ./gateway-linux-amd64 -config 5.4.2TO5.6.16.yml &


6. 应用授权

curl -XPOST http://localhost:2900/_license/apply -d' { "license": "XXXXXXXXXXXXXXXXXXXXXXXXX" }'

#### 部署 INFINI Console
为了方便在多个集群之间快速切换,使用 INFINI [Console](https://infinilabs.cn/products/console/) 来进行管理。

1. 下载安装

[root@iZbp1gxkifg8uetb33pvcpZ console]# wget http://release.infinilabs.com/console/snapshot/console-0.3.0_SNAPSHOT-596-linux-amd64.tar.gz --2022-05-19 10:57:24-- http://release.infinilabs.com/console/snapshot/console-0.3.0_SNAPSHOT-596-linux-amd64.tar.gz 正在解析主机 release.infinilabs.com (release.infinilabs.com)... 120.79.205.193 正在连接 release.infinilabs.com (release.infinilabs.com)|120.79.205.193|:80... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:13576234 (13M) [application/octet-stream] 正在保存至: “console-0.3.0_SNAPSHOT-596-linux-amd64.tar.gz”

100%[==============================================================================================================================================>] 13,576,234 33.2MB/s 用时 0.4s

2022-05-19 10:57:25 (33.2 MB/s) - 已保存 “console-0.3.0_SNAPSHOT-596-linux-amd64.tar.gz” [13576234/13576234])

[root@iZbp1gxkifg8uetb33pvcpZ console]# tar vxzf console-0.3.0_SNAPSHOT-596-linux-amd64.tar.gz console-linux-amd64 console.yml


2. 修改配置

[root@iZbp1gxkifg8uetb33pvcpZ console]# cat console.yml

for the system cluster, please use Elasticsearch v7.3+

elasticsearch:

  1. 启动服务

    [root@iZbp1gxkifg8uetb33pvcpZ console]# ./console-linux-amd64 -service install
    Success
    [root@iZbp1gxkifg8uetb33pvcpZ console]# ./console-linux-amd64 -service start
    Success
  2. 访问后台

访问该主机的 9000 端口,即可打开 Console 后台,http://x.x.x.x:9000/ 打开菜单 [System][Cluster] ,注册当前需要管理的 Elasticsearch 集群和网关地址,用来快速管理,如下:

测试 INFINI Gateway

为了验证网关是否正常工作,我们通过 INFINI Console 来快速验证一下。 首先通过走网关的接口来创建一个索引,并写入一个文档,如下: 查看 5.4.2 集群的数据情况,如下: 查看集群 5.6.16 的数据情况,如下: 说明网关配置都正常,验证结束。

调整网关的消费策略

因为我们需要在全量数据迁移之后,才能进行增量数据的追加,在全量数据迁移完成之前,我们应该暂停增量数据的消费。修改网关配置里面 Pipeline consume-queue_backup-to-backupconsume-queue_primary-failure-to-backup的参数 auto_startfalse,表示不自动启动该任务,具体配置方法如下: 修改完配置之后,需要重新启动网关。 为了方便管理,可以使用 INFINI Console 来注册和管理网关,如下: 待全量迁移完成之后,可以通过后台的 Task 管理来进行后续的任务启动、停止,如下:

切换流量

接下来,将业务正常写的流量切换到网关,也就是需要把之前指向 ES 5.4.2 的地址指向网关的地址,如果 5.4.2 集群开启了身份验证,业务端代码同样需要传递身份信息,和 5.4.2 之前的用法保持不变。 切换流量到网关之后,用户的请求还是以同步的方式正常访问自建集群,网关记录到的请求会按顺序记录到 MQ 里面,但是消费是暂停状态。 如果业务端代码使用的 ES 的 SDK 支持 Sniff,并且业务代码开启了 Sniff,那么应该关闭 Sniff,避免业务端通过 Sniff 直接链接到后端的 ES 节点,所有的流量现在应该都只通过网关来进行访问。

全量数据迁移

在流量迁移到网关之后,我们开始对自建 Elasticsearch 集群的数据进行全量迁移到云端 Elasticsearch 集群。 全量迁移已有的数据的方式有很多种:

  • 通过快照的方式进行恢复
  • 使用工具来导出导入,如: ESM

如果索引数量很多的话,可以按照索引依次进行导入,同时需要注意将 Mapping 和 Setting 提前导入。 以现在 5.4 集群的索引来为例,目前的待迁移索引为 demo_5_4_2,只有4 个文档: 我们使用网关自带的迁移功能来进行数据迁移,拷贝自带的样例文件,如下:

[root@iZbp1gxkifg8uetb33pvcpZ gateway]# cp sample-configs/es_migration.yml  5.4TO5.6.yml

修改其中代表集群和索引的相关配置,可以根据需要配置是否需要重命名索引和统一 Type( 用于跨版本统一 Type),如下图红框位置: 创建好模板和索引,如果目标集群不允许动态创建文档,需要提前创建好索引,如下图: 然后就可以开始数据的迁移了,执行网关程序并指定刚刚定义的配置,如下: 执行完成后,可以确认下数据的情况,如下图: 全量数据至此导入完成。

增量数据迁移

在全量导入的过程中,可能存在数据的增量修改,不过这部分请求都已经完整记录下来了,我们只需要开启网关的消费任务即可将挤压的请求应用到云端的 Elasticsearch 集群。 示例操作如下: 如果从 5.6 的集群来看的话,这部分的修改还没同步过来,如下: 这部分增量的数据变更,在网关层面都进行了完整记录,我们只需要开启网关的增量消费任务,如下: 通过观察队列是否消费完成来判断增量数据是否做完,如下: 现在我们再看一下 5.6 集群的数据情况,如下: 数据的增量更新就过来了。

执行数据比对

由于集群内部的数据可能比较多,我们需要进行一个完整的比对才能确保数据的完整性,可以通过网关自带的数据比对工具来进行,将样例自带的文件拷贝一份,如下:

[root@iZbp1gxkifg8uetb33pvcpZ gateway]# cp sample-configs/index-docs-diff.yml  5.4DIFF5.6.yml

修改需要比对的集群和索引信息,可以加上过滤条件,如时间范围窗口来进行增量 Diff,如下图:

执行网关程序,并指定该配置文件,如下图: 如图,两个集群完全一致。

切换集群

如果验证完之后,两个集群的数据已经完全一致了,可以将程序切换到新集群,或者将网关的配置里面的主备进行互换,同步写 5.6 集群。 双集群在线运行一段时间,待业务完全验证之后,再安全下线旧集群,如遇到问题,也可以随时回切到老集群。

小结

通过使用极限网关,自建 ES 集群可以安全无缝的迁移到移动云 ES,在迁移的过程中,两套集群通过网关进行了解耦,两套集群的版本也可以不一样,在迁移的过程中还能实现版本的无缝升级。 如有任何问题,请随时联系我,期待与您交流!

7 年+积累、 Elastic 创始人Shay Banon 等 15 位专家推荐的 Elasticsearch 8.X新书《一本书讲透Elasticsearch》已上线...

Elasticsearchlaoyang360 发表了文章 • 0 个评论 • 2239 次浏览 • 2024-03-27 15:55 • 来自相关话题

今天,非常高兴地跟大家宣布,经过 7 年多的努力和精心准备,我们的新书《一本书讲透 Elasticsearch》已正式出版上线! ​​

1.png

​​​​​​ 我从 2016 年接触 Elasticsearch 1.X、2.X 的版本,到现在已经接近 8 年+的时间。在这期间,我常常被问到:

如何系统性地学习 Elasticsearch ?

如何将现有的关系型数据库迁移到 ES ?

如何选择合适的版本?

如何规划和监控集群?

如何进行数据建模?

如何选择合适的检索方式?

如何基于现有数据进行可视化分析?

等一系列问题.......

这些问题促使我将之前的产品开发、项目实战经验和咨询经验进行全面整合,并精心梳理,融入到这本新书中,希望能让大家少走不必要的弯路。

一、书籍特点 本书具有以下几个显著特点:

最新版本,前沿知识点

本书基于 8.x 版本编写,涵盖了如索引生命周期管理、快照生命周期管理、数据流 datastream 等至关重要的新特性。

核心知识,系统认知

我们为您提供了清晰的学习路径,保留了最核心的“最少必要”知识点,并通过思维导图和大量图解内容,帮助读者更易理解和吸收。

实际应用,超越认证

覆盖Elastic官方认证的核心知识点,已帮助近200人通过Elastic专家认证考试。内容不仅限于认证,更注重实际应用。

来源于实战,应用于实战

书中内容源自真实项目案例和企业级问题解答(问题来自于Elasticsearch中文社区、死磕Elasticsearch知识星球、微信群、QQ群等)。涵盖3个实战项目,助力读者将技能应用到企业实战环境中。

代码开源,答疑服务

全书的代码、脚本在GitHub上开源,便于初学者通过实践学习。我们的答疑社群将持续跟踪最新问题,不断迭代更新内容。

二、5 个最尖锐问题快问快答 如下的问题来自 ChatGPT 4.0 的作为专业读者提出的 5 个最尖锐问题。

2.png

我快速回答一下:

2.1 问题1:市场竞争和定位问题 “市面上已有接近10本关于Elasticsearch的书籍,您的书与这些现有书籍相比有何独特之处?您是如何确保您的书在内容上与其他书籍区别开来,满足读者新的或更深入的需求的?”

铭毅天下:

1、独特之处:版本咱们是目前市场唯一的 8.X 版本。

2、区别开来:我从 2016 年开始搞 ElasticStack 到现在几乎平均每周一篇技术博客,从未间断。无需多说,时间能证明一切!这是咱们最大的不同之一。

3、还有不同:我自己公众号+博客有累计近 4.5 万+关注读者,知识星球有近2000人付费用户,这些大量的实战问题促使我唯有“自我革命”才能生存和成长!

2.2 问题2:实用性和更新性问题 “鉴于Elasticsearch技术持续发展和迭代,您的书籍是如何处理和包含最新版本的特性和变化的?在提供最新信息的同时,您如何保证书中内容的长期有效性和实用性?”

铭毅天下:

1、实话说结论,我做不到,市面上任何纸质书都不可能做到。受限于撰写、出版等相较于 Elastic技术栈体系更新的滞后性。

2、但是,我在筛选知识点的时候已充分考虑结合企业级实战以及 Elastic 官方认证考试的最核心、最关键的“最少必要知识”作为咱们的提纲,并且承诺后面继续根据读者反馈迭代和升级。

2.3 问题3:作者经验和权威性问题 “您能否分享一些您个人在Elasticsearch领域的实战经验或特殊贡献,这些经验如何在您的书中得到体现?作为作者,您相比其他书籍作者有哪些独特的优势或视角?”

铭毅天下:

1、本人持续深耕大数据存储和检索领域 7 年+,有博客为证!有丰富的项目实战经验和企业级实战问题咨询经验,已带领近200人+通过 Elastic 认证专家考试。

2、独特视角就是:来自全国乃至全球多个国家的实战问题——自己运营的知识星球、微信群、QQ群多达数千人,每天都有大量实战问题涌现。

3、作者是坚定的长期主义者:博客已写12年+,从未间断!相信积累的力量、相信坚持的力量、相信相信的力量!

2.4 问题4:读者受益问题 “您认为读者在阅读您的书籍之后,最具体和显著的收获会是什么?有哪些实际的技能或知识可以直接应用到他们的工作和项目中?”

铭毅天下:

1、少走不必要的弯路!

2、能获得属于自己的专属学习路线,能建立专属的知识体系,能将 Elasticsearch 原理、开发、运维、架构技能应用于实战。

2.5 问题5:内容深度和广度问题 “您的书籍是如何平衡Elasticsearch的基础知识和高级技术的?它是否适合所有水平的读者,从初学者到高级用户?对于那些已经具有深厚Elasticsearch知识背景的读者,您的书提供了哪些更深入的见解或独特内容?”

铭毅天下:

1、适合大数据存储和检索领域的初学者,也同样适合有工作经验的中级、高级工程师、架构师等。

2、对于深厚Elasticsearch知识背景的读者,本书可以当做工具书,需要时备查、常翻常新。

三、行业顶级大佬的推荐

3.png

值得一提的是,这本书获得了 Elastic 创始人兼CTO Shay Banon 、Elastic中文社区创始人兼极限科技CTO等15位顶级专家的强力推荐,是一本不可多得的Elasticsearch学习材料。

I am very happy to see that Elasticsearch has been widely used in China, which fully reflects the open source, free and open power of Elastic. This book is derived from the author's 7 years of technical accumulation and embodies the author's love for ElasticStack open source technology. I hope this book can help more people understand Elasticsearch and search technology, so as to discover the great value of data. I am convinced that this book will have a profound impact on Elastic's Chinese community.

我很高兴看到Elasticsearch在中国得到了广泛的应用,这充分体现了Elastic开源、自由、开放的力量。本书源自作者7年的技术积累,体现了作者对ElasticStack开源技术的热爱。希望这本书能够帮助更多的人了解Elasticsearch和搜索技术,从而发现数据的巨大价值。我相信这本书将对 Elastic 的中文社区产生深远的影响。

4.png

——Shay Banon Elastic公司创始人兼首席技术官

很高兴看到铭毅天下的新书出版,《一本书讲透Elasticsearch:原理、进阶与工程实践》是一本值得推荐的新书。它汇集了作者丰富的实战经验,深入探讨 Elasticsearch的 核心原理。书中丰富的图解和清晰的结构使得复杂的知识易于理解和吸收。同时,它覆盖了 Elastic 认证考试的所有考点,助力读者建立全面的认知。此外,书中还包含实战项目,帮助读者将所学技能应用到实际场景中。作者拥有多年实战经验和广泛的影响力,这本书将成为学习和应用 Elasticsearch 的重要指南。

——Medcl,Elastic 中文社区创始人、极限科技创始人

铭毅天下是ES中文社区里少有的常年坚持写作的技术博主,尤其擅长将点状发散的社区讨论进行归纳总结,结合自己的实践和再思考,形成系统性的系列技术文章。本书成于作者在Elasticsearch领域多年的理论知识沉淀,并涵盖了实际应用场景的最佳实践。无论你是Elasticsearch初学者还是有一定经验的开发者,相信都能通过阅读本书而受益匪浅。

—— 吴晓刚 (Wood大叔)携程旅行网 企业数字化平台部 研发总监

在大数据检索和分析领域,Elastic Stack 技术栈有广泛应用,本书从业务场景出发详细介绍了在 Elasticsearch 擅长的各类场景中完成业务系统开发所需的技术栈和技术手段,为用户系统选型和了解整体技术架构提供了指导,可以帮助用户少走弯路,快速完成系统建设。

——张超 《Elasticsearch 源码解析与优化实战》作者, Elasticsearch 内核资深研发工程师

本书基于Elasticsearch最新的8.X版本,涵盖了Elasticsearch更加完整、实时的功能。作者拥有丰富的Elasticsearch和写作经验,语言通俗易懂,内容详尽全面。无论你是初学者还是有一定经验的开发人员,本书都能够为你提供更深入的内容和最佳实践。如果你想系统地学习、掌握Elasticsearch,那么这本书绝对是你不可错过的参考书籍。

—— 魏子珺,阿里巴巴elasticsearch内核专家

很高兴为大家推荐这本关于Elasticsearch的技术书籍。本书涵盖了相当丰富的原理讲解和实现技术,更重要的是对实战场景给出了明确的指导案例和代码片段可供参考和使用。即面向开发人员深入讲解了搜索引擎的核心算法与数据结构,也同时给运维人员提供了关键指标的定义和解读。对于想系统学习的初、中级用户,可以按照章节循序渐进的阅读。对于高级用户来说,也可以从 遇到的问题为切入点,直接从某个具体章节入手来测试、寻求解决方案。铭毅天下是Elastic中文社区长期活跃和积极贡献的明星成员。非常兴奋看到他把自己日积月累的知识精华和经验总结在书中分享给广大读者。我相信本书一定可以帮助到处在任何阶段想学习探索Elasticsearch的用户。

——吴斌,Elastic中文社区主席

《一本书讲透Elasticsearch:原理、进阶与工程实践》是一本由一线开发人员撰写的实战指南。作者凭借多年的 Elasticsearch 咨询和教学经验,将复杂的概念以简明易懂的方式呈现给读者。这本书将帮助你深入了解 Elasticsearch,并理解其背后的原理和逻辑。通过学习本书,你将获得全面的知识,从而能够灵活应用 Elasticsearch 解决各种实际问题。相信这本书将成为你掌握 Elasticsearch 的必备工具。

——阮一鸣,eBay 高级研发经理、极客时间『Elasticsearch 核心技术与实战』课程讲师

铭毅在 Elasticsearch 领域深耕多年,勤奋且专注, 同时运营着国内最大的 ES 社群 ,帮助许多同学成功通过了有难度的 Elastic 认证工程师考试。很高兴看到他的新书出版,都说万事开头难,但我相信这本书能够为ES 初学者铺平道路,扫除障碍,澄清疑虑,快速上手!推荐大家阅读!

——魏彬,中国首位 Elastic 认证工程师

《一本书讲透Elasticsearch:原理、进阶与工程实践 》这本书是我极力推荐的一部作品!

我认识铭毅天下很久了,第一次见面记得是2019年在北京的Elastic开发者大会上,但在这之前,我就经常阅读他关于Elasticsearch的技术分享而神交已久。我了解的铭毅天下是一位拥有丰富的Elasticsearch领域知识和经验的专家,他曾在PB级大数据系统项目中发挥关键作用。实施这种大规模,长周期的复杂项目是非常不容易的,无论从系统设计,到实施过程中的问题解决。因此,来自于实践的真知产出,值得我们开卷。

多年来,铭毅天下一直积极、高效地在各种博客和社交媒体上分享与Elasticsearch相关的内容,并密切同步每个版本的更新。在Elasticsearch上,他不仅持续自我精进,还组织了学习小组和社区,帮助其他对Elasticsearch感兴趣的伙伴一起进步。他还带领150多人通过Elastic工程师认证,为许多人的职业发展贡献了力量。

这本书是铭毅天下多年经验的总结,内容涵盖了几乎全部的Elastic认证考点,而且它来自铭毅天下近7年的博客积累,每一章节都经得起时间的考验。因为抓住了平时学习和使用Elasticsearch当中痛点并总结了最佳实践,这些内容不仅阅读量高,而且转发度也很广泛。无论你是想深入了解Elasticsearch的基础知识还是应用实践,这本书都能满足你的需求。

我相信这本书将为读者提供一次全面而深入的学习体验,帮助他们在Elasticsearch领域取得突破。无论你是初学者还是有经验的专业人士,这本书都是不可或缺的指南。我由衷地推荐这本书,相信它会成为你在Elasticsearch学习和实践中的得力伙伴!

——李捷,Elastic 解决方案架构师 Principle Solution Architect

当得知本书成稿的消息时,我的心情是非常激动的,不管是作为一名技术人,还是作为一名搜索引擎的从业者,以及作为一名Elasticsearch中文社区的参与者和建设者。本书作者与我们一起见证了Elastic生态在国内的起步、发展以及到今天的繁荣;有所不同的是,作者有超强的毅力(就像铭毅天下的名字一样),坚持在这个技术方向上深耕了7年之久,在知识、技术和实践等方面有着深厚的经验积累,不但亲力亲为,而且深谙知识社群与实践社区CoP的操盘之道,在自我成长的同时也打造了优质的同行网络,积极影响了一批技术人,其中的优秀者更是通过了Elatics官方认证,极具含金量。本书的出版,一定会给更多技术人带来直接或间接的帮助,同时在个人成长、知识共享与实践社区等方面在业内树立成功的榜样。让我们一起用技术影响世界影响人!

—— 杨振涛,Elastisearch中文社区深圳主席|vivo互联网 研发总监

Elasticsearch是人工智能和大数据时代不可或缺的重要产品,已经成为开发者必备技能。本书汇集了作者多年开发经验、咨询经验、数千个Elasticsearch爱好者的最佳实战。因此在讲解原理的同时,能深入到最佳实践中去,做到深入浅出,非常适合Elasticsearch的初学者以及进阶者。

—— 付磊,快手Elasticsearch负责人,《Redis开发与运维》作者

Elasticsearch 作为一款强大又灵活的数据分析检索工具,值得每一位后端程序员认真学习。铭毅天下的这本《一本书讲透Elasticsearch:原理、进阶与工程实践》,用浅显易懂的语言介绍了Elasticsearch的概念、原理和实践,非常值得阅读!

—— 程序员小灰,公众号【程序员小灰】运营者,畅销书《漫画算法》作者

铭毅是我的老友,他是一个及其认证踏实和执着追究技术的人,这七年来他一直热心Elasticstack相关技术的步道,热忱帮助社区和公众号里的伙伴,成就不俗。本书是一本实用性极高的Elasticsearch的实践类书籍,更是铭毅倾尽所学之作。通读原稿后,让我非常欣赏的地方在于,它是市面上难得一见的把Elasticsearch原理,实现方式,最佳实践,以及实战案例串联在一起实操类书籍,无论是初学者还是需要进阶学习的人员都能从中获取想要的内容。十分适合想要在企业环境中落地Elasticsearch的人们,因此我诚意把它推荐给广大的技术爱好者和相关从业人员。

——周钰, IBM中国 企业架构师 中国前50 Elastic持证者

Elasticsearch作为一款优秀的开源分布式搜索引擎,被广泛应用在日志分析、站内搜索、指标监控、数据加速等场景,学习并掌握ES,已经成为一个技术工作人员不可或缺的重要技能之一。而本书深入浅出,对Elasticsearch的基本概念、设计原理及实践进行了详细介绍,是学习Elasticsearch的必备资料。诚挚推荐。

—— 吴荣,Elasticsearch平台资深研发工程师

一份专业、细致、用户友好的技术文档能给我们技术人员的日常工作带来多大的帮助,相信大家都有深刻的体会,特别是像Elasticsearch这种在搜索引擎领域最广泛应用的解决方案更是如此。虽然官方文档内容很详尽,更新很及时,但是限于语言、网速等问题,广大国内开发者并不能很准确高效的找到自己需要的内容。铭毅老师这本,兼顾了内容的专业性、严谨性、完整性,围绕着Elasticsearch及其相关组件所撰写,覆盖了从基础概念到高级用法的方方面面内容的专业书籍,能给各位带来的价值就不言而喻了。这本书适合从入门使用到高级调优的各层次的读者,是一本少有的适合放在案头常看常新的书。

—— 陈晨(死敌wen),资深搜索架构师、Elastic认证专家

5.png

15位大佬评价批量导入 Elasticsearch

15位大佬评价 Kibana 可视化

6.png

15位大佬评价词云图

7.png

无论您是大数据检索领域的初学者、开发和运维人员,还是架构师和管理人员,这本书都将成为实战路上的得力助手和“避坑指南”。

8.png

立即购买以获取专属福利:不论您从哪里购买、不论多少费用购买,记得保留购物链接和发票,费用都可以折算同等价格的星球优惠券。

私V信:elastic6 搞定后续一切流程。 ————————————————

                        本文为博主原创文章,未经博主书面授权不得转载。书面授权后方可转载,但转载请务必加上原作者:铭毅天下,原文地址:blog.csdn.net/laoyang360

原文链接:https://blog.csdn.net/laoyang360/article/details/135614659

Elasticsearch 国产化

Easysearchyangmf2040 发表了文章 • 0 个评论 • 1271 次浏览 • 2024-03-16 16:36 • 来自相关话题

背景

Elasticsearch 这些年来在搜索领域一直是领头羊。国内也有非常多的企业在使用 Elasticsearch 来做查询搜索、数据分析、安全分析等等。甚至一些很重要的行业、系统都在使用 Elasticsearch。在使用 Elasticsearch 的道路上狂飙的时候,我们也观察到了一些问题:

  1. Elasticsearch 不再是开源软件了。
  2. Elastic 公司退出了中国直销市场,不提供本土化支持了。
  3. 国家对信创、自主可控的战略化布局。
  4. 国际形势从合作共赢到自闭对垒。
  5. Elasticsearch 软件本身安全问题频发。
  6. Elasticsearch 软件在性能、稳定性和扩展性方面存在很大的提升空间。

基于以上这些问题,推出一个 Elasticsearch 国产化解决方案就很有必要了。我们的解决方案是推出一款名为 Easysearch 的软件,作为 Elasticsearch 国产化替代 。
出发点是在兼容原 Elasticsearch 软件的基础之上,完善更多的企业级功能,同时提高产品的性能、稳定性和扩展性。
下面我将从几个方面简单介绍下 Easysearch 软件。

兼容性

支持原生 Elasticsearch 的 DSL 查询语法,原业务代码无需调整。 支持 SQL ,方便熟悉 SQL 的开发人员上手分析数据。 兼容 Elasticsearch 的 SDK。 兼容现有索引存储格式。 支持冷热架构和索引生命周期,真正做到无缝衔接。

功能增强

提供企业级的安全管理,可对接 LDAP、AD 认证。 重构分布式架构,保持稳定的同时,能支持更大规模的数据。 在不降低性能的同时,实现更高压缩比的数据压缩,直接节省磁盘 40% 以上。 支持 KNN、异步搜索、数据脱敏、可搜索快照、审计等企业级功能。

容灾

支持基于 CDC 的集群复制技术,实现同版本间的容灾。
支持基于请求双写的复制技术,实现跨版本容灾。

信创

全面适配国产 CPU、操作系统,并获得厂家认证。

迁移方案

支持原索引存储格式,可通过快照备份直接恢复到 Easysearch 集群。
提供迁移工具,直接可视化操作迁移数据。

简单的介绍就到这里了,更多信息请访问:https://www.infinilabs.com/products/easysearch

最后

如有需要请联系我,让我们一起位祖国的信创事业添砖加瓦。

OpenSearch 与 Elasticsearch:哪个开源搜索引擎适合您?

OpenSearchHansoph 发表了文章 • 1 个评论 • 1312 次浏览 • 2024-03-15 10:49 • 来自相关话题

当谈论到搜索引擎产品时,Elasticsearch 和 OpenSearch 是两个备受关注的选择。它们都以其出色的功能和灵活性而闻名,但在一些方面存在一些差异。在本文中,我们将从功能和延展性、工具与资源、价格和许可这三个角度对这两个产品进行论述。通过深入研究它们的特点和优势,您将能够更好地了解它们,从而为您的搜索需求做出明智的选择。让我们开始探索 Elasticsearch 和 OpenSearch 的世界,以便您能够为自己的项目或业务找到最佳的搜索解决方案。

功能和延展性

Elasticsearch 是一个功能强大的搜索引擎,它支持全文搜索、实时数据分析、数据聚合和可视化等功能。

  1. 分布式架构:它使用分布式架构,可以处理大规模数据集,并以快速的速度返回查询结果。
  2. 多种查询类型和过滤器:提供多种查询类型和过滤器,使用户能够进行复杂的数据分析和检索。
  3. 高可用性和容错性:提供高可用性和容错性,通过复制和分片机制来确保数据的安全性和可靠性。
  4. 强大的插件生态系统:帮助用户处理映射、分析、脚本引擎和发现等任务。通过使用这些插件,用户可以根据其特定的数据处理和分析需求进行功能扩展和定制。

OpenSearch 是从 Elasticsearch 分叉出来的版本,因此在许多方面与 Elasticsearch 相似。它保留了 Elasticsearch 的核心功能,并加入了一些新的功能和扩展性。下面主要讨论一些差异点:

  1. 开源性和社区参与:OpenSearch 更注重开源性和社区参与,鼓励用户共同开发和改进系统。
  2. 功能差异:OpenSearch 提供了一些额外的免费功能,如集中用户账户/访问控制、交叉集群复制、IP 过滤、可配置的数据保留期、异常检测、Tableau 连接器、JDBC 驱动程序、ODBC 驱动程序以及回归和分类等机器学习功能。
  3. 插件生态系统差异:OpenSearch 中的某些功能作为插件捆绑在一起,需要用户额外学习和适应新工具。

服务与支持

Elasticsearch 拥有丰富的工具和资源,使用户能够更好地使用和管理搜索引擎。

  1. 配套工具:丰富的生态系统,Logstash 用于数据摄取和转换,可以帮助用户为非结构化数据添加结构,进行字段匿名处理,并解析 IP 地址以获取位置信息。Beats 是一个专注于数据传输的工具,可以将数据从数千台机器发送到 Logstash 或 Elasticsearch。
  2. 完善的文档资料和培训资源:

    a. 官方网站提供了产品指南、教程视频、博客文章、讨论论坛等丰富的学习材料。

    b. Elastic 还提供了 Slack 频道、YouTube 频道、以及定期举办的在线研讨会和培训活动,为用户提供即时的答疑和学习机会。

    c. 广泛的支持服务,包括社区支持、商业支持和培训服务。

OpenSearch 配套工具延展性更好,但是在学习资料和用户培训方面存在大部分空白,目前的服务与支持模式主要依赖于社区。

  1. 配套工具:除去支持 Logstash 和 Beats 外,还有其他工具如 Fluentd、Fluent Bit、OpenTelemetry Collector 和 Data Prepper,来支持数据处理和传输。

  2. 文档资料和培训资源:

    a. 文档资源:积极填补文档中的空白,并且每月举行两次社区会议,鼓励用户通过 GitHub 提交拉取请求、报告问题和提供反馈。

    b. 合作伙伴:提供 OpenSearch 的咨询支持和托管服务,其中就包括 INFINI Labs 在内,通过这些合作伙伴,用户可以获取与 OpenSearch 相关的专业服务和咨询,以满足其特定需求。

OpenSearch 的学习资源和培训材料相对较少,相比之下,Elasticsearch 的学习资料更加丰富和全面。然而,OpenSearch 社区积极发展中,未来可能会有更多的学习资源和支持服务可用。

价格和许可

Elasticsearch 和 OpenSearch 在价格和许可方面也存在差异。本文将从紧急支持和许可限制两个角度进行分析。

Elasticsearch:

  1. 紧急支持:Elasticsearch 的高级许可证提供紧急支持,这意味着当出现集群崩溃、数据丢失或安全漏洞等问题时,公司能够提供即时的支持。
  2. 许可限制:Elasticsearch 提供基于订阅模型的商业许可,其中包括从免费的基本许可到高级许可的多个层次。高级许可提供了额外的功能和支持,适合对性能和功能有更高要求的企业。

Opensearch:

  1. 紧急支持:当前可以通过过第三方咨询公司或 AWS OpenSearch 等免费工具获得同样水平的支持,OpenSearch 有一个合作伙伴页面,列出了许多咨询公司,包括 INFINI Labs 的 OpenSearch 支持页面,他们提供 24 x 7 的支持。
  2. 许可限制:OpenSearch 是基于 Apache 2.0 许可的开源软件,允许用户自由使用、修改和分发。它提供了免费的功能和灵活的定制,使用户能够根据自己的需求进行自定义和扩展。

总结

Elasticsearch 和 OpenSearch 都是强大而灵活的搜索引擎产品,但是存在一些差异。

总体来说,Elasticsearch 是一个成熟、功能强大的搜索引擎,拥有广泛的插件生态系统和丰富的学习资源。商业版本提供额外的功能和支持服务,适合需要高级功能和专业支持的企业。

OpenSearch 是从 Elasticsearch 分叉出来的版本,保留了核心功能,并添加了一些额外的功能。它更注重开源性和社区参与,适合更倾向于自主开发和定制的用户。

作者的话

希望这些信息能为您提供有价值的帮助,并使您更好地了解 Elasticsearch 和 OpenSearch。无论您选择哪个搜索引擎,都希望它能满足您的需求并取得成功。

Easysearch 内核完善之 OOM 内存溢出优化案例一则

Easysearchliaosy 发表了文章 • 0 个评论 • 1001 次浏览 • 2024-03-15 10:37 • 来自相关话题

最近某客户在使用 Easysearch 做聚合时,报出 OOM 导致掉节点的问题,当时直接让客户试着调整 indices.breaker.request.limit ,但是不起作用,于是又看了下 Easysearch 在断路器相关的代码,并自己测试了下。

断路器的种类和作用

Easysearch 内部有个 Circuit breaker 机制,目的是防止各种请求的负载过大导致 OutOfMemoryError,比较常用的断路器有 7 种,分别是:

  • Parent circuit breaker 父断路器
  • Field data circuit breaker fielddata 断路器
  • Request circuit breaker 请求断路器
  • In flight requests circuit breaker 传输请求断路器
  • Accounting requests circuit breaker lucene 内存占用断路器
  • Script compilation circuit breaker 脚本编译断路器
  • Regex circuit breaker 正则表达式断路器

其中在执行消耗内存较多的聚合查询时,Request circuit breaker 用得最多。

复现测试

我在模拟客户场景测试聚合查询时,发现断路器并没有覆盖查询的整个流程,仍然会有 OOM 的风险。我测试了一个高基数 5 百万的 Terms aggregation,就没有触发断路,而是在等待了 1 分多钟后直接 OOM 了。我的测试环境是单节点 内存配置为 -Xmx1g,测试索引只有 1 个 shard。

测试语句如下:

curl -X GET "localhost:9211/leader-01/_search?pretty" -H 'Content-Type: application/json' -d'
{
"size": 1,
  "aggs": {
    "a": {
      "terms": { "field": "agent.id.keyword", "size": 5000000 }
    }
  }
}' > a.txt

Easysearch OOM 日志:

内存泄漏分析

使用 MemoryAnalyzer 分析生成的 jvm 堆转储文件:

最大的内存占用来自 Java 线程java.lang.Thread @ 0x7c8bb1d00。这个线程浅层(Shallow)保留的对象占用了 112.8MB 内存。但该线程实际保留(Retained)的对象内存占用高达 851 MB,成为整个内存占用的绝对大头。

进一步查看 Leak Suspects

非常明确的给出了具体的内存泄露的对象:StringTerms$Bucket[7500010]

数组长度达到了七百五十万,占用内存:731,001,720 字节(占总内存的 68.65%)。

按照提示的GlobalOrdinalsStringTermsAggregator.java:586 行,去查看代码,实际上是将收集完的OrdBucket 转换为 StringTerms.Bucket,并且有一个 copy BytesRef的操作。

至此,原因和解决办法都清楚了,只要在转换之前预估一下将要增长的内存并调用断路器检测一下内存,一旦超出允许范围就快速触发 CircuitBreakingException,避免长时间等待后 OOM 引起的节点宕机了。

最新版 Elasticsearch 对比

作为对比,我又测试了下 Elasticsearch 最新版本 8.12.2,同样的测试环境和测试方法,结果依然是 OOM:

从这里可以看出 Elasticsearch 即使是最新版的断路器机制也还有很多改进的余地,比如增加对有 OOM 风险查询的覆盖率,还有就是在触发 GC 时,对 GC 堆内存回收的判断过于简单。

Easysearch 最新版本的改进

Easysearch 刚刚发布的 1.7.1 版本已经增加了上面的改进,后面也会持续改进查询聚合操作的内存控制,最新版本的跨集群复制(CCR)也增加了对 source_reuse 索引的支持,能更好的满足客户降本增效的需求,欢迎大家下载试用。

附官网下载链接:https://www.infinilabs.com/download/?product=easysearch

关于 Easysearch

about easysearch

INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。 与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。

官网文档:https://www.infinilabs.com/docs/latest/easysearch

作者:张磊,原文:https://www.infinilabs.com/blog/2024/easysearch-kernel-improvement-case-study-on-oom-memory-overflow-optmization/

如何防止 Elasticsearch 服务 OOM?

Easysearchyangmf2040 发表了文章 • 0 个评论 • 1942 次浏览 • 2024-02-26 10:12 • 来自相关话题

Elasticsearch(简称:ES) 和传统关系型数据库有很多区别, 比如传统数据中普遍都有一个叫“最大连接数”的设置。目的是使数据库系统工作在可控的负载下,避免出现负载过高,资源耗尽,谁也无法登录的局面。

那 ES 在这方面有类似参数吗?答案是没有,这也是为何 ES 会被流量打爆的原因之一。

针对大并发访问 ES 服务,造成 ES 节点 OOM,服务中断的情况,极限科技旗下的 INFINI Gateway 产品(以下简称 “极限网关”)可从两个方面入手,保障 ES 服务的可用性。

  1. 限制最大并发访问连接数。
  2. 限制非重要索引的请求速度,保障重要业务索引的访问速度。

下面我们来详细聊聊。

架构图

所有访问 ES 的请求都发给网关,可部署多个网关。

限制最大连接数

在网关配置文件中,默认有最大并发连接数限制,默认最大 10000。

entry:
  - name: my_es_entry
    enabled: true
    router: my_router
    max_concurrency: 10000
    network:
      binding: $[[env.GW_BINDING]]
      # See `gateway.disable_reuse_port_by_default` for more information.
      reuse_port: true

使用压测程序测试,看看到达10000个连接后,能否限制新的连接。 超过的连接请求,被丢弃。更多信息参考官方文档

限制索引写入速度

我们先看看不做限制的时候,测试环境的写入速度,在 9w - 15w docs/s 之间波动。虽然峰值很高,但不稳定。 接下来,我们通过网关把写入速度控制在最大 1w docs/s 。 对网关的配置文件 gateway.yml ,做以下修改。

env: # env 下添加
    THROTTLE_BULK_INDEXING_MAX_BYTES: 40485760 #40MB/s
    THROTTLE_BULK_INDEXING_MAX_REQUESTS: 10000 #10k docs/s
    THROTTLE_BULK_INDEXING_ACTION: retry #retry,drop
    THROTTLE_BULK_INDEXING_MAX_RETRY_TIMES: 10 #1000
    THROTTLE_BULK_INDEXING_RETRY_DELAY_IN_MS: 100 #10

router: # route 部分修改 flow
  - name: my_router
    default_flow: default_flow
    tracing_flow: logging_flow
    rules:
      - method:
          - "*"
        pattern:
          - "/_bulk"
          - "/{any_index}/_bulk"
        flow:
          - write_flow

flow: #flow 部分增加下面两段    
  - name: write_flow
    filter:
      - flow:
          flows:
            - bulking_indexing_limit
      - elasticsearch:
          elasticsearch: prod
          max_connection_per_node: 1000
  - name: bulking_indexing_limit
    filter:
      - bulk_request_throttle:
          indices:
            "test-index":
              max_bytes: $[[env.THROTTLE_BULK_INDEXING_MAX_BYTES]]
              max_requests: $[[env.THROTTLE_BULK_INDEXING_MAX_REQUESTS]]
              action: $[[env.THROTTLE_BULK_INDEXING_ACTION]]
              retry_delay_in_ms: $[[env.THROTTLE_BULK_INDEXING_RETRY_DELAY_IN_MS]]
              max_retry_times: $[[env.THROTTLE_BULK_INDEXING_MAX_RETRY_TIMES]]
              message: "bulk writing too fast" #触发限流告警message自定义
              log_warn_message: true

再次压测,test-index 索引写入速度被限制在了 1w docs/s 。

限制多个索引写入速度

上面的配置是针对 test-index 索引的写入速度控制。如果想添加其他的索引,新增一段配置即可。 比如,我允许 abc 索引写入达到 2w docs/s,test-index 索引最多不超过 1w docs/s ,可配置如下。

  - name: bulking_indexing_limit
    filter:
      - bulk_request_throttle:
          indices:
            "abc":
              max_requests: 20000
              action: drop
              message: "abc doc写入超阈值" #触发限流告警message自定义
              log_warn_message: true
            "test-index":
              max_bytes: $[[env.THROTTLE_BULK_INDEXING_MAX_BYTES]]
              max_requests: $[[env.THROTTLE_BULK_INDEXING_MAX_REQUESTS]]
              action: $[[env.THROTTLE_BULK_INDEXING_ACTION]]
              retry_delay_in_ms: $[[env.THROTTLE_BULK_INDEXING_RETRY_DELAY_IN_MS]]
              max_retry_times: $[[env.THROTTLE_BULK_INDEXING_MAX_RETRY_TIMES]]
              message: "bulk writing too fast" #触发限流告警message自定义
              log_warn_message: true

限速效果如下

限制读请求速度

我们先看看不做限制的时候,测试环境的读取速度,7w qps 。 接下来我们通过网关把读取速度控制在最大 1w qps 。 继续对网关的配置文件 gateway.yml 做以下修改。

  - name: default_flow
    filter:
      - request_path_limiter:
          message: "Hey, You just reached our request limit!"                                      rules:      
            - pattern: "/(?P<index_name>abc)/_search"                          
              max_qps: 10000
              group: index_name                                    
      - elasticsearch: 
          elasticsearch: prod                            
          max_connection_per_node: 1000

再次进行测试,读取速度被限制在了 1w qps 。

限制多个索引读取速度

上面的配置是针对 abc 索引的写入速度控制。如果想添加其他的索引,新增一段配置即可。 比如,我允许 abc 索引读取达到 1w qps,test-index 索引最多不超过 2w qps ,可配置如下。

  - name: default_flow
    filter:
      - request_path_limiter:
          message: "Hey, You just reached our request limit!"
          rules:
            - pattern: "/(?P<index_name>abc)/_search"
              max_qps: 10000
              group: index_name
            - pattern: "/(?P<index_name>test-index)/_search"
              max_qps: 20000
              group: index_name
      - elasticsearch:
          elasticsearch: prod
          max_connection_per_node: 1000

多个网关限速

限速是每个网关自身的控制,如果有多个网关,那么后端 ES 集群收到的请求数等于多个网关限速的总和。 本次介绍就到这里了。相信大家在使用 ES 的过程中也遇到过各种各样的问题。欢迎大家来我们这个平台分享自己的问题、解决方案等。如有任何问题,请随时联系我,期待与您交流!

【 INFINI Workshop 北京站】1月18日一起动手实验玩转 Easysearch

活动liaosy 发表了文章 • 0 个评论 • 1910 次浏览 • 2023-12-15 16:22 • 来自相关话题

与 INFINI Labs 的技术专家面对面,第一时间了解极限实验室的发布最新产品和功能特性,通过动手实战,快速掌握最前沿的搜索技术,并用于实际项目中。欢迎大家扫描海报二维码免费报名参加。

活动时间:2024-01-18 13:30~17:30

活动地点:北京市海淀区 Wework 辉煌时代大厦 3 楼 3E 会议室

分享议题

  • Easysearch 总体介绍及搭建实战
  • 基于 INFINI Console 实现跨版本、跨引擎统一管控
  • Elasticsearch -> Easysearch 在线迁移实操

参会提示

  • 请务必自备电脑(Windows 系统环境请提前安装好 Linux 虚拟机)
  • 请提前在 INFINI Labs 官网下载对应平台最新安装包(INFINI Easysearch、INFINI Gateway、INFINI Console)
  • 下载地址:https://www.infinilabs.com/download
  • 如有任何疑问可添加 INFINI Labs 小助手(微信号: INFINI-Labs)进行联系

20231214-095304-qrcode.jpeg

ElasticSearch自动补全,中文不准确的问题,请大家帮我看一下

ElasticsearchGod_lockin 回复了问题 • 2 人关注 • 1 个回复 • 2558 次浏览 • 2023-11-21 22:17 • 来自相关话题

【 INFINI Workshop 北京站】1月18日一起动手实验玩转 Easysearch

活动liaosy 发表了文章 • 0 个评论 • 1910 次浏览 • 2023-12-15 16:22 • 来自相关话题

与 INFINI Labs 的技术专家面对面,第一时间了解极限实验室的发布最新产品和功能特性,通过动手实战,快速掌握最前沿的搜索技术,并用于实际项目中。欢迎大家扫描海报二维码免费报名参加。

活动时间:2024-01-18 13:30~17:30

活动地点:北京市海淀区 Wework 辉煌时代大厦 3 楼 3E 会议室

分享议题

  • Easysearch 总体介绍及搭建实战
  • 基于 INFINI Console 实现跨版本、跨引擎统一管控
  • Elasticsearch -> Easysearch 在线迁移实操

参会提示

  • 请务必自备电脑(Windows 系统环境请提前安装好 Linux 虚拟机)
  • 请提前在 INFINI Labs 官网下载对应平台最新安装包(INFINI Easysearch、INFINI Gateway、INFINI Console)
  • 下载地址:https://www.infinilabs.com/download
  • 如有任何疑问可添加 INFINI Labs 小助手(微信号: INFINI-Labs)进行联系

20231214-095304-qrcode.jpeg

3月26日 OpenSearch Community Meeting 视频回放

回复

OpenSearchCharele 回复了问题 • 2 人关注 • 1 个回复 • 3671 次浏览 • 2024-04-05 16:58 • 来自相关话题

ElasticSearch自动补全,中文不准确的问题,请大家帮我看一下

回复

ElasticsearchGod_lockin 回复了问题 • 2 人关注 • 1 个回复 • 2558 次浏览 • 2023-11-21 22:17 • 来自相关话题

从 Redis 开源协议变更到 ES 国产化:一次技术自主的机遇

EasysearchMuses 发表了文章 • 0 个评论 • 2834 次浏览 • 2024-04-11 16:05 • 来自相关话题

引言

近日,Redis Labs 宣布其主导的开源项目 Redis 将采用双重源代码可用许可证(RSALv2)和服务器端公共许可证(SSPLv1)。这一重大决策标志着 Redis 从传统的 BSD 许可证向更加严格的控制权转变,同时也引发了广泛的社区和行业讨论。这不仅是一个关于许可证变更的故事,更是关于开源社区如何响应,以及这一变化如何激发对国产技术探索和发展的深刻思考。Redis,作为最受欢迎的开源键值存储数据库之一,其开源协议的变更反映了开源软件在商业化道路上的挑战和压力。Redis Labs 的 CEO Rowan Trollope 指出,这一变化旨在防止云服务提供商免费使用 Redis 代码,同时促进 Redis 社区的可持续发展和创新。

Redis 协议变更的深远影响

Redis 决定放弃 BSD 协议,转而采用双重源代码可用许可证(RSALv2 和 SSPLv1),标志着开源界的一个重要转折点。这一变化不仅影响了 Redis 本身,更引发了社区成员和技术行业的激烈讨论,许多人担心这将限制 Redis 的开源精神和广泛应用。然而,也有声音认为,这为其他开源项目,如 KeyDB、Dragonfly 和 Garnet 等,提供了发展的机遇,尤其是在提供与 Redis 兼容的替代解决方案方面。尽管 Redis 的这一变更在技术和法律上引发了争议,它也激发了开源社区对于如何在维护开源精神和寻求商业可持续性之间找到平衡的探索。此外,Redis 团队对于保持客户端库的开源许可和继续支持开源社区版的承诺,展示了一种尝试在新的许可模式下保持开放性和可接入性的方法。由于 Redis 的广泛应用,其协议变更对云服务商、Linux 发行版,甚至整个开源软件生态都产生了不小的冲击。一方面,云服务提供商需要重新评估其服务模型;另一方面,一些 Linux 发行版可能需要考虑将 Redis 从其软件仓库中移除。

ES 国产化的契机

Redis 开源协议的变更同时也让人们重新审视其他关键技术,特别是 Elasticsearch(ES)的依赖和发展。ES 作为一个强大的搜索和数据分析引擎,在全球范围内被广泛使用。随着对开源项目商业化模式的重新考量,中国开发者和企业开始寻求国产化的 ES 替代品,旨在减少对外部技术的依赖,同时推动国内技术生态的多元化和自主创新。但是国产化的探索并非没有挑战。从技术兼容性、性能优化到社区生态建设,每一步都需要深思熟虑和持续的努力。然而,Redis 的许可证变更为国内技术自主提供了一个独特的视角,鼓励开发者、企业乃至政府机构更加积极地参与到开源技术的本土化和创新中来。Redis 开源协议的变更引发的讨论和行动,凸显了开源社区对于自身未来发展方向的深刻反思。这一变革不仅关乎一个项目的许可模式转变,更触及到开源项目如何在保持开放和自由的同时,寻找到可持续发展的道路。此外,它也促使更多的开源项目和企业思考如何在全球化的技术生态中保持竞争力和影响力。

Easysearch:国产化的新选择

针对这一需求,极限科技 隆重推出了 Easysearch 搜索引擎软件,旨在提供一个与 Elasticsearch 兼容的国产化解决方案。Easysearch 不仅支持原生 Elasticsearch 的 DSL 查询语法,还提供了诸多企业级功能的增强,如更高的性能、稳定性和扩展性,以及更加丰富的安全管理和数据压缩功能。这表明,国产化技术的发展不仅是为了替代,更是在原有基础上进行创新和优化。ES 国产化解决方案 Easysearch 的推出,是响应国家对信创、自主可控战略布局的具体行动。通过提供兼容性强、功能丰富且稳定的国产技术替代品,不仅有助于减少对外部技术的依赖,也为国内技术生态的繁荣和创新贡献力量。这一过程中,既涵盖了对现有技术的深入理解和应用,也包含了对新技术、新方法的探索和实践。

结语

Redis 开源协议的变更和 Elasticsearch 国产化解决方案的兴起,共同反映了当前技术世界中开源与商业、国际与国产之间复杂而微妙的关系。这一趋势不仅仅是技术领域的变化,更是全球化背景下,各国在技术自主、安全与发展方面所做出的战略性调整。随着更多开源项目和技术面临类似的挑战,我们或许可以预见,技术自主和开源创新将成为推动未来技术发展的两大关键力量。

参考

关于极限科技(INFINI Labs)

关于极限科技

极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。

极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。

官网:https://www.infinilabs.com

记某客户的一次 Elasticsearch 无缝数据迁移

Elasticsearchyangmf2040 发表了文章 • 0 个评论 • 3420 次浏览 • 2024-04-02 14:16 • 来自相关话题

背景

客户需要将 Elasticsearch 集群无缝迁移到移动云,迁移过程要保证业务的最小停机时间。

实现方式

通过采用成熟的 INFINI 网关来进行数据的双写,在集群的切换恢复过程中来记录数据变更,待全量数据恢复之后再追平后面增量数据,追平增量之后,进行校验确保数据一致再进行流量的切换。

总体流程

总体迁移流程如下:

  1. 客户业务代码,切流量,双写。(新增的变更都会记录在网关本地,但是暂停消费到移动云)
  2. 暂停网关移动云这边的增量数据消费。
  3. 迁移 11 月的数据,快照,快照上传到 S3;
  4. 下载 S3 的文件到移动云。
  5. 恢复快照到移动云的 11 月份的索引。
  6. 开启网关移动云这边的增量消费。
  7. 等待增量追平(接近追平)。
  8. 按照时间条件(如:时间 A,当前时间往前 30 分钟),验证文档数据量,Hash 校验等等。
  9. 停业务的写入,网关,腾讯云的写入(10 分钟)。
  10. 等待剩余的增量追完。
  11. 对时间 A 之后的,增量进行校验。
  12. 切换所有流量到移动云,业务端直接访问移动云 ES。

总体的迁移时间:

  1. 11 月备份时间(30 分钟)19 号开始
  2. 备份下载到移动云的时间(2-3 天)
  3. 备份恢复到移动云集群的时间(30 分钟)
  4. 11 月份增量备份(20 分钟)(双写开始)(21 号)
  5. 11 月份增量下载到移动云(6 小时)
  6. 11 月份增量恢复时间(20 分钟)
  7. 追增量数据(8 个小时产生的数据,需要 1 个小时)
  8. 校验比对(存量 1 个小时)
  9. 流量暂停,增量的校验(10 分钟)
  10. 切换(1 分钟)

总体流程如下示意图:

ES 集群信息

  1. ES 版本 7.10.1
  2. 2个热节点 3个温节点  总数 1.9 TB
  3. 索引   1041, 分片2085
  4. 无自定义插件
  5. 有 update_bu_query 使用
  6. 有 delete_by_query 使用
  7. 吞吐量没有测试过,当前日增文档数 1 千多万,目标日增加上亿  

    迁移操作手册(参考)

    环境

  • 自建 ES 5.4.2
  • 自建 ES 5.6.8
  • 自建 ES 7.5.0
  • 极限网关服务器 1
  • 极限网关服务器 2
  • 云端负载均衡 1 (监听 9200 端口,指向极限网关服务器 1/2 的 8000 端口)
  • 云端负载均衡 2 (监听 9200 端口,指向极限网关服务器 1/2 的 8001 端口)

    场景描述

    若干个自建 Elasticsearch 集群需要平滑迁移到移动云,业务不停写、不做代码改动。

    数据架构

    通过将应用端流量走网关的方式,请求同步转发给自建 ES,网关记录所有的写入请求,并确保顺序在云端 ES 上重放请求,两侧集群的各种故障都妥善进行了处理,从而实现透明的集群双写,实现安全无缝的数据迁移。 业务端如果已经部署在云上,可以使用云上的 SLB 服务来访问网关,确保后端网关的高可用,如果业务端和极限网关还在企业内网,可以使用极限网关自带的 4 层浮动 IP 来确保网关的高可用

数据描述

以数据从自建集群 5.4.2 迁移到云上的 5.6.16 为例进行说明,执行步骤依次说明。

执行步骤

部署 INFINI Gateway

为了保证数据的无缝透明迁移,通过 INFINI Gateway 来进行双写。

  1. 系统调优

    参考此文档

  2. 下载程序
    
    [root@iZbp1gxkifg8uetb33pvcoZ ~]# mkdir /opt/gateway
    [root@iZbp1gxkifg8uetb33pvcoZ ~]# cd /opt/gateway/
    [root@iZbp1gxkifg8uetb33pvcoZ gateway]# wget http://release.infinilabs.com/gateway/snapshot/gateway-1.6.0_SNAPSHOT-649-linux-amd64.tar.gz
    --2022-05-19 10:16:25--  http://release.infinilabs.com/gateway/snapshot/gateway-1.6.0_SNAPSHOT-649-linux-amd64.tar.gz
    正在解析主机 release.infinilabs.com (release.infinilabs.com)... 120.79.205.193
    正在连接 release.infinilabs.com (release.infinilabs.com)|120.79.205.193|:80... 已连接。
    已发出 HTTP 请求,正在等待回应... 200 OK
    长度:7430568 (7.1M) [application/octet-stream]
    正在保存至: “gateway-1.6.0_SNAPSHOT-649-linux-amd64.tar.gz”

100%[==============================================================================================================================================>] 7,430,568 22.8MB/s 用时 0.3s

2022-05-19 10:16:25 (22.8 MB/s) - 已保存 “gateway-1.6.0_SNAPSHOT-649-linux-amd64.tar.gz” [7430568/7430568])

[root@iZbp1gxkifg8uetb33pvcoZ gateway]# tar vxzf gateway-1.6.0_SNAPSHOT-649-linux-amd64.tar.gz gateway-linux-amd64 gateway.yml sample-configs/ sample-configs/elasticsearch-with-ldap.yml sample-configs/indices-replace.yml sample-configs/record_and_play.yml sample-configs/cross-cluster-search.yml sample-configs/kibana-proxy.yml sample-configs/elasticsearch-proxy.yml sample-configs/v8-bulk-indexing-compatibility.yml sample-configs/use_old_style_search_response.yml sample-configs/context-update.yml sample-configs/elasticsearch-route-by-index.yml sample-configs/hello_world.yml sample-configs/entry-with-tls.yml sample-configs/javascript.yml sample-configs/log4j-request-filter.yml sample-configs/request-filter.yml sample-configs/condition.yml sample-configs/cross-cluster-replication.yml sample-configs/secured-elasticsearch-proxy.yml sample-configs/fast-bulk-indexing.yml sample-configs/es_migration.yml sample-configs/index-docs-diff.yml sample-configs/rate-limiter.yml sample-configs/async-bulk-indexing.yml sample-configs/elasticssearch-request-logging.yml sample-configs/router_rules.yml sample-configs/auth.yml sample-configs/index-backup.yml


3. 修改配置

将网关提供的示例配置拷贝,并根据实际集群的信息进行相应的修改,如下:

[root@iZbp1gxkifg8uetb33pvcoZ gateway]# cp sample-configs/cross-cluster-replication.yml 5.4.2TO5.6.16.yml

首先修改集群的身份信息,如下:
![](https://www.infinilabs.com/img/blog/2024/seamless-data-migration/3.png)

然后修改集群的注册信息,如下:
![](https://www.infinilabs.com/img/blog/2024/seamless-data-migration/4.png)

根据需要修改网关监听的端口,以及是否开启 TLS (如果应用客户端通过 http 协议访问 ES,请将entry.tls.enabled 值改为 false),如下:
![](https://www.infinilabs.com/img/blog/2024/seamless-data-migration/5.png)
不同的集群可以使用不同的配置,分别监听不同的端口,用于业务的分开访问。

4. 启动网关

启动网关并指定刚刚创建的配置,如下:

[root@iZbp1gxkifg8uetb33pvcoZ gateway]# ./gateway-linux-amd64 -config 5.4.2TO5.6.16.yml


/ \ /\ / \/\/ / /\ \ \/\ /_/\ / /\///\ / /\/\ \ \/ \/ //\_ / / /\/ \/ / // \ /\ / \/ \ ___/\/ \/\/ \/ \/ \/_/ _/_/

[GATEWAY] A light-weight, powerful and high-performance elasticsearch gateway. [GATEWAY] 1.6.0_SNAPSHOT, 2022-05-18 11:09:54, 2023-12-31 10:10:10, 73408e82a0f96352075f4c7d2974fd274eeafe11 [05-19 13:35:43] [INF] [app.go:174] initializing gateway. [05-19 13:35:43] [INF] [app.go:175] using config: /opt/gateway/5.4.2TO5.6.16.yml. [05-19 13:35:43] [INF] [instance.go:72] workspace: /opt/gateway/data1/gateway/nodes/ca2tc22j7ad0gneois80 [05-19 13:35:43] [INF] [app.go:283] gateway is up and running now. [05-19 13:35:50] [INF] [actions.go:358] elasticsearch [primary] is available [05-19 13:35:50] [INF] [api.go:262] api listen at: http://0.0.0.0:2900 [05-19 13:35:50] [INF] [reverseproxy.go:261] elasticsearch [primary] hosts: [] => [192.168.0.19:9200] [05-19 13:35:50] [INF] [reverseproxy.go:261] elasticsearch [backup] hosts: [] => [es-cn-tl32p9fkk0006m56k.elasticsearch.aliyuncs.com:9200] [05-19 13:35:50] [INF] [reverseproxy.go:261] elasticsearch [primary] hosts: [] => [192.168.0.19:9200] [05-19 13:35:50] [INF] [reverseproxy.go:261] elasticsearch [backup] hosts: [] => [es-cn-tl32p9fkk0006m56k.elasticsearch.aliyuncs.com:9200] [05-19 13:35:50] [INF] [reverseproxy.go:261] elasticsearch [primary] hosts: [] => [192.168.0.19:9200] [05-19 13:35:50] [INF] [entry.go:322] entry [my_es_entry/] listen at: https://0.0.0.0:8000 [05-19 13:35:50] [INF] [module.go:116] all modules are started


5. 后台运行

[root@iZbp1gxkifg8uetb33pvcoZ gateway]# nohup ./gateway-linux-amd64 -config 5.4.2TO5.6.16.yml &


6. 应用授权

curl -XPOST http://localhost:2900/_license/apply -d' { "license": "XXXXXXXXXXXXXXXXXXXXXXXXX" }'

#### 部署 INFINI Console
为了方便在多个集群之间快速切换,使用 INFINI [Console](https://infinilabs.cn/products/console/) 来进行管理。

1. 下载安装

[root@iZbp1gxkifg8uetb33pvcpZ console]# wget http://release.infinilabs.com/console/snapshot/console-0.3.0_SNAPSHOT-596-linux-amd64.tar.gz --2022-05-19 10:57:24-- http://release.infinilabs.com/console/snapshot/console-0.3.0_SNAPSHOT-596-linux-amd64.tar.gz 正在解析主机 release.infinilabs.com (release.infinilabs.com)... 120.79.205.193 正在连接 release.infinilabs.com (release.infinilabs.com)|120.79.205.193|:80... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:13576234 (13M) [application/octet-stream] 正在保存至: “console-0.3.0_SNAPSHOT-596-linux-amd64.tar.gz”

100%[==============================================================================================================================================>] 13,576,234 33.2MB/s 用时 0.4s

2022-05-19 10:57:25 (33.2 MB/s) - 已保存 “console-0.3.0_SNAPSHOT-596-linux-amd64.tar.gz” [13576234/13576234])

[root@iZbp1gxkifg8uetb33pvcpZ console]# tar vxzf console-0.3.0_SNAPSHOT-596-linux-amd64.tar.gz console-linux-amd64 console.yml


2. 修改配置

[root@iZbp1gxkifg8uetb33pvcpZ console]# cat console.yml

for the system cluster, please use Elasticsearch v7.3+

elasticsearch:

  1. 启动服务

    [root@iZbp1gxkifg8uetb33pvcpZ console]# ./console-linux-amd64 -service install
    Success
    [root@iZbp1gxkifg8uetb33pvcpZ console]# ./console-linux-amd64 -service start
    Success
  2. 访问后台

访问该主机的 9000 端口,即可打开 Console 后台,http://x.x.x.x:9000/ 打开菜单 [System][Cluster] ,注册当前需要管理的 Elasticsearch 集群和网关地址,用来快速管理,如下:

测试 INFINI Gateway

为了验证网关是否正常工作,我们通过 INFINI Console 来快速验证一下。 首先通过走网关的接口来创建一个索引,并写入一个文档,如下: 查看 5.4.2 集群的数据情况,如下: 查看集群 5.6.16 的数据情况,如下: 说明网关配置都正常,验证结束。

调整网关的消费策略

因为我们需要在全量数据迁移之后,才能进行增量数据的追加,在全量数据迁移完成之前,我们应该暂停增量数据的消费。修改网关配置里面 Pipeline consume-queue_backup-to-backupconsume-queue_primary-failure-to-backup的参数 auto_startfalse,表示不自动启动该任务,具体配置方法如下: 修改完配置之后,需要重新启动网关。 为了方便管理,可以使用 INFINI Console 来注册和管理网关,如下: 待全量迁移完成之后,可以通过后台的 Task 管理来进行后续的任务启动、停止,如下:

切换流量

接下来,将业务正常写的流量切换到网关,也就是需要把之前指向 ES 5.4.2 的地址指向网关的地址,如果 5.4.2 集群开启了身份验证,业务端代码同样需要传递身份信息,和 5.4.2 之前的用法保持不变。 切换流量到网关之后,用户的请求还是以同步的方式正常访问自建集群,网关记录到的请求会按顺序记录到 MQ 里面,但是消费是暂停状态。 如果业务端代码使用的 ES 的 SDK 支持 Sniff,并且业务代码开启了 Sniff,那么应该关闭 Sniff,避免业务端通过 Sniff 直接链接到后端的 ES 节点,所有的流量现在应该都只通过网关来进行访问。

全量数据迁移

在流量迁移到网关之后,我们开始对自建 Elasticsearch 集群的数据进行全量迁移到云端 Elasticsearch 集群。 全量迁移已有的数据的方式有很多种:

  • 通过快照的方式进行恢复
  • 使用工具来导出导入,如: ESM

如果索引数量很多的话,可以按照索引依次进行导入,同时需要注意将 Mapping 和 Setting 提前导入。 以现在 5.4 集群的索引来为例,目前的待迁移索引为 demo_5_4_2,只有4 个文档: 我们使用网关自带的迁移功能来进行数据迁移,拷贝自带的样例文件,如下:

[root@iZbp1gxkifg8uetb33pvcpZ gateway]# cp sample-configs/es_migration.yml  5.4TO5.6.yml

修改其中代表集群和索引的相关配置,可以根据需要配置是否需要重命名索引和统一 Type( 用于跨版本统一 Type),如下图红框位置: 创建好模板和索引,如果目标集群不允许动态创建文档,需要提前创建好索引,如下图: 然后就可以开始数据的迁移了,执行网关程序并指定刚刚定义的配置,如下: 执行完成后,可以确认下数据的情况,如下图: 全量数据至此导入完成。

增量数据迁移

在全量导入的过程中,可能存在数据的增量修改,不过这部分请求都已经完整记录下来了,我们只需要开启网关的消费任务即可将挤压的请求应用到云端的 Elasticsearch 集群。 示例操作如下: 如果从 5.6 的集群来看的话,这部分的修改还没同步过来,如下: 这部分增量的数据变更,在网关层面都进行了完整记录,我们只需要开启网关的增量消费任务,如下: 通过观察队列是否消费完成来判断增量数据是否做完,如下: 现在我们再看一下 5.6 集群的数据情况,如下: 数据的增量更新就过来了。

执行数据比对

由于集群内部的数据可能比较多,我们需要进行一个完整的比对才能确保数据的完整性,可以通过网关自带的数据比对工具来进行,将样例自带的文件拷贝一份,如下:

[root@iZbp1gxkifg8uetb33pvcpZ gateway]# cp sample-configs/index-docs-diff.yml  5.4DIFF5.6.yml

修改需要比对的集群和索引信息,可以加上过滤条件,如时间范围窗口来进行增量 Diff,如下图:

执行网关程序,并指定该配置文件,如下图: 如图,两个集群完全一致。

切换集群

如果验证完之后,两个集群的数据已经完全一致了,可以将程序切换到新集群,或者将网关的配置里面的主备进行互换,同步写 5.6 集群。 双集群在线运行一段时间,待业务完全验证之后,再安全下线旧集群,如遇到问题,也可以随时回切到老集群。

小结

通过使用极限网关,自建 ES 集群可以安全无缝的迁移到移动云 ES,在迁移的过程中,两套集群通过网关进行了解耦,两套集群的版本也可以不一样,在迁移的过程中还能实现版本的无缝升级。 如有任何问题,请随时联系我,期待与您交流!

7 年+积累、 Elastic 创始人Shay Banon 等 15 位专家推荐的 Elasticsearch 8.X新书《一本书讲透Elasticsearch》已上线...

Elasticsearchlaoyang360 发表了文章 • 0 个评论 • 2239 次浏览 • 2024-03-27 15:55 • 来自相关话题

今天,非常高兴地跟大家宣布,经过 7 年多的努力和精心准备,我们的新书《一本书讲透 Elasticsearch》已正式出版上线! ​​

1.png

​​​​​​ 我从 2016 年接触 Elasticsearch 1.X、2.X 的版本,到现在已经接近 8 年+的时间。在这期间,我常常被问到:

如何系统性地学习 Elasticsearch ?

如何将现有的关系型数据库迁移到 ES ?

如何选择合适的版本?

如何规划和监控集群?

如何进行数据建模?

如何选择合适的检索方式?

如何基于现有数据进行可视化分析?

等一系列问题.......

这些问题促使我将之前的产品开发、项目实战经验和咨询经验进行全面整合,并精心梳理,融入到这本新书中,希望能让大家少走不必要的弯路。

一、书籍特点 本书具有以下几个显著特点:

最新版本,前沿知识点

本书基于 8.x 版本编写,涵盖了如索引生命周期管理、快照生命周期管理、数据流 datastream 等至关重要的新特性。

核心知识,系统认知

我们为您提供了清晰的学习路径,保留了最核心的“最少必要”知识点,并通过思维导图和大量图解内容,帮助读者更易理解和吸收。

实际应用,超越认证

覆盖Elastic官方认证的核心知识点,已帮助近200人通过Elastic专家认证考试。内容不仅限于认证,更注重实际应用。

来源于实战,应用于实战

书中内容源自真实项目案例和企业级问题解答(问题来自于Elasticsearch中文社区、死磕Elasticsearch知识星球、微信群、QQ群等)。涵盖3个实战项目,助力读者将技能应用到企业实战环境中。

代码开源,答疑服务

全书的代码、脚本在GitHub上开源,便于初学者通过实践学习。我们的答疑社群将持续跟踪最新问题,不断迭代更新内容。

二、5 个最尖锐问题快问快答 如下的问题来自 ChatGPT 4.0 的作为专业读者提出的 5 个最尖锐问题。

2.png

我快速回答一下:

2.1 问题1:市场竞争和定位问题 “市面上已有接近10本关于Elasticsearch的书籍,您的书与这些现有书籍相比有何独特之处?您是如何确保您的书在内容上与其他书籍区别开来,满足读者新的或更深入的需求的?”

铭毅天下:

1、独特之处:版本咱们是目前市场唯一的 8.X 版本。

2、区别开来:我从 2016 年开始搞 ElasticStack 到现在几乎平均每周一篇技术博客,从未间断。无需多说,时间能证明一切!这是咱们最大的不同之一。

3、还有不同:我自己公众号+博客有累计近 4.5 万+关注读者,知识星球有近2000人付费用户,这些大量的实战问题促使我唯有“自我革命”才能生存和成长!

2.2 问题2:实用性和更新性问题 “鉴于Elasticsearch技术持续发展和迭代,您的书籍是如何处理和包含最新版本的特性和变化的?在提供最新信息的同时,您如何保证书中内容的长期有效性和实用性?”

铭毅天下:

1、实话说结论,我做不到,市面上任何纸质书都不可能做到。受限于撰写、出版等相较于 Elastic技术栈体系更新的滞后性。

2、但是,我在筛选知识点的时候已充分考虑结合企业级实战以及 Elastic 官方认证考试的最核心、最关键的“最少必要知识”作为咱们的提纲,并且承诺后面继续根据读者反馈迭代和升级。

2.3 问题3:作者经验和权威性问题 “您能否分享一些您个人在Elasticsearch领域的实战经验或特殊贡献,这些经验如何在您的书中得到体现?作为作者,您相比其他书籍作者有哪些独特的优势或视角?”

铭毅天下:

1、本人持续深耕大数据存储和检索领域 7 年+,有博客为证!有丰富的项目实战经验和企业级实战问题咨询经验,已带领近200人+通过 Elastic 认证专家考试。

2、独特视角就是:来自全国乃至全球多个国家的实战问题——自己运营的知识星球、微信群、QQ群多达数千人,每天都有大量实战问题涌现。

3、作者是坚定的长期主义者:博客已写12年+,从未间断!相信积累的力量、相信坚持的力量、相信相信的力量!

2.4 问题4:读者受益问题 “您认为读者在阅读您的书籍之后,最具体和显著的收获会是什么?有哪些实际的技能或知识可以直接应用到他们的工作和项目中?”

铭毅天下:

1、少走不必要的弯路!

2、能获得属于自己的专属学习路线,能建立专属的知识体系,能将 Elasticsearch 原理、开发、运维、架构技能应用于实战。

2.5 问题5:内容深度和广度问题 “您的书籍是如何平衡Elasticsearch的基础知识和高级技术的?它是否适合所有水平的读者,从初学者到高级用户?对于那些已经具有深厚Elasticsearch知识背景的读者,您的书提供了哪些更深入的见解或独特内容?”

铭毅天下:

1、适合大数据存储和检索领域的初学者,也同样适合有工作经验的中级、高级工程师、架构师等。

2、对于深厚Elasticsearch知识背景的读者,本书可以当做工具书,需要时备查、常翻常新。

三、行业顶级大佬的推荐

3.png

值得一提的是,这本书获得了 Elastic 创始人兼CTO Shay Banon 、Elastic中文社区创始人兼极限科技CTO等15位顶级专家的强力推荐,是一本不可多得的Elasticsearch学习材料。

I am very happy to see that Elasticsearch has been widely used in China, which fully reflects the open source, free and open power of Elastic. This book is derived from the author's 7 years of technical accumulation and embodies the author's love for ElasticStack open source technology. I hope this book can help more people understand Elasticsearch and search technology, so as to discover the great value of data. I am convinced that this book will have a profound impact on Elastic's Chinese community.

我很高兴看到Elasticsearch在中国得到了广泛的应用,这充分体现了Elastic开源、自由、开放的力量。本书源自作者7年的技术积累,体现了作者对ElasticStack开源技术的热爱。希望这本书能够帮助更多的人了解Elasticsearch和搜索技术,从而发现数据的巨大价值。我相信这本书将对 Elastic 的中文社区产生深远的影响。

4.png

——Shay Banon Elastic公司创始人兼首席技术官

很高兴看到铭毅天下的新书出版,《一本书讲透Elasticsearch:原理、进阶与工程实践》是一本值得推荐的新书。它汇集了作者丰富的实战经验,深入探讨 Elasticsearch的 核心原理。书中丰富的图解和清晰的结构使得复杂的知识易于理解和吸收。同时,它覆盖了 Elastic 认证考试的所有考点,助力读者建立全面的认知。此外,书中还包含实战项目,帮助读者将所学技能应用到实际场景中。作者拥有多年实战经验和广泛的影响力,这本书将成为学习和应用 Elasticsearch 的重要指南。

——Medcl,Elastic 中文社区创始人、极限科技创始人

铭毅天下是ES中文社区里少有的常年坚持写作的技术博主,尤其擅长将点状发散的社区讨论进行归纳总结,结合自己的实践和再思考,形成系统性的系列技术文章。本书成于作者在Elasticsearch领域多年的理论知识沉淀,并涵盖了实际应用场景的最佳实践。无论你是Elasticsearch初学者还是有一定经验的开发者,相信都能通过阅读本书而受益匪浅。

—— 吴晓刚 (Wood大叔)携程旅行网 企业数字化平台部 研发总监

在大数据检索和分析领域,Elastic Stack 技术栈有广泛应用,本书从业务场景出发详细介绍了在 Elasticsearch 擅长的各类场景中完成业务系统开发所需的技术栈和技术手段,为用户系统选型和了解整体技术架构提供了指导,可以帮助用户少走弯路,快速完成系统建设。

——张超 《Elasticsearch 源码解析与优化实战》作者, Elasticsearch 内核资深研发工程师

本书基于Elasticsearch最新的8.X版本,涵盖了Elasticsearch更加完整、实时的功能。作者拥有丰富的Elasticsearch和写作经验,语言通俗易懂,内容详尽全面。无论你是初学者还是有一定经验的开发人员,本书都能够为你提供更深入的内容和最佳实践。如果你想系统地学习、掌握Elasticsearch,那么这本书绝对是你不可错过的参考书籍。

—— 魏子珺,阿里巴巴elasticsearch内核专家

很高兴为大家推荐这本关于Elasticsearch的技术书籍。本书涵盖了相当丰富的原理讲解和实现技术,更重要的是对实战场景给出了明确的指导案例和代码片段可供参考和使用。即面向开发人员深入讲解了搜索引擎的核心算法与数据结构,也同时给运维人员提供了关键指标的定义和解读。对于想系统学习的初、中级用户,可以按照章节循序渐进的阅读。对于高级用户来说,也可以从 遇到的问题为切入点,直接从某个具体章节入手来测试、寻求解决方案。铭毅天下是Elastic中文社区长期活跃和积极贡献的明星成员。非常兴奋看到他把自己日积月累的知识精华和经验总结在书中分享给广大读者。我相信本书一定可以帮助到处在任何阶段想学习探索Elasticsearch的用户。

——吴斌,Elastic中文社区主席

《一本书讲透Elasticsearch:原理、进阶与工程实践》是一本由一线开发人员撰写的实战指南。作者凭借多年的 Elasticsearch 咨询和教学经验,将复杂的概念以简明易懂的方式呈现给读者。这本书将帮助你深入了解 Elasticsearch,并理解其背后的原理和逻辑。通过学习本书,你将获得全面的知识,从而能够灵活应用 Elasticsearch 解决各种实际问题。相信这本书将成为你掌握 Elasticsearch 的必备工具。

——阮一鸣,eBay 高级研发经理、极客时间『Elasticsearch 核心技术与实战』课程讲师

铭毅在 Elasticsearch 领域深耕多年,勤奋且专注, 同时运营着国内最大的 ES 社群 ,帮助许多同学成功通过了有难度的 Elastic 认证工程师考试。很高兴看到他的新书出版,都说万事开头难,但我相信这本书能够为ES 初学者铺平道路,扫除障碍,澄清疑虑,快速上手!推荐大家阅读!

——魏彬,中国首位 Elastic 认证工程师

《一本书讲透Elasticsearch:原理、进阶与工程实践 》这本书是我极力推荐的一部作品!

我认识铭毅天下很久了,第一次见面记得是2019年在北京的Elastic开发者大会上,但在这之前,我就经常阅读他关于Elasticsearch的技术分享而神交已久。我了解的铭毅天下是一位拥有丰富的Elasticsearch领域知识和经验的专家,他曾在PB级大数据系统项目中发挥关键作用。实施这种大规模,长周期的复杂项目是非常不容易的,无论从系统设计,到实施过程中的问题解决。因此,来自于实践的真知产出,值得我们开卷。

多年来,铭毅天下一直积极、高效地在各种博客和社交媒体上分享与Elasticsearch相关的内容,并密切同步每个版本的更新。在Elasticsearch上,他不仅持续自我精进,还组织了学习小组和社区,帮助其他对Elasticsearch感兴趣的伙伴一起进步。他还带领150多人通过Elastic工程师认证,为许多人的职业发展贡献了力量。

这本书是铭毅天下多年经验的总结,内容涵盖了几乎全部的Elastic认证考点,而且它来自铭毅天下近7年的博客积累,每一章节都经得起时间的考验。因为抓住了平时学习和使用Elasticsearch当中痛点并总结了最佳实践,这些内容不仅阅读量高,而且转发度也很广泛。无论你是想深入了解Elasticsearch的基础知识还是应用实践,这本书都能满足你的需求。

我相信这本书将为读者提供一次全面而深入的学习体验,帮助他们在Elasticsearch领域取得突破。无论你是初学者还是有经验的专业人士,这本书都是不可或缺的指南。我由衷地推荐这本书,相信它会成为你在Elasticsearch学习和实践中的得力伙伴!

——李捷,Elastic 解决方案架构师 Principle Solution Architect

当得知本书成稿的消息时,我的心情是非常激动的,不管是作为一名技术人,还是作为一名搜索引擎的从业者,以及作为一名Elasticsearch中文社区的参与者和建设者。本书作者与我们一起见证了Elastic生态在国内的起步、发展以及到今天的繁荣;有所不同的是,作者有超强的毅力(就像铭毅天下的名字一样),坚持在这个技术方向上深耕了7年之久,在知识、技术和实践等方面有着深厚的经验积累,不但亲力亲为,而且深谙知识社群与实践社区CoP的操盘之道,在自我成长的同时也打造了优质的同行网络,积极影响了一批技术人,其中的优秀者更是通过了Elatics官方认证,极具含金量。本书的出版,一定会给更多技术人带来直接或间接的帮助,同时在个人成长、知识共享与实践社区等方面在业内树立成功的榜样。让我们一起用技术影响世界影响人!

—— 杨振涛,Elastisearch中文社区深圳主席|vivo互联网 研发总监

Elasticsearch是人工智能和大数据时代不可或缺的重要产品,已经成为开发者必备技能。本书汇集了作者多年开发经验、咨询经验、数千个Elasticsearch爱好者的最佳实战。因此在讲解原理的同时,能深入到最佳实践中去,做到深入浅出,非常适合Elasticsearch的初学者以及进阶者。

—— 付磊,快手Elasticsearch负责人,《Redis开发与运维》作者

Elasticsearch 作为一款强大又灵活的数据分析检索工具,值得每一位后端程序员认真学习。铭毅天下的这本《一本书讲透Elasticsearch:原理、进阶与工程实践》,用浅显易懂的语言介绍了Elasticsearch的概念、原理和实践,非常值得阅读!

—— 程序员小灰,公众号【程序员小灰】运营者,畅销书《漫画算法》作者

铭毅是我的老友,他是一个及其认证踏实和执着追究技术的人,这七年来他一直热心Elasticstack相关技术的步道,热忱帮助社区和公众号里的伙伴,成就不俗。本书是一本实用性极高的Elasticsearch的实践类书籍,更是铭毅倾尽所学之作。通读原稿后,让我非常欣赏的地方在于,它是市面上难得一见的把Elasticsearch原理,实现方式,最佳实践,以及实战案例串联在一起实操类书籍,无论是初学者还是需要进阶学习的人员都能从中获取想要的内容。十分适合想要在企业环境中落地Elasticsearch的人们,因此我诚意把它推荐给广大的技术爱好者和相关从业人员。

——周钰, IBM中国 企业架构师 中国前50 Elastic持证者

Elasticsearch作为一款优秀的开源分布式搜索引擎,被广泛应用在日志分析、站内搜索、指标监控、数据加速等场景,学习并掌握ES,已经成为一个技术工作人员不可或缺的重要技能之一。而本书深入浅出,对Elasticsearch的基本概念、设计原理及实践进行了详细介绍,是学习Elasticsearch的必备资料。诚挚推荐。

—— 吴荣,Elasticsearch平台资深研发工程师

一份专业、细致、用户友好的技术文档能给我们技术人员的日常工作带来多大的帮助,相信大家都有深刻的体会,特别是像Elasticsearch这种在搜索引擎领域最广泛应用的解决方案更是如此。虽然官方文档内容很详尽,更新很及时,但是限于语言、网速等问题,广大国内开发者并不能很准确高效的找到自己需要的内容。铭毅老师这本,兼顾了内容的专业性、严谨性、完整性,围绕着Elasticsearch及其相关组件所撰写,覆盖了从基础概念到高级用法的方方面面内容的专业书籍,能给各位带来的价值就不言而喻了。这本书适合从入门使用到高级调优的各层次的读者,是一本少有的适合放在案头常看常新的书。

—— 陈晨(死敌wen),资深搜索架构师、Elastic认证专家

5.png

15位大佬评价批量导入 Elasticsearch

15位大佬评价 Kibana 可视化

6.png

15位大佬评价词云图

7.png

无论您是大数据检索领域的初学者、开发和运维人员,还是架构师和管理人员,这本书都将成为实战路上的得力助手和“避坑指南”。

8.png

立即购买以获取专属福利:不论您从哪里购买、不论多少费用购买,记得保留购物链接和发票,费用都可以折算同等价格的星球优惠券。

私V信:elastic6 搞定后续一切流程。 ————————————————

                        本文为博主原创文章,未经博主书面授权不得转载。书面授权后方可转载,但转载请务必加上原作者:铭毅天下,原文地址:blog.csdn.net/laoyang360

原文链接:https://blog.csdn.net/laoyang360/article/details/135614659

Elasticsearch 国产化

Easysearchyangmf2040 发表了文章 • 0 个评论 • 1271 次浏览 • 2024-03-16 16:36 • 来自相关话题

背景

Elasticsearch 这些年来在搜索领域一直是领头羊。国内也有非常多的企业在使用 Elasticsearch 来做查询搜索、数据分析、安全分析等等。甚至一些很重要的行业、系统都在使用 Elasticsearch。在使用 Elasticsearch 的道路上狂飙的时候,我们也观察到了一些问题:

  1. Elasticsearch 不再是开源软件了。
  2. Elastic 公司退出了中国直销市场,不提供本土化支持了。
  3. 国家对信创、自主可控的战略化布局。
  4. 国际形势从合作共赢到自闭对垒。
  5. Elasticsearch 软件本身安全问题频发。
  6. Elasticsearch 软件在性能、稳定性和扩展性方面存在很大的提升空间。

基于以上这些问题,推出一个 Elasticsearch 国产化解决方案就很有必要了。我们的解决方案是推出一款名为 Easysearch 的软件,作为 Elasticsearch 国产化替代 。
出发点是在兼容原 Elasticsearch 软件的基础之上,完善更多的企业级功能,同时提高产品的性能、稳定性和扩展性。
下面我将从几个方面简单介绍下 Easysearch 软件。

兼容性

支持原生 Elasticsearch 的 DSL 查询语法,原业务代码无需调整。 支持 SQL ,方便熟悉 SQL 的开发人员上手分析数据。 兼容 Elasticsearch 的 SDK。 兼容现有索引存储格式。 支持冷热架构和索引生命周期,真正做到无缝衔接。

功能增强

提供企业级的安全管理,可对接 LDAP、AD 认证。 重构分布式架构,保持稳定的同时,能支持更大规模的数据。 在不降低性能的同时,实现更高压缩比的数据压缩,直接节省磁盘 40% 以上。 支持 KNN、异步搜索、数据脱敏、可搜索快照、审计等企业级功能。

容灾

支持基于 CDC 的集群复制技术,实现同版本间的容灾。
支持基于请求双写的复制技术,实现跨版本容灾。

信创

全面适配国产 CPU、操作系统,并获得厂家认证。

迁移方案

支持原索引存储格式,可通过快照备份直接恢复到 Easysearch 集群。
提供迁移工具,直接可视化操作迁移数据。

简单的介绍就到这里了,更多信息请访问:https://www.infinilabs.com/products/easysearch

最后

如有需要请联系我,让我们一起位祖国的信创事业添砖加瓦。

OpenSearch 与 Elasticsearch:哪个开源搜索引擎适合您?

OpenSearchHansoph 发表了文章 • 1 个评论 • 1312 次浏览 • 2024-03-15 10:49 • 来自相关话题

当谈论到搜索引擎产品时,Elasticsearch 和 OpenSearch 是两个备受关注的选择。它们都以其出色的功能和灵活性而闻名,但在一些方面存在一些差异。在本文中,我们将从功能和延展性、工具与资源、价格和许可这三个角度对这两个产品进行论述。通过深入研究它们的特点和优势,您将能够更好地了解它们,从而为您的搜索需求做出明智的选择。让我们开始探索 Elasticsearch 和 OpenSearch 的世界,以便您能够为自己的项目或业务找到最佳的搜索解决方案。

功能和延展性

Elasticsearch 是一个功能强大的搜索引擎,它支持全文搜索、实时数据分析、数据聚合和可视化等功能。

  1. 分布式架构:它使用分布式架构,可以处理大规模数据集,并以快速的速度返回查询结果。
  2. 多种查询类型和过滤器:提供多种查询类型和过滤器,使用户能够进行复杂的数据分析和检索。
  3. 高可用性和容错性:提供高可用性和容错性,通过复制和分片机制来确保数据的安全性和可靠性。
  4. 强大的插件生态系统:帮助用户处理映射、分析、脚本引擎和发现等任务。通过使用这些插件,用户可以根据其特定的数据处理和分析需求进行功能扩展和定制。

OpenSearch 是从 Elasticsearch 分叉出来的版本,因此在许多方面与 Elasticsearch 相似。它保留了 Elasticsearch 的核心功能,并加入了一些新的功能和扩展性。下面主要讨论一些差异点:

  1. 开源性和社区参与:OpenSearch 更注重开源性和社区参与,鼓励用户共同开发和改进系统。
  2. 功能差异:OpenSearch 提供了一些额外的免费功能,如集中用户账户/访问控制、交叉集群复制、IP 过滤、可配置的数据保留期、异常检测、Tableau 连接器、JDBC 驱动程序、ODBC 驱动程序以及回归和分类等机器学习功能。
  3. 插件生态系统差异:OpenSearch 中的某些功能作为插件捆绑在一起,需要用户额外学习和适应新工具。

服务与支持

Elasticsearch 拥有丰富的工具和资源,使用户能够更好地使用和管理搜索引擎。

  1. 配套工具:丰富的生态系统,Logstash 用于数据摄取和转换,可以帮助用户为非结构化数据添加结构,进行字段匿名处理,并解析 IP 地址以获取位置信息。Beats 是一个专注于数据传输的工具,可以将数据从数千台机器发送到 Logstash 或 Elasticsearch。
  2. 完善的文档资料和培训资源:

    a. 官方网站提供了产品指南、教程视频、博客文章、讨论论坛等丰富的学习材料。

    b. Elastic 还提供了 Slack 频道、YouTube 频道、以及定期举办的在线研讨会和培训活动,为用户提供即时的答疑和学习机会。

    c. 广泛的支持服务,包括社区支持、商业支持和培训服务。

OpenSearch 配套工具延展性更好,但是在学习资料和用户培训方面存在大部分空白,目前的服务与支持模式主要依赖于社区。

  1. 配套工具:除去支持 Logstash 和 Beats 外,还有其他工具如 Fluentd、Fluent Bit、OpenTelemetry Collector 和 Data Prepper,来支持数据处理和传输。

  2. 文档资料和培训资源:

    a. 文档资源:积极填补文档中的空白,并且每月举行两次社区会议,鼓励用户通过 GitHub 提交拉取请求、报告问题和提供反馈。

    b. 合作伙伴:提供 OpenSearch 的咨询支持和托管服务,其中就包括 INFINI Labs 在内,通过这些合作伙伴,用户可以获取与 OpenSearch 相关的专业服务和咨询,以满足其特定需求。

OpenSearch 的学习资源和培训材料相对较少,相比之下,Elasticsearch 的学习资料更加丰富和全面。然而,OpenSearch 社区积极发展中,未来可能会有更多的学习资源和支持服务可用。

价格和许可

Elasticsearch 和 OpenSearch 在价格和许可方面也存在差异。本文将从紧急支持和许可限制两个角度进行分析。

Elasticsearch:

  1. 紧急支持:Elasticsearch 的高级许可证提供紧急支持,这意味着当出现集群崩溃、数据丢失或安全漏洞等问题时,公司能够提供即时的支持。
  2. 许可限制:Elasticsearch 提供基于订阅模型的商业许可,其中包括从免费的基本许可到高级许可的多个层次。高级许可提供了额外的功能和支持,适合对性能和功能有更高要求的企业。

Opensearch:

  1. 紧急支持:当前可以通过过第三方咨询公司或 AWS OpenSearch 等免费工具获得同样水平的支持,OpenSearch 有一个合作伙伴页面,列出了许多咨询公司,包括 INFINI Labs 的 OpenSearch 支持页面,他们提供 24 x 7 的支持。
  2. 许可限制:OpenSearch 是基于 Apache 2.0 许可的开源软件,允许用户自由使用、修改和分发。它提供了免费的功能和灵活的定制,使用户能够根据自己的需求进行自定义和扩展。

总结

Elasticsearch 和 OpenSearch 都是强大而灵活的搜索引擎产品,但是存在一些差异。

总体来说,Elasticsearch 是一个成熟、功能强大的搜索引擎,拥有广泛的插件生态系统和丰富的学习资源。商业版本提供额外的功能和支持服务,适合需要高级功能和专业支持的企业。

OpenSearch 是从 Elasticsearch 分叉出来的版本,保留了核心功能,并添加了一些额外的功能。它更注重开源性和社区参与,适合更倾向于自主开发和定制的用户。

作者的话

希望这些信息能为您提供有价值的帮助,并使您更好地了解 Elasticsearch 和 OpenSearch。无论您选择哪个搜索引擎,都希望它能满足您的需求并取得成功。

Easysearch 内核完善之 OOM 内存溢出优化案例一则

Easysearchliaosy 发表了文章 • 0 个评论 • 1001 次浏览 • 2024-03-15 10:37 • 来自相关话题

最近某客户在使用 Easysearch 做聚合时,报出 OOM 导致掉节点的问题,当时直接让客户试着调整 indices.breaker.request.limit ,但是不起作用,于是又看了下 Easysearch 在断路器相关的代码,并自己测试了下。

断路器的种类和作用

Easysearch 内部有个 Circuit breaker 机制,目的是防止各种请求的负载过大导致 OutOfMemoryError,比较常用的断路器有 7 种,分别是:

  • Parent circuit breaker 父断路器
  • Field data circuit breaker fielddata 断路器
  • Request circuit breaker 请求断路器
  • In flight requests circuit breaker 传输请求断路器
  • Accounting requests circuit breaker lucene 内存占用断路器
  • Script compilation circuit breaker 脚本编译断路器
  • Regex circuit breaker 正则表达式断路器

其中在执行消耗内存较多的聚合查询时,Request circuit breaker 用得最多。

复现测试

我在模拟客户场景测试聚合查询时,发现断路器并没有覆盖查询的整个流程,仍然会有 OOM 的风险。我测试了一个高基数 5 百万的 Terms aggregation,就没有触发断路,而是在等待了 1 分多钟后直接 OOM 了。我的测试环境是单节点 内存配置为 -Xmx1g,测试索引只有 1 个 shard。

测试语句如下:

curl -X GET "localhost:9211/leader-01/_search?pretty" -H 'Content-Type: application/json' -d'
{
"size": 1,
  "aggs": {
    "a": {
      "terms": { "field": "agent.id.keyword", "size": 5000000 }
    }
  }
}' > a.txt

Easysearch OOM 日志:

内存泄漏分析

使用 MemoryAnalyzer 分析生成的 jvm 堆转储文件:

最大的内存占用来自 Java 线程java.lang.Thread @ 0x7c8bb1d00。这个线程浅层(Shallow)保留的对象占用了 112.8MB 内存。但该线程实际保留(Retained)的对象内存占用高达 851 MB,成为整个内存占用的绝对大头。

进一步查看 Leak Suspects

非常明确的给出了具体的内存泄露的对象:StringTerms$Bucket[7500010]

数组长度达到了七百五十万,占用内存:731,001,720 字节(占总内存的 68.65%)。

按照提示的GlobalOrdinalsStringTermsAggregator.java:586 行,去查看代码,实际上是将收集完的OrdBucket 转换为 StringTerms.Bucket,并且有一个 copy BytesRef的操作。

至此,原因和解决办法都清楚了,只要在转换之前预估一下将要增长的内存并调用断路器检测一下内存,一旦超出允许范围就快速触发 CircuitBreakingException,避免长时间等待后 OOM 引起的节点宕机了。

最新版 Elasticsearch 对比

作为对比,我又测试了下 Elasticsearch 最新版本 8.12.2,同样的测试环境和测试方法,结果依然是 OOM:

从这里可以看出 Elasticsearch 即使是最新版的断路器机制也还有很多改进的余地,比如增加对有 OOM 风险查询的覆盖率,还有就是在触发 GC 时,对 GC 堆内存回收的判断过于简单。

Easysearch 最新版本的改进

Easysearch 刚刚发布的 1.7.1 版本已经增加了上面的改进,后面也会持续改进查询聚合操作的内存控制,最新版本的跨集群复制(CCR)也增加了对 source_reuse 索引的支持,能更好的满足客户降本增效的需求,欢迎大家下载试用。

附官网下载链接:https://www.infinilabs.com/download/?product=easysearch

关于 Easysearch

about easysearch

INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。 与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。

官网文档:https://www.infinilabs.com/docs/latest/easysearch

作者:张磊,原文:https://www.infinilabs.com/blog/2024/easysearch-kernel-improvement-case-study-on-oom-memory-overflow-optmization/

如何防止 Elasticsearch 服务 OOM?

Easysearchyangmf2040 发表了文章 • 0 个评论 • 1942 次浏览 • 2024-02-26 10:12 • 来自相关话题

Elasticsearch(简称:ES) 和传统关系型数据库有很多区别, 比如传统数据中普遍都有一个叫“最大连接数”的设置。目的是使数据库系统工作在可控的负载下,避免出现负载过高,资源耗尽,谁也无法登录的局面。

那 ES 在这方面有类似参数吗?答案是没有,这也是为何 ES 会被流量打爆的原因之一。

针对大并发访问 ES 服务,造成 ES 节点 OOM,服务中断的情况,极限科技旗下的 INFINI Gateway 产品(以下简称 “极限网关”)可从两个方面入手,保障 ES 服务的可用性。

  1. 限制最大并发访问连接数。
  2. 限制非重要索引的请求速度,保障重要业务索引的访问速度。

下面我们来详细聊聊。

架构图

所有访问 ES 的请求都发给网关,可部署多个网关。

限制最大连接数

在网关配置文件中,默认有最大并发连接数限制,默认最大 10000。

entry:
  - name: my_es_entry
    enabled: true
    router: my_router
    max_concurrency: 10000
    network:
      binding: $[[env.GW_BINDING]]
      # See `gateway.disable_reuse_port_by_default` for more information.
      reuse_port: true

使用压测程序测试,看看到达10000个连接后,能否限制新的连接。 超过的连接请求,被丢弃。更多信息参考官方文档

限制索引写入速度

我们先看看不做限制的时候,测试环境的写入速度,在 9w - 15w docs/s 之间波动。虽然峰值很高,但不稳定。 接下来,我们通过网关把写入速度控制在最大 1w docs/s 。 对网关的配置文件 gateway.yml ,做以下修改。

env: # env 下添加
    THROTTLE_BULK_INDEXING_MAX_BYTES: 40485760 #40MB/s
    THROTTLE_BULK_INDEXING_MAX_REQUESTS: 10000 #10k docs/s
    THROTTLE_BULK_INDEXING_ACTION: retry #retry,drop
    THROTTLE_BULK_INDEXING_MAX_RETRY_TIMES: 10 #1000
    THROTTLE_BULK_INDEXING_RETRY_DELAY_IN_MS: 100 #10

router: # route 部分修改 flow
  - name: my_router
    default_flow: default_flow
    tracing_flow: logging_flow
    rules:
      - method:
          - "*"
        pattern:
          - "/_bulk"
          - "/{any_index}/_bulk"
        flow:
          - write_flow

flow: #flow 部分增加下面两段    
  - name: write_flow
    filter:
      - flow:
          flows:
            - bulking_indexing_limit
      - elasticsearch:
          elasticsearch: prod
          max_connection_per_node: 1000
  - name: bulking_indexing_limit
    filter:
      - bulk_request_throttle:
          indices:
            "test-index":
              max_bytes: $[[env.THROTTLE_BULK_INDEXING_MAX_BYTES]]
              max_requests: $[[env.THROTTLE_BULK_INDEXING_MAX_REQUESTS]]
              action: $[[env.THROTTLE_BULK_INDEXING_ACTION]]
              retry_delay_in_ms: $[[env.THROTTLE_BULK_INDEXING_RETRY_DELAY_IN_MS]]
              max_retry_times: $[[env.THROTTLE_BULK_INDEXING_MAX_RETRY_TIMES]]
              message: "bulk writing too fast" #触发限流告警message自定义
              log_warn_message: true

再次压测,test-index 索引写入速度被限制在了 1w docs/s 。

限制多个索引写入速度

上面的配置是针对 test-index 索引的写入速度控制。如果想添加其他的索引,新增一段配置即可。 比如,我允许 abc 索引写入达到 2w docs/s,test-index 索引最多不超过 1w docs/s ,可配置如下。

  - name: bulking_indexing_limit
    filter:
      - bulk_request_throttle:
          indices:
            "abc":
              max_requests: 20000
              action: drop
              message: "abc doc写入超阈值" #触发限流告警message自定义
              log_warn_message: true
            "test-index":
              max_bytes: $[[env.THROTTLE_BULK_INDEXING_MAX_BYTES]]
              max_requests: $[[env.THROTTLE_BULK_INDEXING_MAX_REQUESTS]]
              action: $[[env.THROTTLE_BULK_INDEXING_ACTION]]
              retry_delay_in_ms: $[[env.THROTTLE_BULK_INDEXING_RETRY_DELAY_IN_MS]]
              max_retry_times: $[[env.THROTTLE_BULK_INDEXING_MAX_RETRY_TIMES]]
              message: "bulk writing too fast" #触发限流告警message自定义
              log_warn_message: true

限速效果如下

限制读请求速度

我们先看看不做限制的时候,测试环境的读取速度,7w qps 。 接下来我们通过网关把读取速度控制在最大 1w qps 。 继续对网关的配置文件 gateway.yml 做以下修改。

  - name: default_flow
    filter:
      - request_path_limiter:
          message: "Hey, You just reached our request limit!"                                      rules:      
            - pattern: "/(?P<index_name>abc)/_search"                          
              max_qps: 10000
              group: index_name                                    
      - elasticsearch: 
          elasticsearch: prod                            
          max_connection_per_node: 1000

再次进行测试,读取速度被限制在了 1w qps 。

限制多个索引读取速度

上面的配置是针对 abc 索引的写入速度控制。如果想添加其他的索引,新增一段配置即可。 比如,我允许 abc 索引读取达到 1w qps,test-index 索引最多不超过 2w qps ,可配置如下。

  - name: default_flow
    filter:
      - request_path_limiter:
          message: "Hey, You just reached our request limit!"
          rules:
            - pattern: "/(?P<index_name>abc)/_search"
              max_qps: 10000
              group: index_name
            - pattern: "/(?P<index_name>test-index)/_search"
              max_qps: 20000
              group: index_name
      - elasticsearch:
          elasticsearch: prod
          max_connection_per_node: 1000

多个网关限速

限速是每个网关自身的控制,如果有多个网关,那么后端 ES 集群收到的请求数等于多个网关限速的总和。 本次介绍就到这里了。相信大家在使用 ES 的过程中也遇到过各种各样的问题。欢迎大家来我们这个平台分享自己的问题、解决方案等。如有任何问题,请随时联系我,期待与您交流!

【 INFINI Workshop 北京站】1月18日一起动手实验玩转 Easysearch

活动liaosy 发表了文章 • 0 个评论 • 1910 次浏览 • 2023-12-15 16:22 • 来自相关话题

与 INFINI Labs 的技术专家面对面,第一时间了解极限实验室的发布最新产品和功能特性,通过动手实战,快速掌握最前沿的搜索技术,并用于实际项目中。欢迎大家扫描海报二维码免费报名参加。

活动时间:2024-01-18 13:30~17:30

活动地点:北京市海淀区 Wework 辉煌时代大厦 3 楼 3E 会议室

分享议题

  • Easysearch 总体介绍及搭建实战
  • 基于 INFINI Console 实现跨版本、跨引擎统一管控
  • Elasticsearch -> Easysearch 在线迁移实操

参会提示

  • 请务必自备电脑(Windows 系统环境请提前安装好 Linux 虚拟机)
  • 请提前在 INFINI Labs 官网下载对应平台最新安装包(INFINI Easysearch、INFINI Gateway、INFINI Console)
  • 下载地址:https://www.infinilabs.com/download
  • 如有任何疑问可添加 INFINI Labs 小助手(微信号: INFINI-Labs)进行联系

20231214-095304-qrcode.jpeg