在嘉立创的泰山派上也能运行Easysearch
最近一段时间我折腾硬件比较多,经常翻箱倒柜找各种开发板出来玩。某天在角落里翻到一块嘉立创的泰山派开发板(Taishan Pi),这是一块基于 Rockchip RK3566 的嵌入式 Linux 板卡。严格来说,它的性能比树莓派还要逊色一些,尤其是 CPU 主频和内存带宽方面。但手痒之下,我突然想到了一个念头:能不能在这样一块嵌入式开发板上跑一个完整的 Easysearch 实例呢?
Easysearch 本质上是一个搜索引擎数据库,是 Elasticsearch 的国产化替代方案。它在大多数情况下被部署在 x86_64/arm架构的服务器上,搭配 SSD 或 NVMe 作为存储,用来做全文检索、大规模日志分析或向量搜索。在常规的生产场景中,我们很少会把它和“嵌入式开发板”联想在一起。毕竟,后者 CPU 性能有限、内存紧张、存储设备大多是 eMMC 或低速 SD 卡,看起来完全不是数据库的适配环境。
不过,学习和实验的环境往往不需要极致的性能。于是,我决定尝试一下,把 Easysearch 移植到泰山派上跑起来。
导出镜像
由于我的开发板连接Dockerhub经常超时, 而我的MacOS有之前缓存的Docker镜像。我的第一步是把镜像在 Mac 上先导出。
docker save -o easysearch-1.15.0.tar infinilabs/easysearch:1.15.0
上面这条命令会把名为 infinilabs/easysearch:1.15.0
的镜像打包成一个 tar 文件,文件大小大概 700MB 左右。导出的好处是:我不需要在嵌入式开发板上重新去拉取 Docker Hub 镜像(速度慢且容易失败),只需要把 tar 包通过 FTP 或者 SFTP 上传过去即可。
上传到开发板
由于泰山派跑的是一个裁剪过的 Linux 系统,自带 SSH 和 FTP 服务,所以我直接用 FTP 客户端把 easysearch-1.15.0.tar
上传到板子的 /home
目录。上传速度受限于板载 eMMC,大概 3MB/s 左右,耐心等一会儿就好。
上传完毕后,我用 SSH 登录到开发板。
加载镜像
进入板子后,第一件事情就是把镜像导入到本地 Docker:
docker load -i easysearch-1.15.0.tar
等待几分钟,Docker 会把镜像重新解压并注册到本地。由于板子 CPU 性能有限,这个步骤比在笔记本上要慢不少,但最终会看到 familiar 的镜像 ID 出现在 docker images
的列表中。
调整内核参数
接下来要注意的就是一个经典坑:Easysearch/Elasticsearch 类的数据库要求内核参数 vm.max_map_count
至少设置为 262144,否则启动会直接报错。
sudo sysctl -w vm.max_map_count=262144
这条命令会临时修改内核参数。如果你打算长期使用,可以把它写到 /etc/sysctl.conf
或者 /etc/sysctl.d/
里。
启动容器
有了镜像和内核参数,接下来就是熟悉的 docker run
了:
docker run --name easysearch \--ulimit memlock=-1:-1 \-p 9200:9200 \infinilabs/easysearch:1.15.3
第一次启动时,容器会打印出初始的超级管理员密码,可以在日志里找到。
UI 访问与体验
容器启动后,在浏览器访问开发板的 IP 地址的 9200 端口,就能打开 Easysearch 的自带管理 UI。
UI 上显示,除了内存很快被吃满之外,其他方面表现完全可用。毕竟 Easysearch 默认会尝试尽可能缓存索引数据,而 RK3566 开发板通常只有 2GB 或 4GB 内存,溢出是难免的。但从查询速度和索引写入的小规模实验来看,性能并没有想象中那么糟糕。我尝试运行了一些DSL,也没有什么问题。
换句话说,虽然这套组合是 arm CPU + eMMC 存储,但作为学习和体验之用已经足够。
性能观察
为了更直观地观察运行情况,我在容器启动后打开 htop
。
可以看到 Easysearch 启动初始化时 CPU 占用飙升,内存使用量也接近物理上限。但在完成索引加载后,CPU 占用下降明显,保持在个位数到十几的水平。
这说明在嵌入式环境下跑数据库的瓶颈更多是 初始化 和 大规模数据处理,而不是日常的小规模查询。对于个人实验、API 测试和功能熟悉,完全可以胜任。
适用场景与局限
把 Easysearch 部署在 RK3566 这样的小板子上,意义主要有两个:
- 学习和实验环境:如果你只是想熟悉 Easysearch 的 API、UI 界面,或者学习 Elasticsearch 生态,不必为了一点点测试数据开一台大服务器。
- 轻量级应用:某些嵌入式场景下需要本地搜索功能,比如日志收集、离线数据查询、小型 IoT 网关,Easysearch 也能派上用场。
当然,它也有明显的局限:
- 内存限制:2GB 内存基本无法支撑大规模索引,超过几十万文档就会吃紧。
- 存储性能:eMMC 的顺序写速度大约 40MB/s,随机写更低,这对索引写入速度有一定影响。
- CPU 性能:四核 ARM Cortex-A55,单核性能有限,并发查询时表现会受限。
总结
这次尝试算是一次“异想天开”的实验:把 Easysearch 从 PC 搬到了一块嵌入式开发板上。最终结果是——它真的能跑,而且还比预想的顺畅。除了内存不足和初始化速度慢,实际使用体验完全能满足学习场景。
如果你平时不想让笔记本长时间开着数据库,又恰好手边有一块开发板,那么完全可以用类似的办法,把 Easysearch 跑在开发板上作为一台“轻量数据库机”。
一句话总结: Easysearch 其实没有你想象中那么“重”,只要底层 Linux 和 Docker 能跑,它就能跑。