📕前言
近期,基于PG内核的Serverless数据库Neon大火,被称为开源版本的Aurora。它本身是支持minio本地云存储和AWS的s3远程对象存储的。
那么,如果我们适配国内主流云厂商的对象存储「阿里云、华为云、浪潮云等」,能成功吗?
🐘我们基于Neon的项目开源的核心部分,提供了部署脚本和k8s manifest,开发了proxy一写多读模式,丰富了REST API接口,适配了国内主流云厂商的对象存储,形成HGNeon产品。该产品简化Serverless数据库本地部署流程,提升对于国内环境的适用性。
HGNeon的核心架构图:
HGNeon核心架构图
HGNeon数据库内核使用开源IvorySQL,同时支持pg14和pg15,整体架构分为计算层和存储层。计算层由运行在Kubernetes上的无状态IvorySQL组成,允许pod按需扩展,甚至可以缩容到零。存储层是通过HGNeon存储引擎实现的,这是一个处理事务和数据的定制层。事务日志通过一组冗余的safekeeper进行处理,数据页则由pageserver在磁盘上进行管理,而数据真正的持久化由云存储保证。
接下来,我们来验证一下用国内云厂商的云存储服务支撑HGNeon的存储部分,效果如何?本次验证以国内较为流行的阿里云OSS服务为例。
🎄环境准备
1.准备k8s环境v1.23。
2.准备阿里云账号,开通OSS服务,创建一个桶(Bucket),创建账号ak、sk,授权OSS。
3.准备HGNeon项目代码(用neon的项目代码部署原理和效果是相同的)。
🔨HGNeon搭建
1.拉取git项目代码。
2.创建分支 git checkout -b compatible-with-oss。
3.到K8s_deploy目录下。
4.配置存储节点启动时,使用阿里云OSS服务信息
vim ./HGNeon_core/HGNeon-core-deploy.yml
把yml中pageserver、safekeeper1、safekeeper2、safekeeper3的ak和sk都换成阿里云账号。
5.vim ./HGNeon_core/scripts/hgneonstorage.sh
修改pageserver和safekeeper的启动命令,增加remote-storage信息。
6.remote-storage结构信息来源。
📍endpoint:阿里云OSS页面可以查询到Bucket域名信息。(注意:请勿使用Endpoint信息)
📍bucket_name:桶的名字,支持自定义。
📍bucket_region:区域id,详细对应关系,请参考阿里云官方文档。
📍prefix_in_bucket:无需修改,桶目录管理路径。
7.到k8s_deploy目录下。
8.先启动存储节点,启动完成后可以看到2个configMap、2个service、1个deployment。
./HGNeon_k8s_setup.sh start
9.存储节点启动完成后,启动第一个计算节点,启动后有1个pod、3个service、1个deployment。
./HGNeon_k8s_setup.sh startcompute 1 30081
命令中的参数:
1 是计算节点的id,任意不重复的数字即可(与tenantid和timeline是绑定的)
30081 指的宿主机端口号,不冲突即可。
10.启动第二个计算节点。
./HGNeon_k8s_setup.sh startcompute 2 30082
11.Psql测试登录,用户cloud_admin密码也是cloud_admin。
psql -h 127.0.0.1 -U cloud_admin -d postgres -p 30081
🛠HGNeon简单插入、查询功能验证
1.连接数据库,建表,插入数据,查询。
2.查看阿里云OSS情况。
⚙压测工具可用性测试
无服务数据库HGNeon能否正常使用基准测试工具进行测试?
本次测试选用BenchmarkSQL压测工具作为示例,验证HGNeon的压测工具可用性。
1.安装BenchmarkSQL 5.0,官方下载.zip文件,解压后ant编译。
2.修改连接配置信息。
到BenchmarkSQL的run目录下
cat props.pg > hgneon.conf
vim hgneon.conf
3.导入数据。
./runDatabaseBuild.sh hgneon.conf
4.压测。
./runBenchmark.sh hgneon.conf
5.测试完成。
🏆总结
本次测试验证结论:
1.HGNeon可以适配国内云平台OSS,并具有较强的可靠性和稳定性。
2.HGNeon可以支持传统压测工具,例如:BenchmarkSQL。
官方网址:
https://www.ivorysql.org/zh-cn/
社区仓库: