CockroachDB适配OBS开源开发任务心得
CockroachDB适配OBS开源开发任务
CockroachDB是一个开源的分布式关系数据库,其设计灵感来源于Google的全球性分布式数据库Spanner。它旨在打造一个能够应对全球规模、具有高可用性和一致性的数据库系统。CockroachDB采用完全去中心化的架构,集群中各个节点的地位完全对等,同时所有功能封装在一个二进制文件中,尽量不依赖配置文件即可直接部署。本任务的主要目的是让CockroachDB支持华为云OBS服务,拓展OBS服务的影响力,方便CockroachDB的用户使用华为云服务时能够顺利对接OBS服务。
从计划书开始开始
这次任务是验证CockroachDB适配OBS。
根据任务计划书要求,完成OBS适配开发,DEMO设计、部署、验证等工作。
验证分析
CockroachDB
CockroachDB提供基于S3备份恢复功能。
- BACKUP 备份
BACKUP INTO 's3://{bucket}?AWS_ENDPOINT={endpoint}&AWS_ACCESS_KEY_ID={ak}&AWS_SECRET_ACCESS_KEY={sk}'
- RESOTRE 恢复
- 集群
- 数据库
- 表
RESTORE DATABASE {empty} | {database_name} | TABLE {table_name} FROM '{path}' IN 's3://{bucket}?AWS_ENDPOINT={endpoint}&AWS_ACCESS_KEY_ID={ak}&AWS_SECRET_ACCESS_KEY={sk}'
AWS S3
S3(Simple Storage Service)协议是亚马逊推出的一种对象存储服务协议,这也是最早的对象存储协议,所以大部分的对象存储都兼容S3协议。它为开发者提供了一种简单、高效、可靠的方式来存储和管理大量的数据对象。S3 协议已经成为云存储领域的事实标准,被众多云服务提供商广泛采用。
S3 协议的设计目标是提供一种易于使用的接口,使得用户可以通过互联网轻松地存储、访问和管理数据。它采用了基于对象的存储模型,每个数据对象都被视为一个独立的实体,可以通过唯一的键来识别和访问。
OBS
对象存储服务(Object Storage Service,OBS)是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。
OBS系统和单个桶都没有总数据容量和对象/文件数量的限制,为用户提供了超大存储容量的能力,适合存放任意类型的文件,适合普通用户、网站、企业和开发者使用。OBS是一项面向Internet访问的服务,提供了基于HTTP/HTTPS协议的Web服务接口,用户可以随时随地连接到Internet,通过OBS管理控制台或各种OBS工具访问和管理存储在OBS中的数据。此外,OBS支持SDK和OBS API接口,可使用户方便管理自己存储在OBS上的数据,以及开发多种类型的上层业务应用。
在全球多区域部署了OBS基础设施,具备高度的可扩展性和可靠性,用户可根据自身需要指定区域使用OBS,由此获得更快的访问速度和实惠的服务价格。
OBS兼容AWS S3协议
部署
产品名称 | 版本 | 架构 | 部署方式 | 端口 |
---|---|---|---|---|
CockroachDB | v24.1.7 | linux.arm64 | 集群(2台机器) | 26257 |
-
本次实验用户root
-
本次部署实验Node1和Node2地址
- 192.168.0.201,Node1
- 192.168.0.105,Node2
-
创建cockroachdb部署目录
mkdir /opt/cockroachdb
cd /opt/cockroachdb
- 下载cockroachDB 24.1.7
# 下载cockroachDB 24.1.7
wget https://binaries.cockroachdb.com/cockroach-v24.1.7.linux-arm64.tgz
- 解压压缩文件并复制到/usr/bin目录
tar -zxf cockroach-sql-v24.1.7.linux-arm64.tgz
cp -i cockroach-*/cockroach /usr/bin
- 查看版本信息
cockroach-sql --version
sql version details:
Build Tag: v24.1.7
Build Time: 2024/11/12 18:11:58
Distribution: OSS
Platform: linux arm64 (aarch64-unknown-linux-gnu)
Go Version: go1.22.5 X:nocoverageredesign
C Compiler: gcc 6.5.0
Build Commit ID: 3613a619e327fb412ac62036ce2c7060c25e48db
Build Type: release
Enabled Assertions: false
# 单机部署
# 数据目录
mkdir -p /data/cockroachdb/data
# 日志目录
mkdir -p /data/cockroachdb/logs
# 单机启动
cockroach start-single-node --insecure --store=/data/cockroachdb/data --log-dir=/data/cockroachdb/logs --listen-addr=localhost --background
- certs 和 private 目录,2台机器上执行
mkdir -p /opt/cockroachdb/{certs,private}
- 生成 CA 证书,Node1上执行
cockroach cert create-ca \
--certs-dir=/opt/cockroachdb/certs \
--ca-key=/opt/cockroachdb/private/ca.key
- 拷贝将 ca.crt 和 ca.key 上传到Node2
scp /opt/cockroachdb/private/ca.key root@192.168.0.105:/opt/cockroachdb/private/
scp /opt/cockroachdb/certs/ca.crt root@192.168.0.105:/opt/cockroachdb/certs/
- 生成客户端证书
cockroach cert create-client \
root \
--certs-dir=/opt/cockroachdb/certs \
--ca-key=/opt/cockroachdb/private/ca.key
- 生成服务的证书,Node1和Node2上执行
cockroach cert create-node \
ruster-comm \
192.168.0.201 \
localhost \
--certs-dir=/opt/cockroachdb/certs \
--ca-key=/opt/cockroachdb/private/ca.key
cockroach cert create-node \
ruster-05023 \
192.168.0.105 \
localhost \
--certs-dir=/opt/cockroachdb/certs \
--ca-key=/opt/cockroachdb/private/ca.key
- 创建systemd 服务文件,Node1和Node2上执行,修改ExecStart中的–advertise-addr为当前主机IP地址,–join为Node1和Node2的IP地址,–http-port=8090,UI端端口,默认为8080,容易冲突,修改为8090,User为root用户,使用其他用户需要创建用户组和给部署修改用户权限
vim /etc/systemd/system/cockroachdb.service
# 以下是文件内容
Requires=network.target
[Service]
Type=notify
WorkingDirectory=/opt/cockroachdb
ExecStart=/usr/bin/cockroach start --certs-dir=/opt/cockroachdb/certs --http-port=8090 --advertise-addr=192.168.0.201 --join=192.168.0.201,192.168.0.105
TimeoutStopSec=60
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=cockroach
User=root
[Install]
WantedBy=default.target
- 重新加载 systemd 管理器
systemctl daemon-reload
- 启用 cockroachdb 服务
systemctl enable --now cockroachdb
- 查看服务状态
systemctl status cockroachdb
- 创建集群
cockroach init --certs-dir=/opt/cockroachdb/certs --host=192.168.0.201:26257
- 检查集群状态
cockroach node --certs-dir=/opt/cockroachdb/certs --host=ruster-comm ls
id
------
1
2
(2 rows)
cockroach node --certs-dir=/opt/cockroachdb/certs --host=ruster-comm status
id | address | sql_address | build | started_at | updated_at | locality | is_available | is_live
-----+---------------------+---------------------+---------+--------------------------------------+--------------------------------------+----------+--------------+----------
1 | 192.168.0.201:26257 | 192.168.0.201:26257 | v24.1.7 | 2024-11-24 04:10:18.359026 +0000 UTC | 2024-11-24 04:11:54.383516 +0000 UTC | | true | true
2 | 192.168.0.105:26257 | 192.168.0.105:26257 | v24.1.7 | 2024-11-24 04:10:18.910868 +0000 UTC | 2024-11-24 04:11:54.918999 +0000 UTC | | true | true
(2 rows)
- 使用cockroach sql 命令访问cockroach
cockroach sql --certs-dir=/opt/cockroachdb/certs --host=ruster-comm:26257
- 创建用户并赋予权限
CREATE USER spcockroach WITH PASSWORD 'ss@111111';
GRANT admin TO spcockroach;
- 部署完成,使用客户端工具连接测试。
DEMO设计
- 使用Go开发DEMO,提供以下几个接口。
- 创建数据接口
- 数据列表接口
- 备份接口
- 删除表接口
- 恢复表接口
以下是DEMO设计内容。
- 准备数据表Users
create table "users" (
id serial primary key,
name varchar(32) not null,
email varchar(64),
age smallint not null default 0,
birthday timestamp,
member_number varchar(32),
activated_at timestamp,
created_at timestamp not null default now(),
updated_at timestamp
);
- 验证步骤
- 添加数据
- 查看数据列表,列表有数据
- 备份数据到OBS,检查OBS是否有备份数据
- 删除数据库表users
- 查看数据列表,提示users表不存在
- 恢复数据库表users
- 查看数据库列表,列表是之前备份的数据
总结
验证任务到此完成,CockroachDB在部署方面还是很容易的,很轻松就能部署集群。
OBS兼容S3协议,对应用对接提供极大的便利。
验收说明
本文提供的验收材料按照《xorm适配GaussDB开源开发任务》任务计划书的要求提供,没有偏离。
验收材料
-
开源软件fork地址:不涉及
-
开源软件修改记录(可以有多个修改记录):不涉及
-
推送上游社区PR(包括代码、文档、可以有多个):不涉及
-
验证DEMO地址:https://gitcode.com/sunsungk9/opensource-demo-xorm-241116/overview
-
验证DEMO修改记录(可以有多个修改记录,只包含和本任务验证强相关的提交记录,比如添加依赖、增加配置文件、演示开源软件功能使用的代码等):
验收细则 | 评分说明 | 是否为验收必选项 | 结果(通过/不通过) | 开发者举证 |
---|---|---|---|---|
功能开发:完成与华为三大根技术生态(鲲鹏云、昇腾云、鸿蒙)适配的功能开发 | 完成GaussDB数据库适配功能验证。 | 是 | (1)(2)(3) | |
代码质量:适配华为三大根技术生态的代码质量经过工具检测达标 | 推送给开源社区的代码符合开源社区关于代码风格、功能、自动化测试等要求。 | 是 | (3) | |
提供相关文档,比如部署文档、使用文档、配置文档等 | 提供相关文档,比如部署文档、使用文档、配置文档等 | 否 | (3) | |
合入到开源项目主仓:代码推送上游社区 | 代码合并到当前主干分支。举证提供代码仓库链接。 | 否 | (1)(2)(3) | |
Deomo设计&开发:完成功能演示Demo的开发 | Deomo设计&开发:完成功能演示Demo的开发 | 是 | (4)(5) | |
Demo部署&验证:完成功能演示DEMO基于华为云鲲鹏环境的部署和功能验证 | 提供DEMO部署验证结果的关键截图进行举证。提供DEMO运行环境和资源的规格清单。 | 是 | 参考资源清单和验证截图。 | |
发布博客:发布博客介绍适配心得。 | 提供博客的地址。 | 是 | (6) | |
制作单机版无高危开源镜像。 | 上架云商店。 | 否 | ||
单机版镜像上架时支持模板部署。 | 否 | |||
制作集群版无高危开源镜像。 | 上架云商店。 | 否 | ||
集群版镜像上架时支持模板部署。 | 否 |
资源清单
CCE
产品名称 | 集群类型 | 集群版本 | 集群规模 |
---|---|---|---|
云容器引擎CCE | Turbo集群 | V1.29 | 50 |
ECS
产品名称 | CPU架构 | 实例类型 | 公共镜像 | 镜像版本 |
---|---|---|---|---|
弹性云服务器 | 鲲鹏计算 | 鲲鹏通用计算增强型 | EulerOS | EulerOS 2.9 64位 ARM版 |
OBS
产品名称 | 存储类型 | 数据冗余存储策略 | 桶策略 |
---|---|---|---|
对象存储服务 OBS | 低频访问存储 | 多AZ存储 | 私有桶 |
验证截图
验证思路
-
使用Go-demo开发接口,提供以下几个接口。
- 创建数据接口
- 数据列表接口
- 备份接口
- 删除表接口
- 恢复表接口
- Cockroach备份列表
-
验证步骤
- 添加数据
- 查看数据列表,列表有数据
- 备份数据到OBS,OBS显示有备份数据
- 通过Cockroach备份列表查看,显示有备份记录
- 删除数据库表users
- 查看数据列表,提示users表不存在
- 恢复数据库表users
- 查看数据库列表,列表是之前备份的数据
测试截图分别是执行4个REST接口的结果。
添加数据
查看数据列表
备份数据OBS
查看华为云OBS服务列表
查看Cockroach备份列表
删除数据库表users
查看数据列表
恢复数据库表
查看数据列表
- 点赞
- 收藏
- 关注作者
评论(0)