--- title: "INFINI Easysearch 尝鲜 Hands on" date: 2024-07-08 lastmod: 2024-07-08 description: "INFINI Easysearch是一款分布式的近实时搜索与分析引擎,基于Apache Lucene开发,提供轻量级的Elasticsearch替代方案。支持Elasticsearch DSL语法、SQL查询及冷热架构,兼容SDK与索引格式。文章介绍了其安装方法(脚本、二进制包、Docker部署)及Console连接配置,展示跨集群管理能力,目前尚未开源。" tags: ["Easysearch", "Console", "征文系列"] summary: "INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个自主可控的轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。 Easysearch 支持原生 Elasticsearch 的 DSL 查询语法,确保原业务代码无需调整即可无缝迁移。同时,极限科技还支持 SQL 查询,为熟悉 SQL 的开发人员提供更加便捷的数据分析方式。此外,Easysearch 兼容 Elasticsearch 的 SDK 和现有索引存储格式,支持冷热架构和索引生命周期管理,确保用户能够轻松实现数据的无缝衔接。 安装 # 安装脚本 # 无论是 Linux 还是 Mac 都是这个一键脚本 curl -sSL http://get.infini.cloud | bash -s -- -p easysearch 同时也提供了二进制的安装包: 如果不想整理 JAVA 环境问题,还可以使用这个 https://release.infinilabs.com/easysearch/stable/bundle/ docker 部署 # 官方提供了 Docker Compose 样例,包括三个服务: easysearch-node1 easysearch-node2 console 以下是详细说明: 版本控制: # version: ‘3’ 表示使用 Docker Compose 文件的第 3 版格式。 服务定义: # easysearch-node1 和 easysearch-node2:" --- INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个自主可控的轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。 Easysearch 支持原生 Elasticsearch 的 DSL 查询语法,确保原业务代码无需调整即可无缝迁移。同时,极限科技还支持 SQL 查询,为熟悉 SQL 的开发人员提供更加便捷的数据分析方式。此外,Easysearch 兼容 Elasticsearch 的 SDK 和现有索引存储格式,支持冷热架构和索引生命周期管理,确保用户能够轻松实现数据的无缝衔接。 ## 安装 ### 安装脚本 无论是 Linux 还是 Mac 都是这个一键脚本 ```bash curl -sSL http://get.infini.cloud | bash -s -- -p easysearch ``` 同时也提供了二进制的安装包: {{% load-img "/img/blog/2024/infini-easysearch-hands-on/1.png" "" %}} 如果不想整理 JAVA 环境问题,还可以使用这个 https://release.infinilabs.com/easysearch/stable/bundle/ ### docker 部署 官方提供了 Docker Compose 样例,包括三个服务: - easysearch-node1 - easysearch-node2 - console 以下是详细说明: #### 版本控制: - version: '3' 表示使用 Docker Compose 文件的第 3 版格式。 #### 服务定义: - easysearch-node1 和 easysearch-node2: - 这两个服务使用相同的 Docker 镜像 infinilabs/easysearch:latest 来组成双节点的集群。 - 容器运行时使用用户和组 ID 602:602。 - 设置了 ES_JAVA_OPTS 环境变量以配置 Java 虚拟机的内存。 - ulimits 选项配置了内存锁定和文件描述符的限制,以提升性能。 - 容器内的配置、数据和日志目录通过卷映射到主机目录中,以便于数据持久化。 - 服务暴露特定端口,使外部能够访问容器中的服务。 - 两个节点均加入名为 esnet 的自定义网络中。 - console: - 该服务使用镜像 infinilabs/console:1.26.0-1552(该镜像没有 latest,需要手动把 latest 更改位特定的版本号)。 - 同样通过卷将数据和日志目录映射到主机。 - 暴露 9000 端口用于 Web 界面访问。 - 使用 links 功能链接到 easysearch-node1 和 easysearch-node2,简化容器之间的通信。 - 设置了时区环境变量 TZ 为 Asia/Shanghai。 #### 网络配置: - esnet 网络使用 bridge 驱动,提供一个隔离的网络环境,配置了特定的子网 172.24.0.0/16,以确保服务之间的网络通信。 ```ymal version: '3' services: easysearch-node1: user: "602:602" image: infinilabs/easysearch:latest container_name: easysearch-node1 hostname: easysearch-node1 environment: - "ES_JAVA_OPTS=-Xms1g -Xmx1g" ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 volumes: - $PWD/ezs1/config:/app/easysearch/config - $PWD/ezs1/data:/app/easysearch/data - $PWD/ezs1/logs:/app/easysearch/logs ports: - 9201:9200 - 9301:9300 networks: - esnet easysearch-node2: user: "602:602" image: infinilabs/easysearch:latest container_name: easysearch-node2 hostname: easysearch-node2 environment: - "ES_JAVA_OPTS=-Xms1g -Xmx1g" ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 volumes: - $PWD/ezs2/config:/app/easysearch/config - $PWD/ezs2/data:/app/easysearch/data - $PWD/ezs2/logs:/app/easysearch/logs ports: - 9202:9200 - 9302:9300 networks: - esnet console: image: infinilabs/console:1.26.0-1552 container_name: console hostname: console volumes: - $PWD/console/data:/data - $PWD/console/log:/log networks: - esnet ports: - 9000:9000 links: - easysearch-node1:es1 - easysearch-node2:es2 environment: - TZ=Asia/Shanghai networks: esnet: driver: bridge ipam: config: - subnet: 172.24.0.0/16 ``` 尽管在这里官方提供了详细的命令,完全可以使用这个 docker-compose up 来进行替代。其他的脚本解释如下: **init.sh** ```bash #!/bin/bash # 获取当前脚本所在目录的绝对路径 CUR_DIR=$(cd $(dirname $0); pwd) # 创建必要的目录结构 mkdir -p $CUR_DIR/console/{data,log} mkdir -p $CUR_DIR/{ezs1,ezs2}/{data,logs} # 设置目录的拥有者和权限 chown -R 1000:1000 $CUR_DIR/console chown -R 602:602 $CUR_DIR/{ezs1,ezs2} chmod -R 0600 $CUR_DIR/{ezs1,ezs2}/config # 设置 config 目录的子目录权限 find $CUR_DIR/{ezs1,ezs2}/config -type d -print0 | xargs -0 chmod 750 ``` **reset.sh** ```bash #!/bin/bash # 获取当前脚本所在目录的绝对路径 CUR_DIR=$(cd $(dirname $0); pwd) # 定义确认函数 function confirm() { display_str=$1 default_ans=$2 if [[ $default_ans == 'y/N' ]]; then must_match='[yY]' else must_match='[nN]' fi read -p"${display_str} [${default_ans}]:" ans [[ $ans == $must_match ]] } # 提示用户确认删除所有数据 confirm "RISK WARN: Delete all data!!!" 'y/N' && echo || exit # 删除 console、ezs1 和 ezs2 的数据和日志文件 rm -rvf $CUR_DIR/console/{data,log}/* rm -rvf $CUR_DIR/{ezs1,ezs2}/{data,logs}/* ``` **start.sh** ```bash #!/bin/bash # 使用 Docker Compose 启动 ezs2 项目中的服务 docker-compose -p ezs2 up ``` **stop.sh** ```bash #!/bin/bash # 使用 Docker Compose 关闭并移除 ezs2 项目中的所有服务 docker-compose -p ezs2 down ``` 在我的电脑中,可以看到成功启动的容器。 {{% load-img "/img/blog/2024/infini-easysearch-hands-on/2.png" "" %}} https://docs.infinilabs.com/easysearch/main/docs/getting-started/install/docker-compose/ ## Console 连接 设置集群连接参数,比如域名端口,用户名密码。 {{% load-img "/img/blog/2024/infini-easysearch-hands-on/3.png" "" %}} 初始化,这里会新建索引,写一些 sample 数据。 {{% load-img "/img/blog/2024/infini-easysearch-hands-on/4.png" "" %}} 设置后台管理的密码,后期使用这个登录控制台。 {{% load-img "/img/blog/2024/infini-easysearch-hands-on/5.png" "" %}} 检查配置,完成集群关联。 {{% load-img "/img/blog/2024/infini-easysearch-hands-on/6.png" "" %}} 这个是后台管理界面,除了用户名密码之外,也支持单点登录: {{% load-img "/img/blog/2024/infini-easysearch-hands-on/7.png" "" %}} 跨引擎、跨版本、跨集群 独一份! {{% load-img "/img/blog/2024/infini-easysearch-hands-on/8.png" "" %}} 使用自带的面板进行查看节点数量: {{% load-img "/img/blog/2024/infini-easysearch-hands-on/9.png" "" %}} 同时也支持 REST 风格的 API 来进行查询。 {{% load-img "/img/blog/2024/infini-easysearch-hands-on/10.png" "" %}} 接下来使用 Console 连接 Amazon 的 OpenSearch: 同样是输入集群的 URL,用户名和密码。 {{% load-img "/img/blog/2024/infini-easysearch-hands-on/11.png" "" %}} 然后可以拿到集群的信息,比如地址,版本号,集群状态,节点数量。 {{% load-img "/img/blog/2024/infini-easysearch-hands-on/12.png" "" %}} 最后看到连接成功的信息。 {{% load-img "/img/blog/2024/infini-easysearch-hands-on/13.png" "" %}} 我们可以在集群管理中看到 Easysearch 的集群和我们刚刚添加的 OpenSearch 集群。 {{% load-img "/img/blog/2024/infini-easysearch-hands-on/14.png" "" %}} 是否开源?目前还没有开放源代码。 > 作者:韩旭,亚马逊云技术支持,亚马逊云科技技领云博主,目前专注于云计算开发和大数据领域。 > 原文:https://blog.csdn.net/weixin_38781498/article/details/140077785 ## 关于 Easysearch 有奖征文活动 ![黑神话悟空](/img/blog/2024/easysearch-essay-competition-wukong/banner.png) 无论你是 Easysearch 的老用户,还是第一次听说这个名字,只要你对 INFINI Labs 旗下的 Easysearch 产品感兴趣,或者是希望了解 Easysearch,都可以参加这次活动。 详情查看:[Easysearch 征文活动](/blog/2024/easysearch-essay-competition-wukong/)